From 5599c23fa95fea51cab371e6615e83c44d0f7a95 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期五, 09 十月 2026 11:49:21 +0800
Subject: [PATCH] fix: 允许下发数量超出

---
 src/main/java/com/ruoyi/basic/service/impl/SupplierServiceImpl.java |   41 +++++++++++++++++++++++++++++++----------
 1 files changed, 31 insertions(+), 10 deletions(-)

diff --git a/src/main/java/com/ruoyi/basic/service/impl/SupplierServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/SupplierServiceImpl.java
index a46d8de..52b7e94 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/SupplierServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/SupplierServiceImpl.java
@@ -226,11 +226,9 @@
 
                 List<StockInRecord> currentDirectRecords = directInboundRecords.stream().filter(s -> s.getRecordId().equals(ledgerId)).toList();
                 for (StockInRecord sir : currentDirectRecords) {
-                    List<SalesLedgerProduct> currentProducts = salesLedgerProducts.stream().filter(s -> s.getSalesLedgerId().equals(ledgerId)).toList();
-                    for (SalesLedgerProduct slp : currentProducts) {
-                        if (sir.getStockInNum() != null && slp.getTaxInclusiveUnitPrice() != null) {
-                            shippedAmount = shippedAmount.add(sir.getStockInNum().multiply(slp.getTaxInclusiveUnitPrice()));
-                        }
+                    BigDecimal unitPrice = getPurchaseInboundUnitPrice(salesLedgerProducts, ledgerId, sir);
+                    if (sir.getStockInNum() != null && unitPrice != null) {
+                        shippedAmount = shippedAmount.add(sir.getStockInNum().multiply(unitPrice));
                     }
                 }
 
@@ -323,11 +321,9 @@
 
             List<StockInRecord> currentDirectRecords = directInboundRecords.stream().filter(s -> s.getRecordId().equals(vo.getPurchaseLedgerId())).toList();
             for (StockInRecord sir : currentDirectRecords) {
-                List<SalesLedgerProduct> currentProducts = salesLedgerProducts.stream().filter(s -> s.getSalesLedgerId().equals(vo.getPurchaseLedgerId())).toList();
-                for (SalesLedgerProduct slp : currentProducts) {
-                    if (sir.getStockInNum() != null && slp.getTaxInclusiveUnitPrice() != null) {
-                        shippedAmount = shippedAmount.add(sir.getStockInNum().multiply(slp.getTaxInclusiveUnitPrice()));
-                    }
+                BigDecimal unitPrice = getPurchaseInboundUnitPrice(salesLedgerProducts, vo.getPurchaseLedgerId(), sir);
+                if (sir.getStockInNum() != null && unitPrice != null) {
+                    shippedAmount = shippedAmount.add(sir.getStockInNum().multiply(unitPrice));
                 }
             }
 
@@ -373,4 +369,29 @@
                 .min(BigDecimal::compareTo)
                 .orElse(null);
     }
+
+    /**
+     * 鐩存帴鍏ュ簱璁板綍锛�7锛夌殑鍚◣鍗曚环锛氭壒娆″彿鏍煎紡涓衡�滈噰璐悎鍚屽彿-閲囪喘浜у搧琛孖D鈥濓紝鎸夊搴斾骇鍝佽鍙栦环
+     */
+    private BigDecimal getPurchaseInboundUnitPrice(List<SalesLedgerProduct> allSlp, Long salesLedgerId, StockInRecord record) {
+        String batchNo = record.getBatchNo();
+        int separatorIndex = batchNo == null ? -1 : batchNo.lastIndexOf('-');
+        if (separatorIndex > -1) {
+            try {
+                Long productId = Long.valueOf(batchNo.substring(separatorIndex + 1));
+                BigDecimal unitPrice = allSlp.stream()
+                        .filter(s -> s.getId().equals(productId))
+                        .map(SalesLedgerProduct::getTaxInclusiveUnitPrice)
+                        .filter(java.util.Objects::nonNull)
+                        .findFirst()
+                        .orElse(null);
+                if (unitPrice != null) {
+                    return unitPrice;
+                }
+            } catch (NumberFormatException ignored) {
+                // 鎵规鍙蜂笉绗﹀悎绾﹀畾鏍煎紡锛屽洖閫�鎸変骇鍝佽鏍煎尮閰�
+            }
+        }
+        return getMinTaxInclusiveUnitPrice(allSlp, salesLedgerId, record.getProductModelId());
+    }
 }

--
Gitblit v1.9.3