Commit b588126796c39a2b7d85753486bbf163c2608abe

Authored by liujun001
1 parent 8005ae85

优化首页功能

Bsth-admin/src/main/java/com/ruoyi/driver/mapper/DriverMapper.java
1 1 package com.ruoyi.driver.mapper;
2 2  
3   -import java.util.List;
4   -import java.util.Set;
5   -
6 3 import com.ruoyi.driver.domain.Driver;
7 4 import com.ruoyi.pojo.request.DriverRequestVo;
8   -import com.ruoyi.pojo.response.DriverResponseVo;
9 5 import com.ruoyi.pojo.response.ResponseSchedulingDto;
10 6 import com.ruoyi.pojo.vo.PeopleResponseVo;
11 7 import org.apache.ibatis.annotations.Param;
12 8  
  9 +import java.util.List;
  10 +
13 11 /**
14 12 * 驾驶员信息Mapper接口
15 13 *
... ... @@ -26,6 +24,8 @@ public interface DriverMapper
26 24 */
27 25 public Driver selectDriverById(Long id);
28 26  
  27 + Driver selectDriverByJobCode(String jobCode);
  28 +
29 29 /**
30 30 * 查询驾驶员信息列表
31 31 *
... ...
Bsth-admin/src/main/java/com/ruoyi/driver/service/IDriverService.java
1 1 package com.ruoyi.driver.service;
2 2  
3   -import java.io.IOException;
4   -import java.util.List;
5   -
6 3 import com.ruoyi.common.core.domain.AjaxResult;
7 4 import com.ruoyi.common.exception.file.InvalidExtensionException;
8 5 import com.ruoyi.common.global.Result;
... ... @@ -15,6 +12,8 @@ import org.springframework.web.multipart.MultipartFile;
15 12  
16 13 import javax.servlet.http.HttpServletRequest;
17 14 import javax.servlet.http.HttpServletResponse;
  15 +import java.io.IOException;
  16 +import java.util.List;
18 17  
19 18 /**
20 19 * 驾驶员信息Service接口
... ... @@ -32,6 +31,8 @@ public interface IDriverService
32 31 */
33 32 public Driver selectDriverById(Long id);
34 33  
  34 + Driver selectDriverByJobCode(String jobCode);
  35 +
35 36 /**
36 37 * 查询驾驶员信息列表
37 38 *
... ...
Bsth-admin/src/main/java/com/ruoyi/driver/service/impl/DriverServiceImpl.java
1 1 package com.ruoyi.driver.service.impl;
2 2  
3   -import java.io.File;
4   -import java.io.IOException;
5   -import java.io.InputStream;
6   -import java.nio.file.Paths;
7   -import java.time.LocalDateTime;
8   -import java.time.temporal.ChronoUnit;
9   -import java.util.*;
10   -import java.util.stream.Collectors;
11   -
12 3 import cn.hutool.core.collection.CollectionUtil;
13 4 import cn.hutool.http.HttpUtil;
14 5 import com.github.pagehelper.util.StringUtil;
... ... @@ -25,12 +16,15 @@ import com.ruoyi.common.utils.DateUtils;
25 16 import com.ruoyi.common.utils.file.FileUploadUtils;
26 17 import com.ruoyi.common.utils.file.FileUtils;
27 18 import com.ruoyi.common.utils.file.MimeTypeUtils;
  19 +import com.ruoyi.domain.DriverScheduling;
  20 +import com.ruoyi.domain.EquipmentDriverExpand;
  21 +import com.ruoyi.driver.domain.Driver;
  22 +import com.ruoyi.driver.mapper.DriverMapper;
  23 +import com.ruoyi.driver.service.IDriverService;
28 24 import com.ruoyi.equipment.mapper.EquipmentMapper;
29 25 import com.ruoyi.framework.config.ServerConfig;
30 26 import com.ruoyi.job.DriverJob;
31 27 import com.ruoyi.pojo.DriverSignInRecommendation;
32   -import com.ruoyi.domain.EquipmentDriverExpand;
33   -import com.ruoyi.domain.DriverScheduling;
34 28 import com.ruoyi.pojo.request.DriverRequestVo;
35 29 import com.ruoyi.pojo.request.DriverSignInRequestVo;
36 30 import com.ruoyi.pojo.request.FaceUpdateReqVo;
... ... @@ -52,15 +46,20 @@ import org.slf4j.LoggerFactory;
52 46 import org.springframework.beans.factory.annotation.Autowired;
53 47 import org.springframework.beans.factory.annotation.Value;
54 48 import org.springframework.stereotype.Service;
55   -import com.ruoyi.driver.mapper.DriverMapper;
56   -import com.ruoyi.driver.domain.Driver;
57   -import com.ruoyi.driver.service.IDriverService;
58 49 import org.springframework.web.multipart.MultipartFile;
59 50  
60 51 import javax.annotation.Resource;
61 52 import javax.servlet.ServletOutputStream;
62 53 import javax.servlet.http.HttpServletRequest;
63 54 import javax.servlet.http.HttpServletResponse;
  55 +import java.io.File;
  56 +import java.io.IOException;
  57 +import java.io.InputStream;
  58 +import java.nio.file.Paths;
  59 +import java.time.LocalDateTime;
  60 +import java.time.temporal.ChronoUnit;
  61 +import java.util.*;
  62 +import java.util.stream.Collectors;
64 63  
65 64 import static com.ruoyi.common.ApiProperties.PERSONNEL_API_KEY;
66 65 import static com.ruoyi.common.ConstDriverProperties.*;
... ... @@ -133,6 +132,11 @@ public class DriverServiceImpl implements IDriverService {
133 132 return driverMapper.selectDriverById(id);
134 133 }
135 134  
  135 + @Override
  136 + public Driver selectDriverByJobCode(String jobCode) {
  137 + return driverMapper.selectDriverByJobCode(jobCode);
  138 + }
  139 +
136 140 /**
137 141 * 查询驾驶员信息列表
138 142 *
... ...
Bsth-admin/src/main/java/com/ruoyi/in/domain/SignInV1.java
... ... @@ -128,6 +128,8 @@ public class SignInV1 {
128 128 private String siteName;
129 129 @TableField(exist = false)
130 130 private String address;
  131 + @TableField(exist = false)
  132 + private Integer signStatus;
131 133  
132 134 @Override
133 135 public String toString() {
... ...
Bsth-admin/src/main/java/com/ruoyi/pojo/vo/bigViewVo/FleetState.java
... ... @@ -10,6 +10,7 @@ import lombok.Data;
10 10 public class FleetState {
11 11 private String lineName;
12 12 private Integer state;
  13 + private String fleetName;
13 14  
14 15 @Override
15 16 public String toString() {
... ...
Bsth-admin/src/main/java/com/ruoyi/scheduling/service/SchedulingServiceV1.java
... ... @@ -9,4 +9,6 @@ import java.util.List;
9 9 public interface SchedulingServiceV1 extends IService<DriverSchedulingV1> {
10 10  
11 11 List<DriverSchedulingV1> queryByJobCodeAndSchedulingDate(String jobCode, Date date);
  12 +
  13 + List<DriverSchedulingV1> queryByNbbmAndDate(String nbbm, Date date);
12 14 }
... ...
Bsth-admin/src/main/java/com/ruoyi/scheduling/service/impl/SchedulingServiceV1Impl.java
... ... @@ -20,4 +20,12 @@ public class SchedulingServiceV1Impl extends ServiceImpl&lt;SchedulingMapperV1, Dri
20 20 wrapper.orderByAsc(DriverSchedulingV1::getFcsjT);
21 21 return list(wrapper);
22 22 }
  23 +
  24 + @Override
  25 + public List<DriverSchedulingV1> queryByNbbmAndDate(String nbbm, Date date) {
  26 + LambdaQueryWrapper<DriverSchedulingV1> wrapper = new LambdaQueryWrapper<>();
  27 + wrapper.eq(DriverSchedulingV1::getNbbm, nbbm).eq(DriverSchedulingV1::getScheduleDate, date);
  28 +
  29 + return list(wrapper);
  30 + }
23 31 }
... ...
Bsth-admin/src/main/java/com/ruoyi/service/BigViewServiceV1.java
... ... @@ -11,13 +11,13 @@ import java.util.Date;
11 11  
12 12 public interface BigViewServiceV1 {
13 13  
14   - void asyncRefreshRedisValue(SignIn signIn, Driver driver, DriverScheduling driverScheduling,String dateStr) throws InterruptedException;
  14 + void asyncRefreshRedisValue(SignIn signIn, Driver driver, DriverScheduling driverScheduling,String dateStr, Date date) throws InterruptedException;
15 15  
16 16 AjaxResult queryBigViewQueryLineInfo(Date date);
17 17  
18   - LineInfo.PersonInfoVo refreshRedisDriver(SignIn signIn, Driver driver);
  18 + LineInfo refreshRedisDriver(SignIn signIn, Driver driver, String dateStr, DriverScheduling driverScheduling, Date date);
19 19  
20   - FleetState refreshRedisLine(SignIn signIn, DriverScheduling driverScheduling) throws InterruptedException;
  20 + FleetState refreshRedisLine(SignIn signIn, DriverScheduling driverScheduling, String dateStr) throws InterruptedException;
21 21  
22 22 /***
23 23 * 判断酒测次数
... ... @@ -69,4 +69,14 @@ public interface BigViewServiceV1 {
69 69 * @return boolean
70 70 */
71 71 boolean isSignStatusZoneEnum(SignIn signIn);
  72 + /***
  73 + * 是否是驾驶员
  74 + * @author liujun
  75 + * @date 2024/10/9 13:53
  76 + *
  77 + * @param driver
  78 + * @return boolean
  79 + */
  80 + boolean isDriver(Driver driver);
  81 +
72 82 }
... ...
Bsth-admin/src/main/java/com/ruoyi/service/impl/BigViewServiceV1Impl.java
... ... @@ -4,13 +4,18 @@ import com.alibaba.fastjson2.JSON;
4 4 import com.ruoyi.common.SignStatusEnum;
5 5 import com.ruoyi.common.core.domain.AjaxResult;
6 6 import com.ruoyi.common.core.redis.RedisCache;
  7 +import com.ruoyi.common.utils.DateUtils;
7 8 import com.ruoyi.domain.DriverScheduling;
  9 +import com.ruoyi.domain.DriverSchedulingV1;
8 10 import com.ruoyi.driver.domain.Driver;
  11 +import com.ruoyi.driver.service.IDriverService;
9 12 import com.ruoyi.in.domain.SignIn;
10 13 import com.ruoyi.in.domain.SignInV1;
  14 +import com.ruoyi.in.service.SignInServiceV1;
11 15 import com.ruoyi.pojo.vo.bigViewVo.FleetInfoVo;
12 16 import com.ruoyi.pojo.vo.bigViewVo.FleetState;
13 17 import com.ruoyi.pojo.vo.bigViewVo.LineInfo;
  18 +import com.ruoyi.scheduling.service.SchedulingServiceV1;
14 19 import com.ruoyi.service.BigViewServiceV1;
15 20 import com.ruoyi.template.domain.FleetLineTemplate;
16 21 import com.ruoyi.template.service.IFleetLineTemplateService;
... ... @@ -43,75 +48,105 @@ public class BigViewServiceV1Impl implements BigViewServiceV1 {
43 48 @Autowired
44 49 private IFleetLineTemplateService fleetLineTemplateService;
45 50 @Autowired
  51 + private SchedulingServiceV1 schedulingServiceV1;
  52 + @Autowired
  53 + private IDriverService driverService;
  54 + @Autowired
  55 + private SignInServiceV1 signInServiceV1;
  56 +
  57 + @Autowired
46 58 private RedisCache redisCache;
47 59  
48   - private static final String DRIVER_SIGN_KEY = "sign:driver:{0}:{1}";
49 60  
50   - private static final String LINE_SIGN_KEY = "sign:line:{0}:{1}";
  61 + private static final String LINE_SIGN_NBBM_KEY = "sign:report:nbbm:{0}:{1}";
  62 + private static final String LINE_SIGN_NBBM_LOCK_KEY = "sign:report:lock:nbbm:{0}:{1}";
51 63  
52   - private static final String LOCK_LINE_SIGN_KEY = "sign:lock:{0}:{1}";
  64 + private static final String LINE_SIGN_STATUS_KEY = "sign:report:status:{0}:{1}";
  65 + private static final String LINE_SIGN_STATUS_LOCK_KEY = "sign:report:lock:status:{0}:{1}";
53 66  
54   - private static final String SIGN_REPORT_LIST = "sign:report:list:{0}";
  67 + private static final String LINE_SIGN_REPORT_FLEET_KEY = "sign:report:fleet:{0}";
  68 +
  69 + private static final String BIG_VIEW_LINE_KEY = "big:view:line:{0}";
55 70  
56   - @Override
57   - public void asyncRefreshRedisValue(SignIn signIn, Driver driver, DriverScheduling driverScheduling, String dateStr) throws InterruptedException {
58   - String key = MessageFormat.format(SIGN_REPORT_LIST, dateStr);
59 71  
60   - refreshRedisDriver(signIn, driver);
61   - refreshRedisLine(signIn, driverScheduling);
  72 + @Override
  73 + public void asyncRefreshRedisValue(SignIn signIn, Driver driver, DriverScheduling driverScheduling, String dateStr, Date date) throws InterruptedException {
  74 + refreshRedisDriver(signIn, driver, dateStr, driverScheduling, date);
  75 + refreshRedisLine(signIn, driverScheduling, dateStr);
62 76 }
63 77  
64 78 @Override
65 79 public AjaxResult queryBigViewQueryLineInfo(Date date) {
66   - return null;
  80 + String dateStr = DateUtils.FAST_YYYY_MM_DD.format(date);
  81 + String key = MessageFormat.format(BIG_VIEW_LINE_KEY, dateStr);
  82 +
  83 + List<FleetInfoVo> fleetInfoVos = getFleetInfoVoBtRedis(key);
  84 + if (CollectionUtils.isEmpty(fleetInfoVos)) {
  85 + fleetInfoVos = combationFleetInfoVoBtRedis(key, dateStr);
  86 + }
  87 +
  88 + return AjaxResult.success(fleetInfoVos);
67 89 }
68 90  
69 91  
70 92 @Override
71   - public LineInfo.PersonInfoVo refreshRedisDriver(SignIn signIn, Driver driver) {
72   - LineInfo.PersonInfoVo personInfoVo = new LineInfo.PersonInfoVo();
73   - personInfoVo.setName(driver.getPersonnelName());
  93 + public LineInfo refreshRedisDriver(SignIn signIn, Driver driver, String dateStr, DriverScheduling driverScheduling, Date date) {
  94 + LineInfo.PersonInfoVo personInfoVo = combationPersonInfoVo(driver, signIn);
74 95  
75   - if (isSignStatusZoneEnum(signIn)) {
76   - personInfoVo.setSignStatus(SignStatusEnum.SIGN_STATUS_ZONE_ENUM);
77   - } else if (isSignStatusWineEnum(signIn)) {
78   - personInfoVo.setSignStatus(SignStatusEnum.SIGN_STATUS_WINE_ENUM);
79   - } else if (isSignStatusDelayEnum(signIn)) {
80   - personInfoVo.setSignStatus(SignStatusEnum.SIGN_STATUS_DELAY_ENUM);
81   - }
82   - personInfoVo.setPosts(driver.getPosts());
  96 + LineInfo lineInfo = null;
  97 + String key = MessageFormat.format(LINE_SIGN_NBBM_KEY, dateStr, driverScheduling.getNbbm());
83 98  
84   - String dateStr = ConstDateUtil.formatDate(signIn.getCreateTime());
  99 + for (int i = 0; i < 1000; i++) {
  100 + String lockKey = MessageFormat.format(LINE_SIGN_NBBM_LOCK_KEY, dateStr, driverScheduling.getNbbm());
  101 + if (redisCache.setNx(lockKey, 1, 10L, TimeUnit.SECONDS)) {
85 102  
86   - String key = MessageFormat.format(DRIVER_SIGN_KEY, dateStr, driver.getJobCode());
87   - redisCache.setCacheObject(key, JSON.toJSONString(personInfoVo), 25, TimeUnit.HOURS);
  103 + try {
  104 + lineInfo = getLineInfoByRedis(key);
  105 + if (Objects.isNull(lineInfo)) {
  106 + lineInfo = queryLineInfo(date, signIn, driverScheduling);
  107 + }
88 108  
89   - return personInfoVo;
  109 + if (Objects.isNull(lineInfo)) {
  110 + return null;
  111 + }
  112 +
  113 + setDriverByPost(driver, lineInfo, personInfoVo);
  114 + redisCache.setCacheObject(key, JSON.toJSONString(lineInfo), 25, TimeUnit.HOURS);
  115 + return lineInfo;
  116 + } finally {
  117 + redisCache.deleteObject(lockKey);
  118 + }
  119 +
  120 + }
  121 +
  122 + try {
  123 + log.info("没有获取到redis锁,等待1秒钟后再试");
  124 + Thread.sleep(1000);
  125 + } catch (InterruptedException e) {
  126 + log.error("刷新redis中首页的driver数据异常,[{}],[{}],[{}]", signIn, driver, driverScheduling, e);
  127 + }
  128 + }
  129 + log.info("已1000秒获取锁等待没有获取到锁,已放弃操作,[{}],[{}],[{}]", signIn, driver, driverScheduling);
  130 + return lineInfo;
90 131 }
91 132  
92 133  
93 134 @Override
94   - public FleetState refreshRedisLine(SignIn signIn, DriverScheduling driverScheduling) throws InterruptedException {
95   - String dateStr = ConstDateUtil.formatDate(signIn.getCreateTime());
96   - String key = MessageFormat.format(LINE_SIGN_KEY, dateStr, driverScheduling.getLineName());
97   - FleetState source = redisCache.getCacheObject(key);
  135 + public FleetState refreshRedisLine(SignIn signIn, DriverScheduling driverScheduling, String dateStr) throws InterruptedException {
98 136  
99 137 FleetState fleetState = new FleetState();
100 138 fleetState.setLineName(driverScheduling.getLineName());
  139 + fleetState.setState(switchSignStatus(signIn));
  140 + fleetState.setFleetName(driverScheduling.getFleetName());
101 141  
102   - if (isSignStatusWineEnum(signIn)) {
103   - fleetState.setState(SignStatusEnum.SIGN_STATUS_WINE_ENUM.getStatus());
104   - } else if (isSignStatusDelayEnum(signIn)) {
105   - fleetState.setState(SignStatusEnum.SIGN_STATUS_DELAY_ENUM.getStatus());
106   - } else {
107   - fleetState.setState(SignStatusEnum.SIGN_STATUS_ZONE_ENUM.getStatus());
108   - }
  142 + String key = MessageFormat.format(LINE_SIGN_STATUS_KEY, dateStr, driverScheduling.getLineName());
  143 + FleetState source = redisCache.getCacheObject(key);
109 144  
110 145 if (Objects.isNull(source) || Objects.isNull(source.getState()) || (fleetState.getState() > source.getState())) {
111 146 boolean flag = true;
112   - String lockKey = MessageFormat.format(LOCK_LINE_SIGN_KEY, dateStr, driverScheduling.getLineName());
  147 + String lockKey = MessageFormat.format(LINE_SIGN_STATUS_LOCK_KEY, dateStr, driverScheduling.getLineName());
113 148 for (int i = 0; i < 10000; i++) {
114   - if (redisCache.setNx(lockKey, fleetState, 10L, TimeUnit.SECONDS)) {
  149 + if (redisCache.setNx(lockKey, 1, 10L, TimeUnit.SECONDS)) {
115 150 try {
116 151 redisCache.setCacheObject(key, JSON.toJSONString(fleetState), 25, TimeUnit.HOURS);
117 152 } finally {
... ... @@ -160,42 +195,43 @@ public class BigViewServiceV1Impl implements BigViewServiceV1 {
160 195  
161 196 @Override
162 197 public boolean isSignStatusWineEnum(SignIn signIn) {
163   - return Objects.equals(3, signIn.getExType()) || Objects.equals(23, signIn.getExType()) || Objects.equals(33, signIn.getExType());
  198 + return Objects.nonNull(signIn) && (Objects.equals(3, signIn.getExType()) || Objects.equals(23, signIn.getExType()) || Objects.equals(33, signIn.getExType()));
164 199 }
165 200  
166 201  
167 202 @Override
168 203 public boolean isSignStatusDelayEnum(SignIn signIn) {
169   - return Objects.nonNull(signIn.getExType()) && signIn.getExType() >= 30 && signIn.getExType() < 40;
  204 + return Objects.nonNull(signIn) && Objects.nonNull(signIn.getExType()) && signIn.getExType() >= 30 && signIn.getExType() < 40;
170 205 }
171 206  
172 207 @Override
173 208 public boolean isSignStatusZoneEnum(SignIn signIn) {
174   - return Objects.equals(0, signIn.getExType());
  209 + return Objects.nonNull(signIn) && Objects.equals(0, signIn.getExType());
  210 + }
  211 +
  212 + @Override
  213 + public boolean isDriver(Driver driver) {
  214 + return Objects.nonNull(driver) && StringUtils.isNotEmpty(driver.getPosts()) && StringUtils.indexOf(driver.getPosts(), "驾驶员") > -1;
175 215 }
176 216  
177   - private boolean chooseRedisData(String key, SignIn signIn, Driver driver, DriverScheduling driverScheduling) {
  217 +
  218 + private List<FleetInfoVo> getFleetInfoVoOfRedis(String key) {
178 219 try {
179 220 String jsonStr = redisCache.getCacheObject(key);
180 221 if (StringUtils.isEmpty(jsonStr)) {
181   - log.info("redis中没有当天的数据[{}],[{}],[{}],[{}]", key, signIn, driver, driverScheduling);
182   - return false;
183   - }
184 222  
185   - List<FleetInfoVo> fleetInfoVos = JSON.parseArray(jsonStr, FleetInfoVo.class);
186   - if (CollectionUtils.isEmpty(fleetInfoVos)) {
187   - log.info("redis中的数据为空[{}],[{}],[{}],[{}]", key, signIn, driver, driverScheduling);
188   - return false;
  223 + log.info("redis中没有当天的数据[{}]", key);
  224 + return Collections.emptyList();
189 225 }
190   -
191   -
  226 + return JSON.parseArray(jsonStr, FleetInfoVo.class);
192 227 } catch (Exception e) {
193   - log.error("刷新签到数据异常[{}],[{}],[{}],[{}]", key, signIn, driver, driverScheduling, e);
  228 + log.error("从redis中获取数据异常,[{}]", key, e);
194 229 }
195   - return false;
  230 + return null;
196 231 }
197 232  
198   - private List<FleetInfoVo> saveFleetLineTemp() {
  233 + private List<FleetInfoVo> combationFleetInfoVo(String redisKey) {
  234 +
199 235 List<FleetLineTemplate> fleetLineTemplates = fleetLineTemplateService.selectFleetLineTemplateList();
200 236 if (CollectionUtils.isEmpty(fleetLineTemplates)) {
201 237 return null;
... ... @@ -212,7 +248,7 @@ public class BigViewServiceV1Impl implements BigViewServiceV1 {
212 248 if (CollectionUtils.isNotEmpty(vals)) {
213 249 List<FleetInfoVo.FleetInfo> fleetInfoVoFleetInfos = new ArrayList<>();
214 250 List<FleetState> fleetStates = new ArrayList<>();
215   - vals.stream().forEach(fl -> {
  251 + vals.forEach(fl -> {
216 252 FleetInfoVo.FleetInfo fleetInfo = new FleetInfoVo.FleetInfo();
217 253 fleetInfo.setLineName(fl.getLineName());
218 254 fleetInfoVoFleetInfos.add(fleetInfo);
... ... @@ -229,6 +265,189 @@ public class BigViewServiceV1Impl implements BigViewServiceV1 {
229 265 fleetInfoVos.add(fleetInfoVo);
230 266 });
231 267  
  268 + redisCache.setCacheObject(redisKey, JSON.toJSONString(fleetInfoVos), 25, TimeUnit.HOURS);
  269 + return fleetInfoVos;
  270 + }
  271 +
  272 + private LineInfo getLineInfoByRedis(String key) {
  273 + try {
  274 + String jsonStr = redisCache.getCacheObject(key);
  275 + if (StringUtils.isEmpty(jsonStr)) {
  276 + return null;
  277 + }
  278 + return JSON.parseObject(jsonStr, LineInfo.class);
  279 + } catch (Exception e) {
  280 + log.error("从redis中获取LineInfo 异常:[{}]", key, e);
  281 + }
  282 + return null;
  283 + }
  284 +
  285 + private LineInfo queryLineInfo(Date date, SignIn signIn, DriverScheduling driverScheduling) {
  286 + List<DriverSchedulingV1> driverSchedulingV1List = schedulingServiceV1.queryByNbbmAndDate(driverScheduling.getNbbm(), date);
  287 + if (CollectionUtils.isEmpty(driverSchedulingV1List)) {
  288 + return null;
  289 + }
  290 +
  291 + LineInfo lineInfo = new LineInfo();
  292 + lineInfo.setLineName(driverScheduling.getLineName());
  293 + lineInfo.setFleetName(driverScheduling.getFleetName());
  294 + lineInfo.setNbbm(driverScheduling.getNbbm());
  295 +
  296 + List<DriverSchedulingV1> otherDriverSchedulingV1List = driverSchedulingV1List.stream().filter(dc -> !Objects.equals(dc.getJobCode(), signIn.getJobCode())
  297 + && Objects.nonNull(dc.getSignInId())).collect(Collectors.toList());
  298 + if (CollectionUtils.isEmpty(otherDriverSchedulingV1List)) {
  299 + return lineInfo;
  300 + }
  301 +
  302 + Map<String, List<DriverScheduling>> maps = otherDriverSchedulingV1List.stream().collect(Collectors.groupingBy(DriverSchedulingV1::getJobCode, Collectors.toList()));
  303 +
  304 + for (Map.Entry<String, List<DriverScheduling>> entry : maps.entrySet()) {
  305 + if (Objects.isNull(entry.getValue())) {
  306 + continue;
  307 + }
  308 + Driver otherDriver = driverService.selectDriverByJobCode(entry.getKey());
  309 + if (Objects.isNull(otherDriver)) {
  310 + continue;
  311 + }
  312 + SignInV1 otherSign = null;
  313 + SignIn otherTagetSign = null;
  314 +
  315 + for (DriverScheduling sourceDriverScheduling : entry.getValue()) {
  316 + SignInV1 otherSign1 = signInServiceV1.getById(sourceDriverScheduling.getSignInId());
  317 + if (Objects.isNull(otherSign1)) {
  318 + continue;
  319 + }
  320 + SignIn signIn1 = new SignIn();
  321 + BeanUtils.copyProperties(otherSign1, signIn1);
  322 + otherSign1.setSignStatus(switchSignStatus(signIn1));
  323 +
  324 + if (Objects.isNull(otherSign)) {
  325 + otherSign = otherSign1;
  326 + otherTagetSign = signIn1;
  327 + } else if (Objects.nonNull(otherSign.getExType()) && Objects.nonNull(otherSign1.getExType()) && Objects.nonNull(otherSign1.getSignStatus()) && Objects.nonNull(otherSign.getSignStatus())
  328 + && otherSign1.getSignStatus() > otherSign.getSignStatus()) {
  329 + otherSign = otherSign1;
  330 + otherTagetSign = signIn1;
  331 + } else if (Objects.nonNull(otherSign.getExType()) && Objects.nonNull(otherSign1.getExType()) && Objects.nonNull(otherSign1.getSignStatus()) && Objects.isNull(otherSign.getSignStatus())) {
  332 + otherSign = otherSign1;
  333 + otherTagetSign = signIn1;
  334 + }
  335 + }
  336 +
  337 +
  338 + LineInfo.PersonInfoVo personInfoVo = combationPersonInfoVo(otherDriver, otherTagetSign);
  339 + setDriverByPost(otherDriver, lineInfo, personInfoVo);
  340 + }
  341 +
  342 + return lineInfo;
  343 + }
  344 +
  345 + private LineInfo.PersonInfoVo combationPersonInfoVo(Driver driver, SignIn signIn) {
  346 + LineInfo.PersonInfoVo personInfoVo = new LineInfo.PersonInfoVo();
  347 + personInfoVo.setName(driver.getPersonnelName());
  348 +
  349 + personInfoVo.setSignStatus(switchSignStatus(signIn));
  350 + personInfoVo.setPosts(driver.getPosts());
  351 +
  352 + return personInfoVo;
  353 + }
  354 +
  355 + private Integer switchSignStatus(SignIn signIn) {
  356 + if (Objects.isNull(signIn.getExType())) {
  357 + return null;
  358 + }
  359 + if (isSignStatusWineEnum(signIn)) {
  360 + return SignStatusEnum.SIGN_STATUS_WINE_ENUM.getStatus();
  361 + }
  362 +
  363 + if (isSignStatusDelayEnum(signIn)) {
  364 + return SignStatusEnum.SIGN_STATUS_DELAY_ENUM.getStatus();
  365 + }
  366 +
  367 + if (isSignStatusZoneEnum(signIn)) {
  368 + return SignStatusEnum.SIGN_STATUS_ZONE_ENUM.getStatus();
  369 + }
  370 + return SignStatusEnum.SIGN_STATUS_EMPTY_ENUM.getStatus();
  371 +
  372 + }
  373 +
  374 + private void setDriverByPost(Driver driver, LineInfo lineInfo, LineInfo.PersonInfoVo personInfoVo) {
  375 + if (isDriver(driver)) {
  376 + lineInfo.setDriverInfoVo(personInfoVo);
  377 + } else {
  378 + lineInfo.setDriverInfoVo(personInfoVo);
  379 + }
  380 + }
  381 +
  382 + private <T> List<T> getRedisData(String key, String dateStr, Class<T> calzz) {
  383 + key = MessageFormat.format(key, dateStr, "*");
  384 + List<String> jsonStrs = redisCache.getCacheList(key);
  385 + if (CollectionUtils.isEmpty(jsonStrs)) {
  386 + return Collections.emptyList();
  387 + }
  388 + return jsonStrs.stream().map(json -> {
  389 + T t = JSON.parseObject(json, calzz);
  390 + return t;
  391 + }).collect(Collectors.toList());
  392 + }
  393 +
  394 + private List<FleetInfoVo> getFleetInfoVoBtRedis(String key) {
  395 + try {
  396 + String json = redisCache.getCacheObject(key);
  397 + if (StringUtils.isEmpty(json)) {
  398 + return Collections.emptyList();
  399 + }
  400 + return JSON.parseArray(json, FleetInfoVo.class);
  401 + } catch (Exception e) {
  402 + log.error("[{}]从redis中获取页面数据异常", key, e);
  403 + }
  404 + return Collections.emptyList();
  405 + }
  406 +
  407 + private List<FleetInfoVo> combationFleetInfoVoBtRedis(String redisKey, String dateStr) {
  408 +
  409 + String key = MessageFormat.format(LINE_SIGN_REPORT_FLEET_KEY, dateStr);
  410 + List<FleetInfoVo> fleetInfoVos = getFleetInfoVoOfRedis(key);
  411 + if (CollectionUtils.isEmpty(fleetInfoVos)) {
  412 + fleetInfoVos = combationFleetInfoVo(key);
  413 + }
  414 +
  415 + if (CollectionUtils.isEmpty(fleetInfoVos)) {
  416 + return Collections.emptyList();
  417 + }
  418 + List<LineInfo> lineInfoList = getRedisData(LINE_SIGN_NBBM_KEY, dateStr, LineInfo.class);
  419 + List<FleetState> fleetStates = getRedisData(LINE_SIGN_STATUS_KEY, dateStr, FleetState.class);
  420 +
  421 + int lineInfoListSize = CollectionUtils.size(lineInfoList);
  422 + int fleetStatesSize = CollectionUtils.size(fleetStates);
  423 +
  424 + fleetInfoVos = fleetInfoVos.stream().map(fv -> {
  425 + if (lineInfoListSize > 0) {
  426 + if (CollectionUtils.isNotEmpty(fv.getFleetInfos())) {
  427 + List<FleetInfoVo.FleetInfo> fleetInfos = fv.getFleetInfos().stream().map(fi -> {
  428 + List<LineInfo> lineInfos = lineInfoList.stream().filter(l -> Objects.equals(fv.getTitle(), l.getFleetName()) &&
  429 + Objects.equals(fi.getLineName(), l.getLineName())).collect(Collectors.toList());
  430 + if (CollectionUtils.isNotEmpty(lineInfos)) {
  431 + fi.setLineInfos(lineInfos);
  432 + }
  433 + return fi;
  434 + }).collect(Collectors.toList());
  435 +
  436 + fv.setFleetInfos(fleetInfos);
  437 + }
  438 + }
  439 +
  440 + if (fleetStatesSize > 0) {
  441 + List<FleetState> fss = fleetStates.stream().filter(fs -> Objects.equals(fs.getFleetName(), fv.getTitle())).collect(Collectors.toList());
  442 + if (CollectionUtils.isNotEmpty(fss)) {
  443 + fv.setFleetStates(fss);
  444 + }
  445 + }
  446 + return fv;
  447 + }).collect(Collectors.toList());
  448 +
  449 + redisCache.setCacheObject(redisKey, JSON.toJSONString(fleetInfoVos), 10, TimeUnit.SECONDS);
232 450 return fleetInfoVos;
233 451 }
  452 +
234 453 }
... ...
Bsth-admin/src/main/resources/mapper/driver/DriverMapper.xml
... ... @@ -120,6 +120,11 @@
120 120 <include refid="selectDriverVo"/>
121 121 where id = #{id}
122 122 </select>
  123 +
  124 + <select id="selectDriverByJobCode" parameterType="java.lang.String" resultMap="DriverResult">
  125 + <include refid="selectDriverVo"/>
  126 + where job_code = #{jobCode}
  127 + </select>
123 128 <select id="getNameByJobCode" resultMap="DriverResult">
124 129 select personnel_name,job_code
125 130 from driver
... ...