From 481d8165f26fc7e37f0e87f6444ac0340bb563a3 Mon Sep 17 00:00:00 2001
From: xiaoyi <908147524@qq.com>
Date: 星期二, 03 十一月 2026 18:53:22 +0800
Subject: [PATCH] fix: 移植长辉已验证的四类接口 500/体验问题(不含物料颜色字段)

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transaction/MesWmTransactionServiceImpl.java |   26 +++++++++++++++++++++-----
 1 files changed, 21 insertions(+), 5 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 17d0dc8..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);
             }
@@ -100,12 +108,20 @@
                     reqDTO.getItemId(), reqDTO.getWarehouseId(), reqDTO.getLocationId(), reqDTO.getAreaId(),
                     reqDTO.getBatchId(), reqDTO.getBatchCode(), reqDTO.getVendorId(), reqDTO.getReceiptTime());
         } else {
-            // 鍑哄簱浜嬪姟锛氬簱瀛樿褰曞繀椤诲凡瀛樺湪锛屼笉鍏佽鑷姩鍒涘缓
+            // 鍑哄簱浜嬪姟锛氬簱瀛樿褰曞繀椤诲凡瀛樺湪锛屼笉鍏佽鑷姩鍒涘缓锛堥櫎闈� checkFlag=false 鍏佽璐熷簱瀛橈級
             materialStock = materialStockService.getMaterialStockByCompositeKey(
                     reqDTO.getItemId(), reqDTO.getWarehouseId(), reqDTO.getLocationId(), reqDTO.getAreaId(),
                     reqDTO.getBatchId(), reqDTO.getVendorId());
             if (materialStock == null) {
-                throw exception(WM_MATERIAL_STOCK_NOT_EXISTS);
+                // checkFlag=false 鏃跺厑璁歌礋搴撳瓨锛岃嚜鍔ㄥ垱寤哄簱瀛樿褰曪紙鏁伴噺灏嗕粠 0 鎵e噺涓鸿礋鏁帮級
+                boolean allowNegative = !ObjUtil.defaultIfNull(reqDTO.getCheckFlag(), true);
+                if (allowNegative) {
+                    materialStock = materialStockService.getOrCreateMaterialStock(
+                            reqDTO.getItemId(), reqDTO.getWarehouseId(), reqDTO.getLocationId(), reqDTO.getAreaId(),
+                            reqDTO.getBatchId(), reqDTO.getBatchCode(), reqDTO.getVendorId(), reqDTO.getReceiptTime());
+                } else {
+                    throw exception(WM_MATERIAL_STOCK_NOT_EXISTS);
+                }
             }
         }
         if (materialStock == null || materialStock.getId() == null) {
@@ -120,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