diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/cal/calendar/vo/MesCalCalendarListReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/cal/calendar/vo/MesCalCalendarListReqVO.java index 3e9dd62..238a360 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/cal/calendar/vo/MesCalCalendarListReqVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/cal/calendar/vo/MesCalCalendarListReqVO.java @@ -13,6 +13,10 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ @Data public class MesCalCalendarListReqVO { + public static final String QUERY_TYPE_TYPE = "TYPE"; + public static final String QUERY_TYPE_TEAM = "TEAM"; + public static final String QUERY_TYPE_USER = "USER"; + @Schema(description = "开始日期") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime startDay; @@ -21,7 +25,6 @@ public class MesCalCalendarListReqVO { @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime endDay; - // TODO @AI:可以是 string,但是具体的 type,通过 public static final 定义常量,避免魔法字符串 @Schema(description = "查询类型:TYPE-按分类,TEAM-按班组,USER-按个人", requiredMode = Schema.RequiredMode.REQUIRED, example = "TYPE") @NotEmpty(message = "查询类型不能为空") private String queryType; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/cal/calendar/vo/MesCalCalendarRespVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/cal/calendar/vo/MesCalCalendarRespVO.java index 636e6de..4e6bb37 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/cal/calendar/vo/MesCalCalendarRespVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/cal/calendar/vo/MesCalCalendarRespVO.java @@ -6,6 +6,7 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.time.LocalDate; import java.util.List; @Schema(description = "管理后台 - MES 排班日历 Response VO") @@ -19,9 +20,8 @@ public class MesCalCalendarRespVO { @Schema(description = "日期,格式 yyyy-MM-dd", requiredMode = Schema.RequiredMode.REQUIRED, example = "2025-01-15") private String day; - // TODO @AI:可能在注释上,说下对应的 @Schema(description = "轮班方式", example = "2") - private Integer shiftType; + private Integer shiftType; // 对应 MesCalShiftTypeEnum 枚举值 @Schema(description = "班组排班列表") private List teamShifts; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/cal/calendar/MesCalCalendarServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/cal/calendar/MesCalCalendarServiceImpl.java index de7b93c..0191e43 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/cal/calendar/MesCalCalendarServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/cal/calendar/MesCalCalendarServiceImpl.java @@ -35,6 +35,7 @@ import java.util.stream.Collectors; @Validated public class MesCalCalendarServiceImpl implements MesCalCalendarService { + // TODO @AI:看看能不能用 hutool 里,已经枚举好的; private static final DateTimeFormatter DAY_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd"); @Resource @@ -50,10 +51,10 @@ public class MesCalCalendarServiceImpl implements MesCalCalendarService { @Resource private MesCalHolidayMapper holidayMapper; - // TODO @AI:放到 controller 实现。这里不要有; @Override public List getCalendarList(MesCalCalendarListReqVO reqVO) { // 1. 计算月份范围 + // TODO @AI:参数非空,通过 validator 在 MesCalCalendarListReqVO 里; LocalDateTime startDay = reqVO.getStartDay(); LocalDateTime endDay = reqVO.getEndDay(); if (startDay == null || endDay == null) { @@ -61,16 +62,16 @@ public class MesCalCalendarServiceImpl implements MesCalCalendarService { } // 2. 根据查询类型查询班组排班记录 + // TODO @AI:抽个小方法去返回; List teamShifts; switch (reqVO.getQueryType()) { - // TODO @AI:枚举类,放到 MesCalCalendarListReqVO,直接使用 String 静态枚举; - case "TYPE": + case MesCalCalendarListReqVO.QUERY_TYPE_TYPE: teamShifts = getTeamShiftsByCalendarType(reqVO.getCalendarType(), startDay, endDay); break; - case "TEAM": + case MesCalCalendarListReqVO.QUERY_TYPE_TEAM: teamShifts = getTeamShiftsByTeamId(reqVO.getTeamId(), startDay, endDay); break; - case "USER": + case MesCalCalendarListReqVO.QUERY_TYPE_USER: teamShifts = getTeamShiftsByUserId(reqVO.getUserId(), startDay, endDay); break; default: @@ -84,11 +85,12 @@ public class MesCalCalendarServiceImpl implements MesCalCalendarService { Set holidaySet = buildHolidaySet(); // 4. 批量查询关联数据:班组名称、班次名称 - // TODO @AI:批量查询;service 封装 + // TODO @AI:需要通过 teamService 去查询,并且要 getTeamMap 的方式;不要 Map 这种; Set teamIds = teamShifts.stream().map(MesCalTeamShiftDO::getTeamId).collect(Collectors.toSet()); Map teamNameMap = teamMapper.selectBatchIds(teamIds).stream() .collect(Collectors.toMap(MesCalTeamDO::getId, MesCalTeamDO::getName)); + // TODO @AI:使用 planShiftService 的 getPlanShiftMap 方法,批量查询并返回 Map;不要 for 循环去查询; Set shiftIds = teamShifts.stream().map(MesCalTeamShiftDO::getShiftId).collect(Collectors.toSet()); Map shiftMap = new HashMap<>(); if (CollUtil.isNotEmpty(shiftIds)) { @@ -101,7 +103,7 @@ public class MesCalCalendarServiceImpl implements MesCalCalendarService { } // 查询 plan 用于获取 shiftType - // TODO @AI:批量查询;service 封装 + // TODO @AI:使用 planService 的 getPlanMap 方法,批量查询并返回 Map;不要 for 循环去查询; Set planIds = teamShifts.stream().map(MesCalTeamShiftDO::getPlanId) .filter(Objects::nonNull).collect(Collectors.toSet()); Map planMap = new HashMap<>(); @@ -139,21 +141,22 @@ public class MesCalCalendarServiceImpl implements MesCalCalendarService { } } + // TODO @AI:看看怎么进一步简化; List items = dayShifts.stream() - .map(ts -> MesCalCalendarRespVO.TeamShiftItem.builder() - .teamId(ts.getTeamId()) - // TODO @AI:不用这种 default - .teamName(teamNameMap.getOrDefault(ts.getTeamId(), "")) - .shiftId(ts.getShiftId()) - // TODO @AI:不用这种 default - .shiftName(shiftMap.containsKey(ts.getShiftId()) - ? shiftMap.get(ts.getShiftId()).getName() : "") - .sort(ts.getSort()) - .build()) + .map(ts -> { + MesCalPlanShiftDO shift = shiftMap.get(ts.getShiftId()); + return MesCalCalendarRespVO.TeamShiftItem.builder() + .teamId(ts.getTeamId()) + .teamName(teamNameMap.get(ts.getTeamId())) + .shiftId(ts.getShiftId()) + .shiftName(shift != null ? shift.getName() : null) + .sort(ts.getSort()) + .build(); + }) .collect(Collectors.toList()); result.add(MesCalCalendarRespVO.builder() - .day(dayStr) + .day(LocalDate.parse(dayStr, DAY_FORMATTER)) .shiftType(shiftType) .teamShifts(items) .build());