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/api/purchase/ErpPurchaseOrderApiImpl.java | 50 +++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 47 insertions(+), 3 deletions(-)
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/api/purchase/ErpPurchaseOrderApiImpl.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/api/purchase/ErpPurchaseOrderApiImpl.java
index 7daf6eb..c7a0d9d 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/api/purchase/ErpPurchaseOrderApiImpl.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/api/purchase/ErpPurchaseOrderApiImpl.java
@@ -21,11 +21,13 @@
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.PURCHASE_ORDER_ITEM_RETURN_FAIL_IN_EXCEED;
/**
* ERP 閲囪喘璁㈠崟 API 瀹炵幇绫�
*
- * @author 鑺嬮亾婧愮爜
+ * @author 瓒呯骇绠$悊鍛�
*/
@RestController
@RequestMapping(ErpPurchaseOrderApi.PREFIX)
@@ -37,6 +39,9 @@
@Resource
private ErpPurchaseOrderItemMapper purchaseOrderItemMapper;
+
+ @Resource
+ private cn.iocoder.yudao.module.erp.dal.mysql.purchase.ErpPurchaseOrderMapper purchaseOrderMapper;
@Override
public CommonResult<ErpPurchaseOrderRespDTO> getPurchaseOrder(Long id) {
@@ -101,6 +106,36 @@
}
@Override
+ public CommonResult<Boolean> updateOrderItemReturnCount(Long orderItemId, BigDecimal returnCount) {
+ if (orderItemId == null || returnCount == null) {
+ return success(false);
+ }
+ ErpPurchaseOrderItemDO item = purchaseOrderItemMapper.selectById(orderItemId);
+ if (item == null) {
+ return success(false);
+ }
+ // 绱姞閫�璐ф暟閲�
+ BigDecimal oldReturnCount = item.getReturnCount() != null ? item.getReturnCount() : BigDecimal.ZERO;
+ BigDecimal newReturnCount = oldReturnCount.add(returnCount);
+ BigDecimal inCount = item.getInCount() != null ? item.getInCount() : BigDecimal.ZERO;
+ if (returnCount.compareTo(BigDecimal.ZERO) <= 0 || newReturnCount.compareTo(inCount) > 0) {
+ throw exception(PURCHASE_ORDER_ITEM_RETURN_FAIL_IN_EXCEED,
+ "浜у搧ID:" + item.getProductId(), inCount);
+ }
+ purchaseOrderItemMapper.updateById(new ErpPurchaseOrderItemDO()
+ .setId(orderItemId)
+ .setReturnCount(newReturnCount));
+ // 鍚屾鏇存柊璁㈠崟绾ч��璐ф暟閲忥細鎸夎鍗曚笅鎵�鏈夋槑缁嗙殑閫�璐ф暟閲忔眰鍜岋紝閬垮厤鍙紶鍗曟潯鎶婂叾瀹冭娓呴浂
+ BigDecimal totalReturnCount = purchaseOrderItemMapper.selectListByOrderId(item.getOrderId()).stream()
+ .map(orderItem -> orderItem.getReturnCount() != null ? orderItem.getReturnCount() : BigDecimal.ZERO)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ purchaseOrderMapper.updateById(new ErpPurchaseOrderDO()
+ .setId(item.getOrderId())
+ .setReturnCount(totalReturnCount));
+ return success(true);
+ }
+
+ @Override
public CommonResult<Boolean> updateOrderInStatus(Long orderId) {
if (orderId == null) {
return success(false);
@@ -111,11 +146,20 @@
@Override
public CommonResult<Long> createPurchaseOrder(ErpPurchaseOrderCreateReqDTO createReqDTO) {
+ return success(purchaseOrderService.createPurchaseOrder(buildSaveReqVO(createReqDTO)));
+ }
+
+ @Override
+ public CommonResult<Long> createPurchaseOrderDraft(ErpPurchaseOrderCreateReqDTO createReqDTO) {
+ return success(purchaseOrderService.createPurchaseOrder(buildSaveReqVO(createReqDTO), false));
+ }
+
+ private ErpPurchaseOrderSaveReqVO buildSaveReqVO(ErpPurchaseOrderCreateReqDTO createReqDTO) {
ErpPurchaseOrderSaveReqVO saveReqVO = BeanUtils.toBean(createReqDTO, ErpPurchaseOrderSaveReqVO.class);
if (createReqDTO.getItems() != null) {
saveReqVO.setItems(BeanUtils.toBean(createReqDTO.getItems(), ErpPurchaseOrderSaveReqVO.Item.class));
}
- return success(purchaseOrderService.createPurchaseOrder(saveReqVO));
+ return saveReqVO;
}
@Override
@@ -134,4 +178,4 @@
return success(BeanUtils.toBean(items, ErpPurchaseOrderItemRespDTO.class));
}
-}
\ No newline at end of file
+}
--
Gitblit v1.9.3