Commit 0fba032af1e92b50e9d42cc2d50513c047d8517b

Authored by 2c2c2c
1 parent 7048bf45

松青线 路牌 松2 特殊出来,原因:分班+共营线路,无法打卡两次

Bsth-admin/src/main/java/com/ruoyi/job/DriverJob.java
@@ -343,6 +343,7 @@ public class DriverJob implements InitializingBean { @@ -343,6 +343,7 @@ public class DriverJob implements InitializingBean {
343 null, 343 null,
344 new ParameterizedTypeReference<List<ResponseSchedulingDto>>() { 344 new ParameterizedTypeReference<List<ResponseSchedulingDto>>() {
345 }).getBody(); 345 }).getBody();
  346 +
346 Map<String, List<ResponseSchedulingDto>> driverSchedulingMap = new HashMap<>(200); 347 Map<String, List<ResponseSchedulingDto>> driverSchedulingMap = new HashMap<>(200);
347 // 以员工号为key存入排班集合 348 // 以员工号为key存入排班集合
348 originSchedulingList.stream().forEach(item -> { 349 originSchedulingList.stream().forEach(item -> {
Bsth-admin/src/main/java/com/ruoyi/service/ThreadJobService.java
@@ -584,11 +584,28 @@ public class ThreadJobService { @@ -584,11 +584,28 @@ public class ThreadJobService {
584 return scheduling; 584 return scheduling;
585 } 585 }
586 586
  587 + /**
  588 + * 从原始调度地图中获取符合特定条件的调度列表
  589 + * 该方法主要关注于筛选出与边界类型相关的调度信息,并进行一系列的处理和排序
  590 + *
  591 + * @param originSchedulingMap 包含原始调度信息的映射,键为标识字符串,值为调度DTO列表
  592 + * @return 返回一个DriverScheduling对象列表,包含了经过处理的调度信息
  593 + */
587 private List<DriverScheduling> getBcList(Map<String, List<ResponseSchedulingDto>> originSchedulingMap) { 594 private List<DriverScheduling> getBcList(Map<String, List<ResponseSchedulingDto>> originSchedulingMap) {
  595 + // 初始化列表以存储最终的边界调度信息
588 List<DriverScheduling> bcList = new ArrayList<>(1000); 596 List<DriverScheduling> bcList = new ArrayList<>(1000);
  597 +
  598 + // 获取线路配置信息,用于后续的配置处理
589 Map<String, LineConfig> configMap = lineConfigService.selectLineConfigList(null).stream().collect(Collectors.toMap(item -> item.getLineName() + item.getLpName(), item -> item)); 599 Map<String, LineConfig> configMap = lineConfigService.selectLineConfigList(null).stream().collect(Collectors.toMap(item -> item.getLineName() + item.getLpName(), item -> item));
  600 +
  601 + // 遍历原始调度地图,处理每一个调度列表
590 for (String key : originSchedulingMap.keySet()) { 602 for (String key : originSchedulingMap.keySet()) {
  603 + if(key.equals("724329")){
  604 + System.out.println(1);
  605 + }
591 List<ResponseSchedulingDto> schedulingList = originSchedulingMap.get(key); 606 List<ResponseSchedulingDto> schedulingList = originSchedulingMap.get(key);
  607 +
  608 + // 筛选边界类型调度信息,进行属性复制、排序
592 List<DriverScheduling> nowScheduling = schedulingList.stream() 609 List<DriverScheduling> nowScheduling = schedulingList.stream()
593 .filter(item -> BC_TYPE_IN.equals(item.getBcType()) || BC_TYPE_OUT.equals(item.getBcType())) 610 .filter(item -> BC_TYPE_IN.equals(item.getBcType()) || BC_TYPE_OUT.equals(item.getBcType()))
594 .map(item -> { 611 .map(item -> {
@@ -598,10 +615,19 @@ public class ThreadJobService { @@ -598,10 +615,19 @@ public class ThreadJobService {
598 }) 615 })
599 .sorted(Comparator.comparing(DriverScheduling::getFcsjT)) 616 .sorted(Comparator.comparing(DriverScheduling::getFcsjT))
600 .collect(Collectors.toList()); 617 .collect(Collectors.toList());
601 - 618 + //松青线 路牌 松2 特殊出来,原因:分班+共营线路,无法打卡两次
  619 + if(nowScheduling.get(0).getLineName().equals("松青线") && nowScheduling.get(0).getLpName().equals("松2")){
  620 + List<DriverScheduling> nowSchedulingTemp = new ArrayList<>();
  621 + nowSchedulingTemp.add(nowScheduling.get(0));
  622 + nowSchedulingTemp.add(nowScheduling.get(1));
  623 + nowScheduling.clear();
  624 + nowScheduling.addAll(nowSchedulingTemp);
  625 + }
  626 + // 如果筛选出的调度信息非空,则进行进一步处理
602 if (CollectionUtil.isNotEmpty(nowScheduling)) { 627 if (CollectionUtil.isNotEmpty(nowScheduling)) {
603 // 配置处理 628 // 配置处理
604 nowScheduling = handlerScheduler(configMap, schedulingList, nowScheduling); 629 nowScheduling = handlerScheduler(configMap, schedulingList, nowScheduling);
  630 +
605 // ------|特殊处理|------ 631 // ------|特殊处理|------
606 try { 632 try {
607 DriverScheduling scheduling = nowScheduling.get(nowScheduling.size() - 1); 633 DriverScheduling scheduling = nowScheduling.get(nowScheduling.size() - 1);
@@ -609,17 +635,21 @@ public class ThreadJobService { @@ -609,17 +635,21 @@ public class ThreadJobService {
609 } catch (Exception e) { 635 } catch (Exception e) {
610 log.error("特殊处理失败:{}", e.getMessage()); 636 log.error("特殊处理失败:{}", e.getMessage());
611 } 637 }
612 - // 处理青蒸线区间 区间删除注意特殊情况放到最后可能没有全部都是区间倒是nowScheduling 为0 然后get报错 638 +
  639 + // 处理青蒸线区间,针对特定线路的特殊情况处理
613 if (CollectionUtil.isNotEmpty(nowScheduling) && nowScheduling.get(0).getLineName().startsWith("青蒸线")) { 640 if (CollectionUtil.isNotEmpty(nowScheduling) && nowScheduling.get(0).getLineName().startsWith("青蒸线")) {
614 nowScheduling = handleQinZhengLine(nowScheduling); 641 nowScheduling = handleQinZhengLine(nowScheduling);
615 } 642 }
  643 +
616 // ------|结束处理|------ 644 // ------|结束处理|------
  645 + // 将处理后的调度信息添加到最终列表中
617 bcList.addAll(nowScheduling); 646 bcList.addAll(nowScheduling);
618 } else { 647 } else {
619 // 处理无进出场 648 // 处理无进出场
620 log.error("无进出场驾驶员工号:{}", schedulingList.get(0).getJobCode()); 649 log.error("无进出场驾驶员工号:{}", schedulingList.get(0).getJobCode());
621 } 650 }
622 } 651 }
  652 + // 返回最终的边界调度信息列表
623 return bcList; 653 return bcList;
624 } 654 }
625 655