From eec91a7c880119540cd0578d64d1e14092ee6bd3 Mon Sep 17 00:00:00 2001
From: yangpeixing <yangpeixing@hnkhzn.com>
Date: 星期一, 02 三月 2026 14:55:42 +0800
Subject: [PATCH] 1

---
 WMS/WIDESEA_WMSServer/WIDESEA_StockService/Service/StockInfoService.cs |  150 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 149 insertions(+), 1 deletions(-)

diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Service/StockInfoService.cs b/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Service/StockInfoService.cs
index b617a84..98407dc 100644
--- a/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Service/StockInfoService.cs
+++ b/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Service/StockInfoService.cs
@@ -194,7 +194,13 @@
             return outStocks;
         }
 
-        //浣庢俯銆佽嵂姘村垎閰嶅簱瀛�
+        /// <summary>
+        /// 浣庢俯銆佽嵂姘村垎閰嶅簱瀛�
+        /// </summary>
+        /// <param name="stockInfos"></param>
+        /// <param name="dt_OutboundOrderDetails"></param>
+        /// <param name="residueQuantitys"></param>
+        /// <returns></returns>
         public List<Dt_StockInfo> DWANDYSGetOutboundStocks(List<Dt_StockInfo> stockInfos,List<Dt_OutboundOrderDetail> dt_OutboundOrderDetails, out List<IStockInfoService.residueQuantity> residueQuantitys)
         {
             List<Dt_StockInfo> outStocks = new List<Dt_StockInfo>();
@@ -323,6 +329,148 @@
             }
             return outStocks;
         }
+
+
+        /// <summary>
+        /// 鎴愬搧鍒嗛厤搴撳瓨
+        /// </summary>
+        /// <param name="stockInfos"></param>
+        /// <param name="dt_OutboundOrderDetails"></param>
+        /// <param name="residueQuantitys"></param>
+        /// <returns></returns>
+        public List<Dt_StockInfo> CPGetOutboundStocks(List<Dt_StockInfo> stockInfos, List<Dt_NewOutboundOrderDetail> dt_OutboundOrderDetails, out List<IStockInfoService.residueQuantity> residueQuantitys)
+        {
+            List<Dt_StockInfo> outStocks = new List<Dt_StockInfo>();
+            List<IStockInfoService.residueQuantity> newresidueQantity = new List<IStockInfoService.residueQuantity>();
+            List<Dt_StockInfo> notStocks = new List<Dt_StockInfo>();
+
+            foreach (var dt_OutboundOrderDetail in dt_OutboundOrderDetails)
+            {
+                notStocks = stockInfos.Where(x => x.Details.Any(x =>x.MaterielCode == dt_OutboundOrderDetail.MaterielCode)).OrderBy(x => x.Id).ToList();
+
+                if (notStocks.Count > 0)
+                {
+                    decimal stockTotalQuantity = stockInfos.SelectMany(x => x.Details).Where(d => d.MaterielCode == dt_OutboundOrderDetail.MaterielCode).Sum(v => v.StockQuantity - v.OutboundQuantity);
+                    decimal needQuantity = dt_OutboundOrderDetail.OrderQuantity - dt_OutboundOrderDetail.LockQuantity;
+                    if (stockTotalQuantity >= needQuantity)//搴撳瓨澶�
+                    {
+                        int index = 0;
+                        while (needQuantity > 0)
+                        {
+
+                            Dt_StockInfo stockInfo = stockInfos[index];
+                            List<Dt_StockInfoDetail> dt_StockInfoDetails = new List<Dt_StockInfoDetail>();
+                            foreach (var detail in stockInfo.Details)
+                            {
+                                if (detail.MaterielCode == dt_OutboundOrderDetail.MaterielCode)
+                                {
+                                    dt_StockInfoDetails.Add(detail);
+                                }
+                            }
+                            foreach(var dt_StockInfoDetail in dt_StockInfoDetails)
+                            {
+                                decimal useableStockQuantity = dt_StockInfoDetail.StockQuantity - dt_StockInfoDetail.OutboundQuantity;
+                                if (useableStockQuantity < needQuantity)
+                                {
+                                    foreach (var item in stockInfo.Details)
+                                    {
+                                        if(item.MaterielCode == dt_OutboundOrderDetail.MaterielCode && dt_StockInfoDetail.BatchNo == item.BatchNo)
+                                        {
+                                            item.OutboundQuantity = item.StockQuantity;
+                                        }
+                                    }
+                                    needQuantity -= useableStockQuantity;
+                                }
+                                else
+                                {
+                                    foreach (var item in stockInfo.Details)
+                                    {
+                                        if(item.StockQuantity > item.OutboundQuantity && item.MaterielCode == dt_StockInfoDetail.MaterielCode && item.BatchNo == dt_StockInfoDetail.BatchNo)
+                                        {
+                                            if (item.StockQuantity - item.OutboundQuantity >= needQuantity)
+                                            {
+                                                dt_StockInfoDetail.OutboundQuantity += needQuantity;
+                                                needQuantity = 0;
+                                            }
+                                            else
+                                            {
+                                                needQuantity -= (item.StockQuantity - item.OutboundQuantity);
+                                                item.OutboundQuantity = item.StockQuantity;
+                                            }
+                                        }
+                                    }
+                                }
+                                outStocks.Add(stockInfo);
+                                index++;
+                                if (needQuantity == 0) break;
+                            }
+                        }
+                    }
+                    else
+                    {
+                        for (int i = 0; i < stockInfos.Count; i++)
+                        {
+                            Dt_StockInfo stockInfo = stockInfos[i];
+                            decimal useableStockQuantity = 0;
+                            foreach (var detail in stockInfo.Details)
+                            {
+                                if (detail.MaterielCode == dt_OutboundOrderDetail.MaterielCode)
+                                {
+                                    useableStockQuantity += detail.StockQuantity - detail.OutboundQuantity;
+                                }
+                            }
+
+                            if (useableStockQuantity < needQuantity)
+                            {
+                                stockInfo.Details.ForEach(x => {
+                                    if (x.MaterielCode == dt_OutboundOrderDetail.MaterielCode)
+                                    {
+                                        x.OutboundQuantity = x.StockQuantity;
+                                    }
+                                });
+                                needQuantity -= useableStockQuantity;
+                            }
+                            else
+                            {
+                                foreach (var detail in stockInfo.Details)
+                                {
+                                    if(detail.StockQuantity > detail.OutboundQuantity && detail.MaterielCode == dt_OutboundOrderDetail.MaterielCode)
+                                    {
+                                        if(detail.StockQuantity - detail.OutboundQuantity >= needQuantity)
+                                        {
+                                            detail.OutboundQuantity += needQuantity;
+                                            needQuantity = 0;
+                                        }
+                                        else
+                                        {
+                                            needQuantity -= (detail.StockQuantity - detail.OutboundQuantity);
+                                            detail.OutboundQuantity = detail.StockQuantity;
+                                        }
+                                    }
+                                }
+                            }
+                            outStocks.Add(stockInfo);
+                        }
+                    }
+                    IStockInfoService.residueQuantity newResidueQuantity = new IStockInfoService.residueQuantity();
+                    newResidueQuantity.MaterielCode = dt_OutboundOrderDetail.MaterielCode;
+                    newResidueQuantity.BatchNo = dt_OutboundOrderDetail.BatchNo;
+                    newResidueQuantity.NewNeendQuantity = needQuantity;
+                    newresidueQantity.Add(newResidueQuantity);
+                }
+                else
+                {
+                    continue;
+                }
+
+            }
+            residueQuantitys = newresidueQantity;
+            if (outStocks.Count() > 1)
+            {
+                outStocks.RemoveRange(0, outStocks.Count - 1);
+            }
+            return outStocks;
+        }
         //瀵煎嚭
         public override WebResponseContent Export(PageDataOptions options)
         {

--
Gitblit v1.9.3