bug
This commit is contained in:
		| @ -738,7 +738,12 @@ public class SubConstructionUserServiceImpl extends ServiceImpl<SubConstructionU | ||||
|             } | ||||
|         } | ||||
|         // 解密身份证号码 | ||||
|         String decrypt = idCardEncryptorUtil.decrypt(constructionUserVo.getSfzNumber()); | ||||
|         String decrypt = constructionUserVo.getSfzNumber(); | ||||
|         try { | ||||
|             decrypt = idCardEncryptorUtil.decrypt(constructionUserVo.getSfzNumber()); | ||||
|         }catch (Exception e) { | ||||
|             log.error("身份证号码解密失败", e); | ||||
|         } | ||||
|         constructionUserVo.setSfzNumber(decrypt); | ||||
|         // 计算年龄 | ||||
|         LocalDate sfzBirth = constructionUser.getSfzBirth(); | ||||
|  | ||||
| @ -98,7 +98,7 @@ public class BusProjectTeamMemberController extends BaseController { | ||||
|      */ | ||||
|     @SaCheckPermission("project:projectTeamMember:remove") | ||||
|     @Log(title = "项目班组下的成员", businessType = BusinessType.DELETE) | ||||
|     @DeleteMapping("/") | ||||
|     @DeleteMapping() | ||||
|     public R<Void> remove(@RequestBody BusProjectTeamMemberExitReq req) { | ||||
|         return toAjax(busProjectTeamMemberService.deleteById(req)); | ||||
|     } | ||||
|  | ||||
| @ -279,12 +279,24 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B | ||||
|             } | ||||
|  | ||||
|             // 判断当前用户打卡状态 | ||||
|  | ||||
|             int clockTypeByTime = getClockTypeByTime(localDate, now, busAttendanceRuleVo); | ||||
|             if (clockTypeByTime == 1 ) { | ||||
|                 List<BusAttendance> attendances = this.lambdaQuery() | ||||
|                     .eq(BusAttendance::getUserId, userId) | ||||
|                     .eq(BusAttendance::getClockDate, localDate) | ||||
|                     .eq(BusAttendance::getClockType, BusAttendanceCommuterEnum.CLOCKIN.getValue()) | ||||
|                     .list(); | ||||
|                 if(CollectionUtil.isNotEmpty(attendances)){ | ||||
|                     BusAttendance busAttendance = attendances.getFirst(); | ||||
|                     if(busAttendance.getClockStatus().equals(BusAttendanceClockStatusEnum.UNCLOCK.getValue())){ | ||||
|                         throw new ServiceException("上班缺卡记录已生成,不能更新"); | ||||
|                     } | ||||
|                     //更新打卡时间 | ||||
|                     busAttendance.setClockTime(now); | ||||
|                     updateById(busAttendance); | ||||
|                 }else{ | ||||
|                     BusAttendance attendance = new BusAttendance(); | ||||
|             if (CollUtil.isEmpty(attendances)) { | ||||
|                     // 上班打卡 | ||||
|                     attendance.setClockType(BusAttendanceCommuterEnum.CLOCKIN.getValue()); | ||||
|                     //打卡时间 | ||||
| @ -296,22 +308,6 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B | ||||
|                     } else { | ||||
|                         attendance.setClockStatus(BusAttendanceClockStatusEnum.NORMAL.getValue()); | ||||
|                     } | ||||
|             } else if (attendances.size() == 1) { | ||||
|                 // 下班打卡 | ||||
|                 attendance.setClockType(BusAttendanceCommuterEnum.CLOCKOUT.getValue()); | ||||
|                 attendance.setRuleTime(busAttendanceRuleVo.getClockOutTime()); | ||||
|                 // 判断是否为早退 | ||||
|                 if (isLeaveEarly(now, busAttendanceRuleVo)) { | ||||
|                     attendance.setClockStatus(BusAttendanceClockStatusEnum.LEAVEEARLY.getValue()); | ||||
|                     attendance.setMinuteCount(getMinutesDifference(now, busAttendanceRuleVo.getClockOutTime())); | ||||
|                 } else { | ||||
|                     attendance.setClockStatus(BusAttendanceClockStatusEnum.NORMAL.getValue()); | ||||
|                 } | ||||
|             } else if (attendances.size() == 2) { | ||||
|                 throw new ServiceException("当前已完成打卡,请勿重复提交", HttpStatus.BAD_REQUEST); | ||||
|             } else { | ||||
|                 throw new ServiceException("打卡异常,请联系管理员", HttpStatus.ERROR); | ||||
|             } | ||||
|                     // 填充信息 | ||||
|                     attendance.setUserId(userId); | ||||
|                     attendance.setProjectId(req.getProjectId()); | ||||
| @ -331,6 +327,61 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B | ||||
|                     userSalaryDetailService.insertByAttendance(userId, attendance.getClockDate()); | ||||
|                     return save; | ||||
|                 } | ||||
|             }else if (clockTypeByTime == 2 ) { | ||||
|                 List<BusAttendance> attendances = this.lambdaQuery() | ||||
|                     .eq(BusAttendance::getUserId, userId) | ||||
|                     .eq(BusAttendance::getClockDate, localDate) | ||||
|                     .eq(BusAttendance::getClockType, BusAttendanceCommuterEnum.CLOCKOUT.getValue()) | ||||
|                     .list(); | ||||
|                 if(CollectionUtil.isNotEmpty(attendances)){ | ||||
|                     BusAttendance busAttendance = attendances.getFirst(); | ||||
|                     if(busAttendance.getClockStatus().equals(BusAttendanceClockStatusEnum.UNCLOCK.getValue())){ | ||||
|                         throw new ServiceException("下班缺卡记录已生成,不能更新"); | ||||
|                     } | ||||
|                     //更新打卡时间 | ||||
|                     busAttendance.setClockTime(now); | ||||
|                     // 判断是否为早退 | ||||
|                     if (isLeaveEarly(now, busAttendanceRuleVo)) { | ||||
|                         busAttendance.setClockStatus(BusAttendanceClockStatusEnum.LEAVEEARLY.getValue()); | ||||
|                         busAttendance.setMinuteCount(getMinutesDifference(now, busAttendanceRuleVo.getClockOutTime())); | ||||
|                     } else { | ||||
|                         busAttendance.setClockStatus(BusAttendanceClockStatusEnum.NORMAL.getValue()); | ||||
|                     } | ||||
|                     updateById(busAttendance); | ||||
|                 }else { | ||||
|                     BusAttendance attendance = new BusAttendance(); | ||||
|                     // 下班打卡 | ||||
|                     attendance.setClockType(BusAttendanceCommuterEnum.CLOCKOUT.getValue()); | ||||
|                     attendance.setRuleTime(busAttendanceRuleVo.getClockOutTime()); | ||||
|                     // 判断是否为早退 | ||||
|                     if (isLeaveEarly(now, busAttendanceRuleVo)) { | ||||
|                         attendance.setClockStatus(BusAttendanceClockStatusEnum.LEAVEEARLY.getValue()); | ||||
|                         attendance.setMinuteCount(getMinutesDifference(now, busAttendanceRuleVo.getClockOutTime())); | ||||
|                     } else { | ||||
|                         attendance.setClockStatus(BusAttendanceClockStatusEnum.NORMAL.getValue()); | ||||
|                     } | ||||
|                     // 填充信息 | ||||
|                     attendance.setUserId(userId); | ||||
|                     attendance.setProjectId(req.getProjectId()); | ||||
|                     attendance.setClockDate(localDate); | ||||
|                     attendance.setClockTime(now); | ||||
|                     attendance.setUserName(constructionUser.getUserName()); | ||||
|                     // 记录打卡坐标 | ||||
|                     attendance.setLat(req.getLat()); | ||||
|                     attendance.setLng(req.getLng()); | ||||
|                     attendance.setClockLocation(req.getLocationName()); | ||||
|                     // 上传人脸照 | ||||
|                     SysOssVo upload = ossService.upload(file); | ||||
|                     attendance.setFacePic(upload.getOssId().toString()); | ||||
|                     chatServerHandler.sendSystemMessageToUser(userId, "打卡成功", "1"); | ||||
|                     boolean save = this.save(attendance); | ||||
|                     //插入工资 | ||||
|                     userSalaryDetailService.insertByAttendance(userId, attendance.getClockDate()); | ||||
|                     return save; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|  | ||||
| @ -595,6 +646,68 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     private int getClockTypeByTime(LocalDate date, LocalDateTime now, BusAttendanceRuleVo busAttendanceRuleVo) { | ||||
|         LocalTime clockInTime = busAttendanceRuleVo.getClockInTime(); | ||||
|         LocalTime clockOutTime = busAttendanceRuleVo.getClockOutTime(); | ||||
|         LocalTime clockInResultTime = busAttendanceRuleVo.getClockInResultTime(); | ||||
|         LocalTime clockOutResultTime = busAttendanceRuleVo.getClockOutResultTime(); | ||||
|  | ||||
|         // 构建各个时间节点 | ||||
|         LocalDateTime clockInDateTime = LocalDateTime.of(date, clockInTime); | ||||
|         LocalDateTime clockInResultDateTime; | ||||
|         LocalDateTime clockOutDateTime; | ||||
|         LocalDateTime clockOutResultDateTime; | ||||
|  | ||||
|         // 处理跨天情况 | ||||
|         if (clockInResultTime.isBefore(clockInTime)) { | ||||
|             clockInResultDateTime = LocalDateTime.of(date.plusDays(1), clockInResultTime); | ||||
|         } else { | ||||
|             clockInResultDateTime = LocalDateTime.of(date, clockInResultTime); | ||||
|         } | ||||
|  | ||||
|         if (clockOutTime.isBefore(clockInTime)) { | ||||
|             clockOutDateTime = LocalDateTime.of(date.plusDays(1), clockOutTime); | ||||
|         } else { | ||||
|             clockOutDateTime = LocalDateTime.of(date, clockOutTime); | ||||
|         } | ||||
|  | ||||
|         if (clockOutResultTime.isBefore(clockInTime)) { | ||||
|             clockOutResultDateTime = LocalDateTime.of(date.plusDays(1), clockOutResultTime); | ||||
|         } else { | ||||
|             clockOutResultDateTime = LocalDateTime.of(date, clockOutResultTime); | ||||
|         } | ||||
|  | ||||
|         // now在clockInDateTime 和clockInResultDateTime之间,左开右闭 属于上班 | ||||
|         if (now.isAfter(clockInDateTime) && !now.isAfter(clockInResultDateTime)) { | ||||
|             return 1; // 上班打卡 | ||||
|         } | ||||
|  | ||||
|         // now在clockInResultDateTime 和clockOutResultDateTime之间,左开右闭 属于下班 | ||||
|         if (now.isAfter(clockInResultDateTime) && !now.isAfter(clockOutResultDateTime)) { | ||||
|             return 2; // 下班打卡 | ||||
|         } | ||||
|  | ||||
|         // 特殊情况处理:如果在上班打卡时间之前或者在下班打卡时间之后 | ||||
|         if (!now.isAfter(clockInDateTime)) { | ||||
|             return 1; // 上班打卡(早于规定上班时间) | ||||
|         } | ||||
|  | ||||
|         if (!now.isBefore(clockOutResultDateTime)) { | ||||
|             // 判断是否更接近上班时间还是下班时间 | ||||
|             Duration toClockIn = Duration.between(now, clockInDateTime.plusDays(1)); | ||||
|             Duration toClockOut = Duration.between(clockOutResultDateTime, now); | ||||
|  | ||||
|             if (toClockIn.compareTo(toClockOut) < 0) { | ||||
|                 return 1; // 上班打卡 | ||||
|             } else { | ||||
|                 return 2; // 下班打卡 | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         // 默认返回下班打卡 | ||||
|         return 2; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 判断是否迟到 | ||||
|      */ | ||||
| @ -1202,4 +1315,7 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B | ||||
|     } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| } | ||||
|  | ||||
| @ -316,6 +316,7 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM | ||||
|         // 同步修改用户表的team_id字段 | ||||
|         LambdaUpdateWrapper<SubConstructionUser> constructionUserLuw = Wrappers.lambdaUpdate(SubConstructionUser.class) | ||||
|             .eq(SubConstructionUser::getId, constructionUser.getId()) | ||||
|             .set(SubConstructionUser::getExitStatus, "2") | ||||
|             .set(SubConstructionUser::getTeamId, null) | ||||
|             .set(SubConstructionUser::getLeaveDate, new Date()); | ||||
|         constructionUserService.update(constructionUserLuw); | ||||
|  | ||||
| @ -822,7 +822,12 @@ public class SysUserServiceImpl implements ISysUserService, UserService { | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public Boolean updateAppUserType(Long userId, String appUserType) { | ||||
|         //直接添加权限 | ||||
|  | ||||
|  | ||||
|  | ||||
|         return baseMapper.update(null, | ||||
|             new LambdaUpdateWrapper<SysUser>() | ||||
|                 .set(SysUser::getAppUserType, appUserType) | ||||
|  | ||||
| @ -18,7 +18,7 @@ | ||||
|         </if> | ||||
|         <if test="ew.getSqlSelect == null"> | ||||
|             u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, | ||||
|             u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark | ||||
|             u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,u.app_user_type | ||||
|         </if> | ||||
|         from sys_user u | ||||
|         ${ew.getCustomSqlSegment} | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 zt
					zt