diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusAttendanceController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusAttendanceController.java index ede0587b..200a04f9 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusAttendanceController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusAttendanceController.java @@ -68,6 +68,11 @@ public class BusAttendanceController extends BaseController { return R.ok(busAttendanceService.listAttendanceMonthListByUserId(req)); } + @GetMapping("/sub/list/month/byUserId") + public R> subListAttendanceMonthListByUserId(BusAttendanceMonthByUserIdReq req) { + return R.ok(busAttendanceService.subListAttendanceMonthListByUserId(req)); + } + /** * 导出考勤列表 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusAttendanceService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusAttendanceService.java index 471c9d21..64cbe1c5 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusAttendanceService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusAttendanceService.java @@ -43,6 +43,9 @@ public interface IBusAttendanceService extends IService{ */ List listAttendanceMonthListByUserId(BusAttendanceMonthByUserIdReq req); + + List subListAttendanceMonthListByUserId(BusAttendanceMonthByUserIdReq req); + /** * 分页查询考勤列表 * 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 0764ed6a..00c6ab5b 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 @@ -229,6 +229,76 @@ public class BusAttendanceServiceImpl extends ServiceImpl subListAttendanceMonthListByUserId(BusAttendanceMonthByUserIdReq req) { + Long userId = req.getUserId(); + String clockMonth = req.getClockMonth(); + // 解析月份 + YearMonth yearMonth; + if (StringUtils.isNotBlank(clockMonth)) { + // 校验月份格式 + if (!DateConstant.YEAR_MONTH_PATTERN.matcher(clockMonth).matches()) { + throw new ServiceException("月份格式不正确", HttpStatus.ERROR); + } + yearMonth = YearMonth.parse(clockMonth); + } else { + // 如果月份为空,则默认查询当前月份 + yearMonth = YearMonth.now(); + } + // 计算当月第一天 / 最后一天 + Date start = DateUtils.toDate(yearMonth.atDay(1)); + Date end = DateUtils.toDate(yearMonth.atEndOfMonth()); + // 查询当月考勤记录 + Map> dateListMap = this.lambdaQuery() + .eq(BusAttendance::getUserId, userId) + .between(BusAttendance::getClockDate, start, end) + .list() + .stream().collect(Collectors.groupingBy(BusAttendance::getClockDate)); + // 遍历每天,计算考勤状态 + List respList = new ArrayList<>(); + dateListMap.forEach((date, attendanceList) -> { + BusAttendanceMonthByUserIdVo resp = new BusAttendanceMonthByUserIdVo(); + resp.setId(userId); + resp.setClockDate(date); + List attendanceListByDayList = new ArrayList<>(); + String clockInStatus = null; + String clockOutStatus = null; + String clockAllDayStatus = null; + String status; + for (BusAttendance attendance : attendanceList) { + // 获取考勤记录 + BusAttendanceListByDay day = BusAttendanceListByDay.build(attendance); + attendanceListByDayList.add(day); + // 获取上下班状态 + if (BusAttendanceCommuterEnum.CLOCKIN.getValue().equals(attendance.getClockType())) { + clockInStatus = attendance.getClockStatus(); + } else if (BusAttendanceCommuterEnum.CLOCKOUT.getValue().equals(attendance.getClockType())) { + clockOutStatus = attendance.getClockStatus(); + } else { + clockAllDayStatus = attendance.getClockStatus(); + } + } + // 统计当天考勤状态 + if (BusAttendanceClockStatusEnum.LEAVE.getValue().equals(clockAllDayStatus)) { + return; + } else if (BusAttendanceClockStatusEnum.NORMAL.getValue().equals(clockInStatus) + && BusAttendanceClockStatusEnum.NORMAL.getValue().equals(clockOutStatus)) { + status = BusAttendanceStatusEnum.NORMAL.getValue(); + } else if (BusAttendanceClockStatusEnum.REISSUE.getValue().equals(clockInStatus) + || BusAttendanceClockStatusEnum.REISSUE.getValue().equals(clockOutStatus)) { + status = BusAttendanceStatusEnum.REISSUE.getValue(); + } else { + status = BusAttendanceStatusEnum.ERROR.getValue(); + } + resp.setStatus(status); + resp.setAttendanceList(attendanceListByDayList); + respList.add(resp); + }); + // 按打卡日期正序排列 + respList.sort(Comparator.comparing(BusAttendanceMonthByUserIdVo::getClockDate)); + return respList; + } + /** * 查询符合条件的考勤列表 * @@ -2493,7 +2563,8 @@ public class BusAttendanceServiceImpl extends ServiceImpl userList = list.stream().filter(attendance -> attendance.getUserId().equals(sysUserVo.getUserId())).toList(); @@ -2597,7 +2668,7 @@ public class BusAttendanceServiceImpl extends ServiceImpl