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 220 wmTransactionService.createTransactionList(convertList(details, detail -> new MesWmTransactionSaveReqDTO()
221 221 .setType(MesWmTransactionTypeEnum.OUT.getType()).setItemId(detail.getItemId())
222 222 .setQuantity(detail.getQuantity().negate()) // 出库数量为负数
223   - .setBatchId(detail.getBatchId())
  223 + .setBatchId(detail.getBatchId()).setBatchCode(detail.getBatchCode())
224 224 .setWarehouseId(detail.getWarehouseId()).setLocationId(detail.getLocationId()).setAreaId(detail.getAreaId())
225 225 .setBizType(MesBizTypeConstants.WM_PRODUCT_SALES).setBizId(sales.getId())
226 226 .setBizCode(sales.getCode()).setBizLineId(detail.getLineId())));
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesDetailServiceImpl.java
1 1 package cn.iocoder.yudao.module.mes.service.wm.returnsales;
2 2  
3 3 import cn.hutool.core.util.ObjUtil;
  4 +import cn.hutool.core.util.StrUtil;
4 5 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
5 6 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
6 7 import cn.iocoder.yudao.module.mes.controller.admin.wm.returnsales.vo.detail.MesWmReturnSalesDetailSaveReqVO;
7 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 10 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesDetailDO;
9 11 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesLineDO;
10 12 import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnsales.MesWmReturnSalesDetailMapper;
11 13 import cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnSalesStatusEnum;
  14 +import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService;
12 15 import cn.iocoder.yudao.module.mes.service.wm.materialstock.MesWmMaterialStockService;
13 16 import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService;
14 17 import jakarta.annotation.Resource;
... ... @@ -43,11 +46,14 @@ public class MesWmReturnSalesDetailServiceImpl implements MesWmReturnSalesDetail
43 46 @Resource
44 47 private MesWmWarehouseAreaService warehouseAreaService;
45 48 @Resource
  49 + private MesWmBatchService batchService;
  50 + @Resource
46 51 @Lazy
47 52 private MesWmMaterialStockService materialStockService;
48 53  
49 54 @Override
50 55 public Long createReturnSalesDetail(MesWmReturnSalesDetailSaveReqVO createReqVO) {
  56 + // 校验保存数据
51 57 validateReturnSalesDetailSaveData(createReqVO);
52 58  
53 59 // 插入
... ... @@ -60,6 +66,7 @@ public class MesWmReturnSalesDetailServiceImpl implements MesWmReturnSalesDetail
60 66 public void updateReturnSalesDetail(MesWmReturnSalesDetailSaveReqVO updateReqVO) {
61 67 // 校验存在
62 68 validateReturnSalesDetailExists(updateReqVO.getId());
  69 + // 校验保存数据
63 70 validateReturnSalesDetailSaveData(updateReqVO);
64 71  
65 72 // 更新
... ... @@ -136,6 +143,9 @@ public class MesWmReturnSalesDetailServiceImpl implements MesWmReturnSalesDetail
136 143 materialStockService.checkAreaMixingRule(reqVO.getAreaId(), reqVO.getItemId(), reqVO.getBatchId());
137 144 // 校验明细总数量不超过行数量(排除自身)
138 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 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 190 wmTransactionService.createTransactionList(convertList(details, detail -> new MesWmTransactionSaveReqDTO()
191 191 .setType(MesWmTransactionTypeEnum.IN.getType()).setItemId(detail.getItemId())
192 192 .setQuantity(detail.getQuantity()) // 入库数量为正数
193   - .setBatchId(detail.getBatchId())
  193 + .setBatchId(detail.getBatchId()).setBatchCode(detail.getBatchCode())
194 194 .setWarehouseId(detail.getWarehouseId()).setLocationId(detail.getLocationId()).setAreaId(detail.getAreaId())
195 195 .setBizType(MesBizTypeConstants.WM_RETURN_SALES).setBizId(returnSales.getId())
196 196 .setBizCode(returnSales.getCode()).setBizLineId(detail.getLineId())));
... ...