yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/vo/HrmAttendanceRecordPageReqVO.java
@@ -17,6 +17,9 @@ @Schema(description = "员工ID", example = "1") private Long userId; @Schema(description = "员工姓名(模糊匹配)", example = "任伟") private String userName; @Schema(description = "部门ID", example = "1") private Long deptId; yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/attendance/HrmAttendanceRecordMapper.java
@@ -32,6 +32,21 @@ .orderByDesc(HrmAttendanceRecordDO::getDate)); } /** * 分页查询(支持按员工ID集合过滤,用于「员工姓名」模糊搜索) */ default PageResult<HrmAttendanceRecordDO> selectPage(HrmAttendanceRecordPageReqVO reqVO, Collection<Long> userIds) { return selectPage(reqVO, new LambdaQueryWrapperX<HrmAttendanceRecordDO>() .eqIfPresent(HrmAttendanceRecordDO::getUserId, reqVO.getUserId()) .inIfPresent(HrmAttendanceRecordDO::getUserId, userIds) .eqIfPresent(HrmAttendanceRecordDO::getDeptId, reqVO.getDeptId()) .geIfPresent(HrmAttendanceRecordDO::getDate, reqVO.getStartDate()) .leIfPresent(HrmAttendanceRecordDO::getDate, reqVO.getEndDate()) .eqIfPresent(HrmAttendanceRecordDO::getClockInType, reqVO.getClockInType()) .eqIfPresent(HrmAttendanceRecordDO::getClockOutType, reqVO.getClockOutType()) .orderByDesc(HrmAttendanceRecordDO::getDate)); } default HrmAttendanceRecordDO selectByUserIdAndDate(Long userId, LocalDate date) { return selectOne(new LambdaQueryWrapperX<HrmAttendanceRecordDO>() .eq(HrmAttendanceRecordDO::getUserId, userId) yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceRecordServiceImpl.java
@@ -34,6 +34,8 @@ import java.time.LocalDateTime; import java.time.LocalTime; import java.util.List; import java.util.stream.Collectors; import java.util.Set; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.hrm.enums.ErrorCodeConstants.*; @@ -60,7 +62,18 @@ @Override public PageResult<HrmAttendanceRecordDO> getAttendanceRecordPage(HrmAttendanceRecordPageReqVO pageReqVO) { return attendanceRecordMapper.selectPage(pageReqVO); // 员工姓名模糊搜索:先按姓名查出员工ID集合,再按集合过滤 // (hrm_attendance_record.user_id 存的是 hrm_employee.id) Set<Long> nameMatchedIds = null; if (StrUtil.isNotBlank(pageReqVO.getUserName())) { List<HrmEmployeeDO> matched = employeeService.getEmployeeListByNameLike(pageReqVO.getUserName().trim()); nameMatchedIds = matched.stream().map(HrmEmployeeDO::getId).collect(Collectors.toSet()); if (nameMatchedIds.isEmpty()) { // 姓名搜不到人时直接返回空,避免退化成查全部 return PageResult.empty(); } } return attendanceRecordMapper.selectPage(pageReqVO, nameMatchedIds); } @Override