Commit e4bd02ad23dca8268ee6c0873626797f4d2bc8c8

Authored by YunaiV
1 parent 8e9759d3

✨ feat(wm): 添加批次代码解析功能以支持出入库操作

yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesServiceImpl.java
@@ -220,7 +220,7 @@ public class MesWmProductSalesServiceImpl implements MesWmProductSalesService { @@ -220,7 +220,7 @@ public class MesWmProductSalesServiceImpl implements MesWmProductSalesService {
220 wmTransactionService.createTransactionList(convertList(details, detail -> new MesWmTransactionSaveReqDTO() 220 wmTransactionService.createTransactionList(convertList(details, detail -> new MesWmTransactionSaveReqDTO()
221 .setType(MesWmTransactionTypeEnum.OUT.getType()).setItemId(detail.getItemId()) 221 .setType(MesWmTransactionTypeEnum.OUT.getType()).setItemId(detail.getItemId())
222 .setQuantity(detail.getQuantity().negate()) // 出库数量为负数 222 .setQuantity(detail.getQuantity().negate()) // 出库数量为负数
223 - .setBatchId(detail.getBatchId()) 223 + .setBatchId(detail.getBatchId()).setBatchCode(detail.getBatchCode())
224 .setWarehouseId(detail.getWarehouseId()).setLocationId(detail.getLocationId()).setAreaId(detail.getAreaId()) 224 .setWarehouseId(detail.getWarehouseId()).setLocationId(detail.getLocationId()).setAreaId(detail.getAreaId())
225 .setBizType(MesBizTypeConstants.WM_PRODUCT_SALES).setBizId(sales.getId()) 225 .setBizType(MesBizTypeConstants.WM_PRODUCT_SALES).setBizId(sales.getId())
226 .setBizCode(sales.getCode()).setBizLineId(detail.getLineId()))); 226 .setBizCode(sales.getCode()).setBizLineId(detail.getLineId())));
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesDetailServiceImpl.java
1 package cn.iocoder.yudao.module.mes.service.wm.returnsales; 1 package cn.iocoder.yudao.module.mes.service.wm.returnsales;
2 2
3 import cn.hutool.core.util.ObjUtil; 3 import cn.hutool.core.util.ObjUtil;
  4 +import cn.hutool.core.util.StrUtil;
4 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; 5 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
5 import cn.iocoder.yudao.framework.common.util.object.BeanUtils; 6 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
6 import cn.iocoder.yudao.module.mes.controller.admin.wm.returnsales.vo.detail.MesWmReturnSalesDetailSaveReqVO; 7 import cn.iocoder.yudao.module.mes.controller.admin.wm.returnsales.vo.detail.MesWmReturnSalesDetailSaveReqVO;
7 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesDO; 8 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesDO;
  9 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.batch.MesWmBatchDO;
8 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesDetailDO; 10 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesDetailDO;
9 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesLineDO; 11 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesLineDO;
10 import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnsales.MesWmReturnSalesDetailMapper; 12 import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnsales.MesWmReturnSalesDetailMapper;
11 import cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnSalesStatusEnum; 13 import cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnSalesStatusEnum;
  14 +import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService;
12 import cn.iocoder.yudao.module.mes.service.wm.materialstock.MesWmMaterialStockService; 15 import cn.iocoder.yudao.module.mes.service.wm.materialstock.MesWmMaterialStockService;
13 import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService; 16 import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService;
14 import jakarta.annotation.Resource; 17 import jakarta.annotation.Resource;
@@ -43,11 +46,14 @@ public class MesWmReturnSalesDetailServiceImpl implements MesWmReturnSalesDetail @@ -43,11 +46,14 @@ public class MesWmReturnSalesDetailServiceImpl implements MesWmReturnSalesDetail
43 @Resource 46 @Resource
44 private MesWmWarehouseAreaService warehouseAreaService; 47 private MesWmWarehouseAreaService warehouseAreaService;
45 @Resource 48 @Resource
  49 + private MesWmBatchService batchService;
  50 + @Resource
46 @Lazy 51 @Lazy
47 private MesWmMaterialStockService materialStockService; 52 private MesWmMaterialStockService materialStockService;
48 53
49 @Override 54 @Override
50 public Long createReturnSalesDetail(MesWmReturnSalesDetailSaveReqVO createReqVO) { 55 public Long createReturnSalesDetail(MesWmReturnSalesDetailSaveReqVO createReqVO) {
  56 + // 校验保存数据
51 validateReturnSalesDetailSaveData(createReqVO); 57 validateReturnSalesDetailSaveData(createReqVO);
52 58
53 // 插入 59 // 插入
@@ -60,6 +66,7 @@ public class MesWmReturnSalesDetailServiceImpl implements MesWmReturnSalesDetail @@ -60,6 +66,7 @@ public class MesWmReturnSalesDetailServiceImpl implements MesWmReturnSalesDetail
60 public void updateReturnSalesDetail(MesWmReturnSalesDetailSaveReqVO updateReqVO) { 66 public void updateReturnSalesDetail(MesWmReturnSalesDetailSaveReqVO updateReqVO) {
61 // 校验存在 67 // 校验存在
62 validateReturnSalesDetailExists(updateReqVO.getId()); 68 validateReturnSalesDetailExists(updateReqVO.getId());
  69 + // 校验保存数据
63 validateReturnSalesDetailSaveData(updateReqVO); 70 validateReturnSalesDetailSaveData(updateReqVO);
64 71
65 // 更新 72 // 更新
@@ -136,6 +143,9 @@ public class MesWmReturnSalesDetailServiceImpl implements MesWmReturnSalesDetail @@ -136,6 +143,9 @@ public class MesWmReturnSalesDetailServiceImpl implements MesWmReturnSalesDetail
136 materialStockService.checkAreaMixingRule(reqVO.getAreaId(), reqVO.getItemId(), reqVO.getBatchId()); 143 materialStockService.checkAreaMixingRule(reqVO.getAreaId(), reqVO.getItemId(), reqVO.getBatchId());
137 // 校验明细总数量不超过行数量(排除自身) 144 // 校验明细总数量不超过行数量(排除自身)
138 validateDetailQuantityNotExceed(reqVO.getLineId(), reqVO.getQuantity(), reqVO.getId(), line); 145 validateDetailQuantityNotExceed(reqVO.getLineId(), reqVO.getQuantity(), reqVO.getId(), line);
  146 +
  147 + // 根据 batchCode 解析 batchId(必须在混放规则校验之前,因为它依赖 batchId)
  148 + fillBatchId(reqVO);
139 } 149 }
140 150
141 /** 151 /**
@@ -160,4 +170,17 @@ public class MesWmReturnSalesDetailServiceImpl implements MesWmReturnSalesDetail @@ -160,4 +170,17 @@ public class MesWmReturnSalesDetailServiceImpl implements MesWmReturnSalesDetail
160 } 170 }
161 } 171 }
162 172
  173 + /**
  174 + * 根据 batchCode 解析并回填 batchId
  175 + */
  176 + private void fillBatchId(MesWmReturnSalesDetailSaveReqVO reqVO) {
  177 + if (StrUtil.isBlank(reqVO.getBatchCode())) {
  178 + return;
  179 + }
  180 + MesWmBatchDO batch = batchService.getBatchByCode(reqVO.getBatchCode());
  181 + if (batch != null) {
  182 + reqVO.setBatchId(batch.getId());
  183 + }
  184 + }
  185 +
163 } 186 }
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesServiceImpl.java
@@ -190,7 +190,7 @@ public class MesWmReturnSalesServiceImpl implements MesWmReturnSalesService { @@ -190,7 +190,7 @@ public class MesWmReturnSalesServiceImpl implements MesWmReturnSalesService {
190 wmTransactionService.createTransactionList(convertList(details, detail -> new MesWmTransactionSaveReqDTO() 190 wmTransactionService.createTransactionList(convertList(details, detail -> new MesWmTransactionSaveReqDTO()
191 .setType(MesWmTransactionTypeEnum.IN.getType()).setItemId(detail.getItemId()) 191 .setType(MesWmTransactionTypeEnum.IN.getType()).setItemId(detail.getItemId())
192 .setQuantity(detail.getQuantity()) // 入库数量为正数 192 .setQuantity(detail.getQuantity()) // 入库数量为正数
193 - .setBatchId(detail.getBatchId()) 193 + .setBatchId(detail.getBatchId()).setBatchCode(detail.getBatchCode())
194 .setWarehouseId(detail.getWarehouseId()).setLocationId(detail.getLocationId()).setAreaId(detail.getAreaId()) 194 .setWarehouseId(detail.getWarehouseId()).setLocationId(detail.getLocationId()).setAreaId(detail.getAreaId())
195 .setBizType(MesBizTypeConstants.WM_RETURN_SALES).setBizId(returnSales.getId()) 195 .setBizType(MesBizTypeConstants.WM_RETURN_SALES).setBizId(returnSales.getId())
196 .setBizCode(returnSales.getCode()).setBizLineId(detail.getLineId()))); 196 .setBizCode(returnSales.getCode()).setBizLineId(detail.getLineId())));