NowSchedulingCache.java
4.6 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
package com.ruoyi.common.cache;
import cn.hutool.core.collection.CollectionUtil;
import com.ruoyi.driver.mapper.DriverSchedulingMapper;
import com.ruoyi.errorScheduling.domain.ErrorJobcode;
import com.ruoyi.errorScheduling.service.IErrorJobcodeService;
import com.ruoyi.in.domain.SignIn;
import com.ruoyi.domain.DriverScheduling;
import com.ruoyi.service.ThreadJobService;
import com.ruoyi.utils.ConstDateUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
@Component
public class NowSchedulingCache {
private final DriverSchedulingMapper schedulingMapper;
Logger log = LoggerFactory.getLogger(SchedulingCache.class);
/**
* 当天初版排班
*/
private static ConcurrentHashMap<String, Map<String, List<DriverScheduling>>> cacheNowDayScheduling = new ConcurrentHashMap<>();
private IErrorJobcodeService errorJobcodeService;
public NowSchedulingCache(DriverSchedulingMapper driverSchedulingMapper,IErrorJobcodeService errorJobcodeService) {
this.schedulingMapper = driverSchedulingMapper;
this.errorJobcodeService = errorJobcodeService;
log.info("项目启动加载中获取排班表-----");
cacheNowDaySchedulingInit();
}
private void cacheNowDaySchedulingInit() {
// 查询今天和昨天
for (int i = 0; i > -2; i--) {
Map<String, List<DriverScheduling>> resultMap = new HashMap<>(800);
String date = ConstDateUtil.formatDate(ConstDateUtil.getTheSpecifiedNumberOfDaysOfTime(i));
List<DriverScheduling> schedulingList = schedulingMapper.queryToDay(date, null, null, null);
handlerResultMap(resultMap, schedulingList);
// 获取错误排班
List<ErrorJobcode> errorScheduling = ThreadJobService.getErrorScheduling(resultMap);
// 插入错误排班
errorJobcodeService.insertBatchErrorJobcode(errorScheduling);
// 更新缓存
cacheNowDayScheduling.put(date, resultMap);
}
}
public static void handlerResultMap(Map<String, List<DriverScheduling>> resultMap, List<DriverScheduling> schedulingList) {
for (DriverScheduling scheduling : schedulingList) {
List<DriverScheduling> list = resultMap.get(scheduling.getJobCode());
if (CollectionUtil.isEmpty(list)) {
resultMap.put(scheduling.getJobCode(), new ArrayList<>(Arrays.asList(scheduling)));
} else {
list.add(scheduling);
}
}
}
public void setCacheScheduling(String key, Map<String, List<DriverScheduling>> mapValue) {
cacheNowDayScheduling.put(key, mapValue);
}
public Map<String, List<DriverScheduling>> getCacheScheduling(String key) {
return cacheNowDayScheduling.get(key);
}
public void removeCacheSchedulingByKey(String key) {
cacheNowDayScheduling.remove(key);
}
public List<String> getKeys() {
return new ArrayList<>(cacheNowDayScheduling.keySet());
}
public Integer size() {
return cacheNowDayScheduling.size();
}
public List<DriverScheduling> getCacheSchedulingMapValueByHKey(String key, String HKey) {
if (Objects.isNull(cacheNowDayScheduling.get(key))) {
return null;
}
List<DriverScheduling> list = cacheNowDayScheduling.get(key).get(HKey);
return Objects.isNull(list) ? null : list;
}
public List<String> getHKeysByKey(String key) {
return new ArrayList<>(cacheNowDayScheduling.get(key).keySet());
}
public List<String> getKes() {
return new ArrayList<>(cacheNowDayScheduling.keySet());
}
/**
* 更新缓存
* @param key
* @param index
* @param signIn
*/
public void updateCacheByJobCode(String key, Integer index, SignIn signIn) {
if (key.equals(ConstDateUtil.formatDate(ConstDateUtil.getTheSpecifiedNumberOfDaysOfTime(0)))
|| key.equals(ConstDateUtil.formatDate(ConstDateUtil.getTheSpecifiedNumberOfDaysOfTime(-1)))){
DriverScheduling scheduling = cacheNowDayScheduling.get(key).get(signIn.getJobCode()).get(index);
scheduling.setSignInId(signIn.getId());
scheduling.setRemark(signIn.getRemark());
scheduling.setExType(signIn.getExType());
scheduling.setSignTime(signIn.getCreateTime());
scheduling.setSignType(signIn.getType());
scheduling.setAlcoholFlag(signIn.getAlcoholFlag());
scheduling.setAlcoholIntake(signIn.getAlcoholIntake());
}
}
}