Commit 07ab5ae4479c4020e7693e62053633e9437bd6ad

Authored by YunaiV
1 parent 8ab84968

✨ feat(mes): 添加装箱单及装箱明细的作者注释和字段类型调整

Showing 18 changed files with 65 additions and 42 deletions
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/MesWmPackageController.java
... ... @@ -32,9 +32,11 @@ 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 没加。
  35 +// DONE @AI:检查下 java 类,是不是 author 没加。
36 36 /**
37 37 * MES 装箱单 Controller
  38 + *
  39 + * @author 芋道源码
38 40 */
39 41 @Tag(name = "管理后台 - MES 装箱单")
40 42 @RestController
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/MesWmPackageLineController.java
... ... @@ -32,9 +32,10 @@ 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 35 /**
37 36 * MES 装箱明细 Controller
  37 + *
  38 + * @author 芋道源码
38 39 */
39 40 @Tag(name = "管理后台 - MES 装箱明细")
40 41 @RestController
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackagePageReqVO.java
... ... @@ -8,6 +8,8 @@ import lombok.ToString;
8 8  
9 9 /**
10 10 * MES 装箱单分页 Request VO
  11 + *
  12 + * @author 芋道源码
11 13 */
12 14 @Schema(description = "管理后台 - MES 装箱单分页 Request VO")
13 15 @Data
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackageRespVO.java
... ... @@ -11,6 +11,8 @@ import java.time.LocalDateTime;
11 11  
12 12 /**
13 13 * MES 装箱单 Response VO
  14 + *
  15 + * @author 芋道源码
14 16 */
15 17 @Schema(description = "管理后台 - MES 装箱单 Response VO")
16 18 @Data
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackageSaveReqVO.java
... ... @@ -10,6 +10,8 @@ import java.time.LocalDateTime;
10 10  
11 11 /**
12 12 * MES 装箱单新增/修改 Request VO
  13 + *
  14 + * @author 芋道源码
13 15 */
14 16 @Schema(description = "管理后台 - MES 装箱单新增/修改 Request VO")
15 17 @Data
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLinePageReqVO.java
... ... @@ -9,6 +9,8 @@ import lombok.ToString;
9 9  
10 10 /**
11 11 * MES 装箱明细分页 Request VO
  12 + *
  13 + * @author 芋道源码
12 14 */
13 15 @Schema(description = "管理后台 - MES 装箱明细分页 Request VO")
14 16 @Data
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLineRespVO.java
... ... @@ -5,11 +5,12 @@ import lombok.Data;
5 5 import lombok.experimental.Accessors;
6 6  
7 7 import java.math.BigDecimal;
8   -import java.time.LocalDate;
9 8 import java.time.LocalDateTime;
10 9  
11 10 /**
12 11 * MES 装箱明细 Response VO
  12 + *
  13 + * @author 芋道源码
13 14 */
14 15 @Schema(description = "管理后台 - MES 装箱明细 Response VO")
15 16 @Data
... ... @@ -53,7 +54,7 @@ public class MesWmPackageLineRespVO {
53 54 private String batchCode;
54 55  
55 56 @Schema(description = "有效期")
56   - private LocalDate expireDate;
  57 + private LocalDateTime expireDate;
57 58  
58 59 @Schema(description = "备注", example = "备注")
59 60 private String remark;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLineSaveReqVO.java
... ... @@ -10,6 +10,8 @@ import java.time.LocalDateTime;
10 10  
11 11 /**
12 12 * MES 装箱明细新增/修改 Request VO
  13 + *
  14 + * @author 芋道源码
13 15 */
14 16 @Schema(description = "管理后台 - MES 装箱明细新增/修改 Request VO")
15 17 @Data
... ... @@ -37,7 +39,7 @@ public class MesWmPackageLineSaveReqVO {
37 39 @Schema(description = "生产工单 ID", example = "1")
38 40 private Long workOrderId;
39 41  
40   - // TODO @AI:时间都是 LocalDateTIme;
  42 + // DONE @AI:时间都是 LocalDateTIme;
41 43 @Schema(description = "有效期")
42 44 private LocalDateTime expireDate;
43 45  
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/packages/MesWmPackageDO.java
... ... @@ -9,10 +9,12 @@ import com.baomidou.mybatisplus.annotation.TableName;
9 9 import lombok.*;
10 10  
11 11 import java.math.BigDecimal;
12   -import java.time.LocalDate;
  12 +import java.time.LocalDateTime;
13 13  
14 14 /**
15 15 * MES 装箱单 DO
  16 + *
  17 + * @author 芋道源码
16 18 */
17 19 @TableName("mes_wm_package")
18 20 @KeySequence("mes_wm_package_seq")
... ... @@ -39,7 +41,7 @@ public class MesWmPackageDO extends BaseDO {
39 41 /**
40 42 * 装箱日期
41 43 */
42   - private LocalDate packageDate;
  44 + private LocalDateTime packageDate;
43 45 /**
44 46 * 销售订单编号
45 47 */
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/packages/MesWmPackageLineDO.java
... ... @@ -13,6 +13,8 @@ import java.time.LocalDateTime;
13 13  
14 14 /**
15 15 * MES 装箱明细 DO
  16 + *
  17 + * @author 芋道源码
16 18 */
17 19 @TableName("mes_wm_package_line")
18 20 @KeySequence("mes_wm_package_line_seq")
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageLineMapper.java
... ... @@ -9,6 +9,8 @@ import org.apache.ibatis.annotations.Mapper;
9 9  
10 10 /**
11 11 * MES 装箱明细 Mapper
  12 + *
  13 + * @author 芋道源码
12 14 */
13 15 @Mapper
14 16 public interface MesWmPackageLineMapper extends BaseMapperX<MesWmPackageLineDO> {
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageMapper.java
... ... @@ -12,6 +12,8 @@ import java.util.List;
12 12  
13 13 /**
14 14 * MES 装箱单 Mapper
  15 + *
  16 + * @author 芋道源码
15 17 */
16 18 @Mapper
17 19 public interface MesWmPackageMapper extends BaseMapperX<MesWmPackageDO> {
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java
... ... @@ -520,6 +520,7 @@ public interface ErrorCodeConstants {
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 522 ErrorCode WM_PACKAGE_CHILD_NOT_FINISHED = new ErrorCode(1_040_740_007, "子箱必须是已完成状态才能添加");
  523 + ErrorCode WM_PACKAGE_HAS_CHILDREN = new ErrorCode(1_040_740_008, "存在子箱,不允许删除");
523 524 ErrorCode WM_PACKAGE_LINE_NOT_EXISTS = new ErrorCode(1_040_740_100, "装箱明细不存在");
524 525  
525 526 }
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/md/autocode/MesMdAutoCodeRuleCodeEnum.java
... ... @@ -12,7 +12,8 @@ import lombok.Getter;
12 12 @AllArgsConstructor
13 13 public enum MesMdAutoCodeRuleCodeEnum {
14 14  
15   - SN_CODE("SN_CODE", "SN 码");
  15 + SN_CODE("SN_CODE", "SN 码"),
  16 + PACKAGE_CODE("PACKAGE_CODE", "装箱单编码");
16 17  
17 18 /**
18 19 * 规则代码
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmPackageStatusEnum.java
... ... @@ -9,6 +9,8 @@ import java.util.Arrays;
9 9  
10 10 /**
11 11 * MES 装箱单状态枚举
  12 + *
  13 + * @author 芋道源码
12 14 */
13 15 @Getter
14 16 @AllArgsConstructor
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageLineService.java
... ... @@ -8,6 +8,8 @@ import jakarta.validation.Valid;
8 8  
9 9 /**
10 10 * MES 装箱明细 Service 接口
  11 + *
  12 + * @author 芋道源码
11 13 */
12 14 public interface MesWmPackageLineService {
13 15  
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageService.java
... ... @@ -10,6 +10,8 @@ import java.util.List;
10 10  
11 11 /**
12 12 * MES 装箱单 Service 接口
  13 + *
  14 + * @author 芋道源码
13 15 */
14 16 public interface MesWmPackageService {
15 17  
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageServiceImpl.java
... ... @@ -8,7 +8,9 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.MesWmPackageP
8 8 import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.MesWmPackageSaveReqVO;
9 9 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageDO;
10 10 import cn.iocoder.yudao.module.mes.dal.mysql.wm.packages.MesWmPackageMapper;
  11 +import cn.iocoder.yudao.module.mes.enums.wm.BarcodeBizTypeEnum;
11 12 import cn.iocoder.yudao.module.mes.enums.wm.MesWmPackageStatusEnum;
  13 +import cn.iocoder.yudao.module.mes.service.wm.barcode.MesWmBarcodeService;
12 14 import jakarta.annotation.Resource;
13 15 import org.springframework.stereotype.Service;
14 16 import org.springframework.transaction.annotation.Transactional;
... ... @@ -33,6 +35,8 @@ public class MesWmPackageServiceImpl implements MesWmPackageService {
33 35 private MesWmPackageMapper packageMapper;
34 36 @Resource
35 37 private MesWmPackageLineService packageLineService;
  38 + @Resource
  39 + private MesWmBarcodeService barcodeService;
36 40  
37 41 @Override
38 42 public Long createPackage(MesWmPackageSaveReqVO createReqVO) {
... ... @@ -44,6 +48,10 @@ public class MesWmPackageServiceImpl implements MesWmPackageService {
44 48 packageDO.setStatus(MesWmPackageStatusEnum.PREPARE.getStatus())
45 49 .setParentId(MesWmPackageDO.PARENT_ID_ROOT);
46 50 packageMapper.insert(packageDO);
  51 +
  52 + // 自动生成条码
  53 + barcodeService.autoGenerateBarcode(BarcodeBizTypeEnum.PACKAGE.getValue(),
  54 + packageDO.getId(), packageDO.getCode(), null);
47 55 return packageDO.getId();
48 56 }
49 57  
... ... @@ -64,20 +72,16 @@ public class MesWmPackageServiceImpl implements MesWmPackageService {
64 72 public void deletePackage(Long id) {
65 73 // 校验存在且为草稿
66 74 validatePackageExistsAndDraft(id);
67   -
68   - // 删除装箱明细
69   - packageLineService.deletePackageLineByPackageId(id);
70   - // 删除装箱单
71   - packageMapper.deleteById(id);
72   -
73   - // 级联删除子箱
74   - // TODO @AI:不能级联删除子箱;是删除的时候,如果有子箱子,不允许删除;
  75 + // 如果有子箱子,不允许删除
75 76 List<MesWmPackageDO> children = packageMapper.selectListByParentId(id);
76 77 if (CollUtil.isNotEmpty(children)) {
77   - for (MesWmPackageDO child : children) {
78   - deletePackage(child.getId());
79   - }
  78 + throw exception(WM_PACKAGE_HAS_CHILDREN);
80 79 }
  80 +
  81 + // 删除装箱单
  82 + packageMapper.deleteById(id);
  83 + // 删除装箱明细
  84 + packageLineService.deletePackageLineByPackageId(id);
81 85 }
82 86  
83 87 @Override
... ... @@ -184,33 +188,22 @@ public class MesWmPackageServiceImpl implements MesWmPackageService {
184 188 if (ObjUtil.notEqual(MesWmPackageStatusEnum.FINISHED.getStatus(), child.getStatus())) {
185 189 throw exception(WM_PACKAGE_CHILD_NOT_FINISHED);
186 190 }
187   - // 4. 递归校验:确保 parentId 不是 childId 的后代(避免形成环路)
188   - // TODO @AI:不搞独立方法,代码风格参考 validateParentDept
189   - validateNotChildOf(parentId, child.getId());
190   - }
191   -
192   - /**
193   - * 递归校验父箱不是子箱的后代,避免形成环路
194   - *
195   - * @param parentId 父箱 ID
196   - * @param childId 子箱 ID(不能是 parentId 的祖先)
197   - */
198   - private void validateNotChildOf(Long parentId, Long childId) {
  191 + // 4. 递归校验:确保 childId 不是 parentId 的祖先(避免形成环路)
  192 + MesWmPackageDO parentPackage = packageMapper.selectById(parentId);
199 193 for (int i = 0; i < Short.MAX_VALUE; i++) {
200   - // 查找 parentId 的子箱列表
201   - List<MesWmPackageDO> children = packageMapper.selectListByParentId(parentId);
202   - if (CollUtil.isEmpty(children)) {
  194 + if (parentPackage == null) {
203 195 break;
204 196 }
205   - // 如果 childId 在 parentId 的子箱列表中的某个后代里,说明形成环路
206   - for (MesWmPackageDO pkg : children) {
207   - if (Objects.equals(pkg.getId(), childId)) {
208   - throw exception(WM_PACKAGE_PARENT_IS_CHILD);
209   - }
  197 + // 4.1 校验环路
  198 + parentId = parentPackage.getParentId();
  199 + if (Objects.equals(child.getId(), parentId)) {
  200 + throw exception(WM_PACKAGE_PARENT_IS_CHILD);
  201 + }
  202 + // 4.2 继续递归下一级父箱
  203 + if (parentId == null || MesWmPackageDO.PARENT_ID_ROOT.equals(parentId)) {
  204 + break;
210 205 }
211   - // 继续递归检查下一级
212   - // 这里简化处理:装箱单层级通常不深,逐级检查即可
213   - break;
  206 + parentPackage = packageMapper.selectById(parentId);
214 207 }
215 208 }
216 209  
... ...