Commit 7a68b122a67ab525a80c98ddc866a5d990c3cf91

Authored by YunaiV
1 parent 9231dae7

refactor(mes): 重构产品 SIP/SOP/BOM 模块,统一字段命名与代码风格

1. SIP/SOP 的 orderNumber 字段全局重命名为 sort,涉及 DO、VO、Mapper、Service、ErrorCode
2. BOM Service 的 hasCycle 方法重命名为 hasBomCycle,语义更清晰
3. ErrorCode 常量 ORDER_NUMBER_DUPLICATE 重命名为 SORT_DUPLICATE
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/md/item/MesMdProductBomController.java
... ... @@ -108,16 +108,16 @@ public class MesMdProductBomController {
108 108 if (CollUtil.isEmpty(list)) {
109 109 return Collections.emptyList();
110 110 }
111   - // 1. 批量获取 BOM 物料信息
  111 + // 1.1 批量获取 BOM 物料信息
112 112 Map<Long, MesMdItemDO> itemMap = itemService.getItemMap(
113 113 convertSet(list, MesMdProductBomDO::getBomItemId));
114   - // 2. 批量获取计量单位信息
  114 + // 1.2 批量获取计量单位信息
115 115 Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap(
116 116 convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId));
117   - // 3. 批量获取物料分类信息(用于 itemOrProduct)
  117 + // 1.3 批量获取物料分类信息(用于 itemOrProduct)
118 118 Map<Long, MesMdItemTypeDO> itemTypeMap = itemTypeService.getItemTypeMap(
119 119 convertSet(itemMap.values(), MesMdItemDO::getItemTypeId));
120   - // 4. 拼接 VO
  120 + // 2. 拼接 VO
121 121 return BeanUtils.toBean(list, MesMdProductBomRespVO.class, vo -> {
122 122 MapUtils.findAndThen(itemMap, vo.getBomItemId(), item -> {
123 123 vo.setBomItemCode(item.getCode());
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/md/item/vo/sip/MesMdProductSipRespVO.java
... ... @@ -16,7 +16,7 @@ public class MesMdProductSipRespVO {
16 16 private Long itemId;
17 17  
18 18 @Schema(description = "排列顺序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
19   - private Integer orderNumber;
  19 + private Integer sort;
20 20  
21 21 @Schema(description = "工序ID", example = "100")
22 22 private Long processId;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/md/item/vo/sip/MesMdProductSipSaveReqVO.java
... ... @@ -18,7 +18,7 @@ public class MesMdProductSipSaveReqVO {
18 18  
19 19 @Schema(description = "排列顺序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
20 20 @NotNull(message = "排列顺序不能为空")
21   - private Integer orderNumber;
  21 + private Integer sort;
22 22  
23 23 @Schema(description = "工序ID", example = "100")
24 24 private Long processId;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/md/item/vo/sop/MesMdProductSopRespVO.java
... ... @@ -16,7 +16,7 @@ public class MesMdProductSopRespVO {
16 16 private Long itemId;
17 17  
18 18 @Schema(description = "排列顺序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
19   - private Integer orderNumber;
  19 + private Integer sort;
20 20  
21 21 @Schema(description = "工序ID", example = "100")
22 22 private Long processId;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/md/item/vo/sop/MesMdProductSopSaveReqVO.java
... ... @@ -18,7 +18,7 @@ public class MesMdProductSopSaveReqVO {
18 18  
19 19 @Schema(description = "排列顺序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
20 20 @NotNull(message = "排列顺序不能为空")
21   - private Integer orderNumber;
  21 + private Integer sort;
22 22  
23 23 @Schema(description = "工序ID", example = "100")
24 24 private Long processId;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/md/item/MesMdProductSipDO.java
... ... @@ -35,7 +35,7 @@ public class MesMdProductSipDO extends BaseDO {
35 35 /**
36 36 * 排列顺序
37 37 */
38   - private Integer orderNumber;
  38 + private Integer sort;
39 39 /**
40 40 * 工序编号
41 41 */
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/md/item/MesMdProductSopDO.java
... ... @@ -35,7 +35,7 @@ public class MesMdProductSopDO extends BaseDO {
35 35 /**
36 36 * 排列顺序
37 37 */
38   - private Integer orderNumber;
  38 + private Integer sort;
39 39 /**
40 40 * 工序编号
41 41 */
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/md/item/MesMdProductSipMapper.java
... ... @@ -21,19 +21,19 @@ public interface MesMdProductSipMapper extends BaseMapperX&lt;MesMdProductSipDO&gt; {
21 21 return selectPage(reqVO, new LambdaQueryWrapperX<MesMdProductSipDO>()
22 22 .eq(MesMdProductSipDO::getItemId, reqVO.getItemId())
23 23 .likeIfPresent(MesMdProductSipDO::getTitle, reqVO.getTitle())
24   - .orderByAsc(MesMdProductSipDO::getOrderNumber));
  24 + .orderByAsc(MesMdProductSipDO::getSort));
25 25 }
26 26  
27 27 default List<MesMdProductSipDO> selectByItemId(Long itemId) {
28 28 return selectList(new LambdaQueryWrapperX<MesMdProductSipDO>()
29 29 .eq(MesMdProductSipDO::getItemId, itemId)
30   - .orderByAsc(MesMdProductSipDO::getOrderNumber));
  30 + .orderByAsc(MesMdProductSipDO::getSort));
31 31 }
32 32  
33   - default Long selectCountByItemIdAndOrderNumber(Long itemId, Integer orderNumber, Long excludeId) {
  33 + default Long selectCountByItemIdAndSort(Long itemId, Integer sort, Long excludeId) {
34 34 return selectCount(new LambdaQueryWrapperX<MesMdProductSipDO>()
35 35 .eq(MesMdProductSipDO::getItemId, itemId)
36   - .eq(MesMdProductSipDO::getOrderNumber, orderNumber)
  36 + .eq(MesMdProductSipDO::getSort, sort)
37 37 .neIfPresent(MesMdProductSipDO::getId, excludeId));
38 38 }
39 39  
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/md/item/MesMdProductSopMapper.java
... ... @@ -21,19 +21,19 @@ public interface MesMdProductSopMapper extends BaseMapperX&lt;MesMdProductSopDO&gt; {
21 21 return selectPage(reqVO, new LambdaQueryWrapperX<MesMdProductSopDO>()
22 22 .eq(MesMdProductSopDO::getItemId, reqVO.getItemId())
23 23 .likeIfPresent(MesMdProductSopDO::getTitle, reqVO.getTitle())
24   - .orderByAsc(MesMdProductSopDO::getOrderNumber));
  24 + .orderByAsc(MesMdProductSopDO::getSort));
25 25 }
26 26  
27 27 default List<MesMdProductSopDO> selectByItemId(Long itemId) {
28 28 return selectList(new LambdaQueryWrapperX<MesMdProductSopDO>()
29 29 .eq(MesMdProductSopDO::getItemId, itemId)
30   - .orderByAsc(MesMdProductSopDO::getOrderNumber));
  30 + .orderByAsc(MesMdProductSopDO::getSort));
31 31 }
32 32  
33   - default Long selectCountByItemIdAndOrderNumber(Long itemId, Integer orderNumber, Long excludeId) {
  33 + default Long selectCountByItemIdAndSort(Long itemId, Integer sort, Long excludeId) {
34 34 return selectCount(new LambdaQueryWrapperX<MesMdProductSopDO>()
35 35 .eq(MesMdProductSopDO::getItemId, itemId)
36   - .eq(MesMdProductSopDO::getOrderNumber, orderNumber)
  36 + .eq(MesMdProductSopDO::getSort, sort)
37 37 .neIfPresent(MesMdProductSopDO::getId, excludeId));
38 38 }
39 39  
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java
... ... @@ -75,11 +75,11 @@ public interface ErrorCodeConstants {
75 75  
76 76 // ========== MES 基础数据-产品SOP(1-040-108-000) ==========
77 77 ErrorCode MD_PRODUCT_SOP_NOT_EXISTS = new ErrorCode(1_040_108_000, "产品SOP不存在");
78   - ErrorCode MD_PRODUCT_SOP_ORDER_NUMBER_DUPLICATE = new ErrorCode(1_040_108_001, "该展示序号已存在");
  78 + ErrorCode MD_PRODUCT_SOP_SORT_DUPLICATE = new ErrorCode(1_040_108_001, "该展示序号已存在");
79 79  
80 80 // ========== MES 基础数据-产品SIP(1-040-109-000) ==========
81 81 ErrorCode MD_PRODUCT_SIP_NOT_EXISTS = new ErrorCode(1_040_109_000, "产品SIP不存在");
82   - ErrorCode MD_PRODUCT_SIP_ORDER_NUMBER_DUPLICATE = new ErrorCode(1_040_109_001, "该展示序号已存在");
  82 + ErrorCode MD_PRODUCT_SIP_SORT_DUPLICATE = new ErrorCode(1_040_109_001, "该展示序号已存在");
83 83  
84 84 // ========== MES 日历排班-班次(1-040-200-000) ==========
85 85 ErrorCode CAL_SHIFT_NOT_EXISTS = new ErrorCode(1_040_200_000, "班次不存在");
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdProductBomServiceImpl.java
... ... @@ -45,7 +45,7 @@ public class MesMdProductBomServiceImpl implements MesMdProductBomService {
45 45 throw exception(MD_PRODUCT_BOM_SELF_REFERENCE);
46 46 }
47 47 // 1.4 校验不能形成闭环
48   - if (hasCycle(createReqVO.getItemId(), createReqVO.getBomItemId())) {
  48 + if (hasBomCycle(createReqVO.getItemId(), createReqVO.getBomItemId())) {
49 49 throw exception(MD_PRODUCT_BOM_CIRCULAR);
50 50 }
51 51  
... ... @@ -93,7 +93,6 @@ public class MesMdProductBomServiceImpl implements MesMdProductBomService {
93 93 }
94 94 }
95 95  
96   - // TODO @AI:hasXXXCycle 这样?
97 96 /**
98 97 * 检测新增边 (itemId -> bomItemId) 后,BOM 图是否存在闭环
99 98 *
... ... @@ -101,7 +100,7 @@ public class MesMdProductBomServiceImpl implements MesMdProductBomService {
101 100 * @param bomItemId BOM子物料编号
102 101 * @return 是否存在闭环
103 102 */
104   - private boolean hasCycle(Long itemId, Long bomItemId) {
  103 + private boolean hasBomCycle(Long itemId, Long bomItemId) {
105 104 // 1.1 获取所有已有的 BOM 记录
106 105 List<MesMdProductBomDO> allBoms = productBomMapper.selectAll();
107 106 // 1.2 构建邻接表:parent -> Set<child>
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdProductSipServiceImpl.java
... ... @@ -30,7 +30,7 @@ public class MesMdProductSipServiceImpl implements MesMdProductSipService {
30 30 @Override
31 31 public Long createProductSip(MesMdProductSipSaveReqVO createReqVO) {
32 32 // 校验排列顺序的唯一性
33   - validateOrderNumberUnique(createReqVO.getItemId(), createReqVO.getOrderNumber(), null);
  33 + validateSortUnique(createReqVO.getItemId(), createReqVO.getSort(), null);
34 34  
35 35 // 插入
36 36 MesMdProductSipDO sip = BeanUtils.toBean(createReqVO, MesMdProductSipDO.class);
... ... @@ -43,7 +43,7 @@ public class MesMdProductSipServiceImpl implements MesMdProductSipService {
43 43 // 校验存在
44 44 validateProductSipExists(updateReqVO.getId());
45 45 // 校验排列顺序的唯一性
46   - validateOrderNumberUnique(updateReqVO.getItemId(), updateReqVO.getOrderNumber(), updateReqVO.getId());
  46 + validateSortUnique(updateReqVO.getItemId(), updateReqVO.getSort(), updateReqVO.getId());
47 47  
48 48 // 更新
49 49 MesMdProductSipDO updateObj = BeanUtils.toBean(updateReqVO, MesMdProductSipDO.class);
... ... @@ -64,10 +64,10 @@ public class MesMdProductSipServiceImpl implements MesMdProductSipService {
64 64 }
65 65 }
66 66  
67   - private void validateOrderNumberUnique(Long itemId, Integer orderNumber, Long excludeId) {
68   - Long count = productSipMapper.selectCountByItemIdAndOrderNumber(itemId, orderNumber, excludeId);
  67 + private void validateSortUnique(Long itemId, Integer sort, Long excludeId) {
  68 + Long count = productSipMapper.selectCountByItemIdAndSort(itemId, sort, excludeId);
69 69 if (count > 0) {
70   - throw exception(MD_PRODUCT_SIP_ORDER_NUMBER_DUPLICATE);
  70 + throw exception(MD_PRODUCT_SIP_SORT_DUPLICATE);
71 71 }
72 72 }
73 73  
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdProductSopServiceImpl.java
... ... @@ -30,7 +30,7 @@ public class MesMdProductSopServiceImpl implements MesMdProductSopService {
30 30 @Override
31 31 public Long createProductSop(MesMdProductSopSaveReqVO createReqVO) {
32 32 // 校验排列顺序的唯一性
33   - validateOrderNumberUnique(createReqVO.getItemId(), createReqVO.getOrderNumber(), null);
  33 + validateSortUnique(createReqVO.getItemId(), createReqVO.getSort(), null);
34 34  
35 35 // 插入
36 36 MesMdProductSopDO sop = BeanUtils.toBean(createReqVO, MesMdProductSopDO.class);
... ... @@ -43,7 +43,7 @@ public class MesMdProductSopServiceImpl implements MesMdProductSopService {
43 43 // 校验存在
44 44 validateProductSopExists(updateReqVO.getId());
45 45 // 校验排列顺序的唯一性
46   - validateOrderNumberUnique(updateReqVO.getItemId(), updateReqVO.getOrderNumber(), updateReqVO.getId());
  46 + validateSortUnique(updateReqVO.getItemId(), updateReqVO.getSort(), updateReqVO.getId());
47 47  
48 48 // 更新
49 49 MesMdProductSopDO updateObj = BeanUtils.toBean(updateReqVO, MesMdProductSopDO.class);
... ... @@ -64,10 +64,10 @@ public class MesMdProductSopServiceImpl implements MesMdProductSopService {
64 64 }
65 65 }
66 66  
67   - private void validateOrderNumberUnique(Long itemId, Integer orderNumber, Long excludeId) {
68   - Long count = productSopMapper.selectCountByItemIdAndOrderNumber(itemId, orderNumber, excludeId);
  67 + private void validateSortUnique(Long itemId, Integer sort, Long excludeId) {
  68 + Long count = productSopMapper.selectCountByItemIdAndSort(itemId, sort, excludeId);
69 69 if (count > 0) {
70   - throw exception(MD_PRODUCT_SOP_ORDER_NUMBER_DUPLICATE);
  70 + throw exception(MD_PRODUCT_SOP_SORT_DUPLICATE);
71 71 }
72 72 }
73 73  
... ...