From f27080d8476a177b809045d1f036a24dac782ba5 Mon Sep 17 00:00:00 2001
From: wankeda <Administrator@DESKTOP-HAU3ST3>
Date: 星期四, 22 一月 2026 15:45:01 +0800
Subject: [PATCH] 1

---
 WMS/WIDESEA_WMSServer/WIDESEA_StockService/Service/StockInfoService.cs |  192 +++++++++++++++++++++++++++---------------------
 1 files changed, 108 insertions(+), 84 deletions(-)

diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Service/StockInfoService.cs b/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Service/StockInfoService.cs
index 8f4388d..b617a84 100644
--- a/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Service/StockInfoService.cs
+++ b/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Service/StockInfoService.cs
@@ -21,6 +21,7 @@
 using WIDESEA_IStockRepository;
 using WIDESEA_IStockService;
 using WIDESEA_Model.Models;
+using static WIDESEA_IStockService.IStockInfoService;
 
 namespace WIDESEA_StockService
 {
@@ -194,109 +195,132 @@
         }
 
         //浣庢俯銆佽嵂姘村垎閰嶅簱瀛�
-        public List<Dt_StockInfo> DWANDYSGetOutboundStocks(List<Dt_StockInfo> stockInfos, string materielCode,string batchNo ,decimal needQuantity, out decimal residueQuantity)
+        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>();
-            decimal stockTotalQuantity = stockInfos.SelectMany(x => x.Details).Where(d => d.BatchNo == batchNo).Sum(v => v.StockQuantity - v.OutboundQuantity);
-            stockInfos = stockInfos.Where(x => x.Details.Any(x => x.BatchNo == batchNo)).OrderBy(x => x.Id).ToList();
-            if (stockTotalQuantity >= needQuantity)//搴撳瓨澶�
+            List<IStockInfoService.residueQuantity> newresidueQantity = new List<IStockInfoService.residueQuantity>();
+            List<Dt_StockInfo> notStocks = new List<Dt_StockInfo>(); ;
+            foreach(var dt_OutboundOrderDetail in dt_OutboundOrderDetails)
             {
-                int index = 0;
-                while (needQuantity > 0)
+                notStocks = stockInfos.Where(x => x.Details.Any(x => x.BatchNo == dt_OutboundOrderDetail.BatchNo && x.MaterielCode == dt_OutboundOrderDetail.MaterielCode)).OrderBy(x => x.Id).ToList();
+                if(notStocks.Count > 0)
                 {
+                    decimal stockTotalQuantity = stockInfos.SelectMany(x => x.Details).Where(d => d.BatchNo == dt_OutboundOrderDetail.BatchNo).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];
-                    Dt_StockInfoDetail dt_StockInfoDetail = new Dt_StockInfoDetail();
-                    foreach(var detail in stockInfo.Details)
-                    {
-                        if(detail.BatchNo == batchNo && detail.MaterielCode == materielCode)
-                        {
-                            dt_StockInfoDetail = detail;
-                        }
-                    }
-                    decimal useableStockQuantity = dt_StockInfoDetail.StockQuantity - dt_StockInfoDetail.OutboundQuantity;
-                    if (useableStockQuantity < needQuantity)
-                    {
-                        stockInfo.Details.ForEach(x =>
-                        {
-                            if(x.MaterielCode == materielCode && x.BatchNo == batchNo)
+                            Dt_StockInfo stockInfo = stockInfos[index];
+                            Dt_StockInfoDetail dt_StockInfoDetail = new Dt_StockInfoDetail();
+                            foreach (var detail in stockInfo.Details)
                             {
-                                x.OutboundQuantity = x.StockQuantity;
+                                if (detail.BatchNo == dt_OutboundOrderDetail.BatchNo && detail.MaterielCode == dt_OutboundOrderDetail.MaterielCode)
+                                {
+                                    dt_StockInfoDetail = detail;
+                                }
                             }
-                        });
-                        needQuantity -= useableStockQuantity;
+                            decimal useableStockQuantity = dt_StockInfoDetail.StockQuantity - dt_StockInfoDetail.OutboundQuantity;
+                            if (useableStockQuantity < needQuantity)
+                            {
+                                stockInfo.Details.ForEach(x =>
+                                {
+                                    if (x.MaterielCode == dt_OutboundOrderDetail.MaterielCode && x.BatchNo == dt_OutboundOrderDetail.BatchNo)
+                                    {
+                                        x.OutboundQuantity = x.StockQuantity;
+                                    }
+                                });
+                                needQuantity -= useableStockQuantity;
+                            }
+                            else
+                            {
+
+                                stockInfo.Details.ForEach(x =>
+                                {
+                                    if (x.StockQuantity > x.OutboundQuantity && x.MaterielCode == dt_OutboundOrderDetail.MaterielCode && x.BatchNo == dt_OutboundOrderDetail.BatchNo)
+                                    {
+                                        if (x.StockQuantity - x.OutboundQuantity >= needQuantity)
+                                        {
+                                            x.OutboundQuantity += needQuantity;
+                                            needQuantity = 0;
+                                        }
+                                        else
+                                        {
+                                            needQuantity -= (x.StockQuantity - x.OutboundQuantity);
+                                            x.OutboundQuantity = x.StockQuantity;
+                                        }
+                                    }
+                                });
+                            }
+                            outStocks.Add(stockInfo);
+                            index++;
+                        }
                     }
                     else
                     {
-
-                        stockInfo.Details.ForEach(x =>
+                        for (int i = 0; i < stockInfos.Count; i++)
                         {
-                            if (x.StockQuantity > x.OutboundQuantity && x.MaterielCode == materielCode && x.BatchNo == batchNo)
+                            Dt_StockInfo stockInfo = stockInfos[i];
+                            decimal useableStockQuantity = 0;
+                            foreach (var detail in stockInfo.Details)
                             {
-                                if (x.StockQuantity - x.OutboundQuantity >= needQuantity)
+                                if (detail.MaterielCode == dt_OutboundOrderDetail.MaterielCode && detail.BatchNo == dt_OutboundOrderDetail.BatchNo)
                                 {
-                                    x.OutboundQuantity += needQuantity;
-                                    needQuantity = 0;
-                                }
-                                else
-                                {
-                                    needQuantity -= (x.StockQuantity - x.OutboundQuantity);
-                                    x.OutboundQuantity = x.StockQuantity;
+                                    useableStockQuantity = detail.StockQuantity - detail.OutboundQuantity;
                                 }
                             }
-                        });
-                    }
-                    outStocks.Add(stockInfo);
-                    index++;
-                }
-            }
-            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 == materielCode && detail.BatchNo == batchNo)
-                        {
-                            useableStockQuantity = detail.StockQuantity - detail.OutboundQuantity;
+
+                            if (useableStockQuantity < needQuantity)
+                            {
+                                stockInfo.Details.ForEach(x => {
+                                    if (x.MaterielCode == dt_OutboundOrderDetail.MaterielCode && x.BatchNo == dt_OutboundOrderDetail.BatchNo)
+                                    {
+                                        x.OutboundQuantity = x.StockQuantity;
+                                    }
+                                });
+                                needQuantity -= useableStockQuantity;
+                            }
+                            else
+                            {
+                                stockInfo.Details.ForEach(x =>
+                                {
+                                    if (x.StockQuantity > x.OutboundQuantity && x.MaterielCode == dt_OutboundOrderDetail.MaterielCode && x.BatchNo == dt_OutboundOrderDetail.BatchNo)
+                                    {
+                                        if (x.StockQuantity - x.OutboundQuantity >= needQuantity)
+                                        {
+                                            x.OutboundQuantity += needQuantity;
+                                            needQuantity = 0;
+                                        }
+                                        else
+                                        {
+                                            needQuantity -= (x.StockQuantity - x.OutboundQuantity);
+                                            x.OutboundQuantity = x.StockQuantity;
+                                        }
+                                    }
+                                });
+                            }
+                            outStocks.Add(stockInfo);
                         }
                     }
-                    
-                    if (useableStockQuantity < needQuantity)
-                    {
-                        stockInfo.Details.ForEach(x => { 
-                            if(x.MaterielCode == materielCode && x.BatchNo == batchNo)
-                            {
-                                x.OutboundQuantity = x.StockQuantity;
-                            }
-                        });
-                        needQuantity -= useableStockQuantity;
-                    }
-                    else
-                    {
-                        stockInfo.Details.ForEach(x =>
-                        {
-                            if (x.StockQuantity > x.OutboundQuantity && x.MaterielCode == materielCode && x.BatchNo == batchNo)
-                            {
-                                if (x.StockQuantity - x.OutboundQuantity >= needQuantity)
-                                {
-                                    x.OutboundQuantity += needQuantity;
-                                    needQuantity = 0;
-                                }
-                                else
-                                {
-                                    needQuantity -= (x.StockQuantity - x.OutboundQuantity);
-                                    x.OutboundQuantity = x.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;
+                }
+                           
             }
-            residueQuantity = needQuantity;
+            residueQuantitys = newresidueQantity;
+            if(outStocks.Count() > 1)
+            {
+                outStocks.RemoveRange(0, outStocks.Count - 1);
+            }
             return outStocks;
         }
         //瀵煎嚭

--
Gitblit v1.9.3