From 2fbbc3ccaa4123a2d550fa64d91fa8ac25323a58 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期五, 11 七月 2025 15:32:03 +0800
Subject: [PATCH] 上传最新

---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs |   66 +++++++++++++++++++++++++++++++++
 1 files changed, 66 insertions(+), 0 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs"
index 3db069b..00a3ae1 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs"
@@ -113,6 +113,12 @@
             List<string> locationCodes = _basicRepository.LocationInfoRepository.GetCanOutLocationCodes(warehouse.WarehouseId);
             return BaseDal.GetProStocks(mesRworkOutboundOrder, locationCodes);
         }
+        //鏌ユ壘鍙敤鎶ュ簾搴撳瓨
+        public List<Dt_ProStockInfo> GetUseableStocks(int warehoseId, Dt_ErpProScrapSheetDetail erpProScrapSheetDetail)
+        {
+            List<string> locationCodes = _basicRepository.LocationInfoRepository.GetCanOutLocationCodes(warehoseId);
+            return BaseDal.GetProStocks(erpProScrapSheetDetail, locationCodes);
+        }
         /// <summary>
         /// 鑾峰彇鍑哄簱搴撳瓨
         /// </summary>
@@ -222,6 +228,66 @@
             return assignOutStocks;
         }
         /// <summary>
+        /// 鑾峰彇鎶ュ簾搴撳瓨
+        /// </summary>
+        public List<Dt_ProStockInfo> GetOutboundStocks(List<Dt_ProStockInfo> stockInfos, Dt_ErpProScrapSheetDetail outOrderDetail, float needQuantity, out float residueQuantity)
+        {
+            List<Dt_ProStockInfo> assignOutStocks = new List<Dt_ProStockInfo>();
+            float stockTotalQuantity = stockInfos.Select(x => x.proStockInfoDetails.Sum(v => v.StockPcsQty - v.OutboundQuantity)).Sum(x => x);
+            //stockInfos = stockInfos.OrderBy(x => x.Id).ToList();
+            if (stockTotalQuantity >= needQuantity)//搴撳瓨澶�
+            {
+                int index = 0;
+                while (needQuantity > 0)
+                {
+                    Dt_ProStockInfo stockInfo = stockInfos[index];
+                    float useableStockQuantity = stockInfo.proStockInfoDetails
+                        .Where(x => 
+                            x.ProductCode == outOrderDetail.ScrapProCode 
+                            && x.ProductVersion==outOrderDetail.ScrapProVersion
+                            && x.LotNumber == outOrderDetail.ScrapProLotNo)
+                        .Sum(x => x.StockPcsQty - x.OutboundQuantity);
+                    if (useableStockQuantity < needQuantity && useableStockQuantity > 0)
+                    {
+                        stockInfo.proStockInfoDetails.Where(x => 
+                            x.ProductCode == outOrderDetail.ScrapProCode
+                            && x.ProductVersion == outOrderDetail.ScrapProVersion
+                            && x.LotNumber == outOrderDetail.ScrapProLotNo).ToList().ForEach(x => x.OutboundQuantity = x.StockPcsQty);
+                        needQuantity -= useableStockQuantity;
+                    }
+                    else
+                    {
+                        stockInfo.proStockInfoDetails.ForEach(x =>
+                        {
+                            //婊¤冻鏉′欢杩涜鍒嗛厤
+                            if ((x.StockPcsQty > x.OutboundQuantity)
+                            && x.ProductCode == outOrderDetail.ScrapProCode
+                            && x.ProductVersion == outOrderDetail.ScrapProVersion
+                            && x.LotNumber == outOrderDetail.ScrapProLotNo)
+                            {
+                                if (x.StockPcsQty - x.OutboundQuantity >= needQuantity)
+                                {
+                                    x.OutboundQuantity += needQuantity;
+                                    needQuantity = 0;
+                                    x.OutDetailId = outOrderDetail.Id;
+                                }
+                                else
+                                {
+                                    needQuantity -= (x.StockPcsQty - x.OutboundQuantity);
+                                    x.OutboundQuantity = x.StockPcsQty;
+                                    x.OutDetailId = outOrderDetail.Id;
+                                }
+                            }
+                        });
+                    }
+                    assignOutStocks.Add(stockInfo);
+                    index++;
+                }
+            }
+            residueQuantity = needQuantity;
+            return assignOutStocks;
+        }
+        /// <summary>
         /// 鑾峰彇MES鎻愬簱搴撳瓨
         /// </summary>
         public List<Dt_ProStockInfo> GetOutboundStocks(List<Dt_ProStockInfo> stockInfos, Dt_MesRworkOutboundOrder mesRworkOutboundOrder, float needQuantity, out float residueQuantity)

--
Gitblit v1.9.3