Parcourir la source

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

YunaiV il y a 2 mois
Parent
commit
e4bd02ad23

+ 1 - 1
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 {
         wmTransactionService.createTransactionList(convertList(details, detail -> new MesWmTransactionSaveReqDTO()
                 .setType(MesWmTransactionTypeEnum.OUT.getType()).setItemId(detail.getItemId())
                 .setQuantity(detail.getQuantity().negate()) // 出库数量为负数
-                .setBatchId(detail.getBatchId())
+                .setBatchId(detail.getBatchId()).setBatchCode(detail.getBatchCode())
                 .setWarehouseId(detail.getWarehouseId()).setLocationId(detail.getLocationId()).setAreaId(detail.getAreaId())
                 .setBizType(MesBizTypeConstants.WM_PRODUCT_SALES).setBizId(sales.getId())
                 .setBizCode(sales.getCode()).setBizLineId(detail.getLineId())));

+ 23 - 0
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesDetailServiceImpl.java

@@ -1,14 +1,17 @@
 package cn.iocoder.yudao.module.mes.service.wm.returnsales;
 
 import cn.hutool.core.util.ObjUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.module.mes.controller.admin.wm.returnsales.vo.detail.MesWmReturnSalesDetailSaveReqVO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesDO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.wm.batch.MesWmBatchDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesDetailDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesLineDO;
 import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnsales.MesWmReturnSalesDetailMapper;
 import cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnSalesStatusEnum;
+import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService;
 import cn.iocoder.yudao.module.mes.service.wm.materialstock.MesWmMaterialStockService;
 import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService;
 import jakarta.annotation.Resource;
@@ -43,11 +46,14 @@ public class MesWmReturnSalesDetailServiceImpl implements MesWmReturnSalesDetail
     @Resource
     private MesWmWarehouseAreaService warehouseAreaService;
     @Resource
+    private MesWmBatchService batchService;
+    @Resource
     @Lazy
     private MesWmMaterialStockService materialStockService;
 
     @Override
     public Long createReturnSalesDetail(MesWmReturnSalesDetailSaveReqVO createReqVO) {
+        // 校验保存数据
         validateReturnSalesDetailSaveData(createReqVO);
 
         // 插入
@@ -60,6 +66,7 @@ public class MesWmReturnSalesDetailServiceImpl implements MesWmReturnSalesDetail
     public void updateReturnSalesDetail(MesWmReturnSalesDetailSaveReqVO updateReqVO) {
         // 校验存在
         validateReturnSalesDetailExists(updateReqVO.getId());
+        // 校验保存数据
         validateReturnSalesDetailSaveData(updateReqVO);
 
         // 更新
@@ -136,6 +143,9 @@ public class MesWmReturnSalesDetailServiceImpl implements MesWmReturnSalesDetail
         materialStockService.checkAreaMixingRule(reqVO.getAreaId(), reqVO.getItemId(), reqVO.getBatchId());
         // 校验明细总数量不超过行数量(排除自身)
         validateDetailQuantityNotExceed(reqVO.getLineId(), reqVO.getQuantity(), reqVO.getId(), line);
+
+        // 根据 batchCode 解析 batchId(必须在混放规则校验之前,因为它依赖 batchId)
+        fillBatchId(reqVO);
     }
 
     /**
@@ -160,4 +170,17 @@ public class MesWmReturnSalesDetailServiceImpl implements MesWmReturnSalesDetail
         }
     }
 
+    /**
+     * 根据 batchCode 解析并回填 batchId
+     */
+    private void fillBatchId(MesWmReturnSalesDetailSaveReqVO reqVO) {
+        if (StrUtil.isBlank(reqVO.getBatchCode())) {
+            return;
+        }
+        MesWmBatchDO batch = batchService.getBatchByCode(reqVO.getBatchCode());
+        if (batch != null) {
+            reqVO.setBatchId(batch.getId());
+        }
+    }
+
 }

+ 1 - 1
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 {
         wmTransactionService.createTransactionList(convertList(details, detail -> new MesWmTransactionSaveReqDTO()
                 .setType(MesWmTransactionTypeEnum.IN.getType()).setItemId(detail.getItemId())
                 .setQuantity(detail.getQuantity()) // 入库数量为正数
-                .setBatchId(detail.getBatchId())
+                .setBatchId(detail.getBatchId()).setBatchCode(detail.getBatchCode())
                 .setWarehouseId(detail.getWarehouseId()).setLocationId(detail.getLocationId()).setAreaId(detail.getAreaId())
                 .setBizType(MesBizTypeConstants.WM_RETURN_SALES).setBizId(returnSales.getId())
                 .setBizCode(returnSales.getCode()).setBizLineId(detail.getLineId())));