From d39e4f7d839167c16425086dfa2f8747bccfdff9 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 05 十一月 2026 17:39:01 +0800
Subject: [PATCH] feat: 打通销售采购财务闭环并完成累计业务优化

---
 yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/api/purchase/ErpPurchaseOrderApiImpl.java |   41 +++++++++++++++++++++++++++++++++++++++--
 1 files changed, 39 insertions(+), 2 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..77e1ffd 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
@@ -25,7 +25,7 @@
 /**
  * ERP 閲囪喘璁㈠崟 API 瀹炵幇绫�
  *
- * @author 鑺嬮亾婧愮爜
+ * @author 瓒呯骇绠$悊鍛�
  */
 @RestController
 @RequestMapping(ErpPurchaseOrderApi.PREFIX)
@@ -37,6 +37,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 +104,31 @@
     }
 
     @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);
+        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 +139,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

--
Gitblit v1.9.3