From 381e02b9eccbe953b31d09f2af1c2ce77c816140 Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期六, 07 十一月 2026 14:51:05 +0800
Subject: [PATCH] fix(mes): 隔离设备物料并支持销售产品映射

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transaction/MesWmTransactionServiceImpl.java |   14 +++++++++++---
 1 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transaction/MesWmTransactionServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transaction/MesWmTransactionServiceImpl.java
index 031dc5d..70ff95e 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transaction/MesWmTransactionServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transaction/MesWmTransactionServiceImpl.java
@@ -5,6 +5,7 @@
 import cn.hutool.core.util.ObjUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.module.mes.controller.admin.wm.transaction.vo.MesWmTransactionPageReqVO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.mdm.MesMdmItemDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.batch.MesWmBatchDO;
@@ -14,6 +15,8 @@
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseLocationDO;
 import cn.iocoder.yudao.module.mes.dal.mysql.wm.transaction.MesWmTransactionMapper;
+import cn.iocoder.yudao.module.mes.dal.mysql.wm.materialstock.MesWmMaterialStockMapper;
+import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants;
 import cn.iocoder.yudao.module.mes.enums.wm.MesWmTransactionTypeEnum;
 import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService;
 import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService;
@@ -47,6 +50,8 @@
     @Resource
     private MesWmMaterialStockService materialStockService;
     @Resource
+    private MesWmMaterialStockMapper materialStockMapper;
+    @Resource
     private MesWmBatchService batchService;
     @Resource
     private MesMdmItemService mdmItemService;
@@ -71,7 +76,7 @@
         // 1.3 鍏ュ簱浜嬪姟锛氭壒娆″彿鏍¢獙 + batchId/batchCode 浜掕ˉ
         checkBatch(reqDTO, inbound);
         // 1.4 鍏ュ簱浜嬪姟锛氬簱浣嶆贩鏀捐鍒欐牎楠�
-        if (inbound) {
+        if (inbound && !ObjUtil.equal(reqDTO.getBizType(), MesBizTypeConstants.WM_STOCK_IMPORT_IN)) {
             materialStockService.checkAreaMixingRule(reqDTO.getAreaId(), reqDTO.getItemId(), reqDTO.getBatchId());
         }
         // 1.5 鍏宠仈浜嬪姟鏍¢獙
@@ -83,7 +88,10 @@
         boolean isInbound = transactionType != null && transactionType.isInbound();
         if (reqDTO.getMaterialStockId() != null) {
             // 浼犲叆浜� materialStockId锛岀洿鎺ヤ娇鐢�
-            materialStock = materialStockService.getMaterialStock(reqDTO.getMaterialStockId());
+            materialStock = ObjUtil.equal(reqDTO.getBizType(), MesBizTypeConstants.WM_STOCK_IMPORT_IN)
+                    ? materialStockMapper.selectOne(new LambdaQueryWrapperX<MesWmMaterialStockDO>()
+                            .eq(MesWmMaterialStockDO::getId, reqDTO.getMaterialStockId()).last("FOR UPDATE"))
+                    : materialStockService.getMaterialStock(reqDTO.getMaterialStockId());
             if (materialStock == null) {
                 throw exception(WM_MATERIAL_STOCK_NOT_EXISTS);
             }
@@ -128,7 +136,7 @@
         // 3. 鎻掑叆浜嬪姟娴佹按
         MesWmTransactionDO transaction = MesWmTransactionDO.builder()
                 .type(reqDTO.getType()).quantity(reqDTO.getQuantity()).transactionTime(LocalDateTime.now())
-                .itemId(reqDTO.getItemId()).batchId(reqDTO.getBatchId()).batchCode(reqDTO.getBatchCode())
+                .itemId(reqDTO.getItemId()).batchId(reqDTO.getBatchId()).batchCode(reqDTO.getBatchCode()).snCode(reqDTO.getSnCode())
                 .warehouseId(reqDTO.getWarehouseId()).locationId(reqDTO.getLocationId()).areaId(reqDTO.getAreaId())
                 .bizType(reqDTO.getBizType()).bizId(reqDTO.getBizId()).bizCode(reqDTO.getBizCode()).bizLineId(reqDTO.getBizLineId())
                 .materialStockId(materialStock.getId()).relatedTransactionId(reqDTO.getRelatedTransactionId())

--
Gitblit v1.9.3