AppSignExceptionController.java
6.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package com.ruoyi.controller.app;
import cn.hutool.core.convert.Convert;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.ResponseResult;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.domain.driver.NewDriver;
import com.ruoyi.domain.dss.sign.exception.dto.SignExceptionDTO;
import com.ruoyi.domain.dss.sign.exception.vo.SignExceptionVo;
import com.ruoyi.domain.scheduling.LinggangScheduling;
import com.ruoyi.domain.sign.in.exception.report.EquipmentExceptionReport;
import com.ruoyi.in.domain.SignIn;
import com.ruoyi.in.service.ISignInService;
import com.ruoyi.service.driver.NewDriverService;
import com.ruoyi.service.scheduling.LinggangSchedulingService;
import com.ruoyi.service.sign.in.exception.report.EquipmentExceptionReportService;
import com.ruoyi.system.service.ISysDictDataService;
import com.ruoyi.utils.DateUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author liujun
* @date 2024年08月20日 10:44
*/
@Slf4j
@RestController
@RequestMapping("/app")
@Api(tags = "【App对接】打卡异常")
public class AppSignExceptionController extends BaseController {
@Autowired
private NewDriverService driverService;
@Autowired
private LinggangSchedulingService schedulingService;
@Autowired
private EquipmentExceptionReportService equipmentExceptionReportService;
@Autowired
private ISignInService signInService;
@Autowired
private ISysDictDataService dictDataService;
@ApiOperation("酒测签到异常")
@PostMapping("/sign/exception/list")
public ResponseResult<List<SignExceptionVo>> list(@RequestBody SignExceptionDTO dto) {
SignIn signIn = new SignIn();
if (Objects.nonNull(dto.getSignTime())) {
signIn.setStartCreateTime(DateUtil.shortDate(dto.getSignTime()));
signIn.setEndCreateTime(DateUtils.addDays(signIn.getStartCreateTime(), 1));
} else {
signIn.setEndCreateTime(DateUtil.shortDate(DateUtils.addDays(new Date(),1)));
signIn.setStartCreateTime(DateUtils.addMonths(signIn.getEndCreateTime(), -2));
}
List<SignIn> signIns = signInService.list(signIn);
if (CollectionUtils.isEmpty(signIns)) {
log.info("signIns is null");
return ResponseResult.success();
}
long drunkenness = queryDrunkenness();
BigDecimal decimal = new BigDecimal(drunkenness);
signIns = signIns.stream().filter(s -> Objects.nonNull(s.getAlcoholIntake()) && s.getAlcoholIntake().compareTo(decimal) >= 0).collect(Collectors.toList());
if (CollectionUtils.isEmpty(signIns)) {
log.info("signIns filter after is null");
return ResponseResult.success();
}
Set<Long> signInIds = signIns.stream().map(SignIn::getId).collect(Collectors.toSet());
if (CollectionUtils.isEmpty(signInIds)) {
log.info("signInIds is null");
return ResponseResult.success();
}
Set<Long> schedulingIds = signIns.stream().map(SignIn::getSchedulingId).collect(Collectors.toSet());
List<LinggangScheduling> schedulings = schedulingService.list(null, schedulingIds);
EquipmentExceptionReport report = new EquipmentExceptionReport();
report.setSignIds(signInIds);
report.setFleetName(dto.getFleetName());
report.setLineName(dto.getLineName());
List<EquipmentExceptionReport> reportList = equipmentExceptionReportService.list(report);
if (CollectionUtils.isEmpty(reportList)) {
log.info("reportList is null");
return ResponseResult.success();
}
Set<String> jobCodes = reportList.stream().map(EquipmentExceptionReport::getJobCode).collect(Collectors.toSet());
List<NewDriver> drivers = driverService.list(jobCodes);
List<SignExceptionVo> vos = convertSignExceptionVo(reportList,drivers,signIns,schedulings);
return ResponseResult.success(vos);
}
private long queryDrunkenness() {
SysDictData dictData = new SysDictData();
dictData.setDictType("drunkenness");
dictData.setDiscKey("drunkenness_key");
SysDictData sourceDic = dictDataService.getOne(dictData);
return Objects.isNull(sourceDic) || Objects.isNull(sourceDic.getDictValue()) ? 28L : Convert.toLong(sourceDic.getDictValue());
}
private List<SignExceptionVo> convertSignExceptionVo(List<EquipmentExceptionReport> reportList, List<NewDriver> drivers, List<SignIn> signIns, List<LinggangScheduling> schedulings) {
int driverSize = CollectionUtils.size(drivers);
int schedulingSize = CollectionUtils.size(schedulings);
return reportList.stream().map(r -> {
SignExceptionVo vo = new SignExceptionVo();
vo.setFleetName(r.getFleetName());
vo.setLineName(r.getLineName());
Optional<SignIn> optSign = signIns.stream().filter(s -> Objects.equals(s.getId(), r.getSignId())).findFirst();
if (optSign.isPresent()) {
vo.setSignTime(optSign.get().getCreateTime());
vo.setSignStatus(optSign.get().getStatus());
vo.setAlcoholIntake(optSign.get().getAlcoholIntake());
if (schedulingSize > 0) {
Optional<LinggangScheduling> scheOpt = schedulings.stream().filter(s -> Objects.equals(s.getId(), optSign.get().getSchedulingId())).findFirst();
if (scheOpt.isPresent()) {
vo.setNbbm(scheOpt.get().getNbbm());
}
}
}
if (driverSize > 0) {
Optional<NewDriver> driverOpt = drivers.stream().filter(d -> Objects.equals(r.getJobCode(), d.getJobCode())).findFirst();
if (driverOpt.isPresent()) {
vo.setJobCode(driverOpt.get().getJobCode());
vo.setPersonnelName(driverOpt.get().getPersonnelName());
}
}
return vo;
}).collect(Collectors.toList());
}
}