From 1d9cfc91e7255b9e139b20ff230cb19246f19193 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 09 十一月 2026 14:32:11 +0800
Subject: [PATCH] refactor(erp): 重构ERP单据单号生成逻辑以支持冲突重试

---
 yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseInvoiceServiceImpl.java |    9 ++++-----
 1 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseInvoiceServiceImpl.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseInvoiceServiceImpl.java
index 8df0874..76910fc 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseInvoiceServiceImpl.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseInvoiceServiceImpl.java
@@ -87,10 +87,8 @@
         // 1.2 鏍¢獙鍙紑绁ㄩ噾棰濊秴杩囦笂闄�
         validatePurchaseInvoicePriceExceedsLimit(createReqVO);
         // 1.3 鐢熸垚鏉ョエ缂栧彿
-        String no = noRedisDAO.generate(ErpNoRedisDAO.PURCHASE_INVOICE_NO_PREFIX);
-        if (invoiceMapper.selectByNo(no) != null) {
-            throw exception(PURCHASE_INVOICE_NO_EXISTS);
-        }
+        String no = noRedisDAO.generate(ErpNoRedisDAO.PURCHASE_INVOICE_NO_PREFIX,
+                candidate -> invoiceMapper.selectByNo(candidate) != null);
 
         // 2.1 鎻掑叆鏉ョエ锛堝垱寤哄悗鍗充负鏈夋晥鐘舵�侊紝鏃犻渶瀹℃牳锛�
         ErpPurchaseInvoiceDO invoice = BeanUtils.toBean(createReqVO, ErpPurchaseInvoiceDO.class).setNo(no);
@@ -121,7 +119,8 @@
      */
     private void validateItemReceipt(ErpPurchaseInvoiceSaveReqVO reqVO, ErpPurchaseOrderDO purchaseOrder) {
         if (reqVO.getItemReceiptId() == null) {
-            return; // 瀛橀噺/鏈粦瀹氭椂鍏佽涓虹┖
+            throw new ServiceException(PURCHASE_INVOICE_CREATE_FAIL_RECEIPT_NOT_EXISTS.getCode(),
+                    "閲囪喘鏉ョエ蹇呴』缁戝畾宸插畬鎴愮殑閲囪喘鍏ュ簱鍗曘�傝鍏堝湪 MES 瀹屾垚鍏ュ簱锛屽啀閫夋嫨瀵瑰簲鍏ュ簱鍗曘��");
         }
         MesWmItemReceiptRespDTO receipt = mesWmItemReceiptApi.getItemReceipt(reqVO.getItemReceiptId());
         if (receipt == null) {

--
Gitblit v1.9.3