From e31ca4e3e1774b7ddb832e8ec498b5ada24b2608 Mon Sep 17 00:00:00 2001
From: pan <antony1029@163.com>
Date: 星期日, 16 十一月 2025 19:13:58 +0800
Subject: [PATCH] 提交

---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs |   29 +++++++++++++++++++++++------
 1 files changed, 23 insertions(+), 6 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs"
index 90cfa42..efe19b8 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs"
@@ -87,15 +87,25 @@
         /// <param name="needQuantity"></param>
         /// <param name="residueQuantity"></param>
         /// <returns></returns>
-        public List<Dt_StockInfo> GetOutboundStocks(List<Dt_StockInfo> stockInfos, string materielCode, decimal needQuantity, out decimal residueQuantity)
+        public (List<Dt_StockInfo>, Dictionary<int, decimal>) GetOutboundStocks(List<Dt_StockInfo> stockInfos, string materielCode, decimal needQuantity, out decimal residueQuantity)
         {
             List<Dt_StockInfo> outStocks = new List<Dt_StockInfo>();
-            // 鎸夊厛杩涘厛鍑烘帓搴忥紙鎸夋潯鐮佺殑鐢熶骇鏃ユ湡锛�
+            Dictionary<int, decimal> stockAllocations = new Dictionary<int, decimal>(); // 璁板綍姣忎釜搴撳瓨鏄庣粏鐨勫垎閰嶆暟閲�
+
+            // 鎸夊厛杩涘厛鍑烘帓搴忔墍鏈夌浉鍏崇殑搴撳瓨鏄庣粏
             var sortedStockDetails = stockInfos
                 .SelectMany(x => x.Details)
-                .Where(x => x.MaterielCode == materielCode && x.StockQuantity > x.OutboundQuantity)
-                .OrderBy(x => x.ProductionDate).ThenBy(x => x.StockId)
+                .Where(x => x.MaterielCode == materielCode &&
+                           x.StockQuantity > x.OutboundQuantity) // 鏈夊彲鐢ㄥ簱瀛�
+                .OrderBy(x => x.ProductionDate) // 鎸夌敓浜ф棩鏈熸帓搴忥紝鍏堣繘鍏堝嚭
+                .ThenBy(x => x.StockId)         // 鐩稿悓鐢熶骇鏃ユ湡鎸夊簱瀛業D鎺掑簭
                 .ToList();
+
+            if (!sortedStockDetails.Any())
+            {
+                residueQuantity = needQuantity;
+                return (outStocks, stockAllocations);
+            }
 
             // 璁$畻鎬诲彲鐢ㄥ簱瀛�
             var stockTotalQuantity = sortedStockDetails.Sum(x => x.StockQuantity - x.OutboundQuantity);
@@ -103,6 +113,7 @@
             if (stockTotalQuantity < needQuantity)
             {
                 residueQuantity = needQuantity - stockTotalQuantity;
+               
             }
             else
             {
@@ -111,17 +122,22 @@
 
             decimal remainingNeed = needQuantity;
 
-            // 鎸夋潯鐮佸垎閰嶅簱瀛�
+            // 鎸夊厛杩涘厛鍑洪『搴忓垎閰嶅簱瀛�
             foreach (var detail in sortedStockDetails)
             {
                 if (remainingNeed <= 0) break;
 
                 decimal availableQuantity = detail.StockQuantity - detail.OutboundQuantity;
+                if (availableQuantity <= 0) continue;
+
                 decimal allocateQuantity = Math.Min(availableQuantity, remainingNeed);
 
                 // 鏇存柊鍑哄簱鏁伴噺
                 detail.OutboundQuantity += allocateQuantity;
                 remainingNeed -= allocateQuantity;
+
+                // 璁板綍鍒嗛厤鏁伴噺
+                stockAllocations[detail.Id] = allocateQuantity;
 
                 // 濡傛灉杩欎釜搴撳瓨杩樻病娣诲姞鍒板嚭搴撳垪琛ㄤ腑锛屽氨娣诲姞
                 var stockInfo = stockInfos.First(x => x.Id == detail.StockId);
@@ -132,8 +148,9 @@
             }
 
             residueQuantity = remainingNeed;
-            return outStocks;
+            return (outStocks, stockAllocations);
         }
+        
         /// <summary>
         /// 鏍规嵁鏉$爜鑾峰彇搴撳瓨淇℃伅
         /// </summary>

--
Gitblit v1.9.3