Commit 3ec0fc4152f0b2bde2bc7454b9bed1702378fd51

Authored by YunaiV
1 parent e2613a57

✨ feat(mes): 优化排班日历查询逻辑,支持批量班组查询

重构排班日历查询功能,简化代码实现,支持一次性查询多个班组的排班记录。
新增班组编号集合字段,提升查询效率和可读性。
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/cal/calendar/MesCalCalendarController.java
... ... @@ -161,14 +161,11 @@ public class MesCalCalendarController {
161 161 if (CollUtil.isEmpty(teams)) {
162 162 return Collections.emptyList();
163 163 }
164   - // 2. 查询这些班组在日期范围内的排班记录
165   - List<MesCalTeamShiftDO> result = new ArrayList<>(teams.size());
166   - for (MesCalTeamDO team : teams) {
167   - MesCalTeamShiftListReqVO reqVO = new MesCalTeamShiftListReqVO()
168   - .setTeamId(team.getId()).setStartDay(startDay).setEndDay(endDay);
169   - result.addAll(teamShiftService.getTeamShiftList(reqVO));
170   - }
171   - return result;
  164 + // 2. 一次 IN 查询这些班组在日期范围内的排班记录
  165 + MesCalTeamShiftListReqVO reqVO = new MesCalTeamShiftListReqVO()
  166 + .setTeamIds(convertSet(teams, MesCalTeamDO::getId))
  167 + .setStartDay(startDay).setEndDay(endDay);
  168 + return teamShiftService.getTeamShiftList(reqVO);
172 169 }
173 170  
174 171 /**
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/cal/team/vo/shift/MesCalTeamShiftListReqVO.java
... ... @@ -5,6 +5,7 @@ import lombok.Data;
5 5 import org.springframework.format.annotation.DateTimeFormat;
6 6  
7 7 import java.time.LocalDateTime;
  8 +import java.util.Collection;
8 9  
9 10 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
10 11  
... ... @@ -15,6 +16,9 @@ public class MesCalTeamShiftListReqVO {
15 16 @Schema(description = "班组编号", example = "201")
16 17 private Long teamId;
17 18  
  19 + @Schema(description = "班组编号集合")
  20 + private Collection<Long> teamIds;
  21 +
18 22 @Schema(description = "排班计划编号", example = "1")
19 23 private Long planId;
20 24  
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dv/machinery/vo/type/MesDvMachineryTypeSaveReqVO.java
... ... @@ -12,8 +12,7 @@ public class MesDvMachineryTypeSaveReqVO {
12 12 @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
13 13 private Long id;
14 14  
15   - @Schema(description = "类型编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "MT-001")
16   - @NotEmpty(message = "类型编码不能为空")
  15 + @Schema(description = "类型编码", example = "MT-001")
17 16 private String code;
18 17  
19 18 @Schema(description = "类型名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "数控机床")
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/cal/team/MesCalTeamShiftMapper.java
... ... @@ -19,6 +19,7 @@ public interface MesCalTeamShiftMapper extends BaseMapperX&lt;MesCalTeamShiftDO&gt; {
19 19 default List<MesCalTeamShiftDO> selectList(MesCalTeamShiftListReqVO reqVO) {
20 20 return selectList(new LambdaQueryWrapperX<MesCalTeamShiftDO>()
21 21 .eqIfPresent(MesCalTeamShiftDO::getTeamId, reqVO.getTeamId())
  22 + .inIfPresent(MesCalTeamShiftDO::getTeamId, reqVO.getTeamIds())
22 23 .eqIfPresent(MesCalTeamShiftDO::getPlanId, reqVO.getPlanId())
23 24 .geIfPresent(MesCalTeamShiftDO::getDay, reqVO.getStartDay())
24 25 .leIfPresent(MesCalTeamShiftDO::getDay, reqVO.getEndDay())
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/dv/machinery/MesDvMachineryTypeMapper.java
... ... @@ -36,9 +36,8 @@ public interface MesDvMachineryTypeMapper extends BaseMapperX&lt;MesDvMachineryType
36 36 .eq(MesDvMachineryTypeDO::getName, name));
37 37 }
38 38  
39   - default MesDvMachineryTypeDO selectByParentIdAndCode(Long parentId, String code) {
  39 + default MesDvMachineryTypeDO selectByCode(String code) {
40 40 return selectOne(new LambdaQueryWrapperX<MesDvMachineryTypeDO>()
41   - .eq(MesDvMachineryTypeDO::getParentId, parentId)
42 41 .eq(MesDvMachineryTypeDO::getCode, code));
43 42 }
44 43  
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java
... ... @@ -142,7 +142,7 @@ public interface ErrorCodeConstants {
142 142 ErrorCode DV_MACHINERY_TYPE_PARENT_NOT_EXITS = new ErrorCode(1_040_300_002, "父级类型不存在");
143 143 ErrorCode DV_MACHINERY_TYPE_PARENT_ERROR = new ErrorCode(1_040_300_003, "不能设置自己为父类型");
144 144 ErrorCode DV_MACHINERY_TYPE_NAME_DUPLICATE = new ErrorCode(1_040_300_004, "同一父类型下已存在该名称");
145   - ErrorCode DV_MACHINERY_TYPE_CODE_DUPLICATE = new ErrorCode(1_040_300_005, "同一父类型下已存在该编码");
  145 + ErrorCode DV_MACHINERY_TYPE_CODE_DUPLICATE = new ErrorCode(1_040_300_005, "设备类型编码已存在");
146 146 ErrorCode DV_MACHINERY_TYPE_PARENT_IS_CHILD = new ErrorCode(1_040_300_006, "不能设置自己的子类型为父类型");
147 147 ErrorCode DV_MACHINERY_TYPE_HAS_MACHINERY = new ErrorCode(1_040_300_007, "该类型下存在设备,无法删除");
148 148  
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/md/autocode/MesMdAutoCodeRuleCodeEnum.java
... ... @@ -37,7 +37,8 @@ public enum MesMdAutoCodeRuleCodeEnum {
37 37 WM_STOCK_TAKING_PLAN_CODE("WM_STOCK_TAKING_PLAN_CODE", "盘点方案编码"),
38 38 WM_STOCK_TAKING_CODE("WM_STOCK_TAKING_CODE", "盘点任务编码"),
39 39 TRANSFER_CODE("TRANSFER_CODE", "转移调拨单编码"),
40   - WM_OUTSOURCE_ISSUE_CODE("WM_OUTSOURCE_ISSUE_CODE", "外协发料单编码");
  40 + WM_OUTSOURCE_ISSUE_CODE("WM_OUTSOURCE_ISSUE_CODE", "外协发料单编码"),
  41 + DV_MACHINERY_TYPE_CODE("DV_MACHINERY_TYPE_CODE", "设备类型编码");
41 42  
42 43 /**
43 44 * 规则代码
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/dv/machinery/MesDvMachineryTypeServiceImpl.java
... ... @@ -2,12 +2,14 @@ package cn.iocoder.yudao.module.mes.service.dv.machinery;
2 2  
3 3 import cn.hutool.core.collection.CollUtil;
4 4 import cn.hutool.core.util.ObjUtil;
  5 +import cn.hutool.core.util.StrUtil;
5 6 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
6 7 import cn.iocoder.yudao.module.mes.controller.admin.dv.machinery.vo.type.MesDvMachineryTypeListReqVO;
7 8 import cn.iocoder.yudao.module.mes.controller.admin.dv.machinery.vo.type.MesDvMachineryTypeSaveReqVO;
8 9 import cn.iocoder.yudao.module.mes.dal.dataobject.dv.machinery.MesDvMachineryTypeDO;
9   -import cn.iocoder.yudao.module.mes.dal.mysql.dv.machinery.MesDvMachineryMapper;
10 10 import cn.iocoder.yudao.module.mes.dal.mysql.dv.machinery.MesDvMachineryTypeMapper;
  11 +import cn.iocoder.yudao.module.mes.enums.md.autocode.MesMdAutoCodeRuleCodeEnum;
  12 +import cn.iocoder.yudao.module.mes.service.md.autocode.MesMdAutoCodeRecordService;
11 13 import jakarta.annotation.Resource;
12 14 import org.springframework.context.annotation.Lazy;
13 15 import org.springframework.stereotype.Service;
... ... @@ -33,11 +35,17 @@ public class MesDvMachineryTypeServiceImpl implements MesDvMachineryTypeService
33 35 @Resource
34 36 @Lazy // 延迟加载,避免循环依赖
35 37 private MesDvMachineryService machineryService;
  38 + @Resource
  39 + private MesMdAutoCodeRecordService autoCodeRecordService;
36 40  
37 41 @Override
38 42 public Long createMachineryType(MesDvMachineryTypeSaveReqVO createReqVO) {
  43 + // 自动生成编码
  44 + if (StrUtil.isEmpty(createReqVO.getCode())) {
  45 + createReqVO.setCode(autoCodeRecordService.generateAutoCode(MesMdAutoCodeRuleCodeEnum.DV_MACHINERY_TYPE_CODE.getCode()));
  46 + }
39 47 // 校验
40   - validateMachineryTypeSave(null, createReqVO.getParentId(), createReqVO.getName(), createReqVO.getCode());
  48 + validateMachineryTypeSaveData(createReqVO);
41 49  
42 50 // 插入
43 51 MesDvMachineryTypeDO machineryType = BeanUtils.toBean(createReqVO, MesDvMachineryTypeDO.class);
... ... @@ -48,7 +56,7 @@ public class MesDvMachineryTypeServiceImpl implements MesDvMachineryTypeService
48 56 @Override
49 57 public void updateMachineryType(MesDvMachineryTypeSaveReqVO updateReqVO) {
50 58 // 校验
51   - validateMachineryTypeSave(updateReqVO.getId(), updateReqVO.getParentId(), updateReqVO.getName(), updateReqVO.getCode());
  59 + validateMachineryTypeSaveData(updateReqVO);
52 60  
53 61 // 更新
54 62 MesDvMachineryTypeDO updateObj = BeanUtils.toBean(updateReqVO, MesDvMachineryTypeDO.class);
... ... @@ -72,16 +80,16 @@ public class MesDvMachineryTypeServiceImpl implements MesDvMachineryTypeService
72 80 machineryTypeMapper.deleteById(id);
73 81 }
74 82  
75   - private void validateMachineryTypeSave(Long id, Long parentId, String name, String code) {
76   - if (id != null) {
77   - validateMachineryTypeExists(id);
  83 + private void validateMachineryTypeSaveData(MesDvMachineryTypeSaveReqVO saveReqVO) {
  84 + if (saveReqVO.getId() != null) {
  85 + validateMachineryTypeExists(saveReqVO.getId());
78 86 }
79 87 // 校验父级节点有效性
80   - validateParentMachineryType(id, parentId);
  88 + validateParentMachineryType(saveReqVO.getId(), saveReqVO.getParentId());
81 89 // 校验类型名称唯一性
82   - validateMachineryTypeNameUnique(id, parentId, name);
  90 + validateMachineryTypeNameUnique(saveReqVO.getId(), saveReqVO.getParentId(), saveReqVO.getName());
83 91 // 校验类型编码唯一性
84   - validateMachineryTypeCodeUnique(id, parentId, code);
  92 + validateMachineryTypeCodeUnique(saveReqVO.getId(), saveReqVO.getParentId(), saveReqVO.getCode());
85 93 }
86 94  
87 95 private void validateMachineryTypeExists(Long id) {
... ... @@ -135,8 +143,7 @@ public class MesDvMachineryTypeServiceImpl implements MesDvMachineryTypeService
135 143 }
136 144  
137 145 private void validateMachineryTypeCodeUnique(Long id, Long parentId, String code) {
138   - // TODO @yunai:类型编码的唯一性,建议全局校验,而非同一父级下校验
139   - MesDvMachineryTypeDO machineryType = machineryTypeMapper.selectByParentIdAndCode(parentId, code);
  146 + MesDvMachineryTypeDO machineryType = machineryTypeMapper.selectByCode(code);
140 147 if (machineryType == null) {
141 148 return;
142 149 }
... ...