From fbaeeeff5704f210bc6347454c0f16d255001822 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期三, 04 十一月 2026 16:32:09 +0800
Subject: [PATCH] refactor(srm): 重构供应商采购域,新增询价比价与保证金管理

---
 yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseOrderServiceImpl.java |   26 +++++++++++++++++++-------
 1 files changed, 19 insertions(+), 7 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 b756112..53da8de 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
@@ -117,6 +117,12 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Long createPurchaseOrder(ErpPurchaseOrderSaveReqVO createReqVO) {
+        return createPurchaseOrder(createReqVO, true);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Long createPurchaseOrder(ErpPurchaseOrderSaveReqVO createReqVO, boolean submit) {
         // 1.1 鏍¢獙璁㈠崟椤圭殑鏈夋晥鎬�
         List<ErpPurchaseOrderItemDO> purchaseOrderItems = validatePurchaseOrderItems(createReqVO.getItems());
         // 1.2 鏍¢獙渚涘簲鍟�
@@ -131,9 +137,9 @@
             throw exception(PURCHASE_ORDER_NO_EXISTS);
         }
 
-        // 2.1 鎻掑叆璁㈠崟锛堥噰璐鍗曞垱寤哄悗涓烘湭瀹℃牳鐘舵�侊紝闇�瑕佹彁浜ゅ鎵癸級
+        // 2.1 鎻掑叆璁㈠崟锛坰ubmit=false 鏃朵繚瀛樹负鑽夌锛岀瓑寰呬笟鍔$‘璁ゅ悗鎵嬪姩鎻愪氦瀹℃壒锛�
         ErpPurchaseOrderDO purchaseOrder = BeanUtils.toBean(createReqVO, ErpPurchaseOrderDO.class, in -> in
-                .setNo(no).setStatus(ErpAuditStatus.PROCESS.getStatus())
+                .setNo(no).setStatus(submit ? ErpAuditStatus.PROCESS.getStatus() : ErpAuditStatus.DRAFT.getStatus())
                 .setInCount(BigDecimal.ZERO).setInStatus(ErpPurchaseOrderInStatusEnum.NOT_IN.getStatus()));
         calculateTotalPrice(purchaseOrder, purchaseOrderItems);
         purchaseOrderMapper.insert(purchaseOrder);
@@ -145,7 +151,9 @@
                 purchaseOrder.getId(), createReqVO.getBlobIds());
 
         // 3. 鍒涘缓鍚庤嚜鍔ㄦ彁浜ゅ鎵瑰埌鍗忓悓鍔炲叕锛堝鎵瑰湪鍗忓悓鍔炲叕瀹屾垚锛屼笉鍦ㄦ湰椤甸潰瀹℃壒锛�
-        submitPurchaseOrder(purchaseOrder.getId(), PURCHASE_ORDER_APPROVE_PROCESS_DEFINITION_KEY, getLoginUserId());
+        if (submit) {
+            submitPurchaseOrder(purchaseOrder.getId(), PURCHASE_ORDER_APPROVE_PROCESS_DEFINITION_KEY, getLoginUserId());
+        }
 
         return purchaseOrder.getId();
     }
@@ -351,7 +359,8 @@
         purchaseOrder.setTotalCount(getSumValue(purchaseOrderItems, ErpPurchaseOrderItemDO::getCount, BigDecimal::add));
         purchaseOrder.setTotalProductPrice(getSumValue(purchaseOrderItems, ErpPurchaseOrderItemDO::getTotalPrice, BigDecimal::add, BigDecimal.ZERO));
         purchaseOrder.setTotalTaxPrice(getSumValue(purchaseOrderItems, ErpPurchaseOrderItemDO::getTaxPrice, BigDecimal::add, BigDecimal.ZERO));
-        purchaseOrder.setTotalPrice(purchaseOrder.getTotalProductPrice().add(purchaseOrder.getTotalTaxPrice()));
+        // 鍗曚环涓哄惈绋庡崟浠凤細浠风◣鍚堣 = 鍗曚环 * 鏁伴噺锛岀◣棰濆凡鍖呭惈鍦ㄥ崟浠蜂腑锛屼笉鍐嶉澶栧姞绋�
+        purchaseOrder.setTotalPrice(purchaseOrder.getTotalProductPrice());
         // 璁$畻浼樻儬浠锋牸
         if (purchaseOrder.getDiscountPercent() == null) {
             purchaseOrder.setDiscountPercent(BigDecimal.ZERO);
@@ -392,9 +401,11 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void submitPurchaseOrder(Long id, String processDefinitionKey, Long userId) {
-        // 1. 鏍¢獙瀛樺湪 + 鏈鏍哥姸鎬�
+        // 1. 鏍¢獙瀛樺湪 + 鏈鏍哥姸鎬侊紙鑽夌鍜屾湭瀹℃牳鍧囧彲鎻愪氦锛�
         ErpPurchaseOrderDO purchaseOrder = validatePurchaseOrderExists(id);
-        if (!ErpAuditStatus.PROCESS.getStatus().equals(purchaseOrder.getStatus())) {
+        boolean submitable = ErpAuditStatus.DRAFT.getStatus().equals(purchaseOrder.getStatus())
+                || ErpAuditStatus.PROCESS.getStatus().equals(purchaseOrder.getStatus());
+        if (!submitable) {
             throw exception(PURCHASE_ORDER_SUBMIT_FAIL_STATUS);
         }
 
@@ -510,7 +521,8 @@
                 return;
             }
             if (item.getTaxPercent() != null) {
-                item.setTaxPrice(MoneyUtils.priceMultiplyPercent(item.getTotalPrice(), item.getTaxPercent()));
+                // 鍗曚环涓哄惈绋庡崟浠凤細绋庨浠庝环绋庡悎璁′腑鍙嶇畻锛岃�屼笉鏄湪鍚堣涓婂啀鍔犵◣
+                item.setTaxPrice(MoneyUtils.taxPriceIncluded(item.getTotalPrice(), item.getTaxPercent()));
             }
         }));
     }

--
Gitblit v1.9.3