From d65e77c3742cd05b89b4a9522fcfff44d0f11bdf Mon Sep 17 00:00:00 2001
From: heshaofeng <heshaofeng@hnkhzn.com>
Date: 星期三, 19 十一月 2025 08:33:56 +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