Commit a31933a654e4dbe05a34ef3837a68a49c9be673f

Authored by liujun001
1 parent 6141b055

酒测未通过审核

Showing 27 changed files with 472 additions and 123 deletions
Bsth-admin/src/main/java/com/ruoyi/controller/TestController.java
... ... @@ -5,12 +5,15 @@ import com.ruoyi.job.DriverJob;
5 5 import com.ruoyi.service.driver.NewDriverService;
6 6 import com.ruoyi.service.key.location.LinggangKeyWorkLocationService;
7 7 import io.swagger.annotations.ApiOperation;
  8 +import org.apache.commons.lang3.time.DateUtils;
8 9 import org.springframework.beans.factory.annotation.Autowired;
9 10 import org.springframework.web.bind.annotation.GetMapping;
10 11 import org.springframework.web.bind.annotation.RequestMapping;
11 12 import org.springframework.web.bind.annotation.RequestParam;
12 13 import org.springframework.web.bind.annotation.RestController;
13 14  
  15 +import java.util.Date;
  16 +
14 17 /**
15 18 * @author liujun
16 19 * @date 2024年07月30日 14:37
... ... @@ -28,7 +31,18 @@ public class TestController {
28 31 @GetMapping(value = "/test")
29 32 @ApiOperation("test")
30 33 public ResponseResult<Boolean> test() {
31   - driverJob.getSchedulingInfo("02:30:30");
  34 + // driverJob.getSchedulingInfo("02:30:30");
  35 +// Calendar calendar = Calendar.getInstance();
  36 +// calendar.setTime(new Date());
  37 +// calendar.set(Calendar.HOUR,2);
  38 +// calendar.set(Calendar.MINUTE,30);
  39 +// calendar.set(Calendar.SECOND,30);
  40 +// Date date = calendar.getTime();
  41 + Date date = new Date();
  42 + for (int i = 0; i < 30; i++) {
  43 + driverJob.getSchedulingInfo(DateUtils.addDays(date,i).getTime());
  44 + }
  45 +
32 46 return ResponseResult.success();
33 47 }
34 48  
... ...
Bsth-admin/src/main/java/com/ruoyi/controller/dss/DssDriverController.java
... ... @@ -23,6 +23,7 @@ import com.ruoyi.domain.dss.sign.dto.DssGetWineRecordDTO;
23 23 import com.ruoyi.domain.dss.sign.dto.DssSignDTO;
24 24 import com.ruoyi.domain.dss.sign.dto.DssSignOutDTO;
25 25 import com.ruoyi.domain.dss.sign.resource.UpLoadPictureDTO;
  26 +import com.ruoyi.domain.dss.sign.resource.UpLoadPicturePicDataDTO;
26 27 import com.ruoyi.domain.dss.sign.resource.UpLoadVideoDTO;
27 28 import com.ruoyi.domain.dss.sign.vo.DssSignVo;
28 29 import com.ruoyi.domain.dss.sign.vo.GetWineRecordVo;
... ... @@ -457,19 +458,25 @@ public class DssDriverController extends BaseController {
457 458 return Collections.emptyList();
458 459 }
459 460  
460   - return dto.getPicData().stream().map(pic -> {
  461 + int size = CollectionUtils.size(dto.getPicData());
  462 +
  463 + List<LinggangSignInResource> resources = new ArrayList<>();
  464 +
  465 + for (int i = 0; i < size; i++) {
  466 + UpLoadPicturePicDataDTO pic = dto.getPicData().get(i);
  467 + int type = Objects.equals(pic.getIndex(), 0) ? 1 : 3;
461 468 LinggangSignInResource resource = new LinggangSignInResource();
462 469 resource.setSignId(dto.getTestId());
463 470 resource.setIndex(pic.getIndex());
464   - resource.setResourceType(1);
  471 + resource.setResourceType(type);
465 472 resource.setTime(pic.getTime());
466 473 resource.setCreateBy(getUserId());
467 474 resource.setCreateTime(new Date());
468 475 resource.setDevice(dto.getDevice());
469 476 resource.setContent(pic.getPic());
  477 + }
470 478  
471   - return resource;
472   - }).collect(Collectors.toList());
  479 + return resources;
473 480 }
474 481  
475 482 private LinggangSignInResource cconvertLinggangSignInResource(UpLoadVideoDTO dto) {
... ... @@ -548,7 +555,7 @@ public class DssDriverController extends BaseController {
548 555 }
549 556 }
550 557 vo.setRouteName(scheduling.getLineName());
551   - vo.setFache(new Date(scheduling.getFcsjT()*100));
  558 + vo.setFache(new Date(scheduling.getFcsjT() * 100));
552 559  
553 560 return vo;
554 561 }).collect(Collectors.toList());
... ...
Bsth-admin/src/main/java/com/ruoyi/controller/dss/KeyBoxController.java
... ... @@ -12,10 +12,7 @@ import com.ruoyi.common.utils.DateUtils;
12 12 import com.ruoyi.domain.OrderEntity;
13 13 import com.ruoyi.domain.caiinfo.CarInfo;
14 14 import com.ruoyi.domain.driver.NewDriver;
15   -import com.ruoyi.domain.dss.key.box.dto.KeyBasicSyncDTO;
16   -import com.ruoyi.domain.dss.key.box.dto.SkipOperationDTO;
17   -import com.ruoyi.domain.dss.key.box.dto.TakeKeyDTO;
18   -import com.ruoyi.domain.dss.key.box.dto.YarnCabinetStatePageDTO;
  15 +import com.ruoyi.domain.dss.key.box.dto.*;
19 16 import com.ruoyi.domain.dss.key.box.vo.*;
20 17 import com.ruoyi.domain.dss.key.location.dto.WorkPlateV2DTO;
21 18 import com.ruoyi.domain.dss.key.location.vo.WorkPlateV2Vo;
... ... @@ -41,6 +38,7 @@ import io.swagger.annotations.Api;
41 38 import io.swagger.annotations.ApiOperation;
42 39 import org.apache.commons.collections4.CollectionUtils;
43 40 import org.apache.commons.lang3.StringUtils;
  41 +import org.springframework.beans.BeanUtils;
44 42 import org.springframework.beans.factory.annotation.Autowired;
45 43 import org.springframework.validation.BindingResult;
46 44 import org.springframework.web.bind.annotation.PostMapping;
... ... @@ -173,6 +171,7 @@ public class KeyBoxController extends BaseController {
173 171 LinggangScheduling scheduling = new LinggangScheduling();
174 172 scheduling.setCzCode(venueInfo.getParkCode());
175 173 scheduling.setStartScheduleDate(DateUtil.shortDate(dto.getTime()));
  174 + scheduling.setType(1);
176 175  
177 176 List<LinggangScheduling> schedulings = schedulingService.listByCZ(scheduling);
178 177 Set<String> jobCodes = null;
... ... @@ -238,9 +237,19 @@ public class KeyBoxController extends BaseController {
238 237 entity.setDevice(dto.getDevice());
239 238 List<LinggangKeyWorkLocation> schedulings = linggangKeyWorkLocationService.list(entity);
240 239  
241   - NewDriver driver = newDriverService.getOne(dto.getDriverCode());
  240 + List<KeyInfo> keyInfos = null;
  241 + if(CollectionUtils.isNotEmpty(dto.getKeyItem())){
  242 + Set<String> codes = dto.getKeyItem().stream().map(TakeKeyKeyItemDTO::getKeyCode).filter(obj->Objects.nonNull(obj)).collect(Collectors.toSet());
  243 + keyInfos = keyInfoService.list(codes);
  244 + }
  245 +
  246 + NewDriver driver = newDriverService.getOne(dto.getStaffCode());
  247 +// if (Objects.isNull(driver)) {
  248 +// logger.info("[{}]没有找到driver", dto);
  249 +// return ResponseResult.error404();
  250 +// }
242 251  
243   - List<LinggangKeyWorkLocation> locations = convert(dto, schedulings, driver);
  252 + List<LinggangKeyWorkLocation> locations = convert(dto, schedulings, driver,keyInfos);
244 253 ResponseResult<Boolean> responseResult = linggangKeyWorkLocationService.updateTakeKey(locations, LinggangKeyWorkLocation.LinggangKeyWorkLocationTypeEnum.TAKE_OUT);
245 254 if (Objects.isNull(responseResult)) {
246 255 return ResponseResult.error();
... ... @@ -260,20 +269,47 @@ public class KeyBoxController extends BaseController {
260 269 }
261 270 LinggangKeyWorkLocation entity = new LinggangKeyWorkLocation();
262 271 entity.setDevice(dto.getDevice());
  272 + entity.setType(2);
  273 + entity.setStartScheduleDate(dto.getTime());
263 274 List<LinggangKeyWorkLocation> schedulings = linggangKeyWorkLocationService.list(entity);
264 275  
265   - NewDriver driver = newDriverService.getOne(dto.getDriverCode());
  276 + NewDriver driver = newDriverService.getOne(dto.getStaffCode());
  277 + if (Objects.isNull(driver)) {
  278 + logger.info("[{}]没有找到driver", dto);
  279 + return ResponseResult.error404();
  280 + }
  281 +
  282 + List<KeyInfo> keyInfos = null;
  283 + if(CollectionUtils.isNotEmpty(dto.getKeyItem())){
  284 + Set<String> codes = dto.getKeyItem().stream().map(TakeKeyKeyItemDTO::getKeyCode).filter(obj->Objects.nonNull(obj)).collect(Collectors.toSet());
  285 + keyInfos = keyInfoService.list(codes);
  286 +
  287 + if(CollectionUtils.isEmpty(keyInfos)){
  288 + codes = dto.getKeyItem().stream().map(TakeKeyKeyItemDTO::getPlate).filter(obj->Objects.nonNull(obj)).collect(Collectors.toSet());
  289 + keyInfos = keyInfoService.list(null,codes);
  290 + }
  291 + }
266 292  
267   - List<LinggangKeyWorkLocation> locations = convert(dto, schedulings, driver);
  293 +
  294 +
  295 + List<LinggangKeyWorkLocation> locations = convert(dto, schedulings, driver,keyInfos);
  296 +// List<LinggangKeyWorkLocation> errorLocations = locations.stream().filter(l -> Objects.isNull(l.getKeyInfoId())).collect(Collectors.toList());
  297 +// locations = locations.stream().filter(l -> Objects.nonNull(l.getKeyInfoId())).collect(Collectors.toList());
268 298 ResponseResult<Boolean> responseResult = linggangKeyWorkLocationService.updateTakeKey(locations, LinggangKeyWorkLocation.LinggangKeyWorkLocationTypeEnum.REPAY);
269 299 if (Objects.isNull(responseResult)) {
270 300 return ResponseResult.error();
271 301 }
272 302  
273   - if (responseResult.isSuccess()) {
  303 + if (!responseResult.isSuccess()) {
274 304 return ResponseResult.error(responseResult.getCode(), responseResult.getMsg());
275 305 }
276 306  
  307 +// if (CollectionUtils.isNotEmpty(errorLocations)) {
  308 +//
  309 +// Set<String> errorCode = errorLocations.stream().map(LinggangKeyWorkLocation::getKey).collect(Collectors.toSet());
  310 +// return ResponseResult.error(responseResult.getCode(), JSON.toJSONString(errorCode) + "归还失败,请归还到指定位置");
  311 +// }
  312 +
277 313  
278 314 Equipment equipment = equipmentService.getOneByDeviceId(dto.getDevice());
279 315 TakeKeyVo vo = convertTakeKeyVo(dto, responseResult, equipment);
... ... @@ -281,6 +317,48 @@ public class KeyBoxController extends BaseController {
281 317 return new ResponseResult<>(responseResult.getCode(), responseResult.getMsg(), vo);
282 318 }
283 319  
  320 + @PostMapping(value = "Driver/TurnKey/plan")
  321 + @ApiOperation(value = "钥匙归还计划")
  322 + public ResponseResult<List<TakeKeyPlanVo>> getKeyWorkLocaltionPlan(@Valid @RequestBody TakeKeyPlanDTO dto,BindingResult bindingResult){
  323 + if (bindingResult.hasErrors()) {
  324 + return ResponseResult.error(bindingResult.getFieldError().getDefaultMessage());
  325 + }
  326 +
  327 + LinggangKeyWorkLocation entity = new LinggangKeyWorkLocation();
  328 + entity.setDevice(dto.getDevice());
  329 + entity.setType(2);
  330 + entity.setDelFlag(Boolean.FALSE);
  331 + entity.setStartScheduleDate(dto.getTime());
  332 + entity.setEndScheduleDate(org.apache.commons.lang3.time.DateUtils.addDays(dto.getTime(),1));
  333 +
  334 + List<LinggangKeyWorkLocation> schedulings = linggangKeyWorkLocationService.list(entity);
  335 + if(CollectionUtils.isEmpty(schedulings)){
  336 + return ResponseResult.success();
  337 + }
  338 +
  339 + Set<Integer> keyIds = schedulings.stream().map(LinggangKeyWorkLocation::getKeyInfoId).collect(Collectors.toSet());
  340 +
  341 + List<KeyInfo> tempKeyInfos = null;
  342 + if(CollectionUtils.isNotEmpty(keyIds)){
  343 + tempKeyInfos = keyInfoService.listByIds(keyIds);
  344 + }
  345 + List<KeyInfo> keyInfos = tempKeyInfos;
  346 + int keyInfoSize = CollectionUtils.size(keyInfos);
  347 +
  348 + List<TakeKeyPlanVo> vos = schedulings.stream().map(s->{
  349 + TakeKeyPlanVo vo = convert(s);
  350 + if(keyInfoSize > 0){
  351 + Optional<KeyInfo> optional = keyInfos.stream().filter(k->Objects.equals(k.getId(),s.getKeyInfoId())).findFirst();
  352 + if(optional.isPresent()){
  353 + vo.setKeyCode(optional.get().getKeyCode());
  354 + }
  355 + }
  356 +
  357 + return vo;
  358 + }).collect(Collectors.toList());
  359 + return ResponseResult.success(vos);
  360 + }
  361 +
284 362 @PostMapping(value = "/keybox/yarnCabinetState/page")
285 363 @ApiOperation(value = "24.场站钥匙柜实况信息")
286 364 public ResponseResult<YarnCabinetStatePageVO> yarnCabinetStatePage(@Valid @RequestBody YarnCabinetStatePageDTO dto, BindingResult bindingResult) {
... ... @@ -590,7 +668,7 @@ public class KeyBoxController extends BaseController {
590 668 return vo;
591 669 }
592 670  
593   - private List<LinggangKeyWorkLocation> convert(TakeKeyDTO dto, List<LinggangKeyWorkLocation> schedulings, NewDriver driver) {
  671 + private List<LinggangKeyWorkLocation> convert(TakeKeyDTO dto, List<LinggangKeyWorkLocation> schedulings, NewDriver driver,List<KeyInfo> keyInfos) {
594 672 if (CollectionUtils.isEmpty(dto.getKeyItem())) {
595 673 return Collections.emptyList();
596 674 }
... ... @@ -608,6 +686,17 @@ public class KeyBoxController extends BaseController {
608 686 location.setKeyInfoId(opt.get().getKeyInfoId());
609 687 }
610 688 }
  689 + if(Objects.nonNull(keyInfos)){
  690 + Optional<KeyInfo> optional = keyInfos.stream().filter(k->Objects.equals(k.getKeyCode(),item.getKeyCode())).findFirst();
  691 + if (optional.isPresent()) {
  692 + location.setKeyInfoId(optional.get().getId());
  693 + }else{
  694 + optional = keyInfos.stream().filter(k->Objects.equals(k.getPlateNum(),item.getPlate())).findFirst();
  695 + if (optional.isPresent()) {
  696 + location.setKeyInfoId(optional.get().getId());
  697 + }
  698 + }
  699 + }
611 700  
612 701 if (Objects.nonNull(driver)) {
613 702 location.setCreateBy(Convert.toLong(driver.getId()));
... ... @@ -615,7 +704,7 @@ public class KeyBoxController extends BaseController {
615 704 location.setCreateTime(new Date());
616 705  
617 706 return location;
618   - }).filter(obj -> Objects.nonNull(obj.getKeyInfoId())).collect(Collectors.toList());
  707 + }).collect(Collectors.toList());
619 708 }
620 709  
621 710 private TakeKeyVo convertTakeKeyVo(TakeKeyDTO dto, ResponseResult<Boolean> result, Equipment equipment) {
... ... @@ -623,6 +712,7 @@ public class KeyBoxController extends BaseController {
623 712 vo.setDevice(dto.getDevice());
624 713 vo.setTime(new Date());
625 714 vo.setResult(result.isSuccess() ? 0 : 1);
  715 + vo.setStaffCode(dto.getStaffCode());
626 716 if (Objects.nonNull(equipment)) {
627 717 vo.setDeviceType(equipment.getPromise());
628 718 vo.setDriverCode(equipment.getDeviceId());
... ... @@ -734,4 +824,12 @@ public class KeyBoxController extends BaseController {
734 824 }
735 825 return vo;
736 826 }
  827 +
  828 + private TakeKeyPlanVo convert(LinggangKeyWorkLocation source) {
  829 + return java.util.Optional.ofNullable(source).map(sc -> {
  830 + TakeKeyPlanVo target = new TakeKeyPlanVo();
  831 + BeanUtils.copyProperties(source, target);
  832 + return target;
  833 + }).orElseGet(null);
  834 + }
737 835 }
... ...
Bsth-admin/src/main/java/com/ruoyi/domain/DriverScheduling.java
... ... @@ -40,4 +40,7 @@ public class DriverScheduling {
40 40 private String zdzCode;
41 41 /**终点站名字*/
42 42 private String zdzName;
  43 +
  44 + /***1:实际排班表;100为计划排班表*/
  45 + private java.lang.Integer type;
43 46 }
... ...
Bsth-admin/src/main/java/com/ruoyi/domain/dss/key/box/dto/TakeKeyDTO.java
... ... @@ -33,10 +33,14 @@ public class TakeKeyDTO implements java.io.Serializable {
33 33 @ApiModelProperty(value = "设备类型", required = true)
34 34 private String deviceType;
35 35  
36   - @NotEmpty(message = "卡号 不能为空")
  36 +// @NotEmpty(message = "卡号 不能为空")
37 37 @ApiModelProperty(value = "卡号", required = true)
38 38 private String driverCode;
39 39  
  40 +// @NotEmpty(message = "工号 不能为空")
  41 + @ApiModelProperty(value = "工号", required = true)
  42 + private String staffCode;
  43 +
40 44 @NotNull(message = "时间不能为空")
41 45 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
42 46 @ApiModelProperty(value = "时间 个数:yyyy-MM-dd HH:mm:ss", required = true)
... ...
Bsth-admin/src/main/java/com/ruoyi/domain/dss/key/box/dto/TakeKeyKeyItemDTO.java
... ... @@ -46,6 +46,10 @@ public class TakeKeyKeyItemDTO implements java.io.Serializable {
46 46 @ApiModelProperty(value = "领取状态;0:取出,16:钥匙未归还,255:异常", required = true)
47 47 private Integer state;
48 48  
  49 + // @NotEmpty(message = "钥匙编码 不能为空")
  50 + @ApiModelProperty(value = "钥匙编码", required = true)
  51 + private String keyCode;
  52 +
49 53 @Override
50 54 public String toString() {
51 55 return JSON.toJSONString(this);
... ...
Bsth-admin/src/main/java/com/ruoyi/domain/dss/key/box/dto/TakeKeyPlanDTO.java 0 → 100644
  1 +package com.ruoyi.domain.dss.key.box.dto;
  2 +
  3 +import com.fasterxml.jackson.annotation.JsonFormat;
  4 +import io.swagger.annotations.ApiModel;
  5 +import io.swagger.annotations.ApiModelProperty;
  6 +import lombok.Data;
  7 +import lombok.EqualsAndHashCode;
  8 +import lombok.experimental.Accessors;
  9 +
  10 +import javax.validation.constraints.NotEmpty;
  11 +import javax.validation.constraints.NotNull;
  12 +import java.util.Date;
  13 +
  14 +/**
  15 + * @author liujun
  16 + * @date 2024年08月13日 13:15
  17 + */
  18 +@Data
  19 +@Accessors(chain = true)
  20 +@ApiModel(value = "钥匙归还计划 DTO")
  21 +@EqualsAndHashCode(callSuper = false)
  22 +public class TakeKeyPlanDTO implements java.io.Serializable{
  23 + @NotEmpty(message = "设备上线号 不能为空")
  24 + @ApiModelProperty(value = "设备上线号", required = true)
  25 + private String device;
  26 +
  27 + @NotEmpty(message = "设备类型 不能为空")
  28 + @ApiModelProperty(value = "设备类型", required = true)
  29 + private String deviceType;
  30 +
  31 + @NotNull(message = "时间不能为空")
  32 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  33 + @ApiModelProperty(value = "时间 个数:yyyy-MM-dd HH:mm:ss", required = true)
  34 + private Date time;
  35 +}
... ...
Bsth-admin/src/main/java/com/ruoyi/domain/dss/key/box/vo/TakeKeyPlanVo.java 0 → 100644
  1 +package com.ruoyi.domain.dss.key.box.vo;
  2 +
  3 +import io.swagger.annotations.ApiModel;
  4 +import io.swagger.annotations.ApiModelProperty;
  5 +import lombok.Data;
  6 +import lombok.EqualsAndHashCode;
  7 +import lombok.experimental.Accessors;
  8 +
  9 +/**
  10 + * @author liujun
  11 + * @date 2024年08月13日 13:15
  12 + */
  13 +@Data
  14 +@Accessors(chain = true)
  15 +@ApiModel(value = "钥匙归还计划 Vo")
  16 +@EqualsAndHashCode(callSuper = false)
  17 +public class TakeKeyPlanVo implements java.io.Serializable {
  18 + /***ID*/
  19 + @ApiModelProperty(value = "ID", example = "1")
  20 + private Long id;
  21 + /***场站ID*/
  22 + @ApiModelProperty(value = "场站ID", example = "1")
  23 + private Integer yardId;
  24 + /***场站名称*/
  25 + @ApiModelProperty(value = "场站名称")
  26 + private String yardName;
  27 + /***设备号*/
  28 + @ApiModelProperty(value = "设备号")
  29 + private String device;
  30 + /***钥匙位编号*/
  31 + @ApiModelProperty(value = "钥匙位编号")
  32 + private String cabinetNo;
  33 + /***是否删除;0为未删除,1已删除*/
  34 + @ApiModelProperty(value = "是否删除;0为未删除,1已删除")
  35 + private Boolean delFlag;
  36 +
  37 + /***钥匙ID*/
  38 + @ApiModelProperty(value = "钥匙ID", example = "1")
  39 + private Integer keyInfoId;
  40 + @ApiModelProperty(value = "钥匙Code")
  41 + private String keyCode;
  42 +
  43 + /***排班时间*/
  44 + @ApiModelProperty(value = "排班时间")
  45 + private java.util.Date scheduleDate;
  46 +
  47 +
  48 +
  49 + /***排班ID*/
  50 + @ApiModelProperty(value = "排班ID")
  51 + private Long schedulingId;
  52 +}
... ...
Bsth-admin/src/main/java/com/ruoyi/domain/dss/key/box/vo/TakeKeyVo.java
... ... @@ -33,10 +33,13 @@ public class TakeKeyVo implements java.io.Serializable {
33 33 @ApiModelProperty(value = "卡号")
34 34 private String driverCode;
35 35  
  36 + @ApiModelProperty(value = "工号")
  37 + private String staffCode;
  38 +
36 39 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
37 40 @ApiModelProperty(value = "时间")
38 41 private Date time;
39   -
  42 +
40 43 @ApiModelProperty(value = "服务应答 0处理成功,1处理失败")
41 44 private Integer result;
42 45  
... ...
Bsth-admin/src/main/java/com/ruoyi/domain/key/info/box/vo/KeyBoxVo.java
... ... @@ -32,6 +32,8 @@ public class KeyBoxVo implements java.io.Serializable {
32 32 private String parkingNo;
33 33 @ApiModelProperty(value = "车牌号")
34 34 private String plateNum;
  35 + @ApiModelProperty(value = "钥匙编号")
  36 + private String keyCode;
35 37  
36 38 @Override
37 39 public String toString() {
... ...
Bsth-admin/src/main/java/com/ruoyi/domain/key/location/LinggangKeyWorkLocation.java
... ... @@ -111,6 +111,8 @@ public class LinggangKeyWorkLocation {
111 111 private Date startScheduleDate;
112 112 @TableField(exist = false)
113 113 private Date endScheduleDate;
  114 + @TableField(exist = false)
  115 + private String plate;
114 116  
115 117  
116 118 public enum LinggangKeyWorkLocationEventTypeEnum {
... ...
Bsth-admin/src/main/java/com/ruoyi/domain/scheduling/LinggangScheduling.java
... ... @@ -143,6 +143,11 @@ public class LinggangScheduling {
143 143 @Excel(name = "终点站名字")
144 144 private java.lang.String zdzname;
145 145  
  146 + /***1:实际排班表;100为计划排班表*/
  147 + @Excel(name = "1:实际排班表;100为计划排班表")
  148 + private java.lang.Integer type;
  149 +
  150 +
146 151 @TableField(exist = false)
147 152 private String czCode;
148 153  
... ... @@ -152,6 +157,8 @@ public class LinggangScheduling {
152 157 private Date endScheduleDate;
153 158  
154 159  
  160 +
  161 +
155 162 @Override
156 163 public String toString() {
157 164 return com.alibaba.fastjson2.JSON.toJSONString(this);
... ...
Bsth-admin/src/main/java/com/ruoyi/domain/scheduling/dto/LinggangSchedulingAddDTO.java
... ... @@ -73,6 +73,11 @@ public class LinggangSchedulingAddDTO implements java.io.Serializable {
73 73 /***钥匙ID*/
74 74 @ApiModelProperty(value = "钥匙ID", example = "1")
75 75 private Integer keyInfoId;
  76 +
  77 + /***1:实际排班表;100为计划排班表*/
  78 + @ApiModelProperty(value="1:实际排班表;100为计划排班表",example ="1")
  79 + private java.lang.Integer type;
  80 +
76 81 /***操作人员*/
77 82 @ApiModelProperty(value = "操作人员")
78 83 private String operator;
... ...
Bsth-admin/src/main/java/com/ruoyi/domain/scheduling/dto/LinggangSchedulingQueryDTO.java
... ... @@ -74,6 +74,9 @@ public class LinggangSchedulingQueryDTO implements java.io.Serializable {
74 74 @ApiModelProperty(value = "钥匙ID", example = "1")
75 75 private Integer keyInfoId;
76 76  
  77 + /***1:实际排班表;100为计划排班表*/
  78 + @ApiModelProperty(value="1:实际排班表;100为计划排班表",example ="1")
  79 + private java.lang.Integer type;
77 80  
78 81 @Override
79 82 public String toString() {
... ...
Bsth-admin/src/main/java/com/ruoyi/domain/scheduling/dto/LinggangSchedulingUpdateDTO.java
... ... @@ -73,6 +73,10 @@ public class LinggangSchedulingUpdateDTO implements java.io.Serializable {
73 73 /***钥匙ID*/
74 74 @ApiModelProperty(value = "钥匙ID", example = "1")
75 75 private Integer keyInfoId;
  76 +
  77 + /***1:实际排班表;100为计划排班表*/
  78 + @ApiModelProperty(value="1:实际排班表;100为计划排班表",example ="1")
  79 + private java.lang.Integer type;
76 80 /***操作人员*/
77 81 @ApiModelProperty(value = "操作人员")
78 82 private String operator;
... ...
Bsth-admin/src/main/java/com/ruoyi/domain/scheduling/vo/LinggangSchedulingVO.java
... ... @@ -75,6 +75,11 @@ public class LinggangSchedulingVO implements java.io.Serializable {
75 75 /***原因*/
76 76 @ApiModelProperty(value = "原因")
77 77 private String remark;
  78 +
  79 + /***1:实际排班表;100为计划排班表*/
  80 + @ApiModelProperty(value = "1:实际排班表;100为计划排班表", example = "1")
  81 + private java.lang.Integer type;
  82 +
78 83 /***钥匙ID*/
79 84 @ApiModelProperty(value = "钥匙ID", example = "1")
80 85 private Integer keyInfoId;
... ...
Bsth-admin/src/main/java/com/ruoyi/job/DriverJob.java
... ... @@ -24,8 +24,10 @@ import com.ruoyi.service.RuleAttendanceMainService;
24 24 import com.ruoyi.service.RuleNumSettingService;
25 25 import com.ruoyi.service.ThreadJobService;
26 26 import com.ruoyi.utils.ConstDateUtil;
  27 +import com.ruoyi.utils.DateUtil;
27 28 import com.ruoyi.utils.ListUtils;
28 29 import lombok.extern.slf4j.Slf4j;
  30 +import org.apache.commons.lang3.time.DateUtils;
29 31 import org.springframework.beans.BeanUtils;
30 32 import org.springframework.beans.factory.InitializingBean;
31 33 import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -110,6 +112,9 @@ public class DriverJob implements InitializingBean {
110 112 @Value("${api.url.getSchedulingInfoNew}")
111 113 private String getSchedulingInfoUrl;
112 114  
  115 + @Value("${api.url.getSchedulingInfoPlan}")
  116 + private String getSchedulingInfoPlan;
  117 +
113 118 @Value("${api.config.password}")
114 119 private String password;
115 120  
... ... @@ -228,23 +233,29 @@ public class DriverJob implements InitializingBean {
228 233 * 获取排班任务请求
229 234 * 24小时执行一次
230 235 */
231   - public void getSchedulingInfo(String timeOut) {
  236 + public void getSchedulingInfo(long timeLong) {
232 237 // TODO 获取当天的签到表
233 238 long timestamp = System.currentTimeMillis();
234   - String formatDate = ConstDateUtil.formatDate(timestamp);
  239 + Date date = new Date(timeLong);
  240 + String formatDate = DateUtil.YYYY_MM_DD.format(date);
  241 + String timeOut = DateUtil.HH_MM_ss.format(date);
235 242 // String formatDate = ConstDateUtil.formatDate(ConstDateUtil.getTheSpecifiedNumberOfDaysOfTime(-1));
236 243 log.info("获取排班任务触发时间:{}", formatDate);
237 244 // 获取排班请求
238 245 String getSchedulingInfoUrl = null;
239 246  
240 247 log.info("开始获取{}的排班数据", formatDate);
  248 + boolean isSameDay = DateUtils.isSameDay(new Date(),date);
  249 + String url = isSameDay?GET_SCHEDULING_INFO_URL:getSchedulingInfoPlan;
  250 + int type = isSameDay?1:100;
  251 +// String url = getSchedulingInfoPlan;
241 252 try {
242   - getSchedulingInfoUrl = String.format(GET_SCHEDULING_INFO_URL, "99", formatDate, timestamp, NONCE, PASSWORD, getSHA1(getStringStringMap(String.valueOf(timestamp))));
  253 + getSchedulingInfoUrl = String.format(url, "77", formatDate, timestamp, NONCE, PASSWORD, getSHA1(getStringStringMap(String.valueOf(timestamp))));
243 254 } catch (Exception e) {
244 255 throw new RuntimeException(e);
245 256 }
246 257 // 获取排班信息并存入redis
247   - saveSchedulingToRedis(getSchedulingInfoUrl, formatDate, timeOut);
  258 + saveSchedulingToRedis(getSchedulingInfoUrl, formatDate, timeOut,date,type);
248 259 // 删除两天前排班信息
249 260 deleteScheduling();
250 261 log.info("获取{}的排班数据完毕", formatDate);
... ... @@ -339,8 +350,8 @@ public class DriverJob implements InitializingBean {
339 350 }
340 351  
341 352  
342   - public Map<String, List<ResponseSchedulingDto>> saveSchedulingToRedis(String getSchedulingInfoUrl, String dateKey, String timeOut) {
343   - log.info("开始拉取排班:{}", dateKey);
  353 + public Map<String, List<ResponseSchedulingDto>> saveSchedulingToRedis(String getSchedulingInfoUrl, String dateKey, String timeOut,Date date,int type) {
  354 + log.info("开始拉取排班:{};[{}]", dateKey,getSchedulingInfoUrl);
344 355 List<ResponseSchedulingDto> originSchedulingList = RESTTEMPLATE.exchange(
345 356 getSchedulingInfoUrl,
346 357 HttpMethod.GET,
... ... @@ -368,7 +379,7 @@ public class DriverJob implements InitializingBean {
368 379 schedulingList.sort(Comparator.comparing(ResponseSchedulingDto::getFcsjT));
369 380 }
370 381 // 存入签到报表
371   - THREAD_JOB_SERVICE.asyncComputedScheduling(driverSchedulingMap, timeOut);
  382 + THREAD_JOB_SERVICE.asyncComputedScheduling(driverSchedulingMap, timeOut,date,type);
372 383 // 实时排班直接存入缓存
373 384 SCHEDULING_CACHE.setCacheScheduling(DRIVER_SCHEDULING_PRE + dateKey, driverSchedulingMap);
374 385 log.info("拉取排班完毕:{}", dateKey);
... ...
Bsth-admin/src/main/java/com/ruoyi/mapper/key/location/LinggangKeyWorkLocationMapper.java
... ... @@ -5,6 +5,7 @@ import com.ruoyi.domain.key.location.LinggangKeyWorkLocation;
5 5 import org.apache.ibatis.annotations.Mapper;
6 6 import org.apache.ibatis.annotations.Param;
7 7  
  8 +import java.util.Collection;
8 9 import java.util.List;
9 10  
10 11  
... ... @@ -17,4 +18,6 @@ public interface LinggangKeyWorkLocationMapper extends BaseMapper&lt;LinggangKeyWor
17 18 int insertSelective(LinggangKeyWorkLocation name);
18 19  
19 20 List<LinggangKeyWorkLocation> listOfDeviceKeyIdScheduleDate(@Param("localtions") List<LinggangKeyWorkLocation> locations);
  21 +
  22 + List<LinggangKeyWorkLocation> listRecent(@Param("localtions") Collection<LinggangKeyWorkLocation> locations);
20 23 }
21 24 \ No newline at end of file
... ...
Bsth-admin/src/main/java/com/ruoyi/service/ThreadJobService.java
... ... @@ -14,6 +14,7 @@ import com.ruoyi.common.utils.StringUtils;
14 14 import com.ruoyi.common.utils.file.FileUploadUtils;
15 15 import com.ruoyi.config.domain.LineConfig;
16 16 import com.ruoyi.config.service.ILineConfigService;
  17 +import com.ruoyi.domain.DriverScheduling;
17 18 import com.ruoyi.domain.RuleAttendanceMain;
18 19 import com.ruoyi.domain.sign.in.exception.report.EquipmentExceptionReport;
19 20 import com.ruoyi.driver.domain.Driver;
... ... @@ -28,7 +29,6 @@ import com.ruoyi.errorScheduling.domain.ErrorJobcode;
28 29 import com.ruoyi.errorScheduling.service.IErrorJobcodeService;
29 30 import com.ruoyi.in.domain.SignIn;
30 31 import com.ruoyi.job.DriverJob;
31   -import com.ruoyi.domain.DriverScheduling;
32 32 import com.ruoyi.pojo.GlobalIndex;
33 33 import com.ruoyi.pojo.response.ResponseSchedulingDto;
34 34 import com.ruoyi.service.key.location.LinggangKeyWorkLocationService;
... ... @@ -36,6 +36,7 @@ import com.ruoyi.service.sign.in.exception.report.EquipmentExceptionReportServic
36 36 import com.ruoyi.system.domain.SysNotice;
37 37 import com.ruoyi.system.service.ISysNoticeService;
38 38 import com.ruoyi.utils.ConstDateUtil;
  39 +import com.ruoyi.utils.DateUtil;
39 40 import lombok.extern.slf4j.Slf4j;
40 41 import org.springframework.beans.BeanUtils;
41 42 import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -51,9 +52,11 @@ import org.springframework.web.client.RestTemplate;
51 52 import sun.misc.BASE64Decoder;
52 53  
53 54 import javax.annotation.Resource;
54   -import java.io.*;
  55 +import java.io.File;
  56 +import java.io.FileOutputStream;
  57 +import java.io.IOException;
  58 +import java.io.InputStream;
55 59 import java.math.BigDecimal;
56   -import java.text.SimpleDateFormat;
57 60 import java.time.LocalDate;
58 61 import java.util.*;
59 62 import java.util.stream.Collectors;
... ... @@ -406,51 +409,39 @@ public class ThreadJobService {
406 409 */
407 410 @Async
408 411 @Transactional(rollbackFor = {Exception.class})
409   - public void asyncComputedScheduling(Map<String, List<ResponseSchedulingDto>> originSchedulingMap, String timeOut) {
410   - if (StringUtils.isNotEmpty(timeOut)) {
411   - LocalDate date = LocalDate.now();
412   - Date date2 = ConstDateUtil.dateAddition(date.toString(), timeOut);
413   - Date date1 = new Date();
414   - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
415   - // 如果当前日期小于设定时间就不获取固定排班
416   - log.info("当前时间:{},设定时间:{}", simpleDateFormat.format(date1), simpleDateFormat.format(date2));
417   - if (date1.compareTo(date2) < 0) {
418   - log.info("当前日期小于设定时间就不获取排班,当前时间:{},设定时间:{}", simpleDateFormat.format(date1), simpleDateFormat.format(date2));
419   - return;
420   - }
421   - }
  412 + public void asyncComputedScheduling(Map<String, List<ResponseSchedulingDto>> originSchedulingMap, String timeOut,Date date,int type) {
422 413 //查询当天是否保存过考情表 如果不存在则保存
423   - List<DriverScheduling> bcList = schedulingMapper.queryToDay(ConstDateUtil.formatDate("yyyy-MM-dd"), null, null, null);
  414 + List<DriverScheduling> bcList = schedulingMapper.queryToDay(DateUtil.YYYY_MM_DD_LINK.format(date), null, null, null);
424 415 Map<String, List<DriverScheduling>> dto = nowSchedulingCache.getCacheScheduling(ConstDateUtil.formatDate(new Date()));
425 416 // 当天已有记录则不在保存 或者 调度记录为空则不在保存
426 417 if ((CollectionUtil.isNotEmpty(dto) && CollectionUtil.isNotEmpty(bcList)) || originSchedulingMap.size() == 0) {
427   - log.info("调度最新数据:{}", originSchedulingMap.size());
428   - log.info("当天获取数据:{}", bcList.size());
  418 + log.info("调度最新数据:{},当天获取数据:{},时间:[{}]", originSchedulingMap.size(),bcList.size(),date);
429 419 return;
430 420 }
431 421 // TODO maybe delete
432 422 TempCache.resetMapStatus();
433   - bcList = getBcList(originSchedulingMap);
  423 + bcList = getBcList(originSchedulingMap,type);
434 424  
435 425 // 处理非司售人员的排班明细
436 426 bcList.addAll(handleOtherPostsScheduling());
437 427 // 插入排班
438 428 schedulingMapper.insertRoster(bcList);
  429 + String dateStr1 = DateUtil.YYYY_MM_DD_LINK.format(date);
439 430 // 异常数据过多,不通过自增获取id再次查询获取
440   - bcList = schedulingMapper.queryToDay(ConstDateUtil.formatDate("yyyy-MM-dd"), null, null, null);
  431 + bcList = schedulingMapper.queryToDay(dateStr1, null, null, null);
441 432 // 处理缓存和错误排班
442   - String date = ConstDateUtil.formatDate(new Date());
  433 + String dateStr = DateUtil.YYYY_MM_DD.format(date);
443 434 if (!CollectionUtil.isEmpty(bcList)) {
444 435 Map<String, List<DriverScheduling>> resultMap = new HashMap<>(800);
445 436 NowSchedulingCache.handlerResultMap(resultMap, bcList);
446 437 // 更新缓存
447   - nowSchedulingCache.setCacheScheduling(date, resultMap);
  438 + nowSchedulingCache.setCacheScheduling(dateStr, resultMap);
448 439 // 获取错误排班
449 440 List<ErrorJobcode> errorScheduling = getErrorScheduling(resultMap);
450 441 // 插入错误排班
451 442 errorJobcodeService.insertBatchErrorJobcode(errorScheduling);
452 443 }
453   - keyWorkLocationService.insertJob(ConstDateUtil.formatDate("yyyy-MM-dd"));
  444 + keyWorkLocationService.insertJob(dateStr1);
454 445 log.info("当天排班数据获取完毕,共:{}条", bcList.size());
455 446 }
456 447  
... ... @@ -524,7 +515,7 @@ public class ThreadJobService {
524 515 return scheduling;
525 516 }
526 517  
527   - private List<DriverScheduling> getBcList(Map<String, List<ResponseSchedulingDto>> originSchedulingMap) {
  518 + private List<DriverScheduling> getBcList(Map<String, List<ResponseSchedulingDto>> originSchedulingMap,int type) {
528 519 List<DriverScheduling> bcList = new ArrayList<>(1000);
529 520 Map<String, LineConfig> configMap = lineConfigService.selectLineConfigList(null).stream().collect(Collectors.toMap(item -> item.getLineName() + item.getLpName(), item -> item));
530 521 for (String key : originSchedulingMap.keySet()) {
... ... @@ -535,6 +526,7 @@ public class ThreadJobService {
535 526 DriverScheduling scheduling = new DriverScheduling();
536 527 BeanUtils.copyProperties(item, scheduling, "id");
537 528 scheduling.setUpDown(Convert.toInt(item.getUpDown()));
  529 + scheduling.setType(type);
538 530 return scheduling;
539 531 })
540 532 .sorted(Comparator.comparing(DriverScheduling::getFcsjT))
... ...
Bsth-admin/src/main/java/com/ruoyi/service/impl/dss/KeyBoxVoServiceImpl.java
... ... @@ -96,6 +96,7 @@ public class KeyBoxVoServiceImpl implements KeyBoxVoService {
96 96 // keyBoxVo.setYardName(Convert.toStr(keyInfo.getS()));
97 97 keyBoxVo.setPlateNum(lingangScheduling.getNbbm());
98 98 keyBoxVo.setParkingNo(carInfo.getParkingNo());
  99 + keyBoxVo.setKeyCode(keyInfo.getKeyCode());
99 100  
100 101 lingangEquipmentLinkeLogService.updateByPrimaryKey(linkeLog, null, HttpStatus.SUCCESS);
101 102 return ResponseResult.success(keyBoxVo);
... ...
Bsth-admin/src/main/java/com/ruoyi/service/impl/key/location/LinggangKeyWorkLocationServiceImpl.java
... ... @@ -159,6 +159,24 @@ public class LinggangKeyWorkLocationServiceImpl extends ServiceImpl&lt;LinggangKeyW
159 159 return list(wrapper);
160 160 }
161 161  
  162 + private List<LinggangKeyWorkLocation> listRecent(Collection<LinggangKeyWorkLocation> locations) {
  163 + if (CollectionUtils.isEmpty(locations)) {
  164 + return Collections.emptyList();
  165 + }
  166 +
  167 + return linggangKeyWorkLocationMapper.listRecent(locations);
  168 + }
  169 +
  170 + private List<LinggangKeyWorkLocation> listRecentDates(Collection<Date> dates) {
  171 + if (CollectionUtils.isEmpty(dates)) {
  172 + return Collections.emptyList();
  173 + }
  174 +
  175 + LambdaQueryWrapper<LinggangKeyWorkLocation> wrapper = new LambdaQueryWrapper<>();
  176 + wrapper.in(LinggangKeyWorkLocation::getScheduleDate, dates);
  177 + return list(wrapper);
  178 + }
  179 +
162 180 // @Override
163 181 // public List<LinggangKeyWorkLocation> listOfSelect(LinggangKeyWorkLocation entity) {
164 182 // LambdaQueryWrapper<LinggangKeyWorkLocation> wrapper = new LambdaQueryWrapper<>(entity);
... ... @@ -278,9 +296,9 @@ public class LinggangKeyWorkLocationServiceImpl extends ServiceImpl&lt;LinggangKeyW
278 296 resultStr.append(";");
279 297 }
280 298  
281   - msg = convertMsg(success, TAKE_KEY_SUCESS);
282   - if (StringUtils.isNotEmpty(msg)) {
283   - resultStr.append(msg);
  299 + String successMsg = convertMsg(success, TAKE_KEY_SUCESS);
  300 + if (StringUtils.isNotEmpty(successMsg)) {
  301 + resultStr.append(successMsg);
284 302 resultStr.append(";");
285 303 return StringUtils.isEmpty(msg) ? ResponseResult.success(resultStr.toString()) : ResponseResult.error(resultStr.toString());
286 304 }
... ... @@ -374,89 +392,138 @@ public class LinggangKeyWorkLocationServiceImpl extends ServiceImpl&lt;LinggangKeyW
374 392 }
375 393 }
376 394  
  395 +
377 396 private ResponseResult<List<LinggangKeyWorkLocation>> checkTaskKey(List<LinggangKeyWorkLocation> locations, LinggangKeyWorkLocation.LinggangKeyWorkLocationTypeEnum typeEnum) {
378   - Set<Integer> keyCodes = locations.stream().map(LinggangKeyWorkLocation::getKeyInfoId).collect(Collectors.toSet());
379   - List<KeyInfo> keyInfos = keyInfoService.listByIds(keyCodes);
380   - if (CollectionUtils.isEmpty(keyInfos)) {
381   - log.info("无法找到钥匙信息:[{}]", locations);
382   - return ResponseResult.error404("无法找到钥匙信息");
  397 + Set<Integer> keyCodes = locations.stream().filter(l->Objects.nonNull(l.getKeyInfoId())).map(LinggangKeyWorkLocation::getKeyInfoId).collect(Collectors.toSet());
  398 +
  399 + List<KeyInfo> keyInfos = null;
  400 + if(CollectionUtils.isNotEmpty(keyCodes)){
  401 + keyInfos = keyInfoService.listByIds(keyCodes);
383 402 }
384 403  
385   - StringBuilder resultStr = new StringBuilder();
386   - List<LinggangKeyWorkLocation> source = locations.stream().filter(l -> Objects.nonNull(l.getKeyInfoId())).collect(Collectors.toList());
387   - List<LinggangKeyWorkLocation> target = locations.stream().filter(l -> Objects.isNull(l.getKeyInfoId())).collect(Collectors.toList());
388   -
389   - if (CollectionUtils.isNotEmpty(target)) {
390   - String msg = convertMsgOfKeyInfo(target);
391   - if (StringUtils.isNotEmpty(msg)) {
392   - resultStr.append(msg);
393   - resultStr.append(";");
394   - }
  404 + Set<Date> dates = locations.stream().map(LinggangKeyWorkLocation::getScheduleDate).collect(Collectors.toSet());
  405 +
  406 + List<LinggangKeyWorkLocation> sources = listRecentDates(dates).stream().filter(s -> !Objects.equals(s.getType(), typeEnum.getValue())).collect(Collectors.toList());
  407 + if (CollectionUtils.isEmpty(sources)) {
  408 + return ResponseResult.error404("无法找到钥匙归还信息");
395 409 }
396 410  
397   - if (CollectionUtils.isEmpty(source)) {
398   - return ResponseResult.error404(resultStr.toString());
  411 + if (CollectionUtils.isEmpty(keyInfos)) {
  412 + Set<Integer> keyInfoId = sources.stream().map(LinggangKeyWorkLocation::getKeyInfoId).collect(Collectors.toSet());
  413 + keyInfos = keyInfoService.listByIds(keyInfoId);
399 414 }
400 415  
401   - List<LinggangKeyWorkLocation> querySource = locations.stream().map(l -> {
402   - LinggangKeyWorkLocation location = new LinggangKeyWorkLocation();
403   - location.setDevice(l.getDevice());
404   - location.setKeyInfoId(l.getKeyInfoId());
405   - location.setScheduleDate(l.getScheduleDate());
406   - location.setType(typeEnum.getValue());
407   - return location;
  416 + List<KeyInfo> keyInfoList = keyInfos;
  417 + int size = CollectionUtils.size(keyInfoList);
  418 +
  419 + sources = sources.stream().map(s -> {
  420 + if (size > 0) {
  421 + Optional<KeyInfo> optKey = keyInfoList.stream().filter(k -> Objects.equals(k.getId(), s.getKeyInfoId())).findFirst();
  422 + if (optKey.isPresent()) {
  423 + s.setPlate(optKey.get().getPlateNum());
  424 + }
  425 + }
  426 + return s;
408 427 }).collect(Collectors.toList());
409 428  
410   - List<LinggangKeyWorkLocation> dataSource = listOfDeviceKeyIdScheduleDate(querySource);
411   - if (CollectionUtils.isEmpty(dataSource)) {
412   - log.info("无法找到钥匙存放信息:[{}][{}]", querySource, locations);
413   - resultStr.append("无法找到钥匙存放信息");
414   - resultStr.append(";");
415   - return ResponseResult.error404(resultStr.toString());
416   - }
  429 + List<LinggangKeyWorkLocation> workLocations = sources;
417 430  
418   - List<LinggangKeyWorkLocation> locationList = new ArrayList<>();
419   - source = source.stream().map(l -> {
420   - Optional<LinggangKeyWorkLocation> optional = dataSource.stream().filter(d -> Objects.equals(d.getKeyInfoId(), l.getKeyInfoId()) &&
421   - Objects.equals(d.getDevice(), l.getDevice()) && DateUtils.isSameDay(d.getScheduleDate(), l.getScheduleDate())).findFirst();
  431 + locations = locations.stream().map(l -> {
  432 +// Optional<LinggangKeyWorkLocation> optional = workLocations.stream().filter(s -> DateUtils.isSameDay(s.getScheduleDate(),
  433 +// l.getScheduleDate()) && Objects.equals(s.getPlate(), l.getPlate()) && Objects.equals(s.getDevice(), l.getDevice())).findFirst();
  434 + Optional<LinggangKeyWorkLocation> optional = workLocations.stream().filter(s -> DateUtils.isSameDay(s.getScheduleDate(),
  435 + l.getScheduleDate()) && Objects.equals(s.getPlate(), l.getPlate())).findFirst();
422 436 if (optional.isPresent()) {
423 437 l.setId(optional.get().getId());
424   - if (Objects.equals(l.getType(), optional.get().getType())) {
425   - locationList.add(l);
426   - return null;
427   - }
428 438 }
429 439 return l;
430   - }).filter(l -> Objects.nonNull(l)).collect(Collectors.toList());
431   -
432   - if (CollectionUtils.isNotEmpty(locationList)) {
433   - String msg = convertMsgOfKeyInfoLocalEventType(locations);
434   - if (StringUtils.isNotEmpty(msg)) {
435   - resultStr.append(msg);
436   - resultStr.append(";");
437   - }
438   - }
439   -
440   - if (CollectionUtils.isEmpty(source)) {
441   - log.info("无法找到钥匙存放信息:[{}][{}]", locationList, locations);
442   - return ResponseResult.error404(resultStr.toString());
443   - }
444   -
445   - target = source.stream().filter(l -> Objects.isNull(l.getId())).collect(Collectors.toList());
446   - if (CollectionUtils.isNotEmpty(target)) {
447   - String msg = convertMsgOfKeyInfoLocal(target);
448   - if (StringUtils.isNotEmpty(msg)) {
449   - resultStr.append(msg);
450   - resultStr.append(";");
451   - }
  440 + }).collect(Collectors.toList());
452 441  
453   - }
454   - source = source.stream().filter(l -> Objects.nonNull(l.getId())).collect(Collectors.toList());
455   - if (CollectionUtils.isEmpty(source)) {
456   - return ResponseResult.error404(resultStr.toString());
457   - }
458 442  
459   - return ResponseResult.success(source);
  443 + return ResponseResult.success(locations);
  444 +
  445 +// StringBuilder resultStr = new StringBuilder();
  446 +// if (Objects.equals(typeEnum.getValue(), LinggangKeyWorkLocation.LinggangKeyWorkLocationTypeEnum.TAKE_OUT.getValue())) {
  447 +// List<LinggangKeyWorkLocation> source = locations.stream().filter(l -> Objects.equals(l.getType(), 1)).collect(Collectors.toList());
  448 +// return ResponseResult.success(source);
  449 +// }
  450 +// List<LinggangKeyWorkLocation> source = locations.stream().filter(l -> Objects.equals(l.getType(), 0)).collect(Collectors.toList());
  451 +// return ResponseResult.success(source);
  452 +
  453 +// List<LinggangKeyWorkLocation> source = locations.stream().filter(l -> Objects.nonNull(l.getKeyInfoId())).collect(Collectors.toList());
  454 +// List<LinggangKeyWorkLocation> target = locations.stream().filter(l -> Objects.isNull(l.getKeyInfoId())).collect(Collectors.toList());
  455 +//
  456 +// if (CollectionUtils.isNotEmpty(target)) {
  457 +// String msg = convertMsgOfKeyInfo(target);
  458 +// if (StringUtils.isNotEmpty(msg)) {
  459 +// resultStr.append(msg);
  460 +// resultStr.append(";");
  461 +// }
  462 +// }
  463 +//
  464 +// if (CollectionUtils.isEmpty(source)) {
  465 +// return ResponseResult.error404(resultStr.toString());
  466 +// }
  467 +//
  468 +// List<LinggangKeyWorkLocation> querySource = locations.stream().map(l -> {
  469 +// LinggangKeyWorkLocation location = new LinggangKeyWorkLocation();
  470 +// location.setDevice(l.getDevice());
  471 +// location.setKeyInfoId(l.getKeyInfoId());
  472 +// location.setScheduleDate(l.getScheduleDate());
  473 +// location.setType(typeEnum.getValue());
  474 +// return location;
  475 +// }).collect(Collectors.toList());
  476 +//
  477 +// List<LinggangKeyWorkLocation> dataSource = listOfDeviceKeyIdScheduleDate(querySource);
  478 +// if (CollectionUtils.isEmpty(dataSource)) {
  479 +// log.info("无法找到钥匙存放信息:[{}][{}]", querySource, locations);
  480 +// resultStr.append("无法找到钥匙存放信息");
  481 +// resultStr.append(";");
  482 +// return ResponseResult.error404(resultStr.toString());
  483 +// }
  484 +//
  485 +// List<LinggangKeyWorkLocation> locationList = new ArrayList<>();
  486 +// source = source.stream().map(l -> {
  487 +// Optional<LinggangKeyWorkLocation> optional = dataSource.stream().filter(d -> Objects.equals(d.getKeyInfoId(), l.getKeyInfoId()) &&
  488 +// Objects.equals(d.getDevice(), l.getDevice()) && DateUtils.isSameDay(d.getScheduleDate(), l.getScheduleDate())).findFirst();
  489 +// if (optional.isPresent()) {
  490 +// l.setId(optional.get().getId());
  491 +// if (Objects.equals(l.getType(), optional.get().getType())) {
  492 +// locationList.add(l);
  493 +// return null;
  494 +// }
  495 +// }
  496 +// return l;
  497 +// }).filter(l -> Objects.nonNull(l)).collect(Collectors.toList());
  498 +//
  499 +// if (CollectionUtils.isNotEmpty(locationList)) {
  500 +// String msg = convertMsgOfKeyInfoLocalEventType(locations);
  501 +// if (StringUtils.isNotEmpty(msg)) {
  502 +// resultStr.append(msg);
  503 +// resultStr.append(";");
  504 +// }
  505 +// }
  506 +//
  507 +// if (CollectionUtils.isEmpty(source)) {
  508 +// log.info("无法找到钥匙存放信息:[{}][{}]", locationList, locations);
  509 +// return ResponseResult.error404(resultStr.toString());
  510 +// }
  511 +//
  512 +// target = source.stream().filter(l -> Objects.isNull(l.getId())).collect(Collectors.toList());
  513 +// if (CollectionUtils.isNotEmpty(target)) {
  514 +// String msg = convertMsgOfKeyInfoLocal(target);
  515 +// if (StringUtils.isNotEmpty(msg)) {
  516 +// resultStr.append(msg);
  517 +// resultStr.append(";");
  518 +// }
  519 +//
  520 +// }
  521 +// source = source.stream().filter(l -> Objects.nonNull(l.getId())).collect(Collectors.toList());
  522 +// if (CollectionUtils.isEmpty(source)) {
  523 +// return ResponseResult.error404(resultStr.toString());
  524 +// }
  525 +//
  526 +// return ResponseResult.success(source);
460 527 }
461 528  
462 529 private String convertMsgOfKeyInfo(List<LinggangKeyWorkLocation> target) {
... ... @@ -593,7 +660,8 @@ public class LinggangKeyWorkLocationServiceImpl extends ServiceImpl&lt;LinggangKeyW
593 660 continue;
594 661 }
595 662 if (Objects.isNull(equipment.getLatticeNumberSet())) {
596   - equipment.setLatticeNumberSet(combationLattice(equipment));
  663 +// equipment.setLatticeNumberSet(combationLattice(equipment));
  664 + equipment.setLatticeNumberSet(new HashSet<>());
597 665 }
598 666  
599 667 number = RandomUtils.nextInt(1, equipment.getLatticeNumber());
... ... @@ -627,7 +695,7 @@ public class LinggangKeyWorkLocationServiceImpl extends ServiceImpl&lt;LinggangKeyW
627 695 location.setYardId(equipment.getYardId());
628 696 location.setYardName(optional.get().getName());
629 697 location.setDevice(equipment.getDeviceId());
630   - location.setCabinetNo(number.toString());
  698 +// location.setCabinetNo(number.toString());
631 699 location.setEventType(0);
632 700 location.setDelFlag(Boolean.FALSE);
633 701 location.setKeyInfoId(carKeyInfo.get(0).getId());
... ...
Bsth-admin/src/main/java/com/ruoyi/service/impl/scheduling/LinggangSchedulingServiceImpl.java
... ... @@ -14,6 +14,7 @@ import org.springframework.stereotype.Service;
14 14  
15 15 import java.util.Collections;
16 16 import java.util.List;
  17 +import java.util.Objects;
17 18  
18 19 @Service
19 20 /** Service实现类*/
... ... @@ -83,6 +84,7 @@ public class LinggangSchedulingServiceImpl extends ServiceImpl&lt;LinggangSchedulin
83 84 @Override
84 85 public Integer countId(LinggangScheduling entity) {
85 86 LambdaQueryWrapper<LinggangScheduling> wrapper = new LambdaQueryWrapper<>(entity);
  87 + switchScheduleDate(wrapper,entity);
86 88 wrapper.select(LinggangScheduling::getId);
87 89 return count(wrapper);
88 90 }
... ... @@ -240,4 +242,14 @@ public class LinggangSchedulingServiceImpl extends ServiceImpl&lt;LinggangSchedulin
240 242 wrapper.orderByDesc(LinggangScheduling::getId);
241 243 }
242 244 }
  245 +
  246 + private void switchScheduleDate(LambdaQueryWrapper<LinggangScheduling> wrapper,LinggangScheduling entity){
  247 + if(Objects.nonNull(entity.getStartScheduleDate()) && Objects.nonNull(entity.getEndScheduleDate())){
  248 + wrapper.between(LinggangScheduling::getScheduleDate,entity.getStartScheduleDate(),entity.getEndScheduleDate());
  249 + }else if(Objects.nonNull(entity.getStartScheduleDate())){
  250 + wrapper.ge(LinggangScheduling::getScheduleDate,entity.getStartScheduleDate());
  251 + }else if(Objects.nonNull(entity.getEndScheduleDate())){
  252 + wrapper.le(LinggangScheduling::getScheduleDate,entity.getEndScheduleDate());
  253 + }
  254 + }
243 255 }
244 256 \ No newline at end of file
... ...
Bsth-admin/src/main/java/com/ruoyi/utils/DateUtil.java
... ... @@ -17,9 +17,12 @@ public class DateUtil {
17 17  
18 18 public static FastDateFormat YYYY_MM_DD_LINK_HH_MM_SS = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");
19 19 public static FastDateFormat YYYY_MM_DD_LINK = FastDateFormat.getInstance("yyyy-MM-dd");
  20 + public static FastDateFormat YYYY_MM_DD = FastDateFormat.getInstance("yyyyMMdd");
  21 + public static FastDateFormat HH_MM_ss = FastDateFormat.getInstance("HH:mm:ss");
20 22 public static DateTimeFormatter YYYY_MM_DD_LINK_HH_MM_SS_Local_Date = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
21 23 public static DateTimeFormatter YYYY_MM_DD_LINK_Local_Date = DateTimeFormatter.ofPattern("yyyy-MM-dd");
22 24  
  25 +
23 26 public static LocalDateTime parseLocalDateTime(String dateStr) {
24 27 return StringUtils.isEmpty(dateStr) ? null : LocalDateTime.parse(dateStr, YYYY_MM_DD_LINK_HH_MM_SS_Local_Date);
25 28 }
... ...
Bsth-admin/src/main/resources/application-druid-dev.yml
... ... @@ -166,6 +166,7 @@ api:
166 166 # 获取排班信息
167 167 getSchedulingInfo: http://58.34.47.74:9089/webservice/rest/schedule_real/sch_jk/%s/%s?timestamp=%d&nonce=%s&password=%s&sign=%s
168 168 getSchedulingInfoNew: http://58.34.47.74:9089/webservice/rest/schedule_real/sch_jk/%s/%s?timestamp=%d&nonce=%s&password=%s&sign=%s
  169 + getSchedulingInfoPlan: http://58.34.47.74:9089/webservice/rest/schedule/sch_jk/%s/%s?timestamp=%d&nonce=%s&password=%s&sign=%s
169 170 config:
170 171 password: c4dd3d8cb9a82f6d6a625818618b28ca7bebb464
171 172 # 随机字符串
... ...
Bsth-admin/src/main/resources/application-druid-devTest.yml
... ... @@ -166,6 +166,7 @@ api:
166 166 # 获取排班信息
167 167 getSchedulingInfo: http://58.34.47.74:9089/webservice/rest/schedule_real/sch_jk/%s/%s?timestamp=%d&nonce=%s&password=%s&sign=%s
168 168 getSchedulingInfoNew: http://58.34.47.74:9089/webservice/rest/schedule_real/sch_jk/%s/%s?timestamp=%d&nonce=%s&password=%s&sign=%s
  169 + getSchedulingInfoPlan: http://58.34.47.74:9089/webservice/rest/schedule/sch_jk/%s/%s?timestamp=%d&nonce=%s&password=%s&sign=%s
169 170 config:
170 171 password: c4dd3d8cb9a82f6d6a625818618b28ca7bebb464
171 172 # 随机字符串
... ...
Bsth-admin/src/main/resources/mapper/driver_scheduling/DriverSchedulingMapper.xml
... ... @@ -82,6 +82,7 @@
82 82 <if test="date != null and date != ''">
83 83 and schedule_date = #{date}
84 84 </if>
  85 + and scheduling.type = 1
85 86 </where>
86 87  
87 88  
... ...
Bsth-admin/src/main/resources/mapper/key/location/LinggangKeyWorkLocationMapper.xml
... ... @@ -33,6 +33,14 @@
33 33 )
34 34 </select>
35 35  
  36 + <select id="listRecent" resultMap="BaseResultMap">
  37 + select <include refid="columns"></include> from key_work_location
  38 + where 1=1 and
  39 + <foreach collection="localtions" open="(" close=")" separator="or " item="item">
  40 + <include refid="where"></include>
  41 + </foreach>
  42 + </select>
  43 +
36 44 <sql id="columns">
37 45 id
38 46 , yard_Id , yard_Name , device , cabinet_No , create_by , create_time , update_by , update_time , del_flag , event_Type , key_info_id , schedule_date , scheduling_id
... ...