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); |         constructionUserVo.setSfzNumber(decrypt); | ||||||
|         // 计算年龄 |         // 计算年龄 | ||||||
|         LocalDate sfzBirth = constructionUser.getSfzBirth(); |         LocalDate sfzBirth = constructionUser.getSfzBirth(); | ||||||
|  | |||||||
| @ -98,7 +98,7 @@ public class BusProjectTeamMemberController extends BaseController { | |||||||
|      */ |      */ | ||||||
|     @SaCheckPermission("project:projectTeamMember:remove") |     @SaCheckPermission("project:projectTeamMember:remove") | ||||||
|     @Log(title = "项目班组下的成员", businessType = BusinessType.DELETE) |     @Log(title = "项目班组下的成员", businessType = BusinessType.DELETE) | ||||||
|     @DeleteMapping("/") |     @DeleteMapping() | ||||||
|     public R<Void> remove(@RequestBody BusProjectTeamMemberExitReq req) { |     public R<Void> remove(@RequestBody BusProjectTeamMemberExitReq req) { | ||||||
|         return toAjax(busProjectTeamMemberService.deleteById(req)); |         return toAjax(busProjectTeamMemberService.deleteById(req)); | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -279,58 +279,109 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B | |||||||
|             } |             } | ||||||
|  |  | ||||||
|             // 判断当前用户打卡状态 |             // 判断当前用户打卡状态 | ||||||
|             List<BusAttendance> attendances = this.lambdaQuery() |  | ||||||
|                 .eq(BusAttendance::getUserId, userId) |             int clockTypeByTime = getClockTypeByTime(localDate, now, busAttendanceRuleVo); | ||||||
|                 .eq(BusAttendance::getClockDate, localDate) |             if (clockTypeByTime == 1 ) { | ||||||
|                 .list(); |                 List<BusAttendance> attendances = this.lambdaQuery() | ||||||
|             BusAttendance attendance = new BusAttendance(); |                     .eq(BusAttendance::getUserId, userId) | ||||||
|             if (CollUtil.isEmpty(attendances)) { |                     .eq(BusAttendance::getClockDate, localDate) | ||||||
|                 // 上班打卡 |                     .eq(BusAttendance::getClockType, BusAttendanceCommuterEnum.CLOCKIN.getValue()) | ||||||
|                 attendance.setClockType(BusAttendanceCommuterEnum.CLOCKIN.getValue()); |                     .list(); | ||||||
|                 //打卡时间 |                 if(CollectionUtil.isNotEmpty(attendances)){ | ||||||
|                 attendance.setRuleTime(busAttendanceRuleVo.getClockInTime()); |                     BusAttendance busAttendance = attendances.getFirst(); | ||||||
|                 // 判断是否为迟到 |                     if(busAttendance.getClockStatus().equals(BusAttendanceClockStatusEnum.UNCLOCK.getValue())){ | ||||||
|                 if (isLate(now, busAttendanceRuleVo)) { |                         throw new ServiceException("上班缺卡记录已生成,不能更新"); | ||||||
|                     attendance.setClockStatus(BusAttendanceClockStatusEnum.LATE.getValue()); |                     } | ||||||
|                     attendance.setMinuteCount(getMinutesDifference(now, busAttendanceRuleVo.getClockInTime())); |                     //更新打卡时间 | ||||||
|                 } else { |                     busAttendance.setClockTime(now); | ||||||
|                     attendance.setClockStatus(BusAttendanceClockStatusEnum.NORMAL.getValue()); |                     updateById(busAttendance); | ||||||
|  |                 }else{ | ||||||
|  |                     BusAttendance attendance = new BusAttendance(); | ||||||
|  |                     // 上班打卡 | ||||||
|  |                     attendance.setClockType(BusAttendanceCommuterEnum.CLOCKIN.getValue()); | ||||||
|  |                     //打卡时间 | ||||||
|  |                     attendance.setRuleTime(busAttendanceRuleVo.getClockInTime()); | ||||||
|  |                     // 判断是否为迟到 | ||||||
|  |                     if (isLate(now, busAttendanceRuleVo)) { | ||||||
|  |                         attendance.setClockStatus(BusAttendanceClockStatusEnum.LATE.getValue()); | ||||||
|  |                         attendance.setMinuteCount(getMinutesDifference(now, busAttendanceRuleVo.getClockInTime())); | ||||||
|  |                     } 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; | ||||||
|                 } |                 } | ||||||
|             } else if (attendances.size() == 1) { |             }else if (clockTypeByTime == 2 ) { | ||||||
|                 // 下班打卡 |                 List<BusAttendance> attendances = this.lambdaQuery() | ||||||
|                 attendance.setClockType(BusAttendanceCommuterEnum.CLOCKOUT.getValue()); |                     .eq(BusAttendance::getUserId, userId) | ||||||
|                 attendance.setRuleTime(busAttendanceRuleVo.getClockOutTime()); |                     .eq(BusAttendance::getClockDate, localDate) | ||||||
|                 // 判断是否为早退 |                     .eq(BusAttendance::getClockType, BusAttendanceCommuterEnum.CLOCKOUT.getValue()) | ||||||
|                 if (isLeaveEarly(now, busAttendanceRuleVo)) { |                     .list(); | ||||||
|                     attendance.setClockStatus(BusAttendanceClockStatusEnum.LEAVEEARLY.getValue()); |                 if(CollectionUtil.isNotEmpty(attendances)){ | ||||||
|                     attendance.setMinuteCount(getMinutesDifference(now, busAttendanceRuleVo.getClockOutTime())); |                     BusAttendance busAttendance = attendances.getFirst(); | ||||||
|                 } else { |                     if(busAttendance.getClockStatus().equals(BusAttendanceClockStatusEnum.UNCLOCK.getValue())){ | ||||||
|                     attendance.setClockStatus(BusAttendanceClockStatusEnum.NORMAL.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; | ||||||
|                 } |                 } | ||||||
|             } else if (attendances.size() == 2) { |  | ||||||
|                 throw new ServiceException("当前已完成打卡,请勿重复提交", HttpStatus.BAD_REQUEST); |  | ||||||
|             } else { |  | ||||||
|                 throw new ServiceException("打卡异常,请联系管理员", HttpStatus.ERROR); |  | ||||||
|             } |             } | ||||||
|             // 填充信息 |  | ||||||
|             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; |         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字段 |         // 同步修改用户表的team_id字段 | ||||||
|         LambdaUpdateWrapper<SubConstructionUser> constructionUserLuw = Wrappers.lambdaUpdate(SubConstructionUser.class) |         LambdaUpdateWrapper<SubConstructionUser> constructionUserLuw = Wrappers.lambdaUpdate(SubConstructionUser.class) | ||||||
|             .eq(SubConstructionUser::getId, constructionUser.getId()) |             .eq(SubConstructionUser::getId, constructionUser.getId()) | ||||||
|  |             .set(SubConstructionUser::getExitStatus, "2") | ||||||
|             .set(SubConstructionUser::getTeamId, null) |             .set(SubConstructionUser::getTeamId, null) | ||||||
|             .set(SubConstructionUser::getLeaveDate, new Date()); |             .set(SubConstructionUser::getLeaveDate, new Date()); | ||||||
|         constructionUserService.update(constructionUserLuw); |         constructionUserService.update(constructionUserLuw); | ||||||
|  | |||||||
| @ -822,7 +822,12 @@ public class SysUserServiceImpl implements ISysUserService, UserService { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|  |     @Transactional(rollbackFor = Exception.class) | ||||||
|     public Boolean updateAppUserType(Long userId, String appUserType) { |     public Boolean updateAppUserType(Long userId, String appUserType) { | ||||||
|  |         //直接添加权限 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|         return baseMapper.update(null, |         return baseMapper.update(null, | ||||||
|             new LambdaUpdateWrapper<SysUser>() |             new LambdaUpdateWrapper<SysUser>() | ||||||
|                 .set(SysUser::getAppUserType, appUserType) |                 .set(SysUser::getAppUserType, appUserType) | ||||||
|  | |||||||
| @ -18,7 +18,7 @@ | |||||||
|         </if> |         </if> | ||||||
|         <if test="ew.getSqlSelect == null"> |         <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.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> |         </if> | ||||||
|         from sys_user u |         from sys_user u | ||||||
|         ${ew.getCustomSqlSegment} |         ${ew.getCustomSqlSegment} | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 zt
					zt