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/ErpPurchaseOrderServiceImpl.java | 27 ++++++++++++++++++---------
1 files changed, 18 insertions(+), 9 deletions(-)
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseOrderServiceImpl.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseOrderServiceImpl.java
index e1f91d4..594dc18 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseOrderServiceImpl.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseOrderServiceImpl.java
@@ -136,15 +136,16 @@
accountService.validateAccount(createReqVO.getAccountId());
}
// 1.4 鐢熸垚璁㈠崟鍙凤紝骞舵牎楠屽敮涓�鎬�
- String no = noRedisDAO.generate(ErpNoRedisDAO.PURCHASE_ORDER_NO_PREFIX);
- if (purchaseOrderMapper.selectByNo(no) != null) {
- throw exception(PURCHASE_ORDER_NO_EXISTS);
- }
+ String no = noRedisDAO.generate(ErpNoRedisDAO.PURCHASE_ORDER_NO_PREFIX,
+ candidate -> purchaseOrderMapper.selectByNo(candidate) != null);
// 2.1 鎻掑叆璁㈠崟锛坰ubmit=false 鏃朵繚瀛樹负鑽夌锛岀瓑寰呬笟鍔$‘璁ゅ悗鎵嬪姩鎻愪氦瀹℃壒锛�
ErpPurchaseOrderDO purchaseOrder = BeanUtils.toBean(createReqVO, ErpPurchaseOrderDO.class, in -> in
.setNo(no).setStatus(submit ? ErpAuditStatus.PROCESS.getStatus() : ErpAuditStatus.DRAFT.getStatus())
.setInCount(BigDecimal.ZERO).setInStatus(ErpPurchaseOrderInStatusEnum.NOT_IN.getStatus()));
+ if (purchaseOrder.getDepositPrice() == null) {
+ purchaseOrder.setDepositPrice(BigDecimal.ZERO);
+ }
calculateTotalPrice(purchaseOrder, purchaseOrderItems);
purchaseOrderMapper.insert(purchaseOrder);
// 2.2 鎻掑叆璁㈠崟椤�
@@ -184,6 +185,9 @@
// 2.1 鏇存柊璁㈠崟
ErpPurchaseOrderDO updateObj = BeanUtils.toBean(updateReqVO, ErpPurchaseOrderDO.class);
+ if (updateObj.getDepositPrice() == null) {
+ updateObj.setDepositPrice(BigDecimal.ZERO);
+ }
calculateTotalPrice(updateObj, purchaseOrderItems);
purchaseOrderMapper.updateById(updateObj);
// 2.2 鏇存柊璁㈠崟椤�
@@ -301,10 +305,15 @@
}
// 3. 鍗曞彿锛氬~浜嗗氨鐢紙鏍¢獙鍞竴锛夛紝娌″~鑷姩鐢熸垚
- String no = StrUtil.isNotBlank(head.getNo()) ? head.getNo().trim()
- : noRedisDAO.generate(ErpNoRedisDAO.PURCHASE_ORDER_NO_PREFIX);
- if (purchaseOrderMapper.selectByNo(no) != null) {
- throw new IllegalArgumentException("閲囪喘鍗曠紪鍙峰凡瀛樺湪锛�" + no);
+ String no;
+ if (StrUtil.isNotBlank(head.getNo())) {
+ no = head.getNo().trim();
+ if (purchaseOrderMapper.selectByNo(no) != null) {
+ throw new IllegalArgumentException("閲囪喘鍗曠紪鍙峰凡瀛樺湪锛�" + no);
+ }
+ } else {
+ no = noRedisDAO.generate(ErpNoRedisDAO.PURCHASE_ORDER_NO_PREFIX,
+ candidate -> purchaseOrderMapper.selectByNo(candidate) != null);
}
// 4. 缁勮涓昏〃锛氬嬀閫夆�滄槸鍚﹀鏍糕�� => 宸插鏍�(20)锛屽惁鍒欐湭瀹℃牳(10)
@@ -893,4 +902,4 @@
return arrivalNoticeId;
}
-}
\ No newline at end of file
+}
--
Gitblit v1.9.3