From 3481d209ec847542b73fa16616ffe0e13c949e80 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期六, 18 四月 2026 18:11:03 +0800
Subject: [PATCH] fix: 入库与出库数量绑定

---
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java |   36 ++++++++++++++++++++++++++----------
 1 files changed, 26 insertions(+), 10 deletions(-)

diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
index ac469e8..ac28c29 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -100,7 +100,11 @@
 
     @Override
     public SalesLedgerProduct selectSalesLedgerProductById(Long id) {
-        return salesLedgerProductMapper.selectById(id);
+        SalesLedgerProduct row = salesLedgerProductMapper.selectById(id);
+        if (row != null) {
+            row.fillRemainingQuantity();
+        }
+        return row;
     }
 
     @Override
@@ -189,18 +193,27 @@
             if (item.getFutureTicketsAmount() == null || item.getFutureTicketsAmount().compareTo(BigDecimal.ZERO) == 0) {
                 item.setFutureTicketsAmount(BigDecimal.ZERO);
             }
-            if (item.getApproveStatus() == null || item.getApproveStatus() != 2) {
-                Integer hasSufficientStock = item.getHasSufficientStock();
-                if (hasSufficientStock != null && hasSufficientStock == 0) {
-                    item.setApproveStatus(0);
-                } else {
-                    item.setApproveStatus(1);
-                }
-            }
             BigDecimal returnQuality = finalReturnOrderGroupDtoMap.getOrDefault(item.getId(), BigDecimal.ZERO);
             item.setReturnQuality(returnQuality);
             BigDecimal quantity = item.getQuantity() == null ? BigDecimal.ZERO : item.getQuantity();
-            item.setAvailableQuality(quantity.subtract(returnQuality));
+            BigDecimal shipped = item.getShippedQuantity() == null ? BigDecimal.ZERO : item.getShippedQuantity();
+            BigDecimal available = quantity.subtract(returnQuality).subtract(shipped);
+            item.setAvailableQuality(available.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : available);
+            item.fillRemainingQuantity();
+            if (item.getApproveStatus() == null || item.getApproveStatus() != 2) {
+                BigDecimal remainingShipped = item.getRemainingShippedQuantity() == null ? BigDecimal.ZERO : item.getRemainingShippedQuantity();
+                boolean hasOutbound = shipped.compareTo(BigDecimal.ZERO) > 0;
+                if (hasOutbound && remainingShipped.compareTo(BigDecimal.ZERO) <= 0) {
+                    item.setApproveStatus(0);
+                } else {
+                    Integer hasSufficientStock = item.getHasSufficientStock();
+                    if (hasSufficientStock != null && hasSufficientStock == 0) {
+                        item.setApproveStatus(0);
+                    } else {
+                        item.setApproveStatus(1);
+                    }
+                }
+            }
             ProductModel productModel = finalProductModelMap.get(item.getProductModelId());
             if (productModel != null) {
                 item.setThickness(productModel.getThickness());
@@ -275,6 +288,7 @@
 
         int result;
         Long salesLedgerId = salesLedgerProduct.getSalesLedgerId();
+        salesLedgerProduct.fillRemainingQuantity();
         if (salesLedgerProduct.getId() == null) {
             salesLedgerProduct.setRegisterDate(LocalDateTime.now());
             result = salesLedgerProductMapper.insert(salesLedgerProduct);
@@ -497,6 +511,7 @@
             } else {
                 item.setStatusName("鏈畬鎴愪粯娆�");
             }
+            item.fillRemainingQuantity();
         });
         return salesLedgerProductDtoIPage;
     }
@@ -511,6 +526,7 @@
             } else {
                 item.setStatusName("鏈畬鎴愪粯娆�");
             }
+            item.fillRemainingQuantity();
         });
         return salesLedgerProductDtoIPage;
     }

--
Gitblit v1.9.3