Commit 788d9c8286fa84a5ba932a11dc6f19b72b281418

Authored by YunaiV
1 parent f57da447

refactor(mes): 添加采购入库单模块待优化项标记

  - 标记字段设计待优化项(batchCode、warehouseId 等)
  - 标记业务逻辑待完善项(库存更新、校验逻辑等)
  - 调整代码格式
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/vo/line/MesWmItemReceiptLineSaveReqVO.java
@@ -29,9 +29,11 @@ public class MesWmItemReceiptLineSaveReqVO { @@ -29,9 +29,11 @@ public class MesWmItemReceiptLineSaveReqVO {
29 @NotNull(message = "入库数量不能为空") 29 @NotNull(message = "入库数量不能为空")
30 private BigDecimal receivedQuantity; 30 private BigDecimal receivedQuantity;
31 31
  32 + // TODO @芋艿:【暂时不调整】这个换成 batchCode;无论是前端、后端;数据库还是 batchId;后续在调整;
32 @Schema(description = "批次编号", example = "1") 33 @Schema(description = "批次编号", example = "1")
33 private Long batchId; 34 private Long batchId;
34 35
  36 + // TODO @AI:是不是这里不用 warehouseId、locationId、areaId
35 @Schema(description = "仓库编号", example = "1") 37 @Schema(description = "仓库编号", example = "1")
36 private Long warehouseId; 38 private Long warehouseId;
37 39
@@ -50,9 +52,11 @@ public class MesWmItemReceiptLineSaveReqVO { @@ -50,9 +52,11 @@ public class MesWmItemReceiptLineSaveReqVO {
50 @Schema(description = "生产批号", example = "PB20260110") 52 @Schema(description = "生产批号", example = "PB20260110")
51 private String productionBatchNumber; 53 private String productionBatchNumber;
52 54
  55 + // TODO @AI:这个字段去掉;
53 @Schema(description = "是否需要来料检验", example = "true") 56 @Schema(description = "是否需要来料检验", example = "true")
54 private Boolean iqcCheckFlag; 57 private Boolean iqcCheckFlag;
55 58
  59 + // TODO @AI:这个字段去掉;不是这里保存出来的;你也思考下;
56 @Schema(description = "来料检验单编号", example = "1") 60 @Schema(description = "来料检验单编号", example = "1")
57 private Long iqcId; 61 private Long iqcId;
58 62
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/itemreceipt/MesWmItemReceiptDO.java
@@ -65,6 +65,7 @@ public class MesWmItemReceiptDO extends BaseDO { @@ -65,6 +65,7 @@ public class MesWmItemReceiptDO extends BaseDO {
65 * 关联 {@link MesMdVendorDO#getId()} 65 * 关联 {@link MesMdVendorDO#getId()}
66 */ 66 */
67 private Long vendorId; 67 private Long vendorId;
  68 + // TODO @AI:warehouseId、locationId、areaId 这几个字段,是不是不需要;只需要在 detaildo 里存储就好了;
68 /** 69 /**
69 * 仓库编号 70 * 仓库编号
70 * 71 *
@@ -97,6 +98,7 @@ public class MesWmItemReceiptDO extends BaseDO { @@ -97,6 +98,7 @@ public class MesWmItemReceiptDO extends BaseDO {
97 * 备注 98 * 备注
98 */ 99 */
99 private String remark; 100 private String remark;
  101 +
100 /** 102 /**
101 * 预留字段1 103 * 预留字段1
102 */ 104 */
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/itemreceipt/MesWmItemReceiptDetailDO.java
@@ -80,6 +80,7 @@ public class MesWmItemReceiptDetailDO extends BaseDO { @@ -80,6 +80,7 @@ public class MesWmItemReceiptDetailDO extends BaseDO {
80 * 备注 80 * 备注
81 */ 81 */
82 private String remark; 82 private String remark;
  83 +
83 /** 84 /**
84 * 预留字段1 85 * 预留字段1
85 */ 86 */
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/itemreceipt/MesWmItemReceiptLineDO.java
@@ -38,6 +38,7 @@ public class MesWmItemReceiptLineDO extends BaseDO { @@ -38,6 +38,7 @@ public class MesWmItemReceiptLineDO extends BaseDO {
38 * 关联 {@link MesWmItemReceiptDO#getId()} 38 * 关联 {@link MesWmItemReceiptDO#getId()}
39 */ 39 */
40 private Long receiptId; 40 private Long receiptId;
  41 + // TODO @AI:字段要不完整点,更好维护;arrivalNoticeLineId;因为 noticeLineId 关联到 arrivalNoticeLineId;不然会有歧义;
41 /** 42 /**
42 * 到货通知单行编号 43 * 到货通知单行编号
43 * 44 *
@@ -60,6 +61,7 @@ public class MesWmItemReceiptLineDO extends BaseDO { @@ -60,6 +61,7 @@ public class MesWmItemReceiptLineDO extends BaseDO {
60 * TODO DONE @芋艿:保留。待 mes_wm_batch 模块迁移后补充 @link 关联 61 * TODO DONE @芋艿:保留。待 mes_wm_batch 模块迁移后补充 @link 关联
61 */ 62 */
62 private Long batchId; 63 private Long batchId;
  64 + // TODO @AI:warehouseId、locationId、areaId 这几个字段,是不是不需要;只需要在 detaildo 里存储就好了;
63 /** 65 /**
64 * 仓库编号 66 * 仓库编号
65 * 67 *
@@ -90,11 +92,13 @@ public class MesWmItemReceiptLineDO extends BaseDO { @@ -90,11 +92,13 @@ public class MesWmItemReceiptLineDO extends BaseDO {
90 * 生产批号 92 * 生产批号
91 */ 93 */
92 private String productionBatchNumber; 94 private String productionBatchNumber;
  95 + // TODO @AI:貌似不用 iqcCheckFlag 存储;因为 noticeLineId 可以关联到
93 /** 96 /**
94 * 是否需要来料检验 97 * 是否需要来料检验
95 */ 98 */
96 private Boolean iqcCheckFlag; 99 private Boolean iqcCheckFlag;
97 // TODO DONE @AI:已添加关联注释。因 QC 模块 DO 类尚未迁移,暂用表名标识 100 // TODO DONE @AI:已添加关联注释。因 QC 模块 DO 类尚未迁移,暂用表名标识
  101 + // TODO @AI:可以添加了;
98 /** 102 /**
99 * 来料检验单编号 103 * 来料检验单编号
100 * 104 *
@@ -105,6 +109,7 @@ public class MesWmItemReceiptLineDO extends BaseDO { @@ -105,6 +109,7 @@ public class MesWmItemReceiptLineDO extends BaseDO {
105 * 备注 109 * 备注
106 */ 110 */
107 private String remark; 111 private String remark;
  112 +
108 /** 113 /**
109 * 预留字段1 114 * 预留字段1
110 */ 115 */
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmItemReceiptStatusEnum.java
@@ -6,6 +6,7 @@ import lombok.Getter; @@ -6,6 +6,7 @@ import lombok.Getter;
6 6
7 import java.util.Arrays; 7 import java.util.Arrays;
8 8
  9 +// TODO @AI:应该使用 MesOrderStatusEnum 替代掉,只是使用其中的部分状态。需要在对应的 DO 说明下;当然,字典还是独立的!
9 /** 10 /**
10 * MES 采购入库单状态枚举 11 * MES 采购入库单状态枚举
11 * 12 *
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptDetailServiceImpl.java
@@ -30,8 +30,12 @@ public class MesWmItemReceiptDetailServiceImpl implements MesWmItemReceiptDetail @@ -30,8 +30,12 @@ public class MesWmItemReceiptDetailServiceImpl implements MesWmItemReceiptDetail
30 30
31 @Override 31 @Override
32 public Long createItemReceiptDetail(MesWmItemReceiptDetailSaveReqVO createReqVO) { 32 public Long createItemReceiptDetail(MesWmItemReceiptDetailSaveReqVO createReqVO) {
  33 + // TODO @AI:warehouseId、locationId、areaId 存在,并且是父子关系!最好在 areaService 中提供一个方法,校验这三个 ID 的关系!(并且存在)
33 // 校验父单据存在且为草稿状态 34 // 校验父单据存在且为草稿状态
34 itemReceiptService.validateItemReceiptEditable(createReqVO.getReceiptId()); 35 itemReceiptService.validateItemReceiptEditable(createReqVO.getReceiptId());
  36 + // TODO @AI:超过数量验证;
  37 +
  38 + // TODO @芋艿:【后续搞】不允许物资混放
35 39
36 MesWmItemReceiptDetailDO detail = BeanUtils.toBean(createReqVO, MesWmItemReceiptDetailDO.class); 40 MesWmItemReceiptDetailDO detail = BeanUtils.toBean(createReqVO, MesWmItemReceiptDetailDO.class);
37 itemReceiptDetailMapper.insert(detail); 41 itemReceiptDetailMapper.insert(detail);
@@ -40,10 +44,14 @@ public class MesWmItemReceiptDetailServiceImpl implements MesWmItemReceiptDetail @@ -40,10 +44,14 @@ public class MesWmItemReceiptDetailServiceImpl implements MesWmItemReceiptDetail
40 44
41 @Override 45 @Override
42 public void updateItemReceiptDetail(MesWmItemReceiptDetailSaveReqVO updateReqVO) { 46 public void updateItemReceiptDetail(MesWmItemReceiptDetailSaveReqVO updateReqVO) {
  47 + // TODO @AI:warehouseId、locationId、areaId 存在,并且是父子关系!最好在 areaService 中提供一个方法,校验这三个 ID 的关系!(并且存在)
43 // 校验存在 48 // 校验存在
44 MesWmItemReceiptDetailDO detail = validateItemReceiptDetailExists(updateReqVO.getId()); 49 MesWmItemReceiptDetailDO detail = validateItemReceiptDetailExists(updateReqVO.getId());
45 // 校验父单据存在且为草稿状态 50 // 校验父单据存在且为草稿状态
46 itemReceiptService.validateItemReceiptEditable(detail.getReceiptId()); 51 itemReceiptService.validateItemReceiptEditable(detail.getReceiptId());
  52 + // TODO @AI:超过数量验证;
  53 +
  54 + // TODO @芋艿:【后续搞】不允许物资混放
47 55
48 // 更新 56 // 更新
49 MesWmItemReceiptDetailDO updateObj = BeanUtils.toBean(updateReqVO, MesWmItemReceiptDetailDO.class); 57 MesWmItemReceiptDetailDO updateObj = BeanUtils.toBean(updateReqVO, MesWmItemReceiptDetailDO.class);
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptLineServiceImpl.java
@@ -41,10 +41,13 @@ public class MesWmItemReceiptLineServiceImpl implements MesWmItemReceiptLineServ @@ -41,10 +41,13 @@ public class MesWmItemReceiptLineServiceImpl implements MesWmItemReceiptLineServ
41 public Long createItemReceiptLine(MesWmItemReceiptLineSaveReqVO createReqVO) { 41 public Long createItemReceiptLine(MesWmItemReceiptLineSaveReqVO createReqVO) {
42 // 校验父单据存在且为草稿状态 42 // 校验父单据存在且为草稿状态
43 validateReceiptStatusDraft(createReqVO.getReceiptId()); 43 validateReceiptStatusDraft(createReqVO.getReceiptId());
  44 + // TODO @AI:校验关联订单;
44 45
45 // 新增 46 // 新增
46 MesWmItemReceiptLineDO line = BeanUtils.toBean(createReqVO, MesWmItemReceiptLineDO.class); 47 MesWmItemReceiptLineDO line = BeanUtils.toBean(createReqVO, MesWmItemReceiptLineDO.class);
47 itemReceiptLineMapper.insert(line); 48 itemReceiptLineMapper.insert(line);
  49 +
  50 + // TODO @芋艿:【暂时不处理】wmBatchService 需要生成下;基于 batchCode
48 return line.getId(); 51 return line.getId();
49 } 52 }
50 53
@@ -54,10 +57,13 @@ public class MesWmItemReceiptLineServiceImpl implements MesWmItemReceiptLineServ @@ -54,10 +57,13 @@ public class MesWmItemReceiptLineServiceImpl implements MesWmItemReceiptLineServ
54 MesWmItemReceiptLineDO line = validateItemReceiptLineExists(updateReqVO.getId()); 57 MesWmItemReceiptLineDO line = validateItemReceiptLineExists(updateReqVO.getId());
55 // 校验父单据存在且为草稿状态 58 // 校验父单据存在且为草稿状态
56 validateReceiptStatusDraft(line.getReceiptId()); 59 validateReceiptStatusDraft(line.getReceiptId());
  60 + // TODO @AI:校验关联订单;
57 61
58 // 更新 62 // 更新
59 MesWmItemReceiptLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmItemReceiptLineDO.class); 63 MesWmItemReceiptLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmItemReceiptLineDO.class);
60 itemReceiptLineMapper.updateById(updateObj); 64 itemReceiptLineMapper.updateById(updateObj);
  65 +
  66 + // TODO @芋艿:【暂时不处理】wmBatchService 需要生成下;基于 batchCode
61 } 67 }
62 68
63 @Override 69 @Override
@@ -100,6 +106,7 @@ public class MesWmItemReceiptLineServiceImpl implements MesWmItemReceiptLineServ @@ -100,6 +106,7 @@ public class MesWmItemReceiptLineServiceImpl implements MesWmItemReceiptLineServ
100 return line; 106 return line;
101 } 107 }
102 108
  109 + // TODO @AI:这个应该在 itemReceiptService 中;
103 /** 110 /**
104 * 校验父采购入库单存在且为草稿状态 111 * 校验父采购入库单存在且为草稿状态
105 */ 112 */
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java
@@ -147,6 +147,7 @@ public class MesWmItemReceiptServiceImpl implements MesWmItemReceiptService { @@ -147,6 +147,7 @@ public class MesWmItemReceiptServiceImpl implements MesWmItemReceiptService {
147 } 147 }
148 148
149 // 遍历所有明细,更新库存台账 149 // 遍历所有明细,更新库存台账
  150 + // TODO @AI:这里可能有点问题;缺少库存更新;后面在弄;
150 List<MesWmItemReceiptDetailDO> details = itemReceiptDetailService.getItemReceiptDetailListByReceiptId(id); 151 List<MesWmItemReceiptDetailDO> details = itemReceiptDetailService.getItemReceiptDetailListByReceiptId(id);
151 for (MesWmItemReceiptDetailDO detail : details) { 152 for (MesWmItemReceiptDetailDO detail : details) {
152 materialStockService.increaseStock( 153 materialStockService.increaseStock(
@@ -157,6 +158,7 @@ public class MesWmItemReceiptServiceImpl implements MesWmItemReceiptService { @@ -157,6 +158,7 @@ public class MesWmItemReceiptServiceImpl implements MesWmItemReceiptService {
157 // 更新入库单状态 158 // 更新入库单状态
158 itemReceiptMapper.updateById(new MesWmItemReceiptDO() 159 itemReceiptMapper.updateById(new MesWmItemReceiptDO()
159 .setId(id).setStatus(MesWmItemReceiptStatusEnum.FINISHED.getStatus())); 160 .setId(id).setStatus(MesWmItemReceiptStatusEnum.FINISHED.getStatus()));
  161 +
160 // 更新关联的到货通知单状态 162 // 更新关联的到货通知单状态
161 if (receipt.getNoticeId() != null) { 163 if (receipt.getNoticeId() != null) {
162 arrivalNoticeService.finishArrivalNotice(receipt.getNoticeId()); 164 arrivalNoticeService.finishArrivalNotice(receipt.getNoticeId());