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/finance/ErpFinancePaymentServiceImpl.java |   12 ++++--------
 1 files changed, 4 insertions(+), 8 deletions(-)

diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/finance/ErpFinancePaymentServiceImpl.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/finance/ErpFinancePaymentServiceImpl.java
index 995c361..2721bf2 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/finance/ErpFinancePaymentServiceImpl.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/finance/ErpFinancePaymentServiceImpl.java
@@ -105,10 +105,8 @@
                 getSumValue(paymentItems, ErpFinancePaymentItemDO::getPaymentPrice, BigDecimal::add, BigDecimal.ZERO)
                         .subtract(createReqVO.getDiscountPrice()), null);
         // 1.7 鐢熸垚浠樻鍗曞彿锛屽苟鏍¢獙鍞竴鎬�
-        String no = noRedisDAO.generate(ErpNoRedisDAO.FINANCE_PAYMENT_NO_PREFIX);
-        if (financePaymentMapper.selectByNo(no) != null) {
-            throw exception(FINANCE_PAYMENT_NO_EXISTS);
-        }
+        String no = noRedisDAO.generate(ErpNoRedisDAO.FINANCE_PAYMENT_NO_PREFIX,
+                candidate -> financePaymentMapper.selectByNo(candidate) != null);
 
         // 2.1 鎻掑叆浠樻鍗�
         ErpFinancePaymentDO payment = BeanUtils.toBean(createReqVO, ErpFinancePaymentDO.class, in -> in
@@ -433,10 +431,8 @@
         }
 
         // 2.1 鐢熸垚浠樻鍗曞彿
-        String no = noRedisDAO.generate(ErpNoRedisDAO.FINANCE_PAYMENT_NO_PREFIX);
-        if (financePaymentMapper.selectByNo(no) != null) {
-            throw exception(FINANCE_PAYMENT_NO_EXISTS);
-        }
+        String no = noRedisDAO.generate(ErpNoRedisDAO.FINANCE_PAYMENT_NO_PREFIX,
+                candidate -> financePaymentMapper.selectByNo(candidate) != null);
         // 2.2 閲戦鎸夎礋鏁板叆璐�
         BigDecimal negativeAmount = reqDTO.getRefundAmount().negate();
         ErpFinancePaymentDO payment = new ErpFinancePaymentDO()

--
Gitblit v1.9.3