Commit 23708446dcf81f326f2ff171269b46ac24131e4e

Authored by guzijian
1 parent d3450601

fix&feat: 修复超时过滤未到签到时间也显示问题。更改签到规则一小时内变成 在计算签到时间一小时以内前,签退变成正1小时 负两小时 改为 计划签退一小时以内。

Bsth-admin/src/main/java/com/ruoyi/common/cache/NowSchedulingCache.java
@@ -102,16 +102,18 @@ public class NowSchedulingCache { @@ -102,16 +102,18 @@ public class NowSchedulingCache {
102 102
103 /** 103 /**
104 * 更新缓存 104 * 更新缓存
  105 + *
  106 + * @param remark
105 * @param key 107 * @param key
106 * @param index 108 * @param index
107 * @param signIn 109 * @param signIn
108 */ 110 */
109 - public void updateCacheByJobCode(String key, Integer index, SignIn signIn) { 111 + public void updateCacheByJobCode(String remark, String key, Integer index, SignIn signIn) {
110 if (key.equals(ConstDateUtil.formatDate(ConstDateUtil.getTheSpecifiedNumberOfDaysOfTime(0))) 112 if (key.equals(ConstDateUtil.formatDate(ConstDateUtil.getTheSpecifiedNumberOfDaysOfTime(0)))
111 || key.equals(ConstDateUtil.formatDate(ConstDateUtil.getTheSpecifiedNumberOfDaysOfTime(-1)))){ 113 || key.equals(ConstDateUtil.formatDate(ConstDateUtil.getTheSpecifiedNumberOfDaysOfTime(-1)))){
112 DriverScheduling scheduling = cacheNowDayScheduling.get(key).get(signIn.getJobCode()).get(index); 114 DriverScheduling scheduling = cacheNowDayScheduling.get(key).get(signIn.getJobCode()).get(index);
113 scheduling.setSignInId(signIn.getId()); 115 scheduling.setSignInId(signIn.getId());
114 - scheduling.setRemark(signIn.getRemark()); 116 + scheduling.setRemark(remark);
115 scheduling.setExType(signIn.getExType()); 117 scheduling.setExType(signIn.getExType());
116 scheduling.setSignTime(signIn.getCreateTime()); 118 scheduling.setSignTime(signIn.getCreateTime());
117 scheduling.setSignType(signIn.getType()); 119 scheduling.setSignType(signIn.getType());
Bsth-admin/src/main/java/com/ruoyi/driver/service/impl/DriverServiceImpl.java
@@ -164,7 +164,7 @@ public class DriverServiceImpl implements IDriverService { @@ -164,7 +164,7 @@ public class DriverServiceImpl implements IDriverService {
164 LocalDateTime nowTime = ConstDateUtil.getLocalDateTimeByLongTime(now); 164 LocalDateTime nowTime = ConstDateUtil.getLocalDateTimeByLongTime(now);
165 LocalDateTime signTime = ConstDateUtil.getLocalDateTimeByLongTime(timeMap.get(index).getTimestamps()); 165 LocalDateTime signTime = ConstDateUtil.getLocalDateTimeByLongTime(timeMap.get(index).getTimestamps());
166 long range = ChronoUnit.MINUTES.between(signTime, nowTime); 166 long range = ChronoUnit.MINUTES.between(signTime, nowTime);
167 - // 如果当前记录靠近签退,但是未到签退小于合法范围 上一次记录未签到,则返回签到记录 167 + // 如果当前记录靠近签退,但是未到签退小于有效范围 上一次记录未签到,则返回签到记录
168 if (dto.size() > 1 168 if (dto.size() > 1
169 && BC_TYPE_IN.equals(timeMap.get(index).getBcType()) 169 && BC_TYPE_IN.equals(timeMap.get(index).getBcType())
170 && range < -60L 170 && range < -60L
@@ -174,20 +174,26 @@ public class DriverServiceImpl implements IDriverService { @@ -174,20 +174,26 @@ public class DriverServiceImpl implements IDriverService {
174 index = index - 1; 174 index = index - 1;
175 } 175 }
176 176
177 - // 如果当前记录是异常的记录且还在目前还在签到范围内 177 + // 如果当前记录是异常的记录且还在目前还在打卡范围内
178 if (!Objects.isNull(timeMap.get(index).getSignInId()) && dto.size() > 1) { 178 if (!Objects.isNull(timeMap.get(index).getSignInId()) && dto.size() > 1) {
179 LocalDateTime endTime = ConstDateUtil.getLocalDateTimeByLongTime(timeMap.get(index).getTimestamps()); 179 LocalDateTime endTime = ConstDateUtil.getLocalDateTimeByLongTime(timeMap.get(index).getTimestamps());
180 long nowBetween = ChronoUnit.MINUTES.between(endTime, nowTime); 180 long nowBetween = ChronoUnit.MINUTES.between(endTime, nowTime);
181 - // 如果当前有效范围内签  
182 - if ((Math.abs(nowBetween) <= 60)) {  
183 - return timeMap.get(index);  
184 - } else if (nowBetween > 60L) { 181 + // 如果当前不在有效范围内签
  182 + if (nowBetween > 60L) {
185 index = index < timeMap.size() - 1 ? index + 1 : index; 183 index = index < timeMap.size() - 1 ? index + 1 : index;
186 } 184 }
187 } 185 }
188 return timeMap.get(index); 186 return timeMap.get(index);
189 } 187 }
190 188
  189 + /**
  190 + * 比较当前时间戳 推荐签到操作
  191 + *
  192 + * @param dto
  193 + * @param now
  194 + * @param timeMap
  195 + * @return
  196 + */
191 private static Integer handleSchedulingMap(List<DriverScheduling> dto, Long now, Map<Integer, DriverSignInRecommendation> timeMap) { 197 private static Integer handleSchedulingMap(List<DriverScheduling> dto, Long now, Map<Integer, DriverSignInRecommendation> timeMap) {
192 Integer index = 0; 198 Integer index = 0;
193 for (int i = 0; i < dto.size(); i++) { 199 for (int i = 0; i < dto.size(); i++) {
@@ -374,7 +380,7 @@ public class DriverServiceImpl implements IDriverService { @@ -374,7 +380,7 @@ public class DriverServiceImpl implements IDriverService {
374 for (Driver item : drivers) { 380 for (Driver item : drivers) {
375 dto = schedulingService.queryScheduling(item.getJobCode(), now); 381 dto = schedulingService.queryScheduling(item.getJobCode(), now);
376 DriverResponseVo vo = handlerRecommendation(item, now, dto, schedulingFlag, alcoholFlag); 382 DriverResponseVo vo = handlerRecommendation(item, now, dto, schedulingFlag, alcoholFlag);
377 - // 针对指定用户操作 383 + // TODO 针对指定用户操作
378 if (item.getJobCode().equals("722717") || item.getJobCode().equals("700001")) { 384 if (item.getJobCode().equals("722717") || item.getJobCode().equals("700001")) {
379 if (!CollectionUtil.isEmpty(dto) && vo.getPlanAction().equals(SIGN_IN_STRING)) { 385 if (!CollectionUtil.isEmpty(dto) && vo.getPlanAction().equals(SIGN_IN_STRING)) {
380 vos.add(DriverResponseVo.createDriverResponseVo(null, item, SIGN_IN_STRING, needCheckAlcoholDevice, true, "测试", "测试", "测试")); 386 vos.add(DriverResponseVo.createDriverResponseVo(null, item, SIGN_IN_STRING, needCheckAlcoholDevice, true, "测试", "测试", "测试"));
@@ -383,6 +389,7 @@ public class DriverServiceImpl implements IDriverService { @@ -383,6 +389,7 @@ public class DriverServiceImpl implements IDriverService {
383 } else { 389 } else {
384 vos.add(DriverResponseVo.createDriverResponseVo(null, item, SIGN_IN_STRING, needCheckAlcoholDevice, true, "测试", "测试", "测试")); 390 vos.add(DriverResponseVo.createDriverResponseVo(null, item, SIGN_IN_STRING, needCheckAlcoholDevice, true, "测试", "测试", "测试"));
385 } 391 }
  392 + // 上面可删除
386 } else { 393 } else {
387 // 无排班 工种是驾驶员需要酒测 394 // 无排班 工种是驾驶员需要酒测
388 if (Objects.isNull(vo)) { 395 if (Objects.isNull(vo)) {
Bsth-admin/src/main/java/com/ruoyi/in/service/impl/SignInServiceImpl.java
@@ -276,7 +276,7 @@ public class SignInServiceImpl implements ISignInService { @@ -276,7 +276,7 @@ public class SignInServiceImpl implements ISignInService {
276 if (CollectionUtil.isNotEmpty(dto)) { 276 if (CollectionUtil.isNotEmpty(dto)) {
277 schedulingMapper.updateRoster(dto.get(globalIndex.getIndex()), signIn.getId(), signIn.getExType(), signIn.getCreateTime(), signIn.getRemark(), signIn.getType(), signIn.getAlcoholFlag(), signIn.getAlcoholIntake()); 277 schedulingMapper.updateRoster(dto.get(globalIndex.getIndex()), signIn.getId(), signIn.getExType(), signIn.getCreateTime(), signIn.getRemark(), signIn.getType(), signIn.getAlcoholFlag(), signIn.getAlcoholIntake());
278 // 更新缓存 278 // 更新缓存
279 - nowSchedulingCache.updateCacheByJobCode(ConstDateUtil.formatDate(dto.get(0).getScheduleDate()), globalIndex.getIndex(), signIn); 279 + nowSchedulingCache.updateCacheByJobCode(signIn.getRemark(), ConstDateUtil.formatDate(dto.get(0).getScheduleDate()), globalIndex.getIndex(), signIn);
280 } 280 }
281 281
282 // 异常保存到异常异常中 282 // 异常保存到异常异常中
@@ -353,7 +353,7 @@ public class SignInServiceImpl implements ISignInService { @@ -353,7 +353,7 @@ public class SignInServiceImpl implements ISignInService {
353 353
354 schedulingService.computedSignInBySignIn(new ArrayList<>(Arrays.asList(transformMap.get(signIn.getJobCode()))), signIn, new GlobalIndex()); 354 schedulingService.computedSignInBySignIn(new ArrayList<>(Arrays.asList(transformMap.get(signIn.getJobCode()))), signIn, new GlobalIndex());
355 // // 更新缓存 355 // // 更新缓存
356 - nowSchedulingCache.updateCacheByJobCode(ConstDateUtil.formatDate(transformMap.get(signIn.getJobCode()).getScheduleDate()), 0, signIn); 356 + nowSchedulingCache.updateCacheByJobCode(signIn.getRemark(), ConstDateUtil.formatDate(transformMap.get(signIn.getJobCode()).getScheduleDate()), 0, signIn);
357 signInMapper.updateSignIn(signIn); 357 signInMapper.updateSignIn(signIn);
358 358
359 } 359 }
@@ -484,7 +484,7 @@ public class SignInServiceImpl implements ISignInService { @@ -484,7 +484,7 @@ public class SignInServiceImpl implements ISignInService {
484 break; 484 break;
485 } 485 }
486 486
487 - // 超时校验司售人员 487 + // 超时校验
488 if (result) { 488 if (result) {
489 result = checkTimeOut(globalIndex, signIn, dto, posts, now); 489 result = checkTimeOut(globalIndex, signIn, dto, posts, now);
490 if (!result) { 490 if (!result) {
@@ -517,7 +517,7 @@ public class SignInServiceImpl implements ISignInService { @@ -517,7 +517,7 @@ public class SignInServiceImpl implements ISignInService {
517 } 517 }
518 518
519 private boolean checkTimeOut(GlobalIndex globalIndex, SignIn signIn, List<DriverScheduling> dto, String posts, long now) { 519 private boolean checkTimeOut(GlobalIndex globalIndex, SignIn signIn, List<DriverScheduling> dto, String posts, long now) {
520 - // 司售人员拿发车时间和到站时间作为开始上班的时间 520 + // 发车时间和到站时间作为开始上班的时间
521 return driverCheckTimeOut(globalIndex, signIn, dto, now); 521 return driverCheckTimeOut(globalIndex, signIn, dto, now);
522 } 522 }
523 523
@@ -544,14 +544,8 @@ public class SignInServiceImpl implements ISignInService { @@ -544,14 +544,8 @@ public class SignInServiceImpl implements ISignInService {
544 globalIndex.setIndex(lastClosestTimestamp.getIndex()); 544 globalIndex.setIndex(lastClosestTimestamp.getIndex());
545 result = false; 545 result = false;
546 } 546 }
547 - // 上一次无记无|签到,type:签退 当前时间小于最近签到时间 -> 超时签退  
548 - else if (nowBetween < -60L && Objects.isNull(lastClosestTimestamp.getSignInId()) && signIn.getType().equals(SIGN_OUT) && lastClosestTimestamp.getIndex().equals(currentScheduling.getIndex())) {  
549 - signIn.setRemark(SIGN_IN_TIMEOUT + getPrompt(currentScheduling));  
550 - globalIndex.setIndex(currentScheduling.getIndex());  
551 - result = false;  
552 - }  
553 - // 当前最近无记录|签到,type:签到|签退 -> 签到超时给上  
554 - else { 547 + // 上一次无记无|签到,type:签退 当前时间小于最近签到时间 -> 早签 或者 超时
  548 + else {
555 signIn.setRemark(SIGN_IN_TIMEOUT + getPrompt(currentScheduling)); 549 signIn.setRemark(SIGN_IN_TIMEOUT + getPrompt(currentScheduling));
556 globalIndex.setIndex(currentScheduling.getIndex()); 550 globalIndex.setIndex(currentScheduling.getIndex());
557 result = false; 551 result = false;
@@ -592,7 +586,9 @@ public class SignInServiceImpl implements ISignInService { @@ -592,7 +586,9 @@ public class SignInServiceImpl implements ISignInService {
592 } 586 }
593 result = false; 587 result = false;
594 } 588 }
595 - } else { 589 + }
  590 + // 有效直接保存记录
  591 + else {
596 globalIndex.setIndex(currentScheduling.getIndex()); 592 globalIndex.setIndex(currentScheduling.getIndex());
597 result = true; 593 result = true;
598 } 594 }
@@ -604,7 +600,8 @@ public class SignInServiceImpl implements ISignInService { @@ -604,7 +600,8 @@ public class SignInServiceImpl implements ISignInService {
604 } 600 }
605 601
606 private boolean handleTimeOut(String bcType, long nowBetween, GlobalIndex globalIndex, DriverSignInRecommendation currentScheduling) { 602 private boolean handleTimeOut(String bcType, long nowBetween, GlobalIndex globalIndex, DriverSignInRecommendation currentScheduling) {
607 - if (BC_TYPE_OUT.equals(bcType) && nowBetween > 60L || BC_TYPE_IN.equals(bcType) && nowBetween <= 120L) { 603 + if ((BC_TYPE_OUT.equals(bcType) && nowBetween > 0 )
  604 + ||( BC_TYPE_IN.equals(bcType) && nowBetween <= 60L)) {
608 return true; 605 return true;
609 } else { 606 } else {
610 return false; 607 return false;
@@ -613,11 +610,11 @@ public class SignInServiceImpl implements ISignInService { @@ -613,11 +610,11 @@ public class SignInServiceImpl implements ISignInService {
613 610
614 private String getPrompt(DriverSignInRecommendation currentScheduling) { 611 private String getPrompt(DriverSignInRecommendation currentScheduling) {
615 if (BC_TYPE_OUT.equals(currentScheduling.getBcType())) { 612 if (BC_TYPE_OUT.equals(currentScheduling.getBcType())) {
616 - return "请在" + ConstDateUtil.formatDate("HH:mm", new Date(currentScheduling.getTimestamps())) + "前一小时内打卡。"; 613 + return "请在" + ConstDateUtil.formatDate("HH:mm", new Date(currentScheduling.getTimestamps())) + "前一小时内打卡。";
617 } else { 614 } else {
618 - // 正小时 负 1小时 615 + // 正1小时 负 1小时
619 LocalDateTime time = ConstDateUtil.stringTransformLocalDateTime(ConstDateUtil.formatDate("yyyy-MM-dd HH:mm:ss", new Date(currentScheduling.getTimestamps())), "yyyy-MM-dd HH:mm:ss"); 616 LocalDateTime time = ConstDateUtil.stringTransformLocalDateTime(ConstDateUtil.formatDate("yyyy-MM-dd HH:mm:ss", new Date(currentScheduling.getTimestamps())), "yyyy-MM-dd HH:mm:ss");
620 - LocalDateTime addHours = time.plusHours(2); 617 + LocalDateTime addHours = time.plusHours(1);
621 LocalDateTime hours = time.plusHours(-1); 618 LocalDateTime hours = time.plusHours(-1);
622 return "请在" + ConstDateUtil.formatDate("HH:mm", hours) + "到" 619 return "请在" + ConstDateUtil.formatDate("HH:mm", hours) + "到"
623 + ConstDateUtil.formatDate("HH:mm", addHours) + "之间打卡"; 620 + ConstDateUtil.formatDate("HH:mm", addHours) + "之间打卡";
@@ -625,13 +622,13 @@ public class SignInServiceImpl implements ISignInService { @@ -625,13 +622,13 @@ public class SignInServiceImpl implements ISignInService {
625 } 622 }
626 623
627 624
628 - private static boolean checkTimerSign(long nowBetween, String bcType) { 625 + public static boolean checkTimerSign(long nowBetween, String bcType) {
629 // 如果是签到就是正负一小时内有效 626 // 如果是签到就是正负一小时内有效
630 if (BC_TYPE_OUT.equals(bcType)) { 627 if (BC_TYPE_OUT.equals(bcType)) {
631 - return !(Math.abs(nowBetween) <= 60); 628 + return !(nowBetween <= 0L && nowBetween >= -60L);
632 } else { 629 } else {
633 - // 如果是签退就是负1小时 正两小时有效  
634 - return !((nowBetween >= 0 && nowBetween <= 120L) || (nowBetween < 0 && nowBetween >= -60L)); 630 + // 如果是签退就是就是正负一小时内有效
  631 + return !(Math.abs(nowBetween) <= 60);
635 } 632 }
636 } 633 }
637 634
@@ -643,7 +640,7 @@ public class SignInServiceImpl implements ISignInService { @@ -643,7 +640,7 @@ public class SignInServiceImpl implements ISignInService {
643 globalIndex.setIndex(0); 640 globalIndex.setIndex(0);
644 // 单条数据 且不在范围内 641 // 单条数据 且不在范围内
645 if (BC_TYPE_IN.equals(dto.get(0).getBcType())) { 642 if (BC_TYPE_IN.equals(dto.get(0).getBcType())) {
646 - if (!(Math.abs(nowBetween) <= 60)) { 643 + if (!(nowBetween < 0L && nowBetween >= -60L)) {
647 signIn.setRemark(SIGN_OUT_TIMEOUT); 644 signIn.setRemark(SIGN_OUT_TIMEOUT);
648 return false; 645 return false;
649 } else { 646 } else {
Bsth-admin/src/main/java/com/ruoyi/service/SchedulingService.java
@@ -6,6 +6,7 @@ import com.ruoyi.common.utils.DateUtils; @@ -6,6 +6,7 @@ import com.ruoyi.common.utils.DateUtils;
6 import com.ruoyi.driver.mapper.DriverSchedulingMapper; 6 import com.ruoyi.driver.mapper.DriverSchedulingMapper;
7 import com.ruoyi.in.domain.SignIn; 7 import com.ruoyi.in.domain.SignIn;
8 import com.ruoyi.in.mapper.SignInMapper; 8 import com.ruoyi.in.mapper.SignInMapper;
  9 +import com.ruoyi.in.service.impl.SignInServiceImpl;
9 import com.ruoyi.pojo.DriverSignInRecommendation; 10 import com.ruoyi.pojo.DriverSignInRecommendation;
10 import com.ruoyi.pojo.GlobalIndex; 11 import com.ruoyi.pojo.GlobalIndex;
11 import com.ruoyi.domain.DriverScheduling; 12 import com.ruoyi.domain.DriverScheduling;
@@ -118,20 +119,18 @@ public class SchedulingService { @@ -118,20 +119,18 @@ public class SchedulingService {
118 if (CollectionUtil.isEmpty(dto)) { 119 if (CollectionUtil.isEmpty(dto)) {
119 return; 120 return;
120 } 121 }
121 -  
122 String remark = getRemark(dto, signIn, globalIndex.getIndex()); 122 String remark = getRemark(dto, signIn, globalIndex.getIndex());
123 - signIn.setRemark(remark);  
124 // 更新最新的签到记录判断是否需要更新考勤 123 // 更新最新的签到记录判断是否需要更新考勤
125 // 记录为空直接插入记录 124 // 记录为空直接插入记录
126 if (Objects.isNull(dto.get(globalIndex.getIndex()).getSignInId()) || dto.size() == 1) { 125 if (Objects.isNull(dto.get(globalIndex.getIndex()).getSignInId()) || dto.size() == 1) {
127 schedulingMapper.updateRoster(dto.get(globalIndex.getIndex()), signIn.getId(), signIn.getExType(), signIn.getCreateTime(), remark, signIn.getType(), signIn.getAlcoholFlag(), signIn.getAlcoholIntake()); 126 schedulingMapper.updateRoster(dto.get(globalIndex.getIndex()), signIn.getId(), signIn.getExType(), signIn.getCreateTime(), remark, signIn.getType(), signIn.getAlcoholFlag(), signIn.getAlcoholIntake());
128 // 更新缓存 127 // 更新缓存
129 - nowSchedulingCache.updateCacheByJobCode(ConstDateUtil.formatDate(dto.get(0).getScheduleDate()), globalIndex.getIndex(), signIn); 128 + nowSchedulingCache.updateCacheByJobCode(remark, ConstDateUtil.formatDate(dto.get(0).getScheduleDate()), globalIndex.getIndex(), signIn);
130 } 129 }
131 // 之前的无效 130 // 之前的无效
132 else if (!SIGN_NO_EX_NUM.equals(dto.get(globalIndex.getIndex()).getExType())) { 131 else if (!SIGN_NO_EX_NUM.equals(dto.get(globalIndex.getIndex()).getExType())) {
133 schedulingMapper.updateRoster(dto.get(globalIndex.getIndex()), signIn.getId(), signIn.getExType(), signIn.getCreateTime(), remark, signIn.getType(), signIn.getAlcoholFlag(), signIn.getAlcoholIntake()); 132 schedulingMapper.updateRoster(dto.get(globalIndex.getIndex()), signIn.getId(), signIn.getExType(), signIn.getCreateTime(), remark, signIn.getType(), signIn.getAlcoholFlag(), signIn.getAlcoholIntake());
134 - nowSchedulingCache.updateCacheByJobCode(ConstDateUtil.formatDate(dto.get(0).getScheduleDate()), globalIndex.getIndex(), signIn); 133 + nowSchedulingCache.updateCacheByJobCode(remark, ConstDateUtil.formatDate(dto.get(0).getScheduleDate()), globalIndex.getIndex(), signIn);
135 } 134 }
136 // 之前的有效 135 // 之前的有效
137 else { 136 else {
@@ -145,7 +144,7 @@ public class SchedulingService { @@ -145,7 +144,7 @@ public class SchedulingService {
145 DriverScheduling scheduling = dto.get(globalIndex); 144 DriverScheduling scheduling = dto.get(globalIndex);
146 long date = scheduling.getBcType().equals(BC_TYPE_IN) ? scheduling.getZdsjT() : scheduling.getFcsjT(); 145 long date = scheduling.getBcType().equals(BC_TYPE_IN) ? scheduling.getZdsjT() : scheduling.getFcsjT();
147 long nowBetween = ChronoUnit.MINUTES.between(ConstDateUtil.getLocalDateTimeByLongTime(date), ConstDateUtil.getLocalDateTimeByLongTime(signIn.getCreateTime().getTime())); 146 long nowBetween = ChronoUnit.MINUTES.between(ConstDateUtil.getLocalDateTimeByLongTime(date), ConstDateUtil.getLocalDateTimeByLongTime(signIn.getCreateTime().getTime()));
148 - if (checkTimerSign(nowBetween, scheduling.getBcType())) { 147 + if (SignInServiceImpl.checkTimerSign(nowBetween, scheduling.getBcType())) {
149 if (nowBetween < -60L) { 148 if (nowBetween < -60L) {
150 sb.append(EARLY); 149 sb.append(EARLY);
151 } else { 150 } else {
@@ -161,34 +160,19 @@ public class SchedulingService { @@ -161,34 +160,19 @@ public class SchedulingService {
161 return sb.toString(); 160 return sb.toString();
162 } 161 }
163 162
164 - private static boolean checkTimerSign(long nowBetween, String bcType) {  
165 - // 如果是签到就是正负一小时内有效  
166 - if (BC_TYPE_OUT.equals(bcType)) {  
167 - return !(Math.abs(nowBetween) <= 60);  
168 - } else {  
169 - // 如果是签退就是负1小时 正两小时有效  
170 - return !((nowBetween >= 0 && nowBetween <= 120L) || (nowBetween < 0 && nowBetween >= -60L));  
171 - }  
172 - }  
173 163
174 164
175 private void handlerRecord(List<DriverScheduling> dto, SignIn signIn, GlobalIndex globalIndex) { 165 private void handlerRecord(List<DriverScheduling> dto, SignIn signIn, GlobalIndex globalIndex) {
176 if (globalIndex.getIndex() == dto.size() - 1) { 166 if (globalIndex.getIndex() == dto.size() - 1) {
177 return; 167 return;
178 } 168 }
179 - long timer = 1000 * 60 * 60; 169 + long timer = 1000 * 60 * 3;
180 // 有效的在一小时内内重复签到不做修改 170 // 有效的在一小时内内重复签到不做修改
181 if (signIn.getExType().equals(SIGN_NO_EX_NUM) && (DateUtils.getNowDate().getTime() - dto.get(globalIndex.getIndex()).getSignTime().getTime()) <= timer) { 171 if (signIn.getExType().equals(SIGN_NO_EX_NUM) && (DateUtils.getNowDate().getTime() - dto.get(globalIndex.getIndex()).getSignTime().getTime()) <= timer) {
182 - signIn.setRemark("您已经打卡过了,请勿在一小时内重复打卡"); 172 + signIn.setRemark("您已经打卡过了,请勿在3分钟内重复打卡");
183 return; 173 return;
184 } 174 }
185 int index = globalIndex.getIndex() + 1; 175 int index = globalIndex.getIndex() + 1;
186 - // 目前有效记录 -》进行修改 变成无效  
187 -// if (signIn.getExType().equals(SIGN_NO_EX_NUM)) {  
188 -// signIn.setStatus(SIGN_IN_FAIL);  
189 -// signIn.setExType(SIGN_TIME_OUT_EX_NUM);  
190 -// signInMapper.updateSignIn(signIn);  
191 -// }  
192 DriverScheduling scheduling = dto.get(index); 176 DriverScheduling scheduling = dto.get(index);
193 long date = scheduling.getBcType().equals(BC_TYPE_IN) ? scheduling.getZdsjT() : scheduling.getFcsjT(); 177 long date = scheduling.getBcType().equals(BC_TYPE_IN) ? scheduling.getZdsjT() : scheduling.getFcsjT();
194 String prompt = getPrompt(new Date(date), scheduling.getBcType()); 178 String prompt = getPrompt(new Date(date), scheduling.getBcType());
@@ -197,7 +181,7 @@ public class SchedulingService { @@ -197,7 +181,7 @@ public class SchedulingService {
197 // 目前无效 -》往后更新 181 // 目前无效 -》往后更新
198 String remark = getRemark(dto, signIn, index); 182 String remark = getRemark(dto, signIn, index);
199 schedulingMapper.updateRoster(scheduling, signIn.getId(), signIn.getExType(), signIn.getCreateTime(), remark, signIn.getType(), signIn.getAlcoholFlag(), signIn.getAlcoholIntake()); 183 schedulingMapper.updateRoster(scheduling, signIn.getId(), signIn.getExType(), signIn.getCreateTime(), remark, signIn.getType(), signIn.getAlcoholFlag(), signIn.getAlcoholIntake());
200 - nowSchedulingCache.updateCacheByJobCode(ConstDateUtil.formatDate(dto.get(0).getScheduleDate()), globalIndex.getIndex() + 1, signIn); 184 + nowSchedulingCache.updateCacheByJobCode(remark, ConstDateUtil.formatDate(dto.get(0).getScheduleDate()), globalIndex.getIndex() + 1, signIn);
201 } 185 }
202 186
203 private String getPrompt(Date date, String bcType) { 187 private String getPrompt(Date date, String bcType) {
@@ -218,39 +202,9 @@ public class SchedulingService { @@ -218,39 +202,9 @@ public class SchedulingService {
218 if (requestVo.getExportFlag().equals(NOW)) { 202 if (requestVo.getExportFlag().equals(NOW)) {
219 return getDayReportTableResponseVo(requestVo, response); 203 return getDayReportTableResponseVo(requestVo, response);
220 } 204 }
221 -// // 处理月  
222 -// else if (requestVo.getExportFlag().equals(MONTH)) {  
223 -// return getMonthReportTableResponseVo(requestVo, response);  
224 -// }  
225 -  
226 - return null;  
227 - }  
228 -  
229 - private List<ReportViewResponseVo> getMonthReportTableResponseVo(ReportViewRequestVo requestVo, HttpServletResponse response) {  
230 - // 获取当月到目前为止的所有数据  
231 - List<String> dayList = getAllDaysOfTheMonth();  
232 -// for (String date : dayList) {  
233 -// getDayReportTableResponseVo(date, response);  
234 -// }  
235 return null; 205 return null;
236 } 206 }
237 207
238 - private List<String> getAllDaysOfTheMonth() {  
239 - // 获取当前日期  
240 - LocalDate currentDate = LocalDate.now();  
241 -  
242 - // 获取当前月份  
243 - YearMonth currentMonth = YearMonth.from(currentDate);  
244 - int nowDay = Integer.parseInt(ConstDateUtil.formatDate("dd"));  
245 - // 构建日期集合  
246 - List<String> datesInMonth = new ArrayList<>();  
247 - for (int day = 1; day <= nowDay; day++) {  
248 - String date = currentMonth.atDay(day).toString();  
249 - datesInMonth.add(date);  
250 - }  
251 - return datesInMonth;  
252 - }  
253 -  
254 208
255 private List<ReportViewResponseVo> getDayReportTableResponseVo(ReportViewRequestVo vo, HttpServletResponse response) { 209 private List<ReportViewResponseVo> getDayReportTableResponseVo(ReportViewRequestVo vo, HttpServletResponse response) {
256 // 签到数据 210 // 签到数据
@@ -262,7 +216,7 @@ public class SchedulingService { @@ -262,7 +216,7 @@ public class SchedulingService {
262 Map<String, ReportViewResponseVo> resultMap = new HashMap<>(1200); 216 Map<String, ReportViewResponseVo> resultMap = new HashMap<>(1200);
263 for (String key : orangeMap.keySet()) { 217 for (String key : orangeMap.keySet()) {
264 List<DriverScheduling> list = orangeMap.get(key); 218 List<DriverScheduling> list = orangeMap.get(key);
265 - // 过滤 vo 219 + // 如果有选超时过滤的话过滤
266 if (filterReportVoList(vo.getStage(), list)) { 220 if (filterReportVoList(vo.getStage(), list)) {
267 continue; 221 continue;
268 } 222 }
@@ -296,18 +250,13 @@ public class SchedulingService { @@ -296,18 +250,13 @@ public class SchedulingService {
296 if (list.size() < stage) { 250 if (list.size() < stage) {
297 return true; 251 return true;
298 } 252 }
299 -  
300 - if (Objects.isNull(list.get(stage - 1).getSignTime())) {  
301 - return false;  
302 - }  
303 -  
304 DriverScheduling scheduling = list.get(stage - 1); 253 DriverScheduling scheduling = list.get(stage - 1);
305 // 获取两个 Date 对象之间的时间差(以毫秒为单位) 254 // 获取两个 Date 对象之间的时间差(以毫秒为单位)
306 - long timeDifferenceInMillis = scheduling.getSignTime().getTime() - (scheduling.getBcType().equals(BC_TYPE_OUT) ? scheduling.getFcsjT() : scheduling.getZdsjT()); 255 + long signTime = scheduling.getSignTime() == null ? System.currentTimeMillis() : scheduling.getSignTime().getTime();
  256 + long timeDifferenceInMillis = signTime - (scheduling.getBcType().equals(BC_TYPE_OUT) ? scheduling.getFcsjT() : scheduling.getZdsjT());
  257 + long diffTime = 60 * 1000 * 15;
307 // 相差十五分钟 258 // 相差十五分钟
308 - if (timeDifferenceInMillis > 0 && timeDifferenceInMillis < (60 * 1000 * 15)) {  
309 - return true;  
310 - } else if (timeDifferenceInMillis <= 0) { 259 + if (timeDifferenceInMillis <= diffTime) {
311 return true; 260 return true;
312 } 261 }
313 return false; 262 return false;