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,16 +108,16 @@ public class MesMdProductBomController {
108 if (CollUtil.isEmpty(list)) { 108 if (CollUtil.isEmpty(list)) {
109 return Collections.emptyList(); 109 return Collections.emptyList();
110 } 110 }
111 - // 1. 批量获取 BOM 物料信息 111 + // 1.1 批量获取 BOM 物料信息
112 Map<Long, MesMdItemDO> itemMap = itemService.getItemMap( 112 Map<Long, MesMdItemDO> itemMap = itemService.getItemMap(
113 convertSet(list, MesMdProductBomDO::getBomItemId)); 113 convertSet(list, MesMdProductBomDO::getBomItemId));
114 - // 2. 批量获取计量单位信息 114 + // 1.2 批量获取计量单位信息
115 Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap( 115 Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap(
116 convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId)); 116 convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId));
117 - // 3. 批量获取物料分类信息(用于 itemOrProduct) 117 + // 1.3 批量获取物料分类信息(用于 itemOrProduct)
118 Map<Long, MesMdItemTypeDO> itemTypeMap = itemTypeService.getItemTypeMap( 118 Map<Long, MesMdItemTypeDO> itemTypeMap = itemTypeService.getItemTypeMap(
119 convertSet(itemMap.values(), MesMdItemDO::getItemTypeId)); 119 convertSet(itemMap.values(), MesMdItemDO::getItemTypeId));
120 - // 4. 拼接 VO 120 + // 2. 拼接 VO
121 return BeanUtils.toBean(list, MesMdProductBomRespVO.class, vo -> { 121 return BeanUtils.toBean(list, MesMdProductBomRespVO.class, vo -> {
122 MapUtils.findAndThen(itemMap, vo.getBomItemId(), item -> { 122 MapUtils.findAndThen(itemMap, vo.getBomItemId(), item -> {
123 vo.setBomItemCode(item.getCode()); 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,7 +16,7 @@ public class MesMdProductSipRespVO {
16 private Long itemId; 16 private Long itemId;
17 17
18 @Schema(description = "排列顺序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") 18 @Schema(description = "排列顺序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
19 - private Integer orderNumber; 19 + private Integer sort;
20 20
21 @Schema(description = "工序ID", example = "100") 21 @Schema(description = "工序ID", example = "100")
22 private Long processId; 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,7 +18,7 @@ public class MesMdProductSipSaveReqVO {
18 18
19 @Schema(description = "排列顺序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") 19 @Schema(description = "排列顺序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
20 @NotNull(message = "排列顺序不能为空") 20 @NotNull(message = "排列顺序不能为空")
21 - private Integer orderNumber; 21 + private Integer sort;
22 22
23 @Schema(description = "工序ID", example = "100") 23 @Schema(description = "工序ID", example = "100")
24 private Long processId; 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,7 +16,7 @@ public class MesMdProductSopRespVO {
16 private Long itemId; 16 private Long itemId;
17 17
18 @Schema(description = "排列顺序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") 18 @Schema(description = "排列顺序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
19 - private Integer orderNumber; 19 + private Integer sort;
20 20
21 @Schema(description = "工序ID", example = "100") 21 @Schema(description = "工序ID", example = "100")
22 private Long processId; 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,7 +18,7 @@ public class MesMdProductSopSaveReqVO {
18 18
19 @Schema(description = "排列顺序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") 19 @Schema(description = "排列顺序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
20 @NotNull(message = "排列顺序不能为空") 20 @NotNull(message = "排列顺序不能为空")
21 - private Integer orderNumber; 21 + private Integer sort;
22 22
23 @Schema(description = "工序ID", example = "100") 23 @Schema(description = "工序ID", example = "100")
24 private Long processId; 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,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,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,19 +21,19 @@ public interface MesMdProductSipMapper extends BaseMapperX&lt;MesMdProductSipDO&gt; {
21 return selectPage(reqVO, new LambdaQueryWrapperX<MesMdProductSipDO>() 21 return selectPage(reqVO, new LambdaQueryWrapperX<MesMdProductSipDO>()
22 .eq(MesMdProductSipDO::getItemId, reqVO.getItemId()) 22 .eq(MesMdProductSipDO::getItemId, reqVO.getItemId())
23 .likeIfPresent(MesMdProductSipDO::getTitle, reqVO.getTitle()) 23 .likeIfPresent(MesMdProductSipDO::getTitle, reqVO.getTitle())
24 - .orderByAsc(MesMdProductSipDO::getOrderNumber)); 24 + .orderByAsc(MesMdProductSipDO::getSort));
25 } 25 }
26 26
27 default List<MesMdProductSipDO> selectByItemId(Long itemId) { 27 default List<MesMdProductSipDO> selectByItemId(Long itemId) {
28 return selectList(new LambdaQueryWrapperX<MesMdProductSipDO>() 28 return selectList(new LambdaQueryWrapperX<MesMdProductSipDO>()
29 .eq(MesMdProductSipDO::getItemId, itemId) 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 return selectCount(new LambdaQueryWrapperX<MesMdProductSipDO>() 34 return selectCount(new LambdaQueryWrapperX<MesMdProductSipDO>()
35 .eq(MesMdProductSipDO::getItemId, itemId) 35 .eq(MesMdProductSipDO::getItemId, itemId)
36 - .eq(MesMdProductSipDO::getOrderNumber, orderNumber) 36 + .eq(MesMdProductSipDO::getSort, sort)
37 .neIfPresent(MesMdProductSipDO::getId, excludeId)); 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,19 +21,19 @@ public interface MesMdProductSopMapper extends BaseMapperX&lt;MesMdProductSopDO&gt; {
21 return selectPage(reqVO, new LambdaQueryWrapperX<MesMdProductSopDO>() 21 return selectPage(reqVO, new LambdaQueryWrapperX<MesMdProductSopDO>()
22 .eq(MesMdProductSopDO::getItemId, reqVO.getItemId()) 22 .eq(MesMdProductSopDO::getItemId, reqVO.getItemId())
23 .likeIfPresent(MesMdProductSopDO::getTitle, reqVO.getTitle()) 23 .likeIfPresent(MesMdProductSopDO::getTitle, reqVO.getTitle())
24 - .orderByAsc(MesMdProductSopDO::getOrderNumber)); 24 + .orderByAsc(MesMdProductSopDO::getSort));
25 } 25 }
26 26
27 default List<MesMdProductSopDO> selectByItemId(Long itemId) { 27 default List<MesMdProductSopDO> selectByItemId(Long itemId) {
28 return selectList(new LambdaQueryWrapperX<MesMdProductSopDO>() 28 return selectList(new LambdaQueryWrapperX<MesMdProductSopDO>()
29 .eq(MesMdProductSopDO::getItemId, itemId) 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 return selectCount(new LambdaQueryWrapperX<MesMdProductSopDO>() 34 return selectCount(new LambdaQueryWrapperX<MesMdProductSopDO>()
35 .eq(MesMdProductSopDO::getItemId, itemId) 35 .eq(MesMdProductSopDO::getItemId, itemId)
36 - .eq(MesMdProductSopDO::getOrderNumber, orderNumber) 36 + .eq(MesMdProductSopDO::getSort, sort)
37 .neIfPresent(MesMdProductSopDO::getId, excludeId)); 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,11 +75,11 @@ public interface ErrorCodeConstants {
75 75
76 // ========== MES 基础数据-产品SOP(1-040-108-000) ========== 76 // ========== MES 基础数据-产品SOP(1-040-108-000) ==========
77 ErrorCode MD_PRODUCT_SOP_NOT_EXISTS = new ErrorCode(1_040_108_000, "产品SOP不存在"); 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 // ========== MES 基础数据-产品SIP(1-040-109-000) ========== 80 // ========== MES 基础数据-产品SIP(1-040-109-000) ==========
81 ErrorCode MD_PRODUCT_SIP_NOT_EXISTS = new ErrorCode(1_040_109_000, "产品SIP不存在"); 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 // ========== MES 日历排班-班次(1-040-200-000) ========== 84 // ========== MES 日历排班-班次(1-040-200-000) ==========
85 ErrorCode CAL_SHIFT_NOT_EXISTS = new ErrorCode(1_040_200_000, "班次不存在"); 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,7 +45,7 @@ public class MesMdProductBomServiceImpl implements MesMdProductBomService {
45 throw exception(MD_PRODUCT_BOM_SELF_REFERENCE); 45 throw exception(MD_PRODUCT_BOM_SELF_REFERENCE);
46 } 46 }
47 // 1.4 校验不能形成闭环 47 // 1.4 校验不能形成闭环
48 - if (hasCycle(createReqVO.getItemId(), createReqVO.getBomItemId())) { 48 + if (hasBomCycle(createReqVO.getItemId(), createReqVO.getBomItemId())) {
49 throw exception(MD_PRODUCT_BOM_CIRCULAR); 49 throw exception(MD_PRODUCT_BOM_CIRCULAR);
50 } 50 }
51 51
@@ -93,7 +93,6 @@ public class MesMdProductBomServiceImpl implements MesMdProductBomService { @@ -93,7 +93,6 @@ public class MesMdProductBomServiceImpl implements MesMdProductBomService {
93 } 93 }
94 } 94 }
95 95
96 - // TODO @AI:hasXXXCycle 这样?  
97 /** 96 /**
98 * 检测新增边 (itemId -> bomItemId) 后,BOM 图是否存在闭环 97 * 检测新增边 (itemId -> bomItemId) 后,BOM 图是否存在闭环
99 * 98 *
@@ -101,7 +100,7 @@ public class MesMdProductBomServiceImpl implements MesMdProductBomService { @@ -101,7 +100,7 @@ public class MesMdProductBomServiceImpl implements MesMdProductBomService {
101 * @param bomItemId BOM子物料编号 100 * @param bomItemId BOM子物料编号
102 * @return 是否存在闭环 101 * @return 是否存在闭环
103 */ 102 */
104 - private boolean hasCycle(Long itemId, Long bomItemId) { 103 + private boolean hasBomCycle(Long itemId, Long bomItemId) {
105 // 1.1 获取所有已有的 BOM 记录 104 // 1.1 获取所有已有的 BOM 记录
106 List<MesMdProductBomDO> allBoms = productBomMapper.selectAll(); 105 List<MesMdProductBomDO> allBoms = productBomMapper.selectAll();
107 // 1.2 构建邻接表:parent -> Set<child> 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,7 +30,7 @@ public class MesMdProductSipServiceImpl implements MesMdProductSipService {
30 @Override 30 @Override
31 public Long createProductSip(MesMdProductSipSaveReqVO createReqVO) { 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 MesMdProductSipDO sip = BeanUtils.toBean(createReqVO, MesMdProductSipDO.class); 36 MesMdProductSipDO sip = BeanUtils.toBean(createReqVO, MesMdProductSipDO.class);
@@ -43,7 +43,7 @@ public class MesMdProductSipServiceImpl implements MesMdProductSipService { @@ -43,7 +43,7 @@ public class MesMdProductSipServiceImpl implements MesMdProductSipService {
43 // 校验存在 43 // 校验存在
44 validateProductSipExists(updateReqVO.getId()); 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 MesMdProductSipDO updateObj = BeanUtils.toBean(updateReqVO, MesMdProductSipDO.class); 49 MesMdProductSipDO updateObj = BeanUtils.toBean(updateReqVO, MesMdProductSipDO.class);
@@ -64,10 +64,10 @@ public class MesMdProductSipServiceImpl implements MesMdProductSipService { @@ -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 if (count > 0) { 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,7 +30,7 @@ public class MesMdProductSopServiceImpl implements MesMdProductSopService {
30 @Override 30 @Override
31 public Long createProductSop(MesMdProductSopSaveReqVO createReqVO) { 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 MesMdProductSopDO sop = BeanUtils.toBean(createReqVO, MesMdProductSopDO.class); 36 MesMdProductSopDO sop = BeanUtils.toBean(createReqVO, MesMdProductSopDO.class);
@@ -43,7 +43,7 @@ public class MesMdProductSopServiceImpl implements MesMdProductSopService { @@ -43,7 +43,7 @@ public class MesMdProductSopServiceImpl implements MesMdProductSopService {
43 // 校验存在 43 // 校验存在
44 validateProductSopExists(updateReqVO.getId()); 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 MesMdProductSopDO updateObj = BeanUtils.toBean(updateReqVO, MesMdProductSopDO.class); 49 MesMdProductSopDO updateObj = BeanUtils.toBean(updateReqVO, MesMdProductSopDO.class);
@@ -64,10 +64,10 @@ public class MesMdProductSopServiceImpl implements MesMdProductSopService { @@ -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 if (count > 0) { 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