Commit 6443d13d3fc70029d6e1e3ad29a836c89c1b50a2

Authored by guzijian
1 parent 41afbd8f

feat: 修改提示

ruoyi-admin/src/main/java/com/ruoyi/in/service/ISignInService.java
@@ -35,14 +35,6 @@ public interface ISignInService @@ -35,14 +35,6 @@ public interface ISignInService
35 public List<SignInResponseVo> selectSignInList(SignInResponseVo signIn); 35 public List<SignInResponseVo> selectSignInList(SignInResponseVo signIn);
36 36
37 /** 37 /**
38 - * 新增签到  
39 - *  
40 - * @param signIn 签到  
41 - * @return 结果  
42 - */  
43 - public AjaxResult insertSignIn(SignIn signIn);  
44 -  
45 - /**  
46 * 修改签到 38 * 修改签到
47 * 39 *
48 * @param signIn 签到 40 * @param signIn 签到
ruoyi-admin/src/main/java/com/ruoyi/in/service/impl/SignInServiceImpl.java
@@ -8,6 +8,7 @@ import java.time.LocalDateTime; @@ -8,6 +8,7 @@ import java.time.LocalDateTime;
8 import java.time.format.DateTimeFormatter; 8 import java.time.format.DateTimeFormatter;
9 import java.time.temporal.ChronoUnit; 9 import java.time.temporal.ChronoUnit;
10 import java.util.*; 10 import java.util.*;
  11 +import java.util.concurrent.TimeUnit;
11 import java.util.stream.Collectors; 12 import java.util.stream.Collectors;
12 13
13 import cn.hutool.core.collection.CollectionUtil; 14 import cn.hutool.core.collection.CollectionUtil;
@@ -112,51 +113,6 @@ public class SignInServiceImpl implements ISignInService { @@ -112,51 +113,6 @@ public class SignInServiceImpl implements ISignInService {
112 return vos; 113 return vos;
113 } 114 }
114 115
115 - /**  
116 - * 新增签到  
117 - *  
118 - * @param signIn 签到  
119 - * @return 结果  
120 - */  
121 - @Override  
122 - public AjaxResult insertSignIn(SignIn signIn) {  
123 - // 查询员工信息  
124 - Driver driver = driverMapper.getDriverInfoByJobCode(signIn.getJobCode());  
125 - if (Objects.isNull(driver)) return AjaxResult.error("这个工号的员工不存在!");  
126 - // 查询地址  
127 - Equipment equipment = equipmentMapper.selectEquipmentByDeviceId(signIn.getDeviceId());  
128 - SignInResponseVo vo = getSignInResponseVo(driver, signIn, equipment);  
129 - signIn.setCreateTime(new Date());  
130 - signIn.setRemark("");  
131 - // 签到检查 酒精检查 超时检查 排班检查  
132 - GlobalIndex globalIndex = new GlobalIndex();  
133 - long now = System.currentTimeMillis();  
134 - List<DriverScheduling> dto = schedulingService.queryScheduling(signIn.getJobCode(), now);  
135 - if (checkSignIn(now, dto, globalIndex, signIn, driver)) {  
136 - signIn.setStatus(SIGN_IN_SUCCESS);  
137 - } else {  
138 - signIn.setStatus(SIGN_IN_FAIL);  
139 - signIn.setRemark(signIn.getRemark().replaceFirst(",$", "。"));  
140 - }  
141 - signIn.setIp(IpUtils.getIpAddr());  
142 - // base64转图片  
143 -// uploadImage(signIn);  
144 - signInMapper.insertSignIn(signIn);  
145 - // TODO redis 存储每个人的签到 用于后续考勤  
146 -  
147 - // 驾驶人员二次签到酒精测试异常  
148 - if (PERSONNEL_POSTS_DRIVER.equals(driver.getPosts()) && SIGN_IN_FAIL.equals(signIn.getStatus()) && signIn.getRemark().contains(ALCOHOL_SIGN_IN_ERROR)) {  
149 - AjaxResult result = getAjaxResultByDriverSignInfo(signIn, vo);  
150 - if (!Objects.isNull(result)) {  
151 - return result;  
152 - }  
153 - }  
154 - if (SIGN_IN_FAIL.equals(signIn.getStatus())) {  
155 - return AjaxResult.success(SIGN_IN_ERROR + ": " + signIn.getRemark(), vo);  
156 - }  
157 - return AjaxResult.success(SIGN_IN_SUCCESS_STRING, vo);  
158 - }  
159 -  
160 116
161 /** 117 /**
162 * 修改签到 118 * 修改签到
@@ -233,10 +189,11 @@ public class SignInServiceImpl implements ISignInService { @@ -233,10 +189,11 @@ public class SignInServiceImpl implements ISignInService {
233 } 189 }
234 } 190 }
235 if (SIGN_IN_SUCCESS.equals(signIn.getStatus())) { 191 if (SIGN_IN_SUCCESS.equals(signIn.getStatus())) {
  192 + String prompt = signIn.getRemark().replace("正常", "");
236 if (signIn.getType().equals(SIGN_OUT)) { 193 if (signIn.getType().equals(SIGN_OUT)) {
237 - return AjaxResult.success(SIGN_OUT_SUCCESS_STRING, vo); 194 + return AjaxResult.success(SIGN_OUT_SUCCESS_STRING + prompt, vo);
238 } else { 195 } else {
239 - return AjaxResult.success(SIGN_IN_SUCCESS_STRING, vo); 196 + return AjaxResult.success(SIGN_IN_SUCCESS_STRING + prompt, vo);
240 } 197 }
241 } else { 198 } else {
242 if (signIn.getType().equals(SIGN_OUT)) { 199 if (signIn.getType().equals(SIGN_OUT)) {
@@ -406,15 +363,14 @@ public class SignInServiceImpl implements ISignInService { @@ -406,15 +363,14 @@ public class SignInServiceImpl implements ISignInService {
406 } 363 }
407 364
408 private AjaxResult getAjaxResultByDriverSignInfo(SignIn signIn, SignInResponseVo vo) { 365 private AjaxResult getAjaxResultByDriverSignInfo(SignIn signIn, SignInResponseVo vo) {
409 - // TODO 待更换 缓存更新为当天签到记录  
410 String key = REDIS_SIGN_IN_DRIVER_ALCOHOL_OVERFLOW + ConstDateUtil.formatDate("yyyyMMdd") + ":" + signIn.getJobCode(); 366 String key = REDIS_SIGN_IN_DRIVER_ALCOHOL_OVERFLOW + ConstDateUtil.formatDate("yyyyMMdd") + ":" + signIn.getJobCode();
411 // 驾驶员酒精测试连续超标两次则提示换人 367 // 驾驶员酒精测试连续超标两次则提示换人
412 Integer count = redisCache.getCacheObject(key); 368 Integer count = redisCache.getCacheObject(key);
413 if (Objects.isNull(count) || count.equals(0)) { 369 if (Objects.isNull(count) || count.equals(0)) {
414 count = 1; 370 count = 1;
415 - redisCache.setCacheObject(key, count); 371 + redisCache.setCacheObject(key, count, 1, TimeUnit.DAYS);
416 } else { 372 } else {
417 - redisCache.setCacheObject(key, ++count); 373 + redisCache.setCacheObject(key, ++count, 1, TimeUnit.DAYS);
418 } 374 }
419 if (SIGN_IN_ERROR_COUNT.compareTo(count) <= 0) { 375 if (SIGN_IN_ERROR_COUNT.compareTo(count) <= 0) {
420 return AjaxResult.success(SIGN_IN_ERROR + ": " + signIn.getRemark() + "酒精测试不通过" + count + "次请更换车辆驾驶员。", vo); 376 return AjaxResult.success(SIGN_IN_ERROR + ": " + signIn.getRemark() + "酒精测试不通过" + count + "次请更换车辆驾驶员。", vo);
@@ -507,12 +463,8 @@ public class SignInServiceImpl implements ISignInService { @@ -507,12 +463,8 @@ public class SignInServiceImpl implements ISignInService {
507 } 463 }
508 464
509 private boolean checkTimeOut(GlobalIndex globalIndex, SignIn signIn, List<DriverScheduling> dto, String posts, long now) { 465 private boolean checkTimeOut(GlobalIndex globalIndex, SignIn signIn, List<DriverScheduling> dto, String posts, long now) {
510 - // 那发车时间和到站时间作为开始上班的时间  
511 - if (PERSONNEL_POSTS_DRIVER.equals(posts) || PERSONNEL_POSTS_SALES.equals(posts)) {  
512 - return driverCheckTimeOut(globalIndex, signIn, dto, now);  
513 - } else {  
514 - return driverCheckTimeOut(globalIndex, signIn, dto, now);  
515 - } 466 + // 司售人员拿发车时间和到站时间作为开始上班的时间
  467 + return driverCheckTimeOut(globalIndex, signIn, dto, now);
516 } 468 }
517 469
518 private boolean driverCheckTimeOut(GlobalIndex globalIndex, SignIn signIn, List<DriverScheduling> dto, long now) { 470 private boolean driverCheckTimeOut(GlobalIndex globalIndex, SignIn signIn, List<DriverScheduling> dto, long now) {
@@ -531,21 +483,22 @@ public class SignInServiceImpl implements ISignInService { @@ -531,21 +483,22 @@ public class SignInServiceImpl implements ISignInService {
531 // 签到一个逻辑 当前无记录 483 // 签到一个逻辑 当前无记录
532 if (currentScheduling.getBcType().equals(BC_TYPE_OUT) && Objects.isNull(currentScheduling.getSignInId())) { 484 if (currentScheduling.getBcType().equals(BC_TYPE_OUT) && Objects.isNull(currentScheduling.getSignInId())) {
533 DriverSignInRecommendation lastClosestTimestamp = schedulingService.computedTheCurrentClosestTimestamp(dto, now, -1); 485 DriverSignInRecommendation lastClosestTimestamp = schedulingService.computedTheCurrentClosestTimestamp(dto, now, -1);
  486 + // 给出签到范围
534 // 上一次无记|签到,type:签退 当前时间小于最近签到时间 -> 超时签退 487 // 上一次无记|签到,type:签退 当前时间小于最近签到时间 -> 超时签退
535 if (nowBetween < -60L && Objects.isNull(lastClosestTimestamp.getSignInId()) && signIn.getType().equals(SIGN_OUT) && lastClosestTimestamp.getBcType().equals(BC_TYPE_IN)) { 488 if (nowBetween < -60L && Objects.isNull(lastClosestTimestamp.getSignInId()) && signIn.getType().equals(SIGN_OUT) && lastClosestTimestamp.getBcType().equals(BC_TYPE_IN)) {
536 - signIn.setRemark(SIGN_OUT_TIMEOUT); 489 + signIn.setRemark(SIGN_OUT_TIMEOUT + "请在" + ConstDateUtil.formatDate("HH:mm",new Date(lastClosestTimestamp.getTimestamps())) + "前后一小时内打卡。");
537 globalIndex.setIndex(lastClosestTimestamp.getIndex()); 490 globalIndex.setIndex(lastClosestTimestamp.getIndex());
538 result = false; 491 result = false;
539 } 492 }
540 // 上一次无记无|签到,type:签退 当前时间小于最近签到时间 -> 超时签退 493 // 上一次无记无|签到,type:签退 当前时间小于最近签到时间 -> 超时签退
541 else if (nowBetween < -60L && Objects.isNull(lastClosestTimestamp.getSignInId()) && signIn.getType().equals(SIGN_OUT) && lastClosestTimestamp.getIndex().equals(currentScheduling.getIndex())) { 494 else if (nowBetween < -60L && Objects.isNull(lastClosestTimestamp.getSignInId()) && signIn.getType().equals(SIGN_OUT) && lastClosestTimestamp.getIndex().equals(currentScheduling.getIndex())) {
542 - signIn.setRemark(SIGN_IN_TIMEOUT); 495 + signIn.setRemark(SIGN_IN_TIMEOUT + "请在" + ConstDateUtil.formatDate("HH:mm",new Date(currentScheduling.getTimestamps())) + "前后一小时内打卡。");
543 globalIndex.setIndex(currentScheduling.getIndex()); 496 globalIndex.setIndex(currentScheduling.getIndex());
544 result = false; 497 result = false;
545 } 498 }
546 // 当前最近无记录|签到,type:签到|签退 -> 签到超时给上 499 // 当前最近无记录|签到,type:签到|签退 -> 签到超时给上
547 else { 500 else {
548 - signIn.setRemark(SIGN_IN_TIMEOUT); 501 + signIn.setRemark(SIGN_IN_TIMEOUT + "请在" + ConstDateUtil.formatDate("HH:mm",new Date(currentScheduling.getTimestamps())) + "前后一小时内打卡。");
549 globalIndex.setIndex(currentScheduling.getIndex()); 502 globalIndex.setIndex(currentScheduling.getIndex());
550 result = false; 503 result = false;
551 } 504 }
@@ -555,20 +508,21 @@ public class SignInServiceImpl implements ISignInService { @@ -555,20 +508,21 @@ public class SignInServiceImpl implements ISignInService {
555 DriverSignInRecommendation lastClosestTimestamp = schedulingService.computedTheCurrentClosestTimestamp(dto, now, -1); 508 DriverSignInRecommendation lastClosestTimestamp = schedulingService.computedTheCurrentClosestTimestamp(dto, now, -1);
556 // 上一次无记|签退,type:签到 当前时间小于最近签退时间 -> 签到异常 509 // 上一次无记|签退,type:签到 当前时间小于最近签退时间 -> 签到异常
557 if (nowBetween < -60L && Objects.isNull(lastClosestTimestamp.getSignInId()) && signIn.getType().equals(SIGN_IN)) { 510 if (nowBetween < -60L && Objects.isNull(lastClosestTimestamp.getSignInId()) && signIn.getType().equals(SIGN_IN)) {
558 - signIn.setRemark(SIGN_IN_TIMEOUT); 511 + signIn.setRemark(SIGN_IN_TIMEOUT + "请在" + ConstDateUtil.formatDate("HH:mm",new Date(lastClosestTimestamp.getTimestamps())) + "前后一小时内打卡。");
559 globalIndex.setIndex(lastClosestTimestamp.getIndex()); 512 globalIndex.setIndex(lastClosestTimestamp.getIndex());
560 result = false; 513 result = false;
561 } 514 }
562 // 当前无记|签退 , type:签退|签到 ——> 签退异常 515 // 当前无记|签退 , type:签退|签到 ——> 签退异常
563 else { 516 else {
564 - signIn.setRemark(SIGN_OUT_TIMEOUT); 517 + signIn.setRemark(SIGN_OUT_TIMEOUT + "请在" + ConstDateUtil.formatDate("HH:mm",new Date(currentScheduling.getTimestamps())) + "前后一小时内打卡。");
565 globalIndex.setIndex(currentScheduling.getIndex()); 518 globalIndex.setIndex(currentScheduling.getIndex());
566 result = false; 519 result = false;
567 } 520 }
568 } 521 }
569 // 签退|签到 当前有记录 522 // 签退|签到 当前有记录
570 if (!Objects.isNull(currentScheduling.getSignInId())) { 523 if (!Objects.isNull(currentScheduling.getSignInId())) {
571 - signIn.setRemark(currentScheduling.getBcType().equals(BC_TYPE_IN) ? SIGN_OUT_TIMEOUT : SIGN_IN_TIMEOUT); 524 + String prompt = "请在" + ConstDateUtil.formatDate("HH:mm",new Date(currentScheduling.getTimestamps())) + "前后一小时内打卡。";
  525 + signIn.setRemark((currentScheduling.getBcType().equals(BC_TYPE_IN) ? SIGN_OUT_TIMEOUT : SIGN_IN_TIMEOUT) + prompt);
572 globalIndex.setIndex(currentScheduling.getIndex()); 526 globalIndex.setIndex(currentScheduling.getIndex());
573 result = false; 527 result = false;
574 } 528 }
ruoyi-admin/src/main/java/com/ruoyi/pojo/vo/RuleAttendanceMainRequestVo.java
@@ -7,7 +7,7 @@ import lombok.Data; @@ -7,7 +7,7 @@ import lombok.Data;
7 */ 7 */
8 @Data 8 @Data
9 public class RuleAttendanceMainRequestVo { 9 public class RuleAttendanceMainRequestVo {
10 - private String jocCode; 10 + private String jobCode;
11 private String date; 11 private String date;
12 private String name; 12 private String name;
13 } 13 }
ruoyi-admin/src/main/java/com/ruoyi/service/SchedulingService.java
@@ -2,6 +2,7 @@ package com.ruoyi.service; @@ -2,6 +2,7 @@ package com.ruoyi.service;
2 2
3 import cn.hutool.core.collection.CollectionUtil; 3 import cn.hutool.core.collection.CollectionUtil;
4 import com.ruoyi.common.cache.NowSchedulingCache; 4 import com.ruoyi.common.cache.NowSchedulingCache;
  5 +import com.ruoyi.common.utils.DateUtils;
5 import com.ruoyi.driver.mapper.DriverSchedulingMapper; 6 import com.ruoyi.driver.mapper.DriverSchedulingMapper;
6 import com.ruoyi.in.domain.SignIn; 7 import com.ruoyi.in.domain.SignIn;
7 import com.ruoyi.in.mapper.SignInMapper; 8 import com.ruoyi.in.mapper.SignInMapper;
@@ -77,7 +78,7 @@ public class SchedulingService { @@ -77,7 +78,7 @@ public class SchedulingService {
77 78
78 79
79 /** 80 /**
80 - * 计算签到逻辑 81 + * 计算当前签到签到逻辑
81 * 82 *
82 * @param dto 83 * @param dto
83 * @param now 84 * @param now
@@ -140,17 +141,26 @@ public class SchedulingService { @@ -140,17 +141,26 @@ public class SchedulingService {
140 if (globalIndex.getIndex() == dto.size() - 1) { 141 if (globalIndex.getIndex() == dto.size() - 1) {
141 return; 142 return;
142 } 143 }
  144 + long timer = 1000 * 60 * 5;
  145 + // 有效的在一分钟内重复签到不做修改
  146 + if (signIn.getExType().equals(SIGN_NO_EX_NUM) && (DateUtils.getNowDate().getTime() - dto.get(globalIndex.getIndex()).getSignTime().getTime()) <= timer) {
  147 + signIn.setRemark("您已经打卡过了,您已完成" + (globalIndex.getIndex() + 1) + "次打卡,请勿在5分钟内重复打卡");
  148 + return;
  149 + }
143 Integer index = globalIndex.getIndex() + 1; 150 Integer index = globalIndex.getIndex() + 1;
144 // 之前是签到 | 目前有效记录 -》进行修改 变成无效 151 // 之前是签到 | 目前有效记录 -》进行修改 变成无效
145 if (signIn.getExType().equals(SIGN_NO_EX_NUM)) { 152 if (signIn.getExType().equals(SIGN_NO_EX_NUM)) {
146 signIn.setStatus(SIGN_IN_FAIL); 153 signIn.setStatus(SIGN_IN_FAIL);
147 signIn.setExType(SIGN_TIME_OUT_EX_NUM); 154 signIn.setExType(SIGN_TIME_OUT_EX_NUM);
148 - signIn.setRemark(dto.get(index).getBcType().equals(BC_TYPE_IN) ? SIGN_OUT_TIMEOUT : SIGN_IN_TIMEOUT);  
149 - signIn.setRemark(signIn.getRemark().replaceFirst(",$", "。"));  
150 signInMapper.updateSignIn(signIn); 155 signInMapper.updateSignIn(signIn);
151 } 156 }
  157 + DriverScheduling scheduling = dto.get(index);
  158 + long date = scheduling.getBcType().equals(BC_TYPE_IN) ? scheduling.getZdsjT() : scheduling.getFcsjT();
  159 + String prompt = "请在" + ConstDateUtil.formatDate("HH:mm", new Date(date)) + "前后一小时内打卡。";
  160 + signIn.setRemark((scheduling.getBcType().equals(BC_TYPE_IN) ? SIGN_OUT_TIMEOUT : SIGN_IN_TIMEOUT) + prompt);
  161 + signIn.setRemark(signIn.getRemark().replaceFirst(",$", "。"));
152 // 之前是签到 | 目前无效 -》往后更新 162 // 之前是签到 | 目前无效 -》往后更新
153 - schedulingMapper.updateRoster(dto.get(globalIndex.getIndex() + 1), signIn.getId(), signIn.getExType(), signIn.getCreateTime(), signIn.getRemark(), signIn.getType(), signIn.getAlcoholFlag(), signIn.getAlcoholIntake()); 163 + schedulingMapper.updateRoster(scheduling, signIn.getId(), signIn.getExType(), signIn.getCreateTime(), signIn.getRemark(), signIn.getType(), signIn.getAlcoholFlag(), signIn.getAlcoholIntake());
154 nowSchedulingCache.updateCacheByJobCode(ConstDateUtil.formatDate(dto.get(0).getScheduleDate()), globalIndex.getIndex() + 1, signIn); 164 nowSchedulingCache.updateCacheByJobCode(ConstDateUtil.formatDate(dto.get(0).getScheduleDate()), globalIndex.getIndex() + 1, signIn);
155 } 165 }
156 166
@@ -247,7 +257,7 @@ public class SchedulingService { @@ -247,7 +257,7 @@ public class SchedulingService {
247 // 相差十五分钟 257 // 相差十五分钟
248 if (timeDifferenceInMillis > 0 && timeDifferenceInMillis < (60 * 1000 * 15)) { 258 if (timeDifferenceInMillis > 0 && timeDifferenceInMillis < (60 * 1000 * 15)) {
249 return true; 259 return true;
250 - } else if (timeDifferenceInMillis < 0) { 260 + } else if (timeDifferenceInMillis <= 0) {
251 return true; 261 return true;
252 } 262 }
253 return false; 263 return false;
ruoyi-admin/src/main/java/com/ruoyi/service/impl/AttendanceServiceImpl.java
@@ -165,7 +165,7 @@ public class AttendanceServiceImpl implements AttendanceService { @@ -165,7 +165,7 @@ public class AttendanceServiceImpl implements AttendanceService {
165 List<RuleAttendanceMain> list = attendanceMainService.list(new QueryWrapper<RuleAttendanceMain>() 165 List<RuleAttendanceMain> list = attendanceMainService.list(new QueryWrapper<RuleAttendanceMain>()
166 .lambda() 166 .lambda()
167 .eq(RuleAttendanceMain::getSchedulingDate, vo.getDate()) 167 .eq(RuleAttendanceMain::getSchedulingDate, vo.getDate())
168 - .eq(StringUtils.isNotEmpty(vo.getJocCode()), RuleAttendanceMain::getJobCode, vo.getJocCode())); 168 + .eq(StringUtils.isNotEmpty(vo.getJobCode()), RuleAttendanceMain::getJobCode, vo.getJobCode()));
169 return list; 169 return list;
170 } 170 }
171 171