NowSchedulingCache.java
6.5 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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
package com.ruoyi.common.cache;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.map.MapUtil;
import com.ruoyi.common.utils.StringUtils;
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 lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
@Component
public class NowSchedulingCache {
private final DriverSchedulingMapper schedulingMapper;
static 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("yyyy-MM-dd", 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.replaceAll("-", ""), resultMap);
}
}
/***
*
* 刷新打卡缓本地存信息
* @author liujun
* @date 2024/6/12 10:37
* @param driverScheduling
* @param date
* @return int 0 为刷新成功、1为传入对象值为空或工号为空或传入的DriverScheduling的ID为空
*/
public int refreshDriveScheDulingCacheByDateAndJobCode(DriverScheduling driverScheduling, Date date) {
if (Objects.isNull(driverScheduling) || Objects.isNull(date) || StringUtils.isEmpty(driverScheduling.getJobCode())
|| Objects.isNull(driverScheduling.getId())) {
log.warn("刷新本地打卡缓存信息失败,传入的对象为空。传入的时间:{},传入的数据对象:{}", date, driverScheduling);
return 1;
}
String dateStr = ConstDateUtil.FAST_YYYY_MM_DD.format(date);
Map<String, List<DriverScheduling>> resultMap = cacheNowDayScheduling.get(dateStr);
if (MapUtil.isEmpty(resultMap)) {
return 0;
}
List<DriverScheduling> driverSchedulings = resultMap.get(driverScheduling.getJobCode());
int size = CollectionUtils.size(driverSchedulings);
if (0 == size) {
return 0;
}
for (int i = 0; i < size; i++) {
DriverScheduling scheduling = driverSchedulings.get(i);
if (Objects.nonNull(scheduling) && Objects.equals(scheduling.getId(), driverScheduling.getId())) {
driverSchedulings.set(i, driverScheduling);
break;
}
}
return 0;
}
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 remark
* @param key
* @param index
* @param signIn
*/
public void updateCacheByJobCode(String remark, 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(remark);
scheduling.setExType(signIn.getExType());
scheduling.setSignTime(signIn.getCreateTime());
scheduling.setSignType(signIn.getType());
scheduling.setAlcoholFlag(signIn.getAlcoholFlag());
scheduling.setAlcoholIntake(signIn.getAlcoholIntake());
}
}
}