From 05ab6e3f69a5e73624b2573db043f5923e8f7d8b Mon Sep 17 00:00:00 2001
From: xiaoyi <908147524@qq.com>
Date: 星期四, 05 十一月 2026 14:17:19 +0800
Subject: [PATCH] fix 修复bug

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java |   29 ++++++++++++++++++++++-------
 1 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java
index 5d37848..8f2a662 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java
@@ -41,7 +41,9 @@
 import jakarta.annotation.Resource;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.PlatformTransactionManager;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.support.TransactionTemplate;
 import org.springframework.validation.annotation.Validated;
 import lombok.extern.slf4j.Slf4j;
 
@@ -72,6 +74,8 @@
 
     @Resource
     private MesWmItemReceiptLineService itemReceiptLineService;
+    @Resource
+    private PlatformTransactionManager transactionManager;
     @Resource
     private MesWmItemReceiptDetailService itemReceiptDetailService;
     @Resource
@@ -537,7 +541,6 @@
     // ==================== 鎵归噺瀵煎叆 ====================
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
     public MesWmDocImportRespVO importItemReceiptList(List<MesWmItemReceiptImportExcelVO> importList) {
         MesWmDocImportRespVO respVO = MesWmDocImportRespVO.empty();
         if (CollUtil.isEmpty(importList)) {
@@ -614,10 +617,18 @@
                 saveReqVO.setRemark(StrUtil.trim(head.getRemark()));
                 Long receiptId = createItemReceipt(saveReqVO);
                 // 3.4 閫愯鍒涘缓鏄庣粏
+                int createdLines = 0;
                 for (MesWmItemReceiptImportExcelVO row : rows) {
-                    createItemReceiptLineByImport(receiptId, row, respVO, code);
+                    if (createItemReceiptLineByImport(receiptId, row, respVO, code)) {
+                        createdLines++;
+                    }
                 }
-                respVO.getCreateCodes().add(code);
+                if (createdLines == 0) {
+                    // 娌℃湁浠讳綍鏈夋晥鏄庣粏鏃朵笉淇濈暀绌哄崟锛屼篃涓嶆姤鍛婂鍏ユ垚鍔熴��
+                    itemReceiptMapper.deleteById(receiptId);
+                } else {
+                    respVO.getCreateCodes().add(code);
+                }
             } catch (Exception e) {
                 respVO.getFailureCodes().put(code, e.getMessage() == null ? "瀵煎叆澶辫触" : e.getMessage());
             }
@@ -628,17 +639,17 @@
     /**
      * 瀵煎叆鏃跺垱寤哄崟琛屾槑缁嗭紱澶辫触鍙褰曚笉鎶涘嚭锛岄伩鍏嶅奖鍝嶆暣寮犲崟鎹殑鍏跺畠琛�
      */
-    private void createItemReceiptLineByImport(Long receiptId, MesWmItemReceiptImportExcelVO row,
+    private boolean createItemReceiptLineByImport(Long receiptId, MesWmItemReceiptImportExcelVO row,
                                                MesWmDocImportRespVO respVO, String receiptCode) {
         String itemCode = StrUtil.trim(row.getItemCode());
         MesMdItemDO item = itemCode == null ? null : mdItemService.getItemByCode(itemCode);
         if (item == null) {
             respVO.getFailureCodes().put(receiptCode, "鐗╂枡缂栫爜[" + itemCode + "]涓嶅瓨鍦紝璇ヨ宸茶烦杩�");
-            return;
+            return false;
         }
         if (row.getReceivedQuantity() == null || row.getReceivedQuantity().signum() <= 0) {
             respVO.getFailureCodes().put(receiptCode, "鐗╂枡[" + itemCode + "]鍏ュ簱鏁伴噺蹇呴』澶т簬 0锛岃琛屽凡璺宠繃");
-            return;
+            return false;
         }
         try {
             MesWmItemReceiptLineSaveReqVO lineReqVO = new MesWmItemReceiptLineSaveReqVO();
@@ -649,9 +660,13 @@
             lineReqVO.setExpireDate(parseImportDateTime(row.getExpireDate()));
             lineReqVO.setLotNumber(StrUtil.trim(row.getLotNumber()));
             lineReqVO.setRemark(StrUtil.trim(row.getRemark()));
-            itemReceiptLineService.createItemReceiptLine(lineReqVO);
+            // 姣忚鐙珛浜嬪姟锛氭壒娆℃牎楠屽け璐ユ椂鍙洖婊氳琛岋紝閬垮厤姹℃煋鏁存瀵煎叆浜嬪姟銆�
+            new TransactionTemplate(transactionManager).executeWithoutResult(
+                    status -> itemReceiptLineService.createItemReceiptLine(lineReqVO));
+            return true;
         } catch (Exception e) {
             respVO.getFailureCodes().put(receiptCode, "鐗╂枡[" + itemCode + "]鏄庣粏鍒涘缓澶辫触锛�" + e.getMessage());
+            return false;
         }
     }
 

--
Gitblit v1.9.3