From f71dabccb0e4c2fa410683e6058eb906a7dbf094 Mon Sep 17 00:00:00 2001
From: xiaoyi <908147524@qq.com>
Date: 星期三, 26 八月 2026 18:12:07 +0800
Subject: [PATCH] feat 采购修正

---
 yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/enums/ErrorCodeConstants.java                           |    1 +
 yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseRequestServiceImpl.java     |   14 +++++++-------
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java |   14 +++++++++++---
 3 files changed, 19 insertions(+), 10 deletions(-)

diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/enums/ErrorCodeConstants.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/enums/ErrorCodeConstants.java
index 44382f7..908c5ac 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/enums/ErrorCodeConstants.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/enums/ErrorCodeConstants.java
@@ -53,6 +53,7 @@
     ErrorCode PURCHASE_REQUEST_ORDER_EXISTS = new ErrorCode(1_030_104_007, "閲囪喘鐢宠鍗曞凡鐢熸垚閲囪喘璁㈠崟锛岃鍕块噸澶嶆搷浣�");
     ErrorCode PURCHASE_REQUEST_BPM_CATEGORY_NOT_EXISTS = new ErrorCode(1_030_104_008, "閲囪喘鐢宠瀹℃壒鍒嗙被涓嶅瓨鍦紝璇峰厛鍦˙PM妯″潡鍒涘缓閲囪喘鐢宠瀹℃壒娴佺▼鍒嗙被");
     ErrorCode PURCHASE_REQUEST_BPM_PROCESS_DEFINITION_NOT_EXISTS = new ErrorCode(1_030_104_009, "閲囪喘鐢宠瀹℃壒鍒嗙被涓嬫病鏈夊彲鐢ㄧ殑娴佺▼妯″瀷锛岃鍏堝垱寤哄苟鍙戝竷娴佺▼");
+    ErrorCode PURCHASE_REQUEST_ITEM_PRICE_EMPTY = new ErrorCode(1_030_104_021, "閲囪喘鐢宠鏄庣粏({})閲戦淇℃伅涓嶅畬鏁达紝鏃犳硶鐢熸垚閲囪喘璁㈠崟");
 
     // ========== ERP 閲囪喘璁″垝锛�1-030-104-010锛� ==========
     ErrorCode PURCHASE_PLAN_NOT_EXISTS = new ErrorCode(1_030_104_010, "閲囪喘璁″垝涓嶅瓨鍦�");
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseRequestServiceImpl.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseRequestServiceImpl.java
index 7f2debd..6c3c7a7 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseRequestServiceImpl.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseRequestServiceImpl.java
@@ -326,13 +326,8 @@
         if (ErpPurchaseRequestStatusEnum.APPROVE.getStatus().equals(newStatus)
                 && purchaseRequest.getSupplierId() != null
                 && purchaseRequest.getOrderId() == null) {
-            try {
-                Long orderId = doGeneratePurchaseOrder(purchaseRequest);
-                log.info("[updatePurchaseRequestAuditStatus] 閲囪喘鐢宠({}) 鑷姩鐢熸垚閲囪喘璁㈠崟({})", id, orderId);
-            } catch (Exception e) {
-                log.error("[updatePurchaseRequestAuditStatus] 閲囪喘鐢宠({}) 鑷姩鐢熸垚閲囪喘璁㈠崟澶辫触", id, e);
-                // 涓嶆姏鍑哄紓甯革紝閬垮厤褰卞搷鐘舵�佹洿鏂�
-            }
+            Long orderId = doGeneratePurchaseOrder(purchaseRequest);
+            log.info("[updatePurchaseRequestAuditStatus] 閲囪喘鐢宠({}) 鑷姩鐢熸垚閲囪喘璁㈠崟({})", id, orderId);
         }
     }
 
@@ -370,6 +365,11 @@
         if (CollUtil.isEmpty(requestItems)) {
             throw exception(PURCHASE_REQUEST_NOT_EXISTS);
         }
+        requestItems.forEach(item -> {
+            if (item.getProductPrice() == null || item.getTotalPrice() == null || item.getTaxPrice() == null) {
+                throw exception(PURCHASE_REQUEST_ITEM_PRICE_EMPTY, item.getId());
+            }
+        });
 
         // 2. 鐢熸垚閲囪喘璁㈠崟鍙�
         String orderNo = noRedisDAO.generate(ErpNoRedisDAO.PURCHASE_ORDER_NO_PREFIX);
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 f6fd5bf..f15ad92 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
@@ -184,13 +184,21 @@
             if (item == null) {
                 continue;
             }
-            // 濡傛灉鐗╂枡寮�鍚壒娆$鐞嗭紝妫�鏌ヨ涓婄殑鎵规鍙锋槸鍚︿负绌�
-            if (Boolean.TRUE.equals(item.getIsBatchManaged()) && line.getBatchId() == null) {
-                throw exception(WM_ITEM_RECEIPT_BATCH_REQUIRED, item.getCode(), item.getName());
+            // 濡傛灉鐗╂枡寮�鍚壒娆$鐞嗭紝琛屾垨鍏朵笂鏋舵槑缁嗗繀椤绘惡甯︽壒娆″彿锛屽惁鍒欐棤娉曠敓鎴愬簱瀛樹簨鍔�
+            if (Boolean.TRUE.equals(item.getIsBatchManaged())) {
+                boolean hasBatch = line.getBatchId() != null
+                        || hasDetailBatch(itemReceiptDetailService.getItemReceiptDetailListByLineId(line.getId()));
+                if (!hasBatch) {
+                    throw exception(WM_ITEM_RECEIPT_BATCH_REQUIRED, item.getCode(), item.getName());
+                }
             }
         }
     }
 
+    private boolean hasDetailBatch(List<MesWmItemReceiptDetailDO> details) {
+        return details.stream().anyMatch(detail -> detail.getBatchId() != null);
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void stockItemReceipt(Long id) {

--
Gitblit v1.9.3