Commit 8ab84968fccbbb5ea3c66d12cdc6f79f1a5d4546

Authored by YunaiV
1 parent ff508c50

✨ feat(mes): 添加装箱单及装箱明细的 VO 和 Mapper 注释

为装箱单及装箱明细相关的 VO 和 Mapper 类添加了详细的注释,提升代码可读性和维护性。同时,修正了部分字段类型以确保一致性。
Showing 13 changed files with 147 additions and 97 deletions
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/MesWmPackageController.java
@@ -32,6 +32,10 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -32,6 +32,10 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
32 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; 32 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
33 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSetByFlatMap; 33 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSetByFlatMap;
34 34
  35 +// TODO @AI:检查下 java 类,是不是 author 没加。
  36 +/**
  37 + * MES 装箱单 Controller
  38 + */
35 @Tag(name = "管理后台 - MES 装箱单") 39 @Tag(name = "管理后台 - MES 装箱单")
36 @RestController 40 @RestController
37 @RequestMapping("/mes/wm/package") 41 @RequestMapping("/mes/wm/package")
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/MesWmPackageLineController.java
@@ -32,89 +32,97 @@ import java.util.Map; @@ -32,89 +32,97 @@ import java.util.Map;
32 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; 32 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
33 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; 33 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
34 34
  35 +// TODO @AI:检查下,是不是代码缩进有问题
  36 +/**
  37 + * MES 装箱明细 Controller
  38 + */
35 @Tag(name = "管理后台 - MES 装箱明细") 39 @Tag(name = "管理后台 - MES 装箱明细")
36 @RestController 40 @RestController
37 @RequestMapping("/mes/wm/package-line") 41 @RequestMapping("/mes/wm/package-line")
38 @Validated 42 @Validated
39 public class MesWmPackageLineController { 43 public class MesWmPackageLineController {
40 44
41 - @Resource  
42 - private MesWmPackageLineService packageLineService;  
43 - @Resource  
44 - private MesMdItemService itemService;  
45 - @Resource  
46 - private MesMdUnitMeasureService unitMeasureService;  
47 - @Resource  
48 - private MesProWorkOrderService workOrderService; 45 + @Resource
  46 + private MesWmPackageLineService packageLineService;
  47 + @Resource
  48 + private MesMdItemService itemService;
  49 + @Resource
  50 + private MesMdUnitMeasureService unitMeasureService;
  51 + @Resource
  52 + private MesProWorkOrderService workOrderService;
49 53
50 - @PostMapping("/create")  
51 - @Operation(summary = "创建装箱明细")  
52 - @PreAuthorize("@ss.hasPermission('mes:wm-package:create')")  
53 - public CommonResult<Long> createPackageLine(@Valid @RequestBody MesWmPackageLineSaveReqVO createReqVO) {  
54 - return success(packageLineService.createPackageLine(createReqVO));  
55 - } 54 + @PostMapping("/create")
  55 + @Operation(summary = "创建装箱明细")
  56 + @PreAuthorize("@ss.hasPermission('mes:wm-package:create')")
  57 + public CommonResult<Long> createPackageLine(@Valid @RequestBody MesWmPackageLineSaveReqVO createReqVO) {
  58 + return success(packageLineService.createPackageLine(createReqVO));
  59 + }
56 60
57 - @PutMapping("/update")  
58 - @Operation(summary = "修改装箱明细")  
59 - @PreAuthorize("@ss.hasPermission('mes:wm-package:update')")  
60 - public CommonResult<Boolean> updatePackageLine(@Valid @RequestBody MesWmPackageLineSaveReqVO updateReqVO) {  
61 - packageLineService.updatePackageLine(updateReqVO);  
62 - return success(true);  
63 - } 61 + @PutMapping("/update")
  62 + @Operation(summary = "修改装箱明细")
  63 + @PreAuthorize("@ss.hasPermission('mes:wm-package:update')")
  64 + public CommonResult<Boolean> updatePackageLine(@Valid @RequestBody MesWmPackageLineSaveReqVO updateReqVO) {
  65 + packageLineService.updatePackageLine(updateReqVO);
  66 + return success(true);
  67 + }
64 68
65 - @DeleteMapping("/delete")  
66 - @Operation(summary = "删除装箱明细")  
67 - @Parameter(name = "id", description = "编号", required = true)  
68 - @PreAuthorize("@ss.hasPermission('mes:wm-package:delete')")  
69 - public CommonResult<Boolean> deletePackageLine(@RequestParam("id") Long id) {  
70 - packageLineService.deletePackageLine(id);  
71 - return success(true);  
72 - } 69 + @DeleteMapping("/delete")
  70 + @Operation(summary = "删除装箱明细")
  71 + @Parameter(name = "id", description = "编号", required = true)
  72 + @PreAuthorize("@ss.hasPermission('mes:wm-package:delete')")
  73 + public CommonResult<Boolean> deletePackageLine(@RequestParam("id") Long id) {
  74 + packageLineService.deletePackageLine(id);
  75 + return success(true);
  76 + }
73 77
74 - @GetMapping("/get")  
75 - @Operation(summary = "获得装箱明细")  
76 - @Parameter(name = "id", description = "编号", required = true, example = "1024")  
77 - @PreAuthorize("@ss.hasPermission('mes:wm-package:query')")  
78 - public CommonResult<MesWmPackageLineRespVO> getPackageLine(@RequestParam("id") Long id) {  
79 - MesWmPackageLineDO line = packageLineService.getPackageLine(id);  
80 - if (line == null) {  
81 - return success(null); 78 + @GetMapping("/get")
  79 + @Operation(summary = "获得装箱明细")
  80 + @Parameter(name = "id", description = "编号", required = true, example = "1024")
  81 + @PreAuthorize("@ss.hasPermission('mes:wm-package:query')")
  82 + public CommonResult<MesWmPackageLineRespVO> getPackageLine(@RequestParam("id") Long id) {
  83 + MesWmPackageLineDO line = packageLineService.getPackageLine(id);
  84 + if (line == null) {
  85 + return success(null);
  86 + }
  87 + return success(buildRespVOList(Collections.singletonList(line)).get(0));
82 } 88 }
83 - return success(buildRespVOList(Collections.singletonList(line)).get(0));  
84 - }  
85 89
86 - @GetMapping("/page")  
87 - @Operation(summary = "获得装箱明细分页")  
88 - @PreAuthorize("@ss.hasPermission('mes:wm-package:query')")  
89 - public CommonResult<PageResult<MesWmPackageLineRespVO>> getPackageLinePage(  
90 - @Valid MesWmPackageLinePageReqVO pageReqVO) {  
91 - PageResult<MesWmPackageLineDO> pageResult = packageLineService.getPackageLinePage(pageReqVO);  
92 - return success(new PageResult<>(buildRespVOList(pageResult.getList()), pageResult.getTotal()));  
93 - } 90 + @GetMapping("/page")
  91 + @Operation(summary = "获得装箱明细分页")
  92 + @PreAuthorize("@ss.hasPermission('mes:wm-package:query')")
  93 + public CommonResult<PageResult<MesWmPackageLineRespVO>> getPackageLinePage(
  94 + @Valid MesWmPackageLinePageReqVO pageReqVO) {
  95 + PageResult<MesWmPackageLineDO> pageResult = packageLineService.getPackageLinePage(pageReqVO);
  96 + return success(new PageResult<>(buildRespVOList(pageResult.getList()), pageResult.getTotal()));
  97 + }
94 98
95 - // ========== 私有方法 ========== 99 + // ========== 私有方法 ==========
96 100
97 - private List<MesWmPackageLineRespVO> buildRespVOList(List<MesWmPackageLineDO> list) {  
98 - if (CollUtil.isEmpty(list)) {  
99 - return Collections.emptyList(); 101 + private List<MesWmPackageLineRespVO> buildRespVOList(List<MesWmPackageLineDO> list) {
  102 + if (CollUtil.isEmpty(list)) {
  103 + return Collections.emptyList();
  104 + }
  105 + // 批量查询物料
  106 + Map<Long, MesMdItemDO> itemMap = itemService
  107 + .getItemMap(convertSet(list, MesWmPackageLineDO::getItemId));
  108 + // 批量查询计量单位
  109 + Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap(
  110 + convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId));
  111 + // 批量查询工单
  112 + Map<Long, MesProWorkOrderDO> workOrderMap = workOrderService.getWorkOrderMap(
  113 + convertSet(list, MesWmPackageLineDO::getWorkOrderId));
  114 + // 拼接数据
  115 + return BeanUtils.toBean(list, MesWmPackageLineRespVO.class, vo -> {
  116 + MapUtils.findAndThen(itemMap, vo.getItemId(), item -> {
  117 + vo.setItemCode(item.getCode()).setItemName(item.getName())
  118 + .setSpecification(item.getSpecification());
  119 + MapUtils.findAndThen(unitMeasureMap, item.getUnitMeasureId(),
  120 + unit -> vo.setUnitMeasureName(unit.getName()));
  121 + });
  122 + MapUtils.findAndThen(workOrderMap, vo.getWorkOrderId(),
  123 + workOrder -> vo.setWorkOrderCode(workOrder.getCode())
  124 + .setBatchCode(workOrder.getBatchCode()));
  125 + });
100 } 126 }
101 - // 批量查询物料  
102 - Map<Long, MesMdItemDO> itemMap = itemService.getItemMap(convertSet(list, MesWmPackageLineDO::getItemId));  
103 - // 批量查询计量单位  
104 - Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap(  
105 - convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId));  
106 - // 批量查询工单  
107 - Map<Long, MesProWorkOrderDO> workOrderMap = workOrderService.getWorkOrderMap(  
108 - convertSet(list, MesWmPackageLineDO::getWorkOrderId));  
109 - // 拼接数据  
110 - return BeanUtils.toBean(list, MesWmPackageLineRespVO.class, vo -> {  
111 - MapUtils.findAndThen(itemMap, vo.getItemId(), item -> {  
112 - vo.setItemCode(item.getCode()).setItemName(item.getName()).setSpecification(item.getSpecification());  
113 - MapUtils.findAndThen(unitMeasureMap, item.getUnitMeasureId(),  
114 - unit -> vo.setUnitMeasureName(unit.getName()));});  
115 - MapUtils.findAndThen(workOrderMap, vo.getWorkOrderId(),  
116 - workOrder -> vo.setWorkOrderCode(workOrder.getCode()).setBatchCode(workOrder.getBatchCode()));  
117 - });  
118 - }  
119 127
120 } 128 }
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackagePageReqVO.java
@@ -6,6 +6,9 @@ import lombok.Data; @@ -6,6 +6,9 @@ import lombok.Data;
6 import lombok.EqualsAndHashCode; 6 import lombok.EqualsAndHashCode;
7 import lombok.ToString; 7 import lombok.ToString;
8 8
  9 +/**
  10 + * MES 装箱单分页 Request VO
  11 + */
9 @Schema(description = "管理后台 - MES 装箱单分页 Request VO") 12 @Schema(description = "管理后台 - MES 装箱单分页 Request VO")
10 @Data 13 @Data
11 @EqualsAndHashCode(callSuper = true) 14 @EqualsAndHashCode(callSuper = true)
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackageRespVO.java
@@ -9,6 +9,9 @@ import lombok.experimental.Accessors; @@ -9,6 +9,9 @@ import lombok.experimental.Accessors;
9 import java.math.BigDecimal; 9 import java.math.BigDecimal;
10 import java.time.LocalDateTime; 10 import java.time.LocalDateTime;
11 11
  12 +/**
  13 + * MES 装箱单 Response VO
  14 + */
12 @Schema(description = "管理后台 - MES 装箱单 Response VO") 15 @Schema(description = "管理后台 - MES 装箱单 Response VO")
13 @Data 16 @Data
14 @Accessors(chain = true) 17 @Accessors(chain = true)
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackageSaveReqVO.java
@@ -8,6 +8,9 @@ import lombok.Data; @@ -8,6 +8,9 @@ import lombok.Data;
8 import java.math.BigDecimal; 8 import java.math.BigDecimal;
9 import java.time.LocalDateTime; 9 import java.time.LocalDateTime;
10 10
  11 +/**
  12 + * MES 装箱单新增/修改 Request VO
  13 + */
11 @Schema(description = "管理后台 - MES 装箱单新增/修改 Request VO") 14 @Schema(description = "管理后台 - MES 装箱单新增/修改 Request VO")
12 @Data 15 @Data
13 public class MesWmPackageSaveReqVO { 16 public class MesWmPackageSaveReqVO {
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLinePageReqVO.java
@@ -7,6 +7,9 @@ import lombok.Data; @@ -7,6 +7,9 @@ import lombok.Data;
7 import lombok.EqualsAndHashCode; 7 import lombok.EqualsAndHashCode;
8 import lombok.ToString; 8 import lombok.ToString;
9 9
  10 +/**
  11 + * MES 装箱明细分页 Request VO
  12 + */
10 @Schema(description = "管理后台 - MES 装箱明细分页 Request VO") 13 @Schema(description = "管理后台 - MES 装箱明细分页 Request VO")
11 @Data 14 @Data
12 @EqualsAndHashCode(callSuper = true) 15 @EqualsAndHashCode(callSuper = true)
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLineRespVO.java
@@ -8,6 +8,9 @@ import java.math.BigDecimal; @@ -8,6 +8,9 @@ import java.math.BigDecimal;
8 import java.time.LocalDate; 8 import java.time.LocalDate;
9 import java.time.LocalDateTime; 9 import java.time.LocalDateTime;
10 10
  11 +/**
  12 + * MES 装箱明细 Response VO
  13 + */
11 @Schema(description = "管理后台 - MES 装箱明细 Response VO") 14 @Schema(description = "管理后台 - MES 装箱明细 Response VO")
12 @Data 15 @Data
13 @Accessors(chain = true) 16 @Accessors(chain = true)
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLineSaveReqVO.java
@@ -6,8 +6,11 @@ import jakarta.validation.constraints.NotNull; @@ -6,8 +6,11 @@ import jakarta.validation.constraints.NotNull;
6 import lombok.Data; 6 import lombok.Data;
7 7
8 import java.math.BigDecimal; 8 import java.math.BigDecimal;
9 -import java.time.LocalDate; 9 +import java.time.LocalDateTime;
10 10
  11 +/**
  12 + * MES 装箱明细新增/修改 Request VO
  13 + */
11 @Schema(description = "管理后台 - MES 装箱明细新增/修改 Request VO") 14 @Schema(description = "管理后台 - MES 装箱明细新增/修改 Request VO")
12 @Data 15 @Data
13 public class MesWmPackageLineSaveReqVO { 16 public class MesWmPackageLineSaveReqVO {
@@ -34,8 +37,9 @@ public class MesWmPackageLineSaveReqVO { @@ -34,8 +37,9 @@ public class MesWmPackageLineSaveReqVO {
34 @Schema(description = "生产工单 ID", example = "1") 37 @Schema(description = "生产工单 ID", example = "1")
35 private Long workOrderId; 38 private Long workOrderId;
36 39
  40 + // TODO @AI:时间都是 LocalDateTIme;
37 @Schema(description = "有效期") 41 @Schema(description = "有效期")
38 - private LocalDate expireDate; 42 + private LocalDateTime expireDate;
39 43
40 @Schema(description = "备注", example = "备注") 44 @Schema(description = "备注", example = "备注")
41 private String remark; 45 private String remark;
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageLineMapper.java
@@ -7,8 +7,9 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.line.MesWmPac @@ -7,8 +7,9 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.line.MesWmPac
7 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageLineDO; 7 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageLineDO;
8 import org.apache.ibatis.annotations.Mapper; 8 import org.apache.ibatis.annotations.Mapper;
9 9
10 -import java.util.List;  
11 - 10 +/**
  11 + * MES 装箱明细 Mapper
  12 + */
12 @Mapper 13 @Mapper
13 public interface MesWmPackageLineMapper extends BaseMapperX<MesWmPackageLineDO> { 14 public interface MesWmPackageLineMapper extends BaseMapperX<MesWmPackageLineDO> {
14 15
@@ -18,10 +19,6 @@ public interface MesWmPackageLineMapper extends BaseMapperX&lt;MesWmPackageLineDO&gt; @@ -18,10 +19,6 @@ public interface MesWmPackageLineMapper extends BaseMapperX&lt;MesWmPackageLineDO&gt;
18 .orderByDesc(MesWmPackageLineDO::getId)); 19 .orderByDesc(MesWmPackageLineDO::getId));
19 } 20 }
20 21
21 - default List<MesWmPackageLineDO> selectListByPackageId(Long packageId) {  
22 - return selectList(MesWmPackageLineDO::getPackageId, packageId);  
23 - }  
24 -  
25 default void deleteByPackageId(Long packageId) { 22 default void deleteByPackageId(Long packageId) {
26 delete(MesWmPackageLineDO::getPackageId, packageId); 23 delete(MesWmPackageLineDO::getPackageId, packageId);
27 } 24 }
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageMapper.java
@@ -10,6 +10,9 @@ import org.apache.ibatis.annotations.Mapper; @@ -10,6 +10,9 @@ import org.apache.ibatis.annotations.Mapper;
10 10
11 import java.util.List; 11 import java.util.List;
12 12
  13 +/**
  14 + * MES 装箱单 Mapper
  15 + */
13 @Mapper 16 @Mapper
14 public interface MesWmPackageMapper extends BaseMapperX<MesWmPackageDO> { 17 public interface MesWmPackageMapper extends BaseMapperX<MesWmPackageDO> {
15 18
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java
@@ -519,6 +519,7 @@ public interface ErrorCodeConstants { @@ -519,6 +519,7 @@ public interface ErrorCodeConstants {
519 ErrorCode WM_PACKAGE_PARENT_SELF = new ErrorCode(1_040_740_004, "不能选择自己作为父箱"); 519 ErrorCode WM_PACKAGE_PARENT_SELF = new ErrorCode(1_040_740_004, "不能选择自己作为父箱");
520 ErrorCode WM_PACKAGE_CHILD_HAS_PARENT = new ErrorCode(1_040_740_005, "该装箱单已有父箱,不能重复添加"); 520 ErrorCode WM_PACKAGE_CHILD_HAS_PARENT = new ErrorCode(1_040_740_005, "该装箱单已有父箱,不能重复添加");
521 ErrorCode WM_PACKAGE_PARENT_IS_CHILD = new ErrorCode(1_040_740_006, "不能选择子箱的后代作为父箱,会形成环路"); 521 ErrorCode WM_PACKAGE_PARENT_IS_CHILD = new ErrorCode(1_040_740_006, "不能选择子箱的后代作为父箱,会形成环路");
  522 + ErrorCode WM_PACKAGE_CHILD_NOT_FINISHED = new ErrorCode(1_040_740_007, "子箱必须是已完成状态才能添加");
522 ErrorCode WM_PACKAGE_LINE_NOT_EXISTS = new ErrorCode(1_040_740_100, "装箱明细不存在"); 523 ErrorCode WM_PACKAGE_LINE_NOT_EXISTS = new ErrorCode(1_040_740_100, "装箱明细不存在");
523 524
524 } 525 }
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageLineServiceImpl.java
@@ -12,11 +12,14 @@ import org.springframework.context.annotation.Lazy; @@ -12,11 +12,14 @@ import org.springframework.context.annotation.Lazy;
12 import org.springframework.stereotype.Service; 12 import org.springframework.stereotype.Service;
13 import org.springframework.validation.annotation.Validated; 13 import org.springframework.validation.annotation.Validated;
14 14
15 -import java.util.List;  
16 -  
17 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 15 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
18 -import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; 16 +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_PACKAGE_LINE_NOT_EXISTS;
19 17
  18 +/**
  19 + * MES 装箱明细 Service 实现类
  20 + *
  21 + * @author 芋道源码
  22 + */
20 @Service 23 @Service
21 @Validated 24 @Validated
22 public class MesWmPackageLineServiceImpl implements MesWmPackageLineService { 25 public class MesWmPackageLineServiceImpl implements MesWmPackageLineService {
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageServiceImpl.java
@@ -20,7 +20,11 @@ import java.util.Objects; @@ -20,7 +20,11 @@ import java.util.Objects;
20 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 20 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
21 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; 21 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
22 22
23 -// TODO @AI:检查下,是不是相关的类,类注释都没加; 23 +/**
  24 + * MES 装箱单 Service 实现类
  25 + *
  26 + * @author 芋道源码
  27 + */
24 @Service 28 @Service
25 @Validated 29 @Validated
26 public class MesWmPackageServiceImpl implements MesWmPackageService { 30 public class MesWmPackageServiceImpl implements MesWmPackageService {
@@ -67,6 +71,7 @@ public class MesWmPackageServiceImpl implements MesWmPackageService { @@ -67,6 +71,7 @@ public class MesWmPackageServiceImpl implements MesWmPackageService {
67 packageMapper.deleteById(id); 71 packageMapper.deleteById(id);
68 72
69 // 级联删除子箱 73 // 级联删除子箱
  74 + // TODO @AI:不能级联删除子箱;是删除的时候,如果有子箱子,不允许删除;
70 List<MesWmPackageDO> children = packageMapper.selectListByParentId(id); 75 List<MesWmPackageDO> children = packageMapper.selectListByParentId(id);
71 if (CollUtil.isNotEmpty(children)) { 76 if (CollUtil.isNotEmpty(children)) {
72 for (MesWmPackageDO child : children) { 77 for (MesWmPackageDO child : children) {
@@ -106,19 +111,8 @@ public class MesWmPackageServiceImpl implements MesWmPackageService { @@ -106,19 +111,8 @@ public class MesWmPackageServiceImpl implements MesWmPackageService {
106 validatePackageExistsAndDraft(parentId); 111 validatePackageExistsAndDraft(parentId);
107 // 校验子箱存在 112 // 校验子箱存在
108 MesWmPackageDO child = validatePackageExists(childId); 113 MesWmPackageDO child = validatePackageExists(childId);
109 - // 校验子箱没有父箱(parentId 为 0)  
110 - // TODO @AI:是不是可以类似 dept validateParentDept ;一样,写成一个统一的方法;  
111 - // DONE @AI:参考 validateParentDept 的实现;  
112 - if (ObjUtil.notEqual(child.getParentId(), MesWmPackageDO.PARENT_ID_ROOT)) {  
113 - throw exception(WM_PACKAGE_CHILD_HAS_PARENT);  
114 - }  
115 - // 不能将自己作为子箱  
116 - if (ObjUtil.equal(parentId, childId)) {  
117 - throw exception(WM_PACKAGE_PARENT_SELF);  
118 - }  
119 - // 递归校验:确保 parentId 不是 childId 的后代(避免形成环路)  
120 - validateNotChildOf(parentId, childId);  
121 - // TODO @AI:添加时,需要 child 是完成的; 114 + // 校验添加子箱的合法性
  115 + validateAddChildPackage(parentId, child);
122 116
123 // 设置子箱的 parentId 117 // 设置子箱的 parentId
124 packageMapper.updateById(new MesWmPackageDO().setId(childId).setParentId(parentId)); 118 packageMapper.updateById(new MesWmPackageDO().setId(childId).setParentId(parentId));
@@ -172,10 +166,31 @@ public class MesWmPackageServiceImpl implements MesWmPackageService { @@ -172,10 +166,31 @@ public class MesWmPackageServiceImpl implements MesWmPackageService {
172 } 166 }
173 167
174 /** 168 /**
175 - * 递归校验父箱不是子箱的后代,避免形成环路 169 + * 校验添加子箱的合法性
176 * 170 *
177 - * 参考  
178 - * {@link cn.iocoder.yudao.module.system.service.dept.DeptServiceImpl#validateParentDept} 171 + * @param parentId 父箱 ID
  172 + * @param child 子箱 DO
  173 + */
  174 + private void validateAddChildPackage(Long parentId, MesWmPackageDO child) {
  175 + // 1. 不能将自己作为子箱
  176 + if (ObjUtil.equal(parentId, child.getId())) {
  177 + throw exception(WM_PACKAGE_PARENT_SELF);
  178 + }
  179 + // 2. 子箱没有父箱(parentId 为 0)
  180 + if (ObjUtil.notEqual(child.getParentId(), MesWmPackageDO.PARENT_ID_ROOT)) {
  181 + throw exception(WM_PACKAGE_CHILD_HAS_PARENT);
  182 + }
  183 + // 3. 子箱必须是已完成状态
  184 + if (ObjUtil.notEqual(MesWmPackageStatusEnum.FINISHED.getStatus(), child.getStatus())) {
  185 + throw exception(WM_PACKAGE_CHILD_NOT_FINISHED);
  186 + }
  187 + // 4. 递归校验:确保 parentId 不是 childId 的后代(避免形成环路)
  188 + // TODO @AI:不搞独立方法,代码风格参考 validateParentDept
  189 + validateNotChildOf(parentId, child.getId());
  190 + }
  191 +
  192 + /**
  193 + * 递归校验父箱不是子箱的后代,避免形成环路
179 * 194 *
180 * @param parentId 父箱 ID 195 * @param parentId 父箱 ID
181 * @param childId 子箱 ID(不能是 parentId 的祖先) 196 * @param childId 子箱 ID(不能是 parentId 的祖先)