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,9 +32,11 @@ 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 没加。 35 +// DONE @AI:检查下 java 类,是不是 author 没加。
36 /** 36 /**
37 * MES 装箱单 Controller 37 * MES 装箱单 Controller
  38 + *
  39 + * @author 芋道源码
38 */ 40 */
39 @Tag(name = "管理后台 - MES 装箱单") 41 @Tag(name = "管理后台 - MES 装箱单")
40 @RestController 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,9 +32,10 @@ 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 /** 35 /**
37 * MES 装箱明细 Controller 36 * MES 装箱明细 Controller
  37 + *
  38 + * @author 芋道源码
38 */ 39 */
39 @Tag(name = "管理后台 - MES 装箱明细") 40 @Tag(name = "管理后台 - MES 装箱明细")
40 @RestController 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,6 +8,8 @@ import lombok.ToString;
8 8
9 /** 9 /**
10 * MES 装箱单分页 Request VO 10 * MES 装箱单分页 Request VO
  11 + *
  12 + * @author 芋道源码
11 */ 13 */
12 @Schema(description = "管理后台 - MES 装箱单分页 Request VO") 14 @Schema(description = "管理后台 - MES 装箱单分页 Request VO")
13 @Data 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,6 +11,8 @@ import java.time.LocalDateTime;
11 11
12 /** 12 /**
13 * MES 装箱单 Response VO 13 * MES 装箱单 Response VO
  14 + *
  15 + * @author 芋道源码
14 */ 16 */
15 @Schema(description = "管理后台 - MES 装箱单 Response VO") 17 @Schema(description = "管理后台 - MES 装箱单 Response VO")
16 @Data 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,6 +10,8 @@ import java.time.LocalDateTime;
10 10
11 /** 11 /**
12 * MES 装箱单新增/修改 Request VO 12 * MES 装箱单新增/修改 Request VO
  13 + *
  14 + * @author 芋道源码
13 */ 15 */
14 @Schema(description = "管理后台 - MES 装箱单新增/修改 Request VO") 16 @Schema(description = "管理后台 - MES 装箱单新增/修改 Request VO")
15 @Data 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,6 +9,8 @@ import lombok.ToString;
9 9
10 /** 10 /**
11 * MES 装箱明细分页 Request VO 11 * MES 装箱明细分页 Request VO
  12 + *
  13 + * @author 芋道源码
12 */ 14 */
13 @Schema(description = "管理后台 - MES 装箱明细分页 Request VO") 15 @Schema(description = "管理后台 - MES 装箱明细分页 Request VO")
14 @Data 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,11 +5,12 @@ import lombok.Data;
5 import lombok.experimental.Accessors; 5 import lombok.experimental.Accessors;
6 6
7 import java.math.BigDecimal; 7 import java.math.BigDecimal;
8 -import java.time.LocalDate;  
9 import java.time.LocalDateTime; 8 import java.time.LocalDateTime;
10 9
11 /** 10 /**
12 * MES 装箱明细 Response VO 11 * MES 装箱明细 Response VO
  12 + *
  13 + * @author 芋道源码
13 */ 14 */
14 @Schema(description = "管理后台 - MES 装箱明细 Response VO") 15 @Schema(description = "管理后台 - MES 装箱明细 Response VO")
15 @Data 16 @Data
@@ -53,7 +54,7 @@ public class MesWmPackageLineRespVO { @@ -53,7 +54,7 @@ public class MesWmPackageLineRespVO {
53 private String batchCode; 54 private String batchCode;
54 55
55 @Schema(description = "有效期") 56 @Schema(description = "有效期")
56 - private LocalDate expireDate; 57 + private LocalDateTime expireDate;
57 58
58 @Schema(description = "备注", example = "备注") 59 @Schema(description = "备注", example = "备注")
59 private String remark; 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,6 +10,8 @@ import java.time.LocalDateTime;
10 10
11 /** 11 /**
12 * MES 装箱明细新增/修改 Request VO 12 * MES 装箱明细新增/修改 Request VO
  13 + *
  14 + * @author 芋道源码
13 */ 15 */
14 @Schema(description = "管理后台 - MES 装箱明细新增/修改 Request VO") 16 @Schema(description = "管理后台 - MES 装箱明细新增/修改 Request VO")
15 @Data 17 @Data
@@ -37,7 +39,7 @@ public class MesWmPackageLineSaveReqVO { @@ -37,7 +39,7 @@ public class MesWmPackageLineSaveReqVO {
37 @Schema(description = "生产工单 ID", example = "1") 39 @Schema(description = "生产工单 ID", example = "1")
38 private Long workOrderId; 40 private Long workOrderId;
39 41
40 - // TODO @AI:时间都是 LocalDateTIme; 42 + // DONE @AI:时间都是 LocalDateTIme;
41 @Schema(description = "有效期") 43 @Schema(description = "有效期")
42 private LocalDateTime expireDate; 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,10 +9,12 @@ import com.baomidou.mybatisplus.annotation.TableName;
9 import lombok.*; 9 import lombok.*;
10 10
11 import java.math.BigDecimal; 11 import java.math.BigDecimal;
12 -import java.time.LocalDate; 12 +import java.time.LocalDateTime;
13 13
14 /** 14 /**
15 * MES 装箱单 DO 15 * MES 装箱单 DO
  16 + *
  17 + * @author 芋道源码
16 */ 18 */
17 @TableName("mes_wm_package") 19 @TableName("mes_wm_package")
18 @KeySequence("mes_wm_package_seq") 20 @KeySequence("mes_wm_package_seq")
@@ -39,7 +41,7 @@ public class MesWmPackageDO extends BaseDO { @@ -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,6 +13,8 @@ import java.time.LocalDateTime;
13 13
14 /** 14 /**
15 * MES 装箱明细 DO 15 * MES 装箱明细 DO
  16 + *
  17 + * @author 芋道源码
16 */ 18 */
17 @TableName("mes_wm_package_line") 19 @TableName("mes_wm_package_line")
18 @KeySequence("mes_wm_package_line_seq") 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,6 +9,8 @@ import org.apache.ibatis.annotations.Mapper;
9 9
10 /** 10 /**
11 * MES 装箱明细 Mapper 11 * MES 装箱明细 Mapper
  12 + *
  13 + * @author 芋道源码
12 */ 14 */
13 @Mapper 15 @Mapper
14 public interface MesWmPackageLineMapper extends BaseMapperX<MesWmPackageLineDO> { 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,6 +12,8 @@ import java.util.List;
12 12
13 /** 13 /**
14 * MES 装箱单 Mapper 14 * MES 装箱单 Mapper
  15 + *
  16 + * @author 芋道源码
15 */ 17 */
16 @Mapper 18 @Mapper
17 public interface MesWmPackageMapper extends BaseMapperX<MesWmPackageDO> { 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,6 +520,7 @@ public interface ErrorCodeConstants {
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_CHILD_NOT_FINISHED = new ErrorCode(1_040_740_007, "子箱必须是已完成状态才能添加");
  523 + ErrorCode WM_PACKAGE_HAS_CHILDREN = new ErrorCode(1_040_740_008, "存在子箱,不允许删除");
523 ErrorCode WM_PACKAGE_LINE_NOT_EXISTS = new ErrorCode(1_040_740_100, "装箱明细不存在"); 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,7 +12,8 @@ import lombok.Getter;
12 @AllArgsConstructor 12 @AllArgsConstructor
13 public enum MesMdAutoCodeRuleCodeEnum { 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,6 +9,8 @@ import java.util.Arrays;
9 9
10 /** 10 /**
11 * MES 装箱单状态枚举 11 * MES 装箱单状态枚举
  12 + *
  13 + * @author 芋道源码
12 */ 14 */
13 @Getter 15 @Getter
14 @AllArgsConstructor 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,6 +8,8 @@ import jakarta.validation.Valid;
8 8
9 /** 9 /**
10 * MES 装箱明细 Service 接口 10 * MES 装箱明细 Service 接口
  11 + *
  12 + * @author 芋道源码
11 */ 13 */
12 public interface MesWmPackageLineService { 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,6 +10,8 @@ import java.util.List;
10 10
11 /** 11 /**
12 * MES 装箱单 Service 接口 12 * MES 装箱单 Service 接口
  13 + *
  14 + * @author 芋道源码
13 */ 15 */
14 public interface MesWmPackageService { 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,7 +8,9 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.MesWmPackageP
8 import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.MesWmPackageSaveReqVO; 8 import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.MesWmPackageSaveReqVO;
9 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageDO; 9 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageDO;
10 import cn.iocoder.yudao.module.mes.dal.mysql.wm.packages.MesWmPackageMapper; 10 import cn.iocoder.yudao.module.mes.dal.mysql.wm.packages.MesWmPackageMapper;
  11 +import cn.iocoder.yudao.module.mes.enums.wm.BarcodeBizTypeEnum;
11 import cn.iocoder.yudao.module.mes.enums.wm.MesWmPackageStatusEnum; 12 import cn.iocoder.yudao.module.mes.enums.wm.MesWmPackageStatusEnum;
  13 +import cn.iocoder.yudao.module.mes.service.wm.barcode.MesWmBarcodeService;
12 import jakarta.annotation.Resource; 14 import jakarta.annotation.Resource;
13 import org.springframework.stereotype.Service; 15 import org.springframework.stereotype.Service;
14 import org.springframework.transaction.annotation.Transactional; 16 import org.springframework.transaction.annotation.Transactional;
@@ -33,6 +35,8 @@ public class MesWmPackageServiceImpl implements MesWmPackageService { @@ -33,6 +35,8 @@ public class MesWmPackageServiceImpl implements MesWmPackageService {
33 private MesWmPackageMapper packageMapper; 35 private MesWmPackageMapper packageMapper;
34 @Resource 36 @Resource
35 private MesWmPackageLineService packageLineService; 37 private MesWmPackageLineService packageLineService;
  38 + @Resource
  39 + private MesWmBarcodeService barcodeService;
36 40
37 @Override 41 @Override
38 public Long createPackage(MesWmPackageSaveReqVO createReqVO) { 42 public Long createPackage(MesWmPackageSaveReqVO createReqVO) {
@@ -44,6 +48,10 @@ public class MesWmPackageServiceImpl implements MesWmPackageService { @@ -44,6 +48,10 @@ public class MesWmPackageServiceImpl implements MesWmPackageService {
44 packageDO.setStatus(MesWmPackageStatusEnum.PREPARE.getStatus()) 48 packageDO.setStatus(MesWmPackageStatusEnum.PREPARE.getStatus())
45 .setParentId(MesWmPackageDO.PARENT_ID_ROOT); 49 .setParentId(MesWmPackageDO.PARENT_ID_ROOT);
46 packageMapper.insert(packageDO); 50 packageMapper.insert(packageDO);
  51 +
  52 + // 自动生成条码
  53 + barcodeService.autoGenerateBarcode(BarcodeBizTypeEnum.PACKAGE.getValue(),
  54 + packageDO.getId(), packageDO.getCode(), null);
47 return packageDO.getId(); 55 return packageDO.getId();
48 } 56 }
49 57
@@ -64,20 +72,16 @@ public class MesWmPackageServiceImpl implements MesWmPackageService { @@ -64,20 +72,16 @@ public class MesWmPackageServiceImpl implements MesWmPackageService {
64 public void deletePackage(Long id) { 72 public void deletePackage(Long id) {
65 // 校验存在且为草稿 73 // 校验存在且为草稿
66 validatePackageExistsAndDraft(id); 74 validatePackageExistsAndDraft(id);
67 -  
68 - // 删除装箱明细  
69 - packageLineService.deletePackageLineByPackageId(id);  
70 - // 删除装箱单  
71 - packageMapper.deleteById(id);  
72 -  
73 - // 级联删除子箱  
74 - // TODO @AI:不能级联删除子箱;是删除的时候,如果有子箱子,不允许删除; 75 + // 如果有子箱子,不允许删除
75 List<MesWmPackageDO> children = packageMapper.selectListByParentId(id); 76 List<MesWmPackageDO> children = packageMapper.selectListByParentId(id);
76 if (CollUtil.isNotEmpty(children)) { 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 @Override 87 @Override
@@ -184,33 +188,22 @@ public class MesWmPackageServiceImpl implements MesWmPackageService { @@ -184,33 +188,22 @@ public class MesWmPackageServiceImpl implements MesWmPackageService {
184 if (ObjUtil.notEqual(MesWmPackageStatusEnum.FINISHED.getStatus(), child.getStatus())) { 188 if (ObjUtil.notEqual(MesWmPackageStatusEnum.FINISHED.getStatus(), child.getStatus())) {
185 throw exception(WM_PACKAGE_CHILD_NOT_FINISHED); 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 for (int i = 0; i < Short.MAX_VALUE; i++) { 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 break; 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