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 32 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
33 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 39 @Tag(name = "管理后台 - MES 装箱单")
36 40 @RestController
37 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 32 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
33 33 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
34 34  
  35 +// TODO @AI:检查下,是不是代码缩进有问题
  36 +/**
  37 + * MES 装箱明细 Controller
  38 + */
35 39 @Tag(name = "管理后台 - MES 装箱明细")
36 40 @RestController
37 41 @RequestMapping("/mes/wm/package-line")
38 42 @Validated
39 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 import lombok.EqualsAndHashCode;
7 7 import lombok.ToString;
8 8  
  9 +/**
  10 + * MES 装箱单分页 Request VO
  11 + */
9 12 @Schema(description = "管理后台 - MES 装箱单分页 Request VO")
10 13 @Data
11 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 9 import java.math.BigDecimal;
10 10 import java.time.LocalDateTime;
11 11  
  12 +/**
  13 + * MES 装箱单 Response VO
  14 + */
12 15 @Schema(description = "管理后台 - MES 装箱单 Response VO")
13 16 @Data
14 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 8 import java.math.BigDecimal;
9 9 import java.time.LocalDateTime;
10 10  
  11 +/**
  12 + * MES 装箱单新增/修改 Request VO
  13 + */
11 14 @Schema(description = "管理后台 - MES 装箱单新增/修改 Request VO")
12 15 @Data
13 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 7 import lombok.EqualsAndHashCode;
8 8 import lombok.ToString;
9 9  
  10 +/**
  11 + * MES 装箱明细分页 Request VO
  12 + */
10 13 @Schema(description = "管理后台 - MES 装箱明细分页 Request VO")
11 14 @Data
12 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 8 import java.time.LocalDate;
9 9 import java.time.LocalDateTime;
10 10  
  11 +/**
  12 + * MES 装箱明细 Response VO
  13 + */
11 14 @Schema(description = "管理后台 - MES 装箱明细 Response VO")
12 15 @Data
13 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 6 import lombok.Data;
7 7  
8 8 import java.math.BigDecimal;
9   -import java.time.LocalDate;
  9 +import java.time.LocalDateTime;
10 10  
  11 +/**
  12 + * MES 装箱明细新增/修改 Request VO
  13 + */
11 14 @Schema(description = "管理后台 - MES 装箱明细新增/修改 Request VO")
12 15 @Data
13 16 public class MesWmPackageLineSaveReqVO {
... ... @@ -34,8 +37,9 @@ public class MesWmPackageLineSaveReqVO {
34 37 @Schema(description = "生产工单 ID", example = "1")
35 38 private Long workOrderId;
36 39  
  40 + // TODO @AI:时间都是 LocalDateTIme;
37 41 @Schema(description = "有效期")
38   - private LocalDate expireDate;
  42 + private LocalDateTime expireDate;
39 43  
40 44 @Schema(description = "备注", example = "备注")
41 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 7 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageLineDO;
8 8 import org.apache.ibatis.annotations.Mapper;
9 9  
10   -import java.util.List;
11   -
  10 +/**
  11 + * MES 装箱明细 Mapper
  12 + */
12 13 @Mapper
13 14 public interface MesWmPackageLineMapper extends BaseMapperX<MesWmPackageLineDO> {
14 15  
... ... @@ -18,10 +19,6 @@ public interface MesWmPackageLineMapper extends BaseMapperX&lt;MesWmPackageLineDO&gt;
18 19 .orderByDesc(MesWmPackageLineDO::getId));
19 20 }
20 21  
21   - default List<MesWmPackageLineDO> selectListByPackageId(Long packageId) {
22   - return selectList(MesWmPackageLineDO::getPackageId, packageId);
23   - }
24   -
25 22 default void deleteByPackageId(Long packageId) {
26 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 10  
11 11 import java.util.List;
12 12  
  13 +/**
  14 + * MES 装箱单 Mapper
  15 + */
13 16 @Mapper
14 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 519 ErrorCode WM_PACKAGE_PARENT_SELF = new ErrorCode(1_040_740_004, "不能选择自己作为父箱");
520 520 ErrorCode WM_PACKAGE_CHILD_HAS_PARENT = new ErrorCode(1_040_740_005, "该装箱单已有父箱,不能重复添加");
521 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 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 12 import org.springframework.stereotype.Service;
13 13 import org.springframework.validation.annotation.Validated;
14 14  
15   -import java.util.List;
16   -
17 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 23 @Service
21 24 @Validated
22 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 20 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
21 21 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
22 22  
23   -// TODO @AI:检查下,是不是相关的类,类注释都没加;
  23 +/**
  24 + * MES 装箱单 Service 实现类
  25 + *
  26 + * @author 芋道源码
  27 + */
24 28 @Service
25 29 @Validated
26 30 public class MesWmPackageServiceImpl implements MesWmPackageService {
... ... @@ -67,6 +71,7 @@ public class MesWmPackageServiceImpl implements MesWmPackageService {
67 71 packageMapper.deleteById(id);
68 72  
69 73 // 级联删除子箱
  74 + // TODO @AI:不能级联删除子箱;是删除的时候,如果有子箱子,不允许删除;
70 75 List<MesWmPackageDO> children = packageMapper.selectListByParentId(id);
71 76 if (CollUtil.isNotEmpty(children)) {
72 77 for (MesWmPackageDO child : children) {
... ... @@ -106,19 +111,8 @@ public class MesWmPackageServiceImpl implements MesWmPackageService {
106 111 validatePackageExistsAndDraft(parentId);
107 112 // 校验子箱存在
108 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 117 // 设置子箱的 parentId
124 118 packageMapper.updateById(new MesWmPackageDO().setId(childId).setParentId(parentId));
... ... @@ -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 195 * @param parentId 父箱 ID
181 196 * @param childId 子箱 ID(不能是 parentId 的祖先)
... ...