Commit a96d30ea402664607e91bf7c91f4c8ead2898a2f

Authored by guzijian
1 parent 77c4099a

feat: 新增车队状态

Bsth-admin/src/main/java/com/ruoyi/pojo/vo/bigViewVo/FleetInfoVo.java
... ... @@ -19,7 +19,8 @@ public class FleetInfoVo {
19 19 private String title;
20 20 @ApiModelProperty("车队信息")
21 21 private List<FleetInfo> fleetInfos;
22   -
  22 + @ApiModelProperty("车队状态")
  23 + private List<FleetState> fleetStates;
23 24 @Data
24 25 public static class FleetInfo{
25 26 private String lineName;
... ...
Bsth-admin/src/main/java/com/ruoyi/pojo/vo/bigViewVo/FleetState.java 0 → 100644
  1 +package com.ruoyi.pojo.vo.bigViewVo;
  2 +
  3 +import lombok.Data;
  4 +
  5 +/**
  6 + *
  7 + * @author 20412
  8 + */
  9 +@Data
  10 +public class FleetState {
  11 + private String lineName;
  12 + private Integer state;
  13 +}
... ...
Bsth-admin/src/main/java/com/ruoyi/service/impl/BigViewServiceImpl.java
... ... @@ -8,10 +8,7 @@ import com.ruoyi.driver.mapper.DriverMapper;
8 8 import com.ruoyi.driver.mapper.DriverSchedulingMapper;
9 9 import com.ruoyi.in.service.ISignInService;
10 10 import com.ruoyi.pojo.response.SignInResponseVo;
11   -import com.ruoyi.pojo.vo.bigViewVo.FleetInfoVo;
12   -import com.ruoyi.pojo.vo.bigViewVo.LineInfo;
13   -import com.ruoyi.pojo.vo.bigViewVo.SignInfoVo;
14   -import com.ruoyi.pojo.vo.bigViewVo.SignNumberVo;
  11 +import com.ruoyi.pojo.vo.bigViewVo.*;
15 12 import com.ruoyi.service.BigViewService;
16 13 import com.ruoyi.service.ThreadJobService;
17 14 import org.slf4j.Logger;
... ... @@ -72,12 +69,48 @@ public class BigViewServiceImpl implements BigViewService {
72 69 // 进一步处理人员信息
73 70 List<FleetInfoVo> fleetInfoVos = handleFleetWithLinePersonInfo(matchMap, mapVo);
74 71 // 特殊处理 处理进博会线路信息
75   - if (LocalDate.now().toString().compareTo("2023-11-12") < 0){
  72 + if (LocalDate.now().toString().compareTo("2023-11-12") < 0) {
76 73 specialTreatment(fleetInfoVos);
77 74 }
  75 + // 处理车队线路状态
  76 + handleFleetStates(fleetInfoVos);
78 77 return fleetInfoVos;
79 78 }
80 79  
  80 + private void handleFleetStates(List<FleetInfoVo> fleetInfoVos) {
  81 + // 车队 -》 线路 -》 车辆自编号 -》 人员状态 层级遍历
  82 + for (FleetInfoVo fleetInfoVo : fleetInfoVos) {
  83 + List<FleetState> fleetStates = new ArrayList<>(fleetInfoVo.getFleetInfos().size());
  84 + for (FleetInfoVo.FleetInfo fleetInfo : fleetInfoVo.getFleetInfos()) {
  85 + int state = 0;
  86 + for (LineInfo lineInfo : fleetInfo.getLineInfos()) {
  87 + LineInfo.PersonInfoVo driverInfoVo = lineInfo.getDriverInfoVo();
  88 + LineInfo.PersonInfoVo saleInfoVo = lineInfo.getSaleInfoVo();
  89 + Integer driverStatus = handleStateByPerson(driverInfoVo);
  90 + Integer saleStatus = handleStateByPerson(saleInfoVo);
  91 + int maxState = Math.max(driverStatus, saleStatus);
  92 + state = Math.max(maxState, state);
  93 + }
  94 + FleetState fleetState = new FleetState();
  95 + fleetState.setState(state);
  96 + fleetState.setLineName(fleetInfo.getLineName());
  97 + fleetStates.add(fleetState);
  98 + }
  99 + fleetInfoVo.setFleetStates(fleetStates);
  100 + }
  101 + // 排序
  102 + for (FleetInfoVo fleetInfoVo : fleetInfoVos) {
  103 + fleetInfoVo.getFleetStates().sort(Comparator.comparing(FleetState::getState));
  104 + }
  105 + }
  106 +
  107 + private Integer handleStateByPerson(LineInfo.PersonInfoVo personInfoVo) {
  108 + if (Objects.isNull(personInfoVo)) {
  109 + return 0;
  110 + }
  111 + return personInfoVo.getSignStatus();
  112 + }
  113 +
81 114 private void specialTreatment(List<FleetInfoVo> fleetInfoVos) {
82 115 List<FleetInfoVo.FleetInfo> jinbo = new ArrayList<>();
83 116 // 把进博会线路单独拎出来 进博短驳
... ... @@ -85,6 +118,13 @@ public class BigViewServiceImpl implements BigViewService {
85 118 fleetInfoVo.setFleetInfos(
86 119 fleetInfoVo.getFleetInfos().stream().filter(item -> {
87 120 if (item.getLineName().startsWith("进博短驳")) {
  121 + // 这个循环是因为不同车队的人在拼接到进博会时出现相同线路两条记录问题
  122 + for (FleetInfoVo.FleetInfo fleetInfo : jinbo) {
  123 + if (fleetInfo.getLineName().equals(item.getLineName())){
  124 + fleetInfo.getLineInfos().addAll(item.getLineInfos());
  125 + return false;
  126 + }
  127 + }
88 128 jinbo.add(item);
89 129 return false;
90 130 }
... ... @@ -93,29 +133,29 @@ public class BigViewServiceImpl implements BigViewService {
93 133 );
94 134 }
95 135 // 究极特殊情况遇到了调度接口存在的人员 但是 人事接口不存在的人员 会导致fleetName 为空
96   - // 在青浦的车队就是一个特殊的部门只是以车队开头命名 如果存在。。
  136 + // 在青浦的车队就是一个特殊的部门只是以车队开头命名 如果不存在。。说明调度出现了问题直接删除不存在的车队信息 该方法可以删除deleteErrorData
97 137 deleteErrorData(fleetInfoVos);
98   - alertJinboList(jinbo,fleetInfoVos);
  138 + alertJinboList(jinbo, fleetInfoVos);
99 139 }
100 140  
101 141 private void alertJinboList(List<FleetInfoVo.FleetInfo> jinbo, List<FleetInfoVo> fleetInfoVos) {
102   - if (CollectionUtil.isEmpty(fleetInfoVos)){
  142 + if (CollectionUtil.isEmpty(fleetInfoVos)) {
103 143 return;
104 144 }
105 145 FleetInfoVo fleetInfoVo = new FleetInfoVo();
106 146 fleetInfoVo.setTitle("进博会");
107 147 fleetInfoVo.setFleetInfos(jinbo);
108   - fleetInfoVos.add(0,fleetInfoVo);
  148 + fleetInfoVos.add(0, fleetInfoVo);
109 149 }
110 150  
111 151 private void deleteErrorData(List<FleetInfoVo> fleetInfoVos) {
112 152 Integer t = null;
113 153 for (int i = 0; i < fleetInfoVos.size(); i++) {
114   - if (Objects.isNull(fleetInfoVos.get(i).getTitle())){
  154 + if (Objects.isNull(fleetInfoVos.get(i).getTitle())) {
115 155 t = i;
116 156 }
117 157 }
118   - if (t!=null){
  158 + if (t != null) {
119 159 fleetInfoVos.remove(t.intValue());
120 160 }
121 161 }
... ... @@ -167,10 +207,10 @@ public class BigViewServiceImpl implements BigViewService {
167 207 vo.getFleetInfos().sort(new Comparator<FleetInfoVo.FleetInfo>() {
168 208 @Override
169 209 public int compare(FleetInfoVo.FleetInfo o1, FleetInfoVo.FleetInfo o2) {
170   - if (o1.getLineInfos().size() > o2.getLineInfos().size()){
  210 + if (o1.getLineInfos().size() > o2.getLineInfos().size()) {
171 211 return -1;
172 212 }
173   - if (o1.getLineInfos().size() < o2.getLineInfos().size()){
  213 + if (o1.getLineInfos().size() < o2.getLineInfos().size()) {
174 214 return 1;
175 215 }
176 216 return 0;
... ... @@ -296,7 +336,6 @@ public class BigViewServiceImpl implements BigViewService {
296 336 * @param driverScheduling
297 337 */
298 338 private void handleMoreStatus(Map<String, LineInfo> matchMap, DriverScheduling scheduling, String nbbm, LineInfo.PersonInfoVo personInfoVo, DriverScheduling driverScheduling) {
299   - // TODO 判断多异常
300 339 long time = System.currentTimeMillis();
301 340 if (DRIVER_STRING.equals(scheduling.getPosts())) {
302 341 LineInfo.PersonInfoVo driverInfoVo = matchMap.get(nbbm).getDriverInfoVo();
... ...