diff --git a/xinnengyuan/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/UserDTO.java b/xinnengyuan/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/UserDTO.java index cb5def9a..7af5ab87 100644 --- a/xinnengyuan/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/UserDTO.java +++ b/xinnengyuan/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/UserDTO.java @@ -70,4 +70,9 @@ public class UserDTO implements Serializable { */ private Date createTime; + /** + * 头像 + */ + private String avatarUrl; + } diff --git a/xinnengyuan/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/UserService.java b/xinnengyuan/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/UserService.java index 3185cd86..616de043 100644 --- a/xinnengyuan/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/UserService.java +++ b/xinnengyuan/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/UserService.java @@ -130,4 +130,9 @@ public interface UserService { */ String selectAvatarById(Long userId); + /** + * 通过用户id查询头像 + */ + UserDTO selectUser(Long userId); + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserServiceImpl.java index 7a16d4b0..d07ad2b8 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserServiceImpl.java @@ -1127,6 +1127,8 @@ public class SubConstructionUserServiceImpl extends ServiceImpl constructionUserPage = this.page(pageQuery.build(), lqw); List constructionUserList = constructionUserPage.getRecords(); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/attendance/AttendanceJob.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/attendance/AttendanceJob.java index 4b19fbc9..b7cd3f9c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/attendance/AttendanceJob.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/attendance/AttendanceJob.java @@ -57,9 +57,9 @@ public class AttendanceJob { private IBusWorkWageService workWageService; //0系统管理员 1普通人员 2项目管理员 3分包 只有1才生成缺卡记录 无需打卡人员 - private static final List noClockUserTypes = Arrays.asList("0","2"); + private static final List noClockUserTypes = Arrays.asList("0", "2"); -// @Scheduled(cron = "0 0/10 * * * ?") + // @Scheduled(cron = "0 0/10 * * * ?") @JobExecutor(name = "clockInMiss") public void clockInMiss() { @@ -90,7 +90,7 @@ public class AttendanceJob { LocalDate date = LocalDate.now(); //管理员关联多个项目,需要记录是否已生成缺卡记录 - HashSet manageUserIds = new HashSet<>(); +// HashSet manageUserIds = new HashSet<>(); List missList = new ArrayList<>(); for (BusAttendanceRule rule : list) { @@ -113,52 +113,44 @@ public class AttendanceJob { } } - if(checkSkip(rule,date)){ + if (checkSkip(rule, date)) { continue; } - //查询项目下的关联人员 - List relevancyList = userProjectRelevancyService.list(Wrappers.lambdaQuery(BusUserProjectRelevancy.class) - .eq(BusUserProjectRelevancy::getProjectId, rule.getProjectId())); +// //查询项目下的关联人员 +// List relevancyList = userProjectRelevancyService.list(Wrappers.lambdaQuery(BusUserProjectRelevancy.class) +// .eq(BusUserProjectRelevancy::getProjectId, rule.getProjectId())); + List constructionUsers = constructionUserService.list(Wrappers.lambdaQuery() + .eq(SubConstructionUser::getProjectId, rule.getProjectId()) + .isNotNull(SubConstructionUser::getTeamId) + .eq(SubConstructionUser::getUserRole, "0") //0-施工人员 1-管理人员 2-分包管理人员 + ); + //查询当天已打上班卡人员 List attendanceList = attendanceService.list(Wrappers.lambdaQuery(BusAttendance.class) .eq(BusAttendance::getClockDate, date) .eq(BusAttendance::getClockType, BusAttendanceCommuterEnum.CLOCKIN.getValue()) + .eq(BusAttendance::getProjectId, rule.getProjectId()) ); List attendanceUserIds = attendanceList.stream().map(BusAttendance::getUserId).toList(); - - for (BusUserProjectRelevancy relevancy : relevancyList) { - - if (attendanceUserIds.contains(relevancy.getUserId()) || noClockUserTypes.contains(relevancy.getUserType())) { + for (SubConstructionUser constructionUser : constructionUsers) { + Long sysUserId = constructionUser.getSysUserId(); + if (attendanceUserIds.contains(sysUserId)) { continue; } - BusAttendance busAttendance = new BusAttendance(); - busAttendance.setProjectId(relevancy.getProjectId()); - // 管理人员 项目id是0 - if("2".equals(relevancy.getUserType()) && !manageUserIds.contains(relevancy.getUserId())){ - manageUserIds.add(relevancy.getUserId()); - busAttendance.setProjectId(0L); - } - SubConstructionUser constructionUser = constructionUserService.lambdaQuery() - .eq(SubConstructionUser::getSysUserId, relevancy.getUserId()) - .last("limit 1") - .one(); - if(constructionUser==null){ - continue; - } - busAttendance.setUserId(relevancy.getUserId()); + busAttendance.setProjectId(constructionUser.getProjectId()); + busAttendance.setUserId(sysUserId); busAttendance.setUserName(constructionUser.getUserName()); - busAttendance.setClockDate(date); busAttendance.setClockType(BusAttendanceCommuterEnum.CLOCKIN.getValue()); busAttendance.setRuleTime(rule.getClockInTime()); - if(leaveService.isLeave(date, relevancy.getUserId())){ + if (leaveService.isLeave(date, sysUserId)) { busAttendance.setClockStatus(BusAttendanceClockStatusEnum.LEAVE.getValue()); - }else { + } else { busAttendance.setClockStatus(BusAttendanceClockStatusEnum.UNCLOCK.getValue()); } busAttendance.setSalary(computeSalary(constructionUser, null)); @@ -178,7 +170,7 @@ public class AttendanceJob { log.info("执行定时任务:上班缺卡记录生成完成"); } -// @Scheduled(cron = "0 0/10 * * * ?") + // @Scheduled(cron = "0 0/10 * * * ?") @JobExecutor(name = "clockOutMiss") public void clockOutMiss() { log.info("执行定时任务:下班缺卡记录生成"); @@ -208,7 +200,7 @@ public class AttendanceJob { LocalDate date = LocalDate.now(); //管理员关联多个项目,需要记录是否已生成缺卡记录 - HashSet manageUserIds = new HashSet<>(); +// HashSet manageUserIds = new HashSet<>(); List missList = new ArrayList<>(); @@ -235,20 +227,24 @@ public class AttendanceJob { date = date.minusDays(1); } } - if(checkSkip(rule,date)){ + if (checkSkip(rule, date)) { continue; } //查询项目下的关联人员 - List relevancyList = userProjectRelevancyService.list(Wrappers.lambdaQuery(BusUserProjectRelevancy.class) - .eq(BusUserProjectRelevancy::getProjectId, rule.getProjectId())); - +// List relevancyList = userProjectRelevancyService.list(Wrappers.lambdaQuery(BusUserProjectRelevancy.class) +// .eq(BusUserProjectRelevancy::getProjectId, rule.getProjectId())); + List constructionUsers = constructionUserService.list(Wrappers.lambdaQuery() + .eq(SubConstructionUser::getProjectId, rule.getProjectId()) + .isNotNull(SubConstructionUser::getTeamId) + .eq(SubConstructionUser::getUserRole, "0") //0-施工人员 1-管理人员 2-分包管理人员 + ); //查询当天打卡人员 List allAttendanceList = attendanceService.list(Wrappers.lambdaQuery(BusAttendance.class) .eq(BusAttendance::getClockDate, date) ); - List inAttendanceList = allAttendanceList.stream() + List inAttendanceList = allAttendanceList.stream() .filter(attendance -> BusAttendanceCommuterEnum.CLOCKIN.getValue().equals(attendance.getClockType())).toList(); List attendanceList = allAttendanceList.stream() @@ -257,38 +253,27 @@ public class AttendanceJob { List attendanceUserIds = attendanceList.stream().map(BusAttendance::getUserId).toList(); - for (BusUserProjectRelevancy relevancy : relevancyList) { - if (attendanceUserIds.contains(relevancy.getUserId()) || noClockUserTypes.contains(relevancy.getUserType())) { + for (SubConstructionUser constructionUser : constructionUsers) { + Long sysUserId = constructionUser.getSysUserId(); + if (attendanceUserIds.contains(sysUserId)) { continue; } BusAttendance busAttendance = new BusAttendance(); // 管理人员 项目id是0 - busAttendance.setProjectId(relevancy.getProjectId()); - if("2".equals(relevancy.getUserType()) && !manageUserIds.contains(relevancy.getUserId())){ - manageUserIds.add(relevancy.getUserId()); - busAttendance.setProjectId(0L); - } + busAttendance.setProjectId(constructionUser.getProjectId()); - SubConstructionUser constructionUser = constructionUserService.lambdaQuery() - .eq(SubConstructionUser::getSysUserId, relevancy.getUserId()) - .last("limit 1") - .one(); - if(constructionUser==null){ - continue; - } - - busAttendance.setUserId(relevancy.getUserId()); + busAttendance.setUserId(sysUserId); busAttendance.setUserName(constructionUser.getUserName()); busAttendance.setClockDate(date); busAttendance.setClockType(BusAttendanceCommuterEnum.CLOCKOUT.getValue()); busAttendance.setRuleTime(rule.getClockOutTime()); - if(leaveService.isLeave(date, relevancy.getUserId())){ + if (leaveService.isLeave(date, sysUserId)) { busAttendance.setClockStatus(BusAttendanceClockStatusEnum.LEAVE.getValue()); - }else { + } else { busAttendance.setClockStatus(BusAttendanceClockStatusEnum.UNCLOCK.getValue()); } - List list1 = inAttendanceList.stream().filter(vo -> relevancy.getUserId().equals(vo.getUserId())).toList(); + List list1 = inAttendanceList.stream().filter(vo -> sysUserId.equals(vo.getUserId())).toList(); busAttendance.setSalary(computeSalary(constructionUser, list1)); missList.add(busAttendance); } @@ -308,7 +293,7 @@ public class AttendanceJob { /** * 检查是否跳过 */ - public Boolean checkSkip(BusAttendanceRule rule,LocalDate date) { + public Boolean checkSkip(BusAttendanceRule rule, LocalDate date) { //项目异常状态 BusProject byId = projectService.getById(rule.getProjectId()); if (byId == null || Objects.equals(byId.getStatus(), "1")) { diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java index 7bc12378..7e71f5c2 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java @@ -887,6 +887,7 @@ public class BusAttendanceServiceImpl extends ServiceImpl list = constructionUserService.list(Wrappers.lambdaQuery(SubConstructionUser.class) .eq(SubConstructionUser::getProjectId, dto.getProjectId()) + .eq(SubConstructionUser::getUserRole, "0") .eq(dto.getTeamId() != null, SubConstructionUser::getTeamId, dto.getTeamId()) .in(dto.getTeamId() == null && "2".equals(appUserType), SubConstructionUser::getTeamId, list2) .eq(StringUtils.isNotBlank(dto.getTypeOfWork()), SubConstructionUser::getTypeOfWork, dto.getTypeOfWork()) @@ -948,6 +949,7 @@ public class BusAttendanceServiceImpl extends ServiceImpl getClockDateForTwoWeekList(Long projectId) { LocalDate now = LocalDate.now(); + + //查询所有管理员和分包人员 排除 + List excludeUserIds = constructionUserService.list(Wrappers.lambdaQuery() + .ne(SubConstructionUser::getUserRole, "0") + ).stream().map(SubConstructionUser::getSysUserId).toList(); + // 往前14天,包含今天 LocalDate startDate = now.minusDays(13); List list = list(Wrappers.lambdaQuery() .eq(BusAttendance::getProjectId, projectId) + .notIn(CollectionUtil.isNotEmpty(excludeUserIds),BusAttendance::getUserId, excludeUserIds) .between(BusAttendance::getClockDate, startDate, now) .orderByAsc(BusAttendance::getClockDate) ); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java index 552456ce..4ea8f83b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java @@ -1202,4 +1202,22 @@ public class SysUserServiceImpl implements ISysUserService, UserService { } return baseMapper.updateById(sysUser)>0; } + + @Override + public UserDTO selectUser(Long userId) { + + SysUser sysUser = baseMapper.selectById(userId); + if (sysUser == null) { + return null; + } + UserDTO userDTO = BeanUtil.copyProperties(sysUser, UserDTO.class); + + if(sysUser.getAvatar() != null){ + SysOss sysOss = ossMapper.selectById(sysUser.getAvatar()); + if(sysOss != null){ + userDTO.setAvatarUrl(sysOss.getUrl()); + } + } + return userDTO; + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/app/FlowAppController.java b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/app/FlowAppController.java index 64aca7d4..170930c8 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/app/FlowAppController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/app/FlowAppController.java @@ -74,11 +74,12 @@ public class FlowAppController { if(flowHisTaskVo != null){ appVo.setFlowStatus(flowHisTaskVo.getFlowStatus()); if(BusinessStatusEnum.WAITING.getStatus().equals(flowHisTaskVo.getFlowStatus())){ - appVo.setAuditName(flowHisTaskVo.getApproveName()); + appVo.setAuditName(userService.selectNicknameByIds(flowHisTaskVo.getApprover())); }else { - appVo.setApproveName(flowHisTaskVo.getApproveName()); - if(StrUtil.isNotBlank(flowHisTaskVo.getApprover())){ - appVo.setApproveAvatar(userService.selectAvatarById(Long.valueOf(flowHisTaskVo.getApprover()))); + UserDTO userDTO = userService.selectUser(Long.valueOf(flowHisTaskVo.getApprover())); + if(userDTO != null){ + appVo.setApproveAvatar(userDTO.getAvatarUrl()); + appVo.setApproveName(userDTO.getNickName()); } } }else { diff --git a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java index 95ba89a9..c11ece92 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java @@ -153,6 +153,7 @@ public class WorkflowGlobalListener implements GlobalListener { List userDTOS = flwTaskAssigneeService.fetchUsersByStorageIds(permissionFlag, Long.valueOf(projectId)); + flowTask.setPermissionList(userDTOS.stream().map(UserDTO::getUserId).map(String::valueOf).collect(Collectors.toList())); } } catch (Exception e) {