From 278bc72697e323e1a162f72c8572163033bd12ca Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期一, 22 六月 2026 21:57:56 +0800
Subject: [PATCH] feat: 审批完成自动发货

---
 src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java |   28 ++++++++++++++++++++++++++--
 1 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
index 3faa5d3..48cc144 100644
--- a/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
@@ -13,6 +13,7 @@
 import com.ruoyi.approve.service.IApproveNodeService;
 import com.ruoyi.common.enums.FileNameType;
 import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
+import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.device.mapper.DeviceRepairMapper;
 import com.ruoyi.device.pojo.DeviceRepair;
@@ -272,8 +273,7 @@
 
                     if (salesLedger != null) {
                         if(status.equals(2)){
-                            updateSalesLedgerDeliveryStatus(salesLedger.getId(), 4);
-                            updateShippingInfoStatusByOrder(salesLedger.getId(), "瀹℃牳閫氳繃");
+                            executeStandardShipmentApproved(salesLedger.getId());
                         } else if(status.equals(3)){
                             updateSalesLedgerDeliveryStatus(salesLedger.getId(), 3);
                             updateShippingInfoStatusByOrder(salesLedger.getId(), "瀹℃牳鎷掔粷");
@@ -398,6 +398,30 @@
                 .eq(ShippingInfo::getSalesLedgerId, salesLedgerId));
     }
 
+    private void executeStandardShipmentApproved(Long salesLedgerId) {
+        if (salesLedgerId == null) return;
+        List<ShippingInfo> shippingInfos = shippingInfoMapper.selectList(new LambdaQueryWrapper<ShippingInfo>()
+                .eq(ShippingInfo::getSalesLedgerId, salesLedgerId)
+                .ne(ShippingInfo::getStatus, "宸插彂璐�"));
+
+        Date now = new Date();
+        for (ShippingInfo byId : shippingInfos) {
+            SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(byId.getSalesLedgerProductId());
+            if (salesLedgerProduct != null) {
+                stockUtils.substractStock(salesLedgerProduct.getSalesLedgerId(), salesLedgerProduct.getId(), salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), byId.getId());
+                BigDecimal shipped = salesLedgerProduct.getShippedQuantity() == null ? BigDecimal.ZERO : salesLedgerProduct.getShippedQuantity();
+                salesLedgerProduct.setShippedQuantity(shipped.add(salesLedgerProduct.getQuantity() == null ? BigDecimal.ZERO : salesLedgerProduct.getQuantity()));
+                salesLedgerProductMapper.updateById(salesLedgerProduct);
+            }
+            byId.setStatus("宸插彂璐�");
+            if (byId.getShippingDate() == null) {
+                byId.setShippingDate(now);
+            }
+            shippingInfoMapper.updateById(byId);
+        }
+        updateSalesLedgerDeliveryStatus(salesLedgerId, 5);
+    }
+
     private void updateSalesLedgerDeliveryStatus(Long salesLedgerId, Integer status) {
         if (salesLedgerId == null) return;
         SalesLedger salesLedger = salesLedgerMapper.selectById(salesLedgerId);

--
Gitblit v1.9.3