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 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 40 * @param signIn 签到
... ...
ruoyi-admin/src/main/java/com/ruoyi/in/service/impl/SignInServiceImpl.java
... ... @@ -8,6 +8,7 @@ import java.time.LocalDateTime;
8 8 import java.time.format.DateTimeFormatter;
9 9 import java.time.temporal.ChronoUnit;
10 10 import java.util.*;
  11 +import java.util.concurrent.TimeUnit;
11 12 import java.util.stream.Collectors;
12 13  
13 14 import cn.hutool.core.collection.CollectionUtil;
... ... @@ -112,51 +113,6 @@ public class SignInServiceImpl implements ISignInService {
112 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 189 }
234 190 }
235 191 if (SIGN_IN_SUCCESS.equals(signIn.getStatus())) {
  192 + String prompt = signIn.getRemark().replace("正常", "");
236 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 195 } else {
239   - return AjaxResult.success(SIGN_IN_SUCCESS_STRING, vo);
  196 + return AjaxResult.success(SIGN_IN_SUCCESS_STRING + prompt, vo);
240 197 }
241 198 } else {
242 199 if (signIn.getType().equals(SIGN_OUT)) {
... ... @@ -406,15 +363,14 @@ public class SignInServiceImpl implements ISignInService {
406 363 }
407 364  
408 365 private AjaxResult getAjaxResultByDriverSignInfo(SignIn signIn, SignInResponseVo vo) {
409   - // TODO 待更换 缓存更新为当天签到记录
410 366 String key = REDIS_SIGN_IN_DRIVER_ALCOHOL_OVERFLOW + ConstDateUtil.formatDate("yyyyMMdd") + ":" + signIn.getJobCode();
411 367 // 驾驶员酒精测试连续超标两次则提示换人
412 368 Integer count = redisCache.getCacheObject(key);
413 369 if (Objects.isNull(count) || count.equals(0)) {
414 370 count = 1;
415   - redisCache.setCacheObject(key, count);
  371 + redisCache.setCacheObject(key, count, 1, TimeUnit.DAYS);
416 372 } else {
417   - redisCache.setCacheObject(key, ++count);
  373 + redisCache.setCacheObject(key, ++count, 1, TimeUnit.DAYS);
418 374 }
419 375 if (SIGN_IN_ERROR_COUNT.compareTo(count) <= 0) {
420 376 return AjaxResult.success(SIGN_IN_ERROR + ": " + signIn.getRemark() + "酒精测试不通过" + count + "次请更换车辆驾驶员。", vo);
... ... @@ -507,12 +463,8 @@ public class SignInServiceImpl implements ISignInService {
507 463 }
508 464  
509 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 470 private boolean driverCheckTimeOut(GlobalIndex globalIndex, SignIn signIn, List<DriverScheduling> dto, long now) {
... ... @@ -531,21 +483,22 @@ public class SignInServiceImpl implements ISignInService {
531 483 // 签到一个逻辑 当前无记录
532 484 if (currentScheduling.getBcType().equals(BC_TYPE_OUT) && Objects.isNull(currentScheduling.getSignInId())) {
533 485 DriverSignInRecommendation lastClosestTimestamp = schedulingService.computedTheCurrentClosestTimestamp(dto, now, -1);
  486 + // 给出签到范围
534 487 // 上一次无记|签到,type:签退 当前时间小于最近签到时间 -> 超时签退
535 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 490 globalIndex.setIndex(lastClosestTimestamp.getIndex());
538 491 result = false;
539 492 }
540 493 // 上一次无记无|签到,type:签退 当前时间小于最近签到时间 -> 超时签退
541 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 496 globalIndex.setIndex(currentScheduling.getIndex());
544 497 result = false;
545 498 }
546 499 // 当前最近无记录|签到,type:签到|签退 -> 签到超时给上
547 500 else {
548   - signIn.setRemark(SIGN_IN_TIMEOUT);
  501 + signIn.setRemark(SIGN_IN_TIMEOUT + "请在" + ConstDateUtil.formatDate("HH:mm",new Date(currentScheduling.getTimestamps())) + "前后一小时内打卡。");
549 502 globalIndex.setIndex(currentScheduling.getIndex());
550 503 result = false;
551 504 }
... ... @@ -555,20 +508,21 @@ public class SignInServiceImpl implements ISignInService {
555 508 DriverSignInRecommendation lastClosestTimestamp = schedulingService.computedTheCurrentClosestTimestamp(dto, now, -1);
556 509 // 上一次无记|签退,type:签到 当前时间小于最近签退时间 -> 签到异常
557 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 512 globalIndex.setIndex(lastClosestTimestamp.getIndex());
560 513 result = false;
561 514 }
562 515 // 当前无记|签退 , type:签退|签到 ——> 签退异常
563 516 else {
564   - signIn.setRemark(SIGN_OUT_TIMEOUT);
  517 + signIn.setRemark(SIGN_OUT_TIMEOUT + "请在" + ConstDateUtil.formatDate("HH:mm",new Date(currentScheduling.getTimestamps())) + "前后一小时内打卡。");
565 518 globalIndex.setIndex(currentScheduling.getIndex());
566 519 result = false;
567 520 }
568 521 }
569 522 // 签退|签到 当前有记录
570 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 526 globalIndex.setIndex(currentScheduling.getIndex());
573 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 */
8 8 @Data
9 9 public class RuleAttendanceMainRequestVo {
10   - private String jocCode;
  10 + private String jobCode;
11 11 private String date;
12 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 2  
3 3 import cn.hutool.core.collection.CollectionUtil;
4 4 import com.ruoyi.common.cache.NowSchedulingCache;
  5 +import com.ruoyi.common.utils.DateUtils;
5 6 import com.ruoyi.driver.mapper.DriverSchedulingMapper;
6 7 import com.ruoyi.in.domain.SignIn;
7 8 import com.ruoyi.in.mapper.SignInMapper;
... ... @@ -77,7 +78,7 @@ public class SchedulingService {
77 78  
78 79  
79 80 /**
80   - * 计算签到逻辑
  81 + * 计算当前签到签到逻辑
81 82 *
82 83 * @param dto
83 84 * @param now
... ... @@ -140,17 +141,26 @@ public class SchedulingService {
140 141 if (globalIndex.getIndex() == dto.size() - 1) {
141 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 150 Integer index = globalIndex.getIndex() + 1;
144 151 // 之前是签到 | 目前有效记录 -》进行修改 变成无效
145 152 if (signIn.getExType().equals(SIGN_NO_EX_NUM)) {
146 153 signIn.setStatus(SIGN_IN_FAIL);
147 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 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 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 257 // 相差十五分钟
248 258 if (timeDifferenceInMillis > 0 && timeDifferenceInMillis < (60 * 1000 * 15)) {
249 259 return true;
250   - } else if (timeDifferenceInMillis < 0) {
  260 + } else if (timeDifferenceInMillis <= 0) {
251 261 return true;
252 262 }
253 263 return false;
... ...
ruoyi-admin/src/main/java/com/ruoyi/service/impl/AttendanceServiceImpl.java
... ... @@ -165,7 +165,7 @@ public class AttendanceServiceImpl implements AttendanceService {
165 165 List<RuleAttendanceMain> list = attendanceMainService.list(new QueryWrapper<RuleAttendanceMain>()
166 166 .lambda()
167 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 169 return list;
170 170 }
171 171  
... ...