From 7bf754a7835d06f26240c4ca15bc5f83650de377 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 21 九月 2026 20:52:25 +0800
Subject: [PATCH] docs(api): 更新信托基金与代储台账及油品出库相关接口文档

---
 src/main/java/com/ruoyi/ai/tools/SalesAgentTools.java |   42 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 42 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ruoyi/ai/tools/SalesAgentTools.java b/src/main/java/com/ruoyi/ai/tools/SalesAgentTools.java
index 0f7e586..10b55f9 100644
--- a/src/main/java/com/ruoyi/ai/tools/SalesAgentTools.java
+++ b/src/main/java/com/ruoyi/ai/tools/SalesAgentTools.java
@@ -14,9 +14,11 @@
 import com.ruoyi.sales.mapper.SalesLedgerMapper;
 import com.ruoyi.sales.mapper.SalesQuotationMapper;
 import com.ruoyi.sales.mapper.ShippingInfoMapper;
+import com.ruoyi.sales.mapper.StockOutRecordSalesLedgerMapper;
 import com.ruoyi.sales.pojo.SalesLedger;
 import com.ruoyi.sales.pojo.SalesQuotation;
 import com.ruoyi.sales.pojo.ShippingInfo;
+import com.ruoyi.sales.pojo.StockOutRecordSalesLedger;
 import com.ruoyi.stock.mapper.StockOutRecordMapper;
 import com.ruoyi.stock.pojo.StockOutRecord;
 import dev.langchain4j.agent.tool.P;
@@ -53,6 +55,7 @@
     private final ShippingInfoMapper shippingInfoMapper;
     private final AccountSalesCollectionMapper accountSalesCollectionMapper;
     private final StockOutRecordMapper stockOutRecordMapper;
+    private final StockOutRecordSalesLedgerMapper stockOutRecordSalesLedgerMapper;
     private final AiSessionUserContext aiSessionUserContext;
 
     public SalesAgentTools(CustomerMapper customerMapper,
@@ -61,6 +64,7 @@
                            ShippingInfoMapper shippingInfoMapper,
                            AccountSalesCollectionMapper accountSalesCollectionMapper,
                            StockOutRecordMapper stockOutRecordMapper,
+                           StockOutRecordSalesLedgerMapper stockOutRecordSalesLedgerMapper,
                            AiSessionUserContext aiSessionUserContext) {
         this.customerMapper = customerMapper;
         this.salesLedgerMapper = salesLedgerMapper;
@@ -68,6 +72,7 @@
         this.shippingInfoMapper = shippingInfoMapper;
         this.accountSalesCollectionMapper = accountSalesCollectionMapper;
         this.stockOutRecordMapper = stockOutRecordMapper;
+        this.stockOutRecordSalesLedgerMapper = stockOutRecordSalesLedgerMapper;
         this.aiSessionUserContext = aiSessionUserContext;
     }
 
@@ -1004,9 +1009,46 @@
                 result.put(entry.getKey(), ledgerIds);
             }
         }
+        mergeOilOutBindingLedgerIds(collections, result);
         return result;
     }
 
+    /**
+     * 娌瑰搧鍑哄簱鐨勬敹娆惧崟涓嶅瓨鍑哄簱鍗� id锛屽瓨鐨勬槸缁戝畾琛� id锛堜竴涓嚭搴撳崟鍙兘鎸夊鎴锋媶缁欏涓彴璐︼級銆�
+     * 缁戝畾琛屼笂鐩存帴甯� sales_ledger_id锛屼笉闇�瑕佸啀缁� shipping_info 涓浆銆�
+     */
+    private void mergeOilOutBindingLedgerIds(List<AccountSalesCollection> collections, Map<Integer, Set<Long>> result) {
+        Map<Integer, List<Long>> bindingIdsByCollection = new HashMap<>();
+        Set<Long> allBindingIds = new HashSet<>();
+        for (AccountSalesCollection collection : collections) {
+            if (collection.getId() == null) {
+                continue;
+            }
+            List<Long> bindingIds = parseLongIds(collection.getStockOutBindingIds());
+            if (bindingIds.isEmpty()) {
+                continue;
+            }
+            bindingIdsByCollection.put(collection.getId(), bindingIds);
+            allBindingIds.addAll(bindingIds);
+        }
+        if (allBindingIds.isEmpty()) {
+            return;
+        }
+        Map<Long, Long> ledgerIdByBindingId = defaultList(stockOutRecordSalesLedgerMapper.selectByIds(allBindingIds)).stream()
+                .filter(item -> item.getId() != null && item.getSalesLedgerId() != null)
+                .collect(Collectors.toMap(StockOutRecordSalesLedger::getId, StockOutRecordSalesLedger::getSalesLedgerId, (a, b) -> a));
+
+        for (Map.Entry<Integer, List<Long>> entry : bindingIdsByCollection.entrySet()) {
+            Set<Long> ledgerIds = result.computeIfAbsent(entry.getKey(), key -> new LinkedHashSet<>());
+            for (Long bindingId : entry.getValue()) {
+                Long ledgerId = ledgerIdByBindingId.get(bindingId);
+                if (ledgerId != null) {
+                    ledgerIds.add(ledgerId);
+                }
+            }
+        }
+    }
+
     private boolean isSalesOutboundRecord(StockOutRecord stockOutRecord) {
         if (stockOutRecord == null || !StringUtils.hasText(stockOutRecord.getRecordType())) {
             return false;

--
Gitblit v1.9.3