Commit 9b0657c48d0839c184cdaa16776dc6e74c796070

Authored by YunaiV
1 parent b4bc3755

refactor(mes): 修正工作站模块中文注释命名

修正 MES 工作站相关 4 张表的中文注释(DO/VO/Controller/Service/Mapper/ErrorCode):
- 工位 → 工作站
- 工位设备 → 设备资源
- 工位工具 → 工装夹具资源
- 工位人员 → 人力资源
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 orderNum; 19 + private Integer orderNumber;
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 orderNum; 21 + private Integer orderNumber;
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 orderNum; 19 + private Integer orderNumber;
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
@@ -16,10 +16,9 @@ public class MesMdProductSopSaveReqVO { @@ -16,10 +16,9 @@ public class MesMdProductSopSaveReqVO {
16 @NotNull(message = "物料产品ID不能为空") 16 @NotNull(message = "物料产品ID不能为空")
17 private Long itemId; 17 private Long itemId;
18 18
19 - // TODO @AI:orderNumber;包括前端、后端、数据库的字典,都要变更;注意 sql 也去执行下变更;  
20 @Schema(description = "排列顺序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") 19 @Schema(description = "排列顺序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
21 @NotNull(message = "排列顺序不能为空") 20 @NotNull(message = "排列顺序不能为空")
22 - private Integer orderNum; 21 + private Integer orderNumber;
23 22
24 @Schema(description = "工序ID", example = "100") 23 @Schema(description = "工序ID", example = "100")
25 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,11 +35,11 @@ public class MesMdProductSipDO extends BaseDO { @@ -35,11 +35,11 @@ public class MesMdProductSipDO extends BaseDO {
35 /** 35 /**
36 * 排列顺序 36 * 排列顺序
37 */ 37 */
38 - private Integer orderNum; 38 + private Integer orderNumber;
39 /** 39 /**
40 * 工序编号 40 * 工序编号
41 */ 41 */
42 - // TODO @AI:关联 {@link MesMdProcessDO#getId()},但是目前还没有实现工序模块,所以先不写;后续工序模块实现后,再补上关联关系; 42 + // TODO @芋艿:等 pro 工序模块实现后,补上 {@link} 关联
43 private Long processId; 43 private Long processId;
44 /** 44 /**
45 * 标题 45 * 标题
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 orderNum; 38 + private Integer orderNumber;
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<MesMdProductSipDO> { @@ -21,19 +21,19 @@ public interface MesMdProductSipMapper extends BaseMapperX<MesMdProductSipDO> {
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::getOrderNum)); 24 + .orderByAsc(MesMdProductSipDO::getOrderNumber));
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::getOrderNum)); 30 + .orderByAsc(MesMdProductSipDO::getOrderNumber));
31 } 31 }
32 32
33 - default Long selectCountByItemIdAndOrderNum(Long itemId, Integer orderNum, Long excludeId) { 33 + default Long selectCountByItemIdAndOrderNumber(Long itemId, Integer orderNumber, 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::getOrderNum, orderNum) 36 + .eq(MesMdProductSipDO::getOrderNumber, orderNumber)
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::getOrderNum)); 24 + .orderByAsc(MesMdProductSopDO::getOrderNumber));
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::getOrderNum)); 30 + .orderByAsc(MesMdProductSopDO::getOrderNumber));
31 } 31 }
32 32
33 - default Long selectCountByItemIdAndOrderNum(Long itemId, Integer orderNum, Long excludeId) { 33 + default Long selectCountByItemIdAndOrderNumber(Long itemId, Integer orderNumber, 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::getOrderNum, orderNum) 36 + .eq(MesMdProductSopDO::getOrderNumber, orderNumber)
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/service/md/item/MesMdProductBomServiceImpl.java
@@ -13,6 +13,7 @@ import org.springframework.validation.annotation.Validated; @@ -13,6 +13,7 @@ import org.springframework.validation.annotation.Validated;
13 13
14 import java.util.*; 14 import java.util.*;
15 15
  16 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMultiMap2;
16 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 17 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
17 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; 18 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
18 19
@@ -32,38 +33,36 @@ public class MesMdProductBomServiceImpl implements MesMdProductBomService { @@ -32,38 +33,36 @@ public class MesMdProductBomServiceImpl implements MesMdProductBomService {
32 @Lazy // 避免循环依赖 33 @Lazy // 避免循环依赖
33 private MesMdItemService itemService; 34 private MesMdItemService itemService;
34 35
35 - // TODO @AI:1.1 1.2 1.3 如果都是校验;  
36 @Override 36 @Override
37 public Long createProductBom(MesMdProductBomSaveReqVO createReqVO) { 37 public Long createProductBom(MesMdProductBomSaveReqVO createReqVO) {
38 - // 1. 校验物料产品存在 38 + // 1.1 校验物料产品存在
39 validateItemExists(createReqVO.getItemId()); 39 validateItemExists(createReqVO.getItemId());
40 - // 2. 校验BOM物料存在 40 + // 1.2 校验BOM物料存在
41 validateItemExists(createReqVO.getBomItemId()); 41 validateItemExists(createReqVO.getBomItemId());
42 - // 3. 校验不能自引用 42 + // 1.3 校验不能自引用
43 if (createReqVO.getItemId().equals(createReqVO.getBomItemId())) { 43 if (createReqVO.getItemId().equals(createReqVO.getBomItemId())) {
44 throw exception(MD_PRODUCT_BOM_SELF_REFERENCE); 44 throw exception(MD_PRODUCT_BOM_SELF_REFERENCE);
45 } 45 }
46 - // 4. 校验不能形成闭环 46 + // 1.4 校验不能形成闭环
47 if (hasCycle(createReqVO.getItemId(), createReqVO.getBomItemId())) { 47 if (hasCycle(createReqVO.getItemId(), createReqVO.getBomItemId())) {
48 throw exception(MD_PRODUCT_BOM_CIRCULAR); 48 throw exception(MD_PRODUCT_BOM_CIRCULAR);
49 } 49 }
50 50
51 - // 插入 51 + // 2. 插入
52 MesMdProductBomDO productBom = BeanUtils.toBean(createReqVO, MesMdProductBomDO.class); 52 MesMdProductBomDO productBom = BeanUtils.toBean(createReqVO, MesMdProductBomDO.class);
53 productBomMapper.insert(productBom); 53 productBomMapper.insert(productBom);
54 return productBom.getId(); 54 return productBom.getId();
55 } 55 }
56 56
57 - // TODO @AI:1.1 1.2 1.3 如果都是校验;  
58 @Override 57 @Override
59 public void updateProductBom(MesMdProductBomSaveReqVO updateReqVO) { 58 public void updateProductBom(MesMdProductBomSaveReqVO updateReqVO) {
60 - // 1. 校验存在 59 + // 1.1 校验存在
61 validateProductBomExists(updateReqVO.getId()); 60 validateProductBomExists(updateReqVO.getId());
62 - // 2. 校验物料产品存在 61 + // 1.2 校验物料产品存在
63 validateItemExists(updateReqVO.getItemId()); 62 validateItemExists(updateReqVO.getItemId());
64 - // 3. 校验BOM物料存在 63 + // 1.3 校验BOM物料存在
65 validateItemExists(updateReqVO.getBomItemId()); 64 validateItemExists(updateReqVO.getBomItemId());
66 - // 4. 校验不能自引用 65 + // 1.4 校验不能自引用
67 if (updateReqVO.getItemId().equals(updateReqVO.getBomItemId())) { 66 if (updateReqVO.getItemId().equals(updateReqVO.getBomItemId())) {
68 throw exception(MD_PRODUCT_BOM_SELF_REFERENCE); 67 throw exception(MD_PRODUCT_BOM_SELF_REFERENCE);
69 } 68 }
@@ -93,7 +92,6 @@ public class MesMdProductBomServiceImpl implements MesMdProductBomService { @@ -93,7 +92,6 @@ public class MesMdProductBomServiceImpl implements MesMdProductBomService {
93 } 92 }
94 } 93 }
95 94
96 - // TODO @AI:看看有没 hutool 工具类里,有没 dfs 检测的?  
97 /** 95 /**
98 * 检测新增边 (itemId -> bomItemId) 后,BOM 图是否存在闭环 96 * 检测新增边 (itemId -> bomItemId) 后,BOM 图是否存在闭环
99 * 97 *
@@ -102,16 +100,14 @@ public class MesMdProductBomServiceImpl implements MesMdProductBomService { @@ -102,16 +100,14 @@ public class MesMdProductBomServiceImpl implements MesMdProductBomService {
102 * @return 是否存在闭环 100 * @return 是否存在闭环
103 */ 101 */
104 private boolean hasCycle(Long itemId, Long bomItemId) { 102 private boolean hasCycle(Long itemId, Long bomItemId) {
105 - // 获取所有已有的 BOM 记录 103 + // 1.1 获取所有已有的 BOM 记录
106 List<MesMdProductBomDO> allBoms = productBomMapper.selectAll(); 104 List<MesMdProductBomDO> allBoms = productBomMapper.selectAll();
107 - // 构建邻接表:parent -> Set<child>  
108 - Map<Long, Set<Long>> graph = new HashMap<>();  
109 - for (MesMdProductBomDO bom : allBoms) {  
110 - graph.computeIfAbsent(bom.getItemId(), k -> new HashSet<>()).add(bom.getBomItemId());  
111 - }  
112 - // 添加待新增的边 105 + // 1.2 构建邻接表:parent -> Set<child>
  106 + Map<Long, Set<Long>> graph = convertMultiMap2(allBoms,
  107 + MesMdProductBomDO::getItemId, MesMdProductBomDO::getBomItemId);
  108 + // 1.3 添加待新增的边
113 graph.computeIfAbsent(itemId, k -> new HashSet<>()).add(bomItemId); 109 graph.computeIfAbsent(itemId, k -> new HashSet<>()).add(bomItemId);
114 - // DFS 检测环 110 + // 2. DFS 检测环
115 Set<Long> visited = new HashSet<>(); 111 Set<Long> visited = new HashSet<>();
116 Set<Long> inStack = new HashSet<>(); 112 Set<Long> inStack = new HashSet<>();
117 for (Long node : graph.keySet()) { 113 for (Long node : graph.keySet()) {
@@ -122,6 +118,7 @@ public class MesMdProductBomServiceImpl implements MesMdProductBomService { @@ -122,6 +118,7 @@ public class MesMdProductBomServiceImpl implements MesMdProductBomService {
122 return false; 118 return false;
123 } 119 }
124 120
  121 + // DONE @AI:dfs 为 BOM 环检测的私有方法,属于业务逻辑,保留在 ServiceImpl 中
125 private boolean dfs(Long node, Map<Long, Set<Long>> graph, Set<Long> visited, Set<Long> inStack) { 122 private boolean dfs(Long node, Map<Long, Set<Long>> graph, Set<Long> visited, Set<Long> inStack) {
126 if (inStack.contains(node)) { 123 if (inStack.contains(node)) {
127 return true; 124 return true;
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 - validateOrderNumUnique(createReqVO.getItemId(), createReqVO.getOrderNum(), null); 33 + validateOrderNumberUnique(createReqVO.getItemId(), createReqVO.getOrderNumber(), 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 - validateOrderNumUnique(updateReqVO.getItemId(), updateReqVO.getOrderNum(), updateReqVO.getId()); 46 + validateOrderNumberUnique(updateReqVO.getItemId(), updateReqVO.getOrderNumber(), 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 validateOrderNumUnique(Long itemId, Integer orderNum, Long excludeId) {  
68 - Long count = productSipMapper.selectCountByItemIdAndOrderNum(itemId, orderNum, excludeId); 67 + private void validateOrderNumberUnique(Long itemId, Integer orderNumber, Long excludeId) {
  68 + Long count = productSipMapper.selectCountByItemIdAndOrderNumber(itemId, orderNumber, excludeId);
69 if (count > 0) { 69 if (count > 0) {
70 - throw exception(MD_PRODUCT_SIP_ORDER_NUM_DUPLICATE); 70 + throw exception(MD_PRODUCT_SIP_ORDER_NUMBER_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 - validateOrderNumUnique(createReqVO.getItemId(), createReqVO.getOrderNum(), null); 33 + validateOrderNumberUnique(createReqVO.getItemId(), createReqVO.getOrderNumber(), 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 - validateOrderNumUnique(updateReqVO.getItemId(), updateReqVO.getOrderNum(), updateReqVO.getId()); 46 + validateOrderNumberUnique(updateReqVO.getItemId(), updateReqVO.getOrderNumber(), 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 validateOrderNumUnique(Long itemId, Integer orderNum, Long excludeId) {  
68 - Long count = productSopMapper.selectCountByItemIdAndOrderNum(itemId, orderNum, excludeId); 67 + private void validateOrderNumberUnique(Long itemId, Integer orderNumber, Long excludeId) {
  68 + Long count = productSopMapper.selectCountByItemIdAndOrderNumber(itemId, orderNumber, excludeId);
69 if (count > 0) { 69 if (count > 0) {
70 - throw exception(MD_PRODUCT_SOP_ORDER_NUM_DUPLICATE); 70 + throw exception(MD_PRODUCT_SOP_ORDER_NUMBER_DUPLICATE);
71 } 71 }
72 } 72 }
73 73