Commit e603dc0af1014a9a10ef8633df6622ad7e35e6de

Authored by liujun001
1 parent 71818d8d

新 的打卡日志

Bsth-admin/src/main/java/com/ruoyi/common/cache/NowSchedulingCache.java
... ... @@ -68,7 +68,7 @@ public class NowSchedulingCache {
68 68 * @param date
69 69 * @return int 0 为刷新成功、1为传入对象值为空或工号为空或传入的DriverScheduling的ID为空
70 70 */
71   - public int refreshDriveScheDulingCacheByDateAndJobCode(DriverScheduling driverScheduling, Date date) {
  71 + public int refreshDriveScheDulingCacheByDateAndJobCode(DriverScheduling driverScheduling, Date date) {
72 72 if (Objects.isNull(driverScheduling) || Objects.isNull(date) || StringUtils.isEmpty(driverScheduling.getJobCode())
73 73 || Objects.isNull(driverScheduling.getId())) {
74 74 log.warn("刷新本地打卡缓存信息失败,传入的对象为空。传入的时间:{},传入的数据对象:{}", date, driverScheduling);
... ... @@ -154,33 +154,36 @@ public class NowSchedulingCache {
154 154 * @param index
155 155 * @param signIn
156 156 */
157   - public void updateCacheByJobCode(String remark, String key, Integer index, SignIn signIn,boolean isNew,DriverScheduling sourceScheduling) {
158   - if(isNew && Objects.nonNull(sourceScheduling)){
159   - if(Objects.isNull(cacheNowDayScheduling.get(key))){
  157 + public void updateCacheByJobCode(String remark, String key, Integer index, SignIn signIn, boolean isNew, DriverScheduling sourceScheduling) {
  158 + if (isNew && Objects.nonNull(sourceScheduling)) {
  159 + if (Objects.isNull(cacheNowDayScheduling.get(key))) {
160 160 return;
161 161 }
162 162  
163 163 int size = CollectionUtils.size(cacheNowDayScheduling.get(key).get(signIn.getJobCode()));
164 164 for (int i = 0; i < size; i++) {
165   - if(Objects.equals(cacheNowDayScheduling.get(key).get(signIn.getJobCode()).get(i).getId(),sourceScheduling.getId())){
  165 + if (Objects.equals(cacheNowDayScheduling.get(key).get(signIn.getJobCode()).get(i).getId(), sourceScheduling.getId())) {
166 166 index = i;
167 167 break;
168 168 }
169 169 }
170   -
171   -
172   -
173   -
174 170 }
175 171 if (key.equals(ConstDateUtil.formatDate(ConstDateUtil.getTheSpecifiedNumberOfDaysOfTime(0)))
176 172 || key.equals(ConstDateUtil.formatDate(ConstDateUtil.getTheSpecifiedNumberOfDaysOfTime(-1)))) {
  173 + if (Objects.isNull(cacheNowDayScheduling.get(key)) || Objects.isNull(cacheNowDayScheduling.get(key).get(signIn.getJobCode()))) {
  174 + return;
  175 + }
  176 + int size = CollectionUtils.size(cacheNowDayScheduling.get(key).get(signIn.getJobCode()));
  177 + if (size <= index) {
  178 + return;
  179 + }
177 180 DriverScheduling scheduling = cacheNowDayScheduling.get(key).get(signIn.getJobCode()).get(index);
178 181 scheduling.setSignInId(signIn.getId());
179 182 scheduling.setRemark(remark);
180 183  
181 184 Integer exType = signIn.getExType();
182   - if(isNew){
183   - exType = bigViewServiceV1.isSignStatusWineEnum(signIn)?3:bigViewServiceV1.isSignStatusDelayEnum(signIn)?1:Objects.equals(2,signIn.getExType())?2:0;
  185 + if (isNew) {
  186 + exType = bigViewServiceV1.isSignStatusWineEnum(signIn) ? 3 : bigViewServiceV1.isSignStatusDelayEnum(signIn) ? 1 : Objects.equals(2, signIn.getExType()) ? 2 : 0;
184 187 }
185 188 scheduling.setExType(exType);
186 189 scheduling.setSignTime(signIn.getCreateTime());
... ... @@ -189,7 +192,7 @@ public class NowSchedulingCache {
189 192 scheduling.setAlcoholIntake(signIn.getAlcoholIntake());
190 193  
191 194  
192   - cacheNowDayScheduling.get(key).get(signIn.getJobCode()).set(index,scheduling);
  195 + cacheNowDayScheduling.get(key).get(signIn.getJobCode()).set(index, scheduling);
193 196 }
194 197 }
195 198  
... ...
Bsth-admin/src/main/java/com/ruoyi/common/cache/SchedulingCache.java
... ... @@ -36,7 +36,7 @@ public class SchedulingCache {
36 36  
37 37 public SchedulingCache(SchedulerProperty property) {
38 38 log.info("项目启动加载中获取实时班次并存入缓存-----");
39   - schedulingInit(property);
  39 +// schedulingInit(property);
40 40 }
41 41  
42 42  
... ...
Bsth-admin/src/main/java/com/ruoyi/in/controller/SignInController.java
... ... @@ -7,18 +7,15 @@ import com.ruoyi.common.core.page.TableDataInfo;
7 7 import com.ruoyi.common.core.redis.RedisCache;
8 8 import com.ruoyi.common.enums.BusinessType;
9 9 import com.ruoyi.common.exception.file.FileUploadException;
10   -import com.ruoyi.common.utils.StringUtils;
11 10 import com.ruoyi.common.utils.poi.ExcelUtil;
12 11 import com.ruoyi.in.domain.SignIn;
13 12 import com.ruoyi.in.service.ISignInService;
14 13 import com.ruoyi.in.service.SignInServiceV1;
15 14 import com.ruoyi.pojo.response.SignInResponseVo;
16   -import com.ruoyi.utils.ConstDateUtil;
17 15 import io.swagger.annotations.Api;
18 16 import io.swagger.annotations.ApiOperation;
19 17 import io.swagger.annotations.ApiParam;
20 18 import lombok.extern.slf4j.Slf4j;
21   -import org.apache.commons.lang3.RandomUtils;
22 19 import org.springframework.beans.factory.annotation.Autowired;
23 20 import org.springframework.validation.annotation.Validated;
24 21 import org.springframework.web.bind.annotation.*;
... ... @@ -26,13 +23,7 @@ import org.springframework.web.bind.annotation.*;
26 23 import javax.servlet.http.HttpServletRequest;
27 24 import javax.servlet.http.HttpServletResponse;
28 25 import java.io.IOException;
29   -import java.text.MessageFormat;
30   -import java.util.Date;
31 26 import java.util.List;
32   -import java.util.Objects;
33   -import java.util.concurrent.TimeUnit;
34   -
35   -import static com.ruoyi.common.redispre.GlobalRedisPreName.REDIS_SIGN_IN_DRIVER_ALCOHOL_OVERFLOW;
36 27  
37 28 /**
38 29 * 签到Controller
... ... @@ -110,36 +101,37 @@ public class SignInController extends BaseController {
110 101 @PostMapping("/newAdd")
111 102 @ApiOperation("新增签到(设备传入)")
112 103 public AjaxResult addSignIn(@ApiParam @RequestBody @Validated SignIn signIn) throws FileUploadException, IOException {
113   - String key = MessageFormat.format("sign:assignment:{0}", signIn.getJobCode());
114   - if (redisCache.hasKey(key)) {
115   - log.info(" sing method old sign :[{}]", signIn);
116   - return signInService.addSignIn(signIn);
117   - }
118   -
119   - Integer num = RandomUtils.nextInt(0, 10);
120   - if (num < 6) {
121   - redisCache.setCacheObject(key, num, 5, TimeUnit.MINUTES);
122   - log.info("[{}] sing method 走新的签到方式 :[{}] ", num, signIn);
123   - key = StringUtils.join(REDIS_SIGN_IN_DRIVER_ALCOHOL_OVERFLOW, ConstDateUtil.FAST_YYYY_MM_DD.format(new Date()), ":", signIn.getJobCode());
124   - Integer count = redisCache.getCacheObject(key);
125   - try {
126   - return signInServiceV1.addsignInV1(signIn);
127   - } catch (Exception e) {
128   - if (Objects.isNull(count) || count < 1) {
129   - count = 0;
130   - } else {
131   - count = count - 1;
132   - }
133   - if (redisCache.hasKey(key)) {
134   - redisCache.setCacheObject(key, count, 1, TimeUnit.DAYS);
135   - }
136   - log.error("[{}] sing method 走新的签到方式,签到失败 :[{}]", num, signIn, e);
137   - }
138   -
139   - }
140   -
141   - log.info("[{}] sing method old sign :[{}]", num, signIn);
142   - return signInService.addSignIn(signIn);
  104 +// String key = MessageFormat.format("sign:assignment:{0}", signIn.getJobCode());
  105 +// if (redisCache.hasKey(key)) {
  106 +// log.info(" sing method old sign :[{}]", signIn);
  107 +// return signInService.addSignIn(signIn);
  108 +// }
  109 +//
  110 +// Integer num = RandomUtils.nextInt(0, 10);
  111 +// if (num < 6) {
  112 +// redisCache.setCacheObject(key, num, 5, TimeUnit.MINUTES);
  113 +// log.info("[{}] sing method 走新的签到方式 :[{}] ", num, signIn);
  114 +// key = StringUtils.join(REDIS_SIGN_IN_DRIVER_ALCOHOL_OVERFLOW, ConstDateUtil.FAST_YYYY_MM_DD.format(new Date()), ":", signIn.getJobCode());
  115 +// Integer count = redisCache.getCacheObject(key);
  116 +// try {
  117 +// return signInServiceV1.addsignInV1(signIn);
  118 +// } catch (Exception e) {
  119 +// if (Objects.isNull(count) || count < 1) {
  120 +// count = 0;
  121 +// } else {
  122 +// count = count - 1;
  123 +// }
  124 +// if (redisCache.hasKey(key)) {
  125 +// redisCache.setCacheObject(key, count, 1, TimeUnit.DAYS);
  126 +// }
  127 +// log.error("[{}] sing method 走新的签到方式,签到失败 :[{}]", num, signIn, e);
  128 +// }
  129 +//
  130 +// }
  131 +//
  132 +// log.info("[{}] sing method old sign :[{}]", num, signIn);
  133 +// return signInService.addSignIn(signIn);
  134 + return signInServiceV1.addsignInV1(signIn);
143 135 }
144 136  
145 137 // /**
... ...
Bsth-admin/src/main/java/com/ruoyi/in/service/impl/SignInServiceV1Impl.java
... ... @@ -27,6 +27,7 @@ import com.ruoyi.in.domain.SignIn;
27 27 import com.ruoyi.in.domain.SignInV1;
28 28 import com.ruoyi.in.mapper.SignInMapper;
29 29 import com.ruoyi.in.mapper.SignInMapperV1;
  30 +import com.ruoyi.in.service.ISignInService;
30 31 import com.ruoyi.in.service.SignInServiceV1;
31 32 import com.ruoyi.scheduling.service.SchedulingServiceV1;
32 33 import com.ruoyi.service.BigViewServiceV1;
... ... @@ -75,6 +76,8 @@ public class SignInServiceV1Impl extends ServiceImpl&lt;SignInMapperV1, SignInV1&gt; i
75 76  
76 77 @Autowired
77 78 private RedisCache redisCache;
  79 + @Autowired
  80 + private ISignInService signInService;
78 81  
79 82 private static final FastDateFormat HHMM = FastDateFormat.getInstance("HH:mm");
80 83  
... ... @@ -142,7 +145,7 @@ public class SignInServiceV1Impl extends ServiceImpl&lt;SignInMapperV1, SignInV1&gt; i
142 145 switchAndChooseAlcohol(signIn, driver, scheduling);
143 146  
144 147 } else {
145   - log.info("签到的数据为:[{}]",scheduling);
  148 + log.info("签到的数据为:[{}]", scheduling);
146 149 SignInV1 sourceSign = getById(scheduling.getSignInId());
147 150 if (Objects.nonNull(sourceSign)) {
148 151 switchAndChooseTime(signIn, scheduling, dateTime);
... ... @@ -153,10 +156,11 @@ public class SignInServiceV1Impl extends ServiceImpl&lt;SignInMapperV1, SignInV1&gt; i
153 156 }
154 157  
155 158 private AjaxResult saveData(SignIn signIn, DriverScheduling scheduling, CalDriverScheduling calDriverScheduling, Driver driver, SignInV1 signInV1) {
  159 +
156 160 signInMapper.insertSignIn(signIn);
157 161 // 更新考勤
158 162 if (Objects.nonNull(calDriverScheduling)) {
159   - schedulingService.computedSignInBySignIn(scheduling, calDriverScheduling.getIndex(), signIn,true);
  163 + schedulingService.computedSignInBySignIn(scheduling, calDriverScheduling.getIndex(), signIn, true, signInService);
160 164 }
161 165  
162 166 if (TempCache.checkJobCodeExist(signIn.getJobCode())) {
... ... @@ -256,16 +260,27 @@ public class SignInServiceV1Impl extends ServiceImpl&lt;SignInMapperV1, SignInV1&gt; i
256 260 String fcsjHHMM = HHMM.format(zdsj);
257 261 String dzsjHHMM = HHMM.format(date1);
258 262  
  263 + Calendar calendar = new GregorianCalendar();
  264 + calendar.setTime(org.apache.commons.lang3.time.DateUtils.addMinutes(zdsj, 1));
  265 + calendar.set(Calendar.SECOND, 0);
  266 + calendar.set(Calendar.MILLISECOND, 0);
  267 +
  268 + Date date = Math.abs(calendar.getTime().getTime()-dateTime)>Math.abs(zdsj.getTime()-dateTime)?zdsj:calendar.getTime();
  269 +
259 270 String remark = org.apache.commons.lang3.StringUtils.join(ErrorTypeProperties.SIGN_OUT_TIMEOUT, "请在", fcsjHHMM, "到", dzsjHHMM, "之间打卡");
260   - return switchAndChooseTime(signIn, dateTime, zdsj, 80, remark);
  271 + return switchAndChooseTime(signIn, dateTime, date, 80, remark);
261 272 } else {
262 273 Date fcsj = new Date(scheduling.getFcsjT());
263 274  
264 275 String fcsjHHMM = HHMM.format(org.apache.commons.lang3.time.DateUtils.addMinutes(fcsj, -60));
265 276 String dzsjHHMM = HHMM.format(fcsj);
  277 + Calendar calendar = new GregorianCalendar();
  278 + calendar.setTime(org.apache.commons.lang3.time.DateUtils.addMinutes(fcsj, 1));
  279 + calendar.set(Calendar.SECOND, 0);
  280 + calendar.set(Calendar.MILLISECOND, 0);
266 281  
267 282 String remark = org.apache.commons.lang3.StringUtils.join(ErrorTypeProperties.SIGN_IN_TIMEOUT, "请在", fcsjHHMM, "到", dzsjHHMM, "之间打卡");
268   - return switchAndChooseTime(signIn, dateTime, fcsj, -60, remark);
  283 + return switchAndChooseTime(signIn, dateTime, calendar.getTime(), -60, remark);
269 284 }
270 285 }
271 286  
... ... @@ -346,19 +361,26 @@ public class SignInServiceV1Impl extends ServiceImpl&lt;SignInMapperV1, SignInV1&gt; i
346 361 */
347 362 private CalDriverScheduling findSchedulingByDateTime(List<DriverSchedulingV1> schedulings, long dateTime, String type) {
348 363 int size = CollectionUtils.size(schedulings);
  364 + Set<Long> values = new LinkedHashSet<>();
349 365 for (int i = 0; i < size; i++) {
350 366 DriverSchedulingV1 s = schedulings.get(i);
351 367 s.setIndex(i);
352 368  
353 369 if (Objects.nonNull(s.getFcsjT()) && org.apache.commons.lang3.StringUtils.equalsAnyIgnoreCase(org.apache.commons.lang3.StringUtils.trim(s.getBcType()), type)) {
354 370 s.setMinTime(Math.abs(s.getFcsjT() - dateTime));
  371 + values.add(s.getMinTime());
355 372 } else {
356 373 s.setMinTime(Long.MAX_VALUE);
357 374 }
358 375  
359 376 }
  377 +// Optional<DriverSchedulingV1> optional = schedulings.stream().filter(s -> Objects.isNull(s.getSignInId())).min(Comparator.comparing(DriverScheduling::getMinTime));
  378 +// if (optional.isPresent()) {
  379 +// return new CalDriverScheduling(optional.get());
  380 +// }
  381 + Optional<DriverSchedulingV1> optional = schedulings.stream().filter(s -> org.apache.commons.lang3.StringUtils.equalsAnyIgnoreCase(type, s.getBcType())).min(Comparator.comparing(DriverScheduling::getMinTime));
  382 +
360 383  
361   - Optional<DriverSchedulingV1> optional = schedulings.stream().min(Comparator.comparing(DriverScheduling::getMinTime));
362 384 return new CalDriverScheduling(optional.orElse(null));
363 385 }
364 386  
... ...
Bsth-admin/src/main/java/com/ruoyi/scheduling/service/impl/SchedulingServiceV1Impl.java
... ... @@ -2,11 +2,14 @@ package com.ruoyi.scheduling.service.impl;
2 2  
3 3 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
4 4 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  5 +import com.ruoyi.common.utils.DateUtils;
5 6 import com.ruoyi.domain.DriverSchedulingV1;
6 7 import com.ruoyi.scheduling.mapper.SchedulingMapperV1;
7 8 import com.ruoyi.scheduling.service.SchedulingServiceV1;
  9 +import org.apache.commons.lang3.StringUtils;
8 10 import org.springframework.stereotype.Service;
9 11  
  12 +import java.text.ParseException;
10 13 import java.util.Date;
11 14 import java.util.List;
12 15  
... ... @@ -15,9 +18,25 @@ public class SchedulingServiceV1Impl extends ServiceImpl&lt;SchedulingMapperV1, Dri
15 18  
16 19 @Override
17 20 public List<DriverSchedulingV1> queryByJobCodeAndSchedulingDate(String jobCode, Date date) {
  21 + String dateStr = DateUtils.FAST_YYYY_MM_DD.format(org.apache.commons.lang3.time.DateUtils.addDays(date, 1));
  22 + dateStr = StringUtils.join(dateStr, " 06:30:30");
18 23 LambdaQueryWrapper<DriverSchedulingV1> wrapper = new LambdaQueryWrapper<>();
19   - wrapper.eq(DriverSchedulingV1::getJobCode, jobCode).eq(DriverSchedulingV1::getScheduleDate, date);
20   - wrapper.orderByAsc(DriverSchedulingV1::getFcsjT);
  24 + try {
  25 + Date date1 = DateUtils.FAST_YYYY_MM_DDHHMMSS.parse(dateStr);
  26 +
  27 +// dateStr = DateUtils.FAST_YYYY_MM_DD.format(org.apache.commons.lang3.time.DateUtils.addDays(date, -1));
  28 + dateStr = DateUtils.FAST_YYYY_MM_DD.format(date);
  29 + dateStr = StringUtils.join(dateStr, " 00:00:00");
  30 + Date date2 = DateUtils.FAST_YYYY_MM_DDHHMMSS.parse(dateStr);
  31 +
  32 + wrapper.eq(DriverSchedulingV1::getJobCode, jobCode);
  33 + wrapper.and(wr -> {
  34 + wr.eq(DriverSchedulingV1::getScheduleDate, date).or().between(DriverSchedulingV1::getFcsjT, date2.getTime(), date1.getTime());
  35 + });
  36 + wrapper.orderByAsc(DriverSchedulingV1::getFcsjT);
  37 + } catch (ParseException e) {
  38 + throw new RuntimeException(e);
  39 + }
21 40 return list(wrapper);
22 41 }
23 42  
... ... @@ -25,7 +44,7 @@ public class SchedulingServiceV1Impl extends ServiceImpl&lt;SchedulingMapperV1, Dri
25 44 public List<DriverSchedulingV1> queryByNbbmAndDate(String nbbm, Date date) {
26 45 LambdaQueryWrapper<DriverSchedulingV1> wrapper = new LambdaQueryWrapper<>();
27 46 wrapper.eq(DriverSchedulingV1::getNbbm, nbbm).eq(DriverSchedulingV1::getScheduleDate, date);
28   -
  47 +
29 48 return list(wrapper);
30 49 }
31 50 }
... ...
Bsth-admin/src/main/java/com/ruoyi/service/BigViewServiceV1.java
... ... @@ -11,7 +11,7 @@ import java.util.Date;
11 11  
12 12 public interface BigViewServiceV1 {
13 13  
14   - void asyncRefreshRedisValue(SignIn signIn, Driver driver, DriverScheduling driverScheduling,String dateStr, Date date) 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  
... ... @@ -30,6 +30,13 @@ public interface BigViewServiceV1 {
30 30 AjaxResult getAjaxResultByDriverSignInfo(SignIn signIn);
31 31  
32 32 /***
  33 + * 是否正常
  34 + * @param signIn
  35 + * @return
  36 + */
  37 + boolean isNormal(SignIn signIn);
  38 +
  39 + /***
33 40 * 是否是早签
34 41 * @author liujun
35 42 * @date 2024/9/25 14:51
... ... @@ -69,6 +76,7 @@ public interface BigViewServiceV1 {
69 76 * @return boolean
70 77 */
71 78 boolean isSignStatusZoneEnum(SignIn signIn);
  79 +
72 80 /***
73 81 * 是否是驾驶员
74 82 * @author liujun
... ...
Bsth-admin/src/main/java/com/ruoyi/service/SchedulingService.java
... ... @@ -7,6 +7,7 @@ import com.ruoyi.domain.DriverScheduling;
7 7 import com.ruoyi.driver.mapper.DriverSchedulingMapper;
8 8 import com.ruoyi.in.domain.SignIn;
9 9 import com.ruoyi.in.mapper.SignInMapper;
  10 +import com.ruoyi.in.service.ISignInService;
10 11 import com.ruoyi.in.service.impl.SignInServiceImpl;
11 12 import com.ruoyi.pojo.DriverSignInRecommendation;
12 13 import com.ruoyi.pojo.GlobalIndex;
... ... @@ -115,7 +116,7 @@ public class SchedulingService {
115 116 * @param signIn
116 117 * @param globalIndex
117 118 */
118   - public void computedSignInBySignIn(List<DriverScheduling> dto, SignIn signIn, GlobalIndex globalIndex, boolean isNew,DriverScheduling sourceScheduling) {
  119 + public void computedSignInBySignIn(List<DriverScheduling> dto, SignIn signIn, GlobalIndex globalIndex, boolean isNew, DriverScheduling sourceScheduling) {
119 120 // 无排班不记录不在考勤表不更新
120 121 if (CollectionUtil.isEmpty(dto)) {
121 122 return;
... ... @@ -126,13 +127,13 @@ public class SchedulingService {
126 127 if (Objects.isNull(dto.get(globalIndex.getIndex()).getSignInId()) || dto.size() == 1) {
127 128 schedulingMapper.updateRoster(dto.get(globalIndex.getIndex()), signIn.getId(), signIn.getExType(), signIn.getCreateTime(), remark, signIn.getType(), signIn.getAlcoholFlag(), signIn.getAlcoholIntake());
128 129 // 更新缓存
129   - nowSchedulingCache.updateCacheByJobCode(remark, ConstDateUtil.formatDate(dto.get(0).getScheduleDate()), globalIndex.getIndex(), signIn, isNew,sourceScheduling);
  130 + nowSchedulingCache.updateCacheByJobCode(remark, ConstDateUtil.formatDate(dto.get(0).getScheduleDate()), globalIndex.getIndex(), signIn, isNew, sourceScheduling);
130 131  
131 132 }
132 133 // 之前的无效
133 134 else if (!SIGN_NO_EX_NUM.equals(dto.get(globalIndex.getIndex()).getExType())) {
134 135 schedulingMapper.updateRoster(dto.get(globalIndex.getIndex()), signIn.getId(), signIn.getExType(), signIn.getCreateTime(), remark, signIn.getType(), signIn.getAlcoholFlag(), signIn.getAlcoholIntake());
135   - nowSchedulingCache.updateCacheByJobCode(remark, ConstDateUtil.formatDate(dto.get(0).getScheduleDate()), globalIndex.getIndex(), signIn, isNew,sourceScheduling);
  136 + nowSchedulingCache.updateCacheByJobCode(remark, ConstDateUtil.formatDate(dto.get(0).getScheduleDate()), globalIndex.getIndex(), signIn, isNew, sourceScheduling);
136 137  
137 138 }
138 139 // 之前的有效
... ... @@ -147,7 +148,7 @@ public class SchedulingService {
147 148 *
148 149 * @param signIn
149 150 */
150   - public void computedSignInBySignIn(DriverScheduling driverScheduling, int index, SignIn signIn,boolean isNew) {
  151 + public void computedSignInBySignIn(DriverScheduling driverScheduling, int index, SignIn signIn, boolean isNew, ISignInService signInService) {
151 152 // 无排班不记录不在考勤表不更新
152 153 if (Objects.isNull(driverScheduling)) {
153 154 return;
... ... @@ -156,23 +157,42 @@ public class SchedulingService {
156 157 // 更新最新的签到记录判断是否需要更新考勤
157 158 // 记录为空直接插入记录
158 159 if (Objects.isNull(driverScheduling.getSignInId())) {
159   - schedulingMapper.updateRoster(driverScheduling, signIn.getId(), signIn.getExType(), signIn.getCreateTime(), remark, signIn.getType(), signIn.getAlcoholFlag(), signIn.getAlcoholIntake());
160   - // 更新缓存
161   - nowSchedulingCache.updateCacheByJobCode(remark, ConstDateUtil.formatDate(driverScheduling.getScheduleDate()), index, signIn,isNew,driverScheduling);
162   - }
163   - // 之前的无效
164   - else if (!SIGN_NO_EX_NUM.equals(driverScheduling.getExType())) {
165   - schedulingMapper.updateRoster(driverScheduling, signIn.getId(), signIn.getExType(), signIn.getCreateTime(), remark, signIn.getType(), signIn.getAlcoholFlag(), signIn.getAlcoholIntake());
166   - nowSchedulingCache.updateCacheByJobCode(remark, ConstDateUtil.formatDate(driverScheduling.getScheduleDate()), index, signIn,isNew,driverScheduling);
167   - }
168   - // 之前的有效
169   - else {
170   - handlerRecord(driverScheduling, signIn, index,isNew);
  160 + changeScheduling(driverScheduling,signIn,remark,index,isNew);
  161 + }else{
  162 + SignIn sourceSign = signInService.selectSignInById(driverScheduling.getSignInId());
  163 + if(Objects.isNull(sourceSign)){
  164 + changeScheduling(driverScheduling,signIn,remark,index,isNew);
  165 + }else if(bigViewServiceV1.isEarly(sourceSign) && bigViewServiceV1.isNormal(signIn)){
  166 + //第一次是早签,第二次正常签到,覆盖原来的数据。
  167 + changeScheduling(driverScheduling,signIn,remark,index,isNew);
  168 + }else if(bigViewServiceV1.isNormal(sourceSign) && bigViewServiceV1.isSignStatusWineEnum(signIn)){
  169 + //第一次正常签到,第二次酒驾,覆盖原来的数据。
  170 + changeScheduling(driverScheduling,signIn,remark,index,isNew);
  171 + }else if(!bigViewServiceV1.isEarly(sourceSign) && !bigViewServiceV1.isSignStatusDelayEnum(sourceSign) &&
  172 + !bigViewServiceV1.isSignStatusWineEnum(sourceSign) && bigViewServiceV1.isSignStatusWineEnum(signIn)){
  173 + //第一次正常签到,第二次酒驾,覆盖原来的数据。
  174 + changeScheduling(driverScheduling,signIn,remark,index,isNew);
  175 + }else if(!bigViewServiceV1.isEarly(sourceSign) && !bigViewServiceV1.isSignStatusDelayEnum(sourceSign) &&
  176 + bigViewServiceV1.isSignStatusWineEnum(sourceSign) && bigViewServiceV1.isNormal(signIn)){
  177 + //第一次在签到时间范围内签到且酒驾,第二次正常,覆盖原来的数据。
  178 + changeScheduling(driverScheduling,signIn,remark,index,isNew);
  179 + }else if(bigViewServiceV1.isSignStatusDelayEnum(sourceSign) && bigViewServiceV1.isSignStatusWineEnum(sourceSign) ){
  180 + //第一次迟到签到且酒驾,第二次测试覆盖原来的数据。
  181 + changeScheduling(driverScheduling,signIn,remark,index,isNew);
  182 + }else{
  183 + handlerRecord(driverScheduling, signIn, index, isNew);
  184 + }
171 185 }
172 186  
173 187 }
174 188  
175   - private void handlerRecord(DriverScheduling scheduling, SignIn signIn, Integer index,boolean isNew) {
  189 + private void changeScheduling(DriverScheduling driverScheduling,SignIn signIn,String remark,Integer index,boolean isNew){
  190 + schedulingMapper.updateRoster(driverScheduling, signIn.getId(), signIn.getExType(), signIn.getCreateTime(), remark, signIn.getType(), signIn.getAlcoholFlag(), signIn.getAlcoholIntake());
  191 + // 更新缓存
  192 + nowSchedulingCache.updateCacheByJobCode(remark, ConstDateUtil.formatDate(driverScheduling.getScheduleDate()), index, signIn, isNew, driverScheduling);
  193 + }
  194 +
  195 + private void handlerRecord(DriverScheduling scheduling, SignIn signIn, int index, boolean isNew) {
176 196 if (Objects.isNull(scheduling)) {
177 197 return;
178 198 }
... ... @@ -193,10 +213,10 @@ public class SchedulingService {
193 213 }
194 214  
195 215  
196   - String remark = getRemark(scheduling, signIn);
  216 +// String remark = getRemark(scheduling, signIn);
197 217 signInMapper.updateSignIn(signIn);
198   - schedulingMapper.updateRoster(scheduling, signIn.getId(), signIn.getExType(), signIn.getCreateTime(), remark, signIn.getType(), signIn.getAlcoholFlag(), signIn.getAlcoholIntake());
199   - nowSchedulingCache.updateCacheByJobCode(remark, ConstDateUtil.formatDate(scheduling.getScheduleDate()), index, signIn,isNew,scheduling);
  218 + // schedulingMapper.updateRoster(scheduling, signIn.getId(), signIn.getExType(), signIn.getCreateTime(), remark, signIn.getType(), signIn.getAlcoholFlag(), signIn.getAlcoholIntake());
  219 + // nowSchedulingCache.updateCacheByJobCode(remark, ConstDateUtil.formatDate(scheduling.getScheduleDate()), index, signIn, isNew, scheduling);
200 220 }
201 221  
202 222  
... ... @@ -221,7 +241,7 @@ public class SchedulingService {
221 241 sb.append("," + signIn.getRemark().substring(index));
222 242 }
223 243 }
224   - return sb.toString();
  244 + return StringUtils.isEmpty(sb.toString()) ? "正常" : sb.toString();
225 245 }
226 246  
227 247 private String getRemark(DriverScheduling scheduling, SignIn signIn) {
... ... @@ -230,16 +250,15 @@ public class SchedulingService {
230 250 sb.append(EARLY);
231 251 } else if (bigViewServiceV1.isSignStatusDelayEnum(signIn)) {
232 252 sb.append(SIGN_STATUS_DELAY_ENUM.getDescription(scheduling.getBcType()));
233   - } else {
  253 + } else if (StringUtils.isNotEmpty(signIn.getRemark())) {
234 254 sb.append(signIn.getRemark());
235 255 }
236   -
237 256 if (bigViewServiceV1.isSignStatusWineEnum(signIn) && StringUtils.isNotEmpty(signIn.getRemark())) {
238   - if(StringUtils.indexOf(scheduling.getRemark(),signIn.getRemark()) > -1){
  257 + if (StringUtils.indexOf(scheduling.getRemark(), signIn.getRemark()) > -1) {
239 258 return scheduling.getRemark();
240 259 }
241 260  
242   - if(StringUtils.indexOf(sb.toString(),signIn.getRemark()) > -1){
  261 + if (StringUtils.indexOf(sb.toString(), signIn.getRemark()) > -1) {
243 262 return sb.toString();
244 263 }
245 264 int index = signIn.getRemark().indexOf(ALCOHOL_SIGN_IN_ERROR);
... ... @@ -247,7 +266,7 @@ public class SchedulingService {
247 266 sb.append("," + signIn.getRemark().substring(index));
248 267 }
249 268 }
250   - return sb.toString();
  269 + return StringUtils.isEmpty(sb.toString()) ? "正常" : sb.toString();
251 270 }
252 271  
253 272  
... ... @@ -288,7 +307,7 @@ public class SchedulingService {
288 307 String remark = getRemark(dto, signIn, index);
289 308 signInMapper.updateSignIn(signIn);
290 309 schedulingMapper.updateRoster(scheduling, signIn.getId(), signIn.getExType(), signIn.getCreateTime(), remark, signIn.getType(), signIn.getAlcoholFlag(), signIn.getAlcoholIntake());
291   - nowSchedulingCache.updateCacheByJobCode(remark, ConstDateUtil.formatDate(dto.get(0).getScheduleDate()), globalIndex.getIndex() + 1, signIn,false,scheduling);
  310 + nowSchedulingCache.updateCacheByJobCode(remark, ConstDateUtil.formatDate(dto.get(0).getScheduleDate()), globalIndex.getIndex() + 1, signIn, false, scheduling);
292 311 }
293 312  
294 313 private Integer bcTypeTransform(String bcType) {
... ...
Bsth-admin/src/main/java/com/ruoyi/service/impl/BigViewServiceV1Impl.java
... ... @@ -186,6 +186,11 @@ public class BigViewServiceV1Impl implements BigViewServiceV1 {
186 186 return null;
187 187 }
188 188  
  189 + @Override
  190 + public boolean isNormal(SignIn signIn) {
  191 + return Objects.nonNull(signIn) && Objects.equals(signIn.getExType(), 0);
  192 + }
  193 +
189 194  
190 195 @Override
191 196 public boolean isEarly(SignIn signIn) {
... ... @@ -195,7 +200,7 @@ public class BigViewServiceV1Impl implements BigViewServiceV1 {
195 200  
196 201 @Override
197 202 public boolean isSignStatusWineEnum(SignIn signIn) {
198   - return Objects.nonNull(signIn) && (Objects.equals(3, signIn.getExType()) || Objects.equals(23, signIn.getExType()) || Objects.equals(33, signIn.getExType()));
  203 + return Objects.nonNull(signIn) && Objects.nonNull(signIn.getExType()) && signIn.getExType() % 10 == 3;
199 204 }
200 205  
201 206  
... ... @@ -206,7 +211,7 @@ public class BigViewServiceV1Impl implements BigViewServiceV1 {
206 211  
207 212 @Override
208 213 public boolean isSignStatusZoneEnum(SignIn signIn) {
209   - return Objects.nonNull(signIn) && Objects.equals(0, signIn.getExType());
  214 + return !isSignStatusWineEnum(signIn);
210 215 }
211 216  
212 217 @Override
... ...
Bsth-admin/src/main/resources/mapper/in/SignInMapper.xml
... ... @@ -36,6 +36,7 @@
36 36 <result property="updateTime" column="update_time"/>
37 37 <result property="alcoholIntake" column="alcohol_intake"/>
38 38 <result property="remark" column="remark"/>
  39 + <result property="exType" column="ex_type"/>
39 40 </resultMap>
40 41  
41 42 <sql id="selectSignInVo">
... ... @@ -52,7 +53,8 @@
52 53 type,
53 54 update_time,
54 55 alcohol_intake,
55   - remark
  56 + remark,
  57 + ex_type
56 58 from sign_in
57 59 </sql>
58 60  
... ...
Bsth-common/src/main/java/com/ruoyi/common/utils/DateUtils.java
1 1 package com.ruoyi.common.utils;
2 2  
  3 +import org.apache.commons.lang3.time.DateFormatUtils;
  4 +import org.apache.commons.lang3.time.FastDateFormat;
  5 +
3 6 import java.lang.management.ManagementFactory;
4 7 import java.text.ParseException;
5 8 import java.text.SimpleDateFormat;
6   -import java.time.LocalDate;
7   -import java.time.LocalDateTime;
8   -import java.time.LocalTime;
9   -import java.time.ZoneId;
10   -import java.time.ZonedDateTime;
  9 +import java.time.*;
11 10 import java.util.Date;
12 11 import java.util.Objects;
13 12  
14   -import org.apache.commons.lang3.time.DateFormatUtils;
15   -import org.apache.commons.lang3.time.FastDateFormat;
16   -
17 13 /**
18 14 * 时间工具类
19 15 *
... ... @@ -36,7 +32,8 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
36 32 "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
37 33 "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
38 34  
39   - public static FastDateFormat FAST_YYYY_MM_DD = FastDateFormat.getInstance("yyyy-MM-DD");
  35 + public static FastDateFormat FAST_YYYY_MM_DD = FastDateFormat.getInstance("yyyy-MM-dd");
  36 + public static FastDateFormat FAST_YYYY_MM_DDHHMMSS = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");
40 37  
41 38 /**
42 39 * 获取当前Date型日期
... ...