From efaf0b8aeb26aca6536a4b384c912cc3cac4d070 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期六, 15 三月 2025 16:07:45 +0800
Subject: [PATCH] 成品代码,其他仓优化,前端优化界面增加

---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs |   99 ++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 97 insertions(+), 2 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 fc4b072..e7b3f37 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"
@@ -5,6 +5,7 @@
 using System.Threading.Tasks;
 using WIDESEA_Core;
 using WIDESEA_Core.BaseServices;
+using WIDESEA_IBasicRepository;
 using WIDESEA_IStockRepository;
 using WIDESEA_IStockService;
 using WIDESEA_Model.Models;
@@ -14,11 +15,16 @@
     public partial class ProStockInfoService : ServiceBase<Dt_ProStockInfo, IProStockInfoRepository>, IProStockInfoService
     {
         public IProStockInfoRepository Repository => BaseDal;
-        public IStockRepository _stockRepository;
-        public ProStockInfoService(IProStockInfoRepository BaseDal,IStockRepository stockRepository) : base(BaseDal)
+        private readonly IStockRepository _stockRepository;
+        private readonly IBasicRepository _basicRepository;
+        public ProStockInfoService(IProStockInfoRepository BaseDal,IStockRepository stockRepository, IBasicRepository basicRepository) : base(BaseDal)
         {
             _stockRepository = stockRepository;
+            _basicRepository = basicRepository;
         }
+        /// <summary>
+        /// 鏍规嵁澶栧寘淇℃伅瑙g粦鍐呭寘淇℃伅
+        /// </summary>
         public WebResponseContent UnBindStock(List<Dt_ProStockInfoDetail> proStockInfoDetails)
         {
             WebResponseContent content = new WebResponseContent();
@@ -37,5 +43,94 @@
             }
             return content;
         }
+        //鏌ユ壘鍙敤搴撳瓨
+        public List<Dt_ProStockInfo> GetUseableStocks(int warehoseId,Dt_ProOutOrderDetail proOutOrderDetail)
+        {
+            List<string> locationCodes = _basicRepository.LocationInfoRepository.GetCanOutLocationCodes(warehoseId);
+            return BaseDal.GetProStocks(proOutOrderDetail,locationCodes);
+        }
+        /// <summary>
+        /// 鑾峰彇鍑哄簱搴撳瓨
+        /// </summary>
+        public List<Dt_ProStockInfo> GetOutboundStocks(List<Dt_ProStockInfo> stockInfos, Dt_ProOutOrderDetail 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.SaleOrder == outOrderDetail.SaleOrder && x.ProductCode==outOrderDetail.PCode && x.ProductVersion==outOrderDetail.PVer)
+                        .Sum(x => x.StockPcsQty - x.OutboundQuantity);
+                    if (useableStockQuantity < needQuantity)
+                    {
+                        stockInfo.proStockInfoDetails.ForEach(x => x.OutboundQuantity = x.StockPcsQty);
+                        needQuantity -= useableStockQuantity;
+                    }
+                    else
+                    {
+                        stockInfo.proStockInfoDetails.ForEach(x =>
+                        {
+                            if ((x.StockPcsQty > x.OutboundQuantity) && x.SaleOrder == outOrderDetail.SaleOrder && x.ProductCode == outOrderDetail.PCode && x.ProductVersion == outOrderDetail.PVer)
+                            {
+                                if (x.StockPcsQty - x.OutboundQuantity >= needQuantity)
+                                {
+                                    x.OutboundQuantity += needQuantity;
+                                    needQuantity = 0;
+                                }
+                                else
+                                {
+                                    needQuantity -= (x.StockPcsQty - x.OutboundQuantity);
+                                    x.OutboundQuantity = x.StockPcsQty;
+                                }
+                            }
+                        });
+                    }
+                    assignOutStocks.Add(stockInfo);
+                    index++;
+                }
+            }
+            else
+            {
+                for (int i = 0; i < stockInfos.Count; i++)
+                {
+                    Dt_ProStockInfo stockInfo = stockInfos[i];
+                    float useableStockQuantity = stockInfo.proStockInfoDetails
+                        .Where(x => x.SaleOrder == outOrderDetail.SaleOrder && x.ProductCode == outOrderDetail.PCode && x.ProductVersion == outOrderDetail.PVer)
+                        .Sum(x => x.StockPcsQty - x.OutboundQuantity);
+                    if (useableStockQuantity < needQuantity)
+                    {
+                        stockInfo.proStockInfoDetails.ForEach(x => x.OutboundQuantity = x.StockPcsQty);
+                        needQuantity -= useableStockQuantity;
+                    }
+                    else
+                    {
+                        stockInfo.proStockInfoDetails.ForEach(x =>
+                        {
+                            if (x.StockPcsQty > x.OutboundQuantity && x.SaleOrder == outOrderDetail.SaleOrder && x.ProductCode == outOrderDetail.PCode && x.ProductVersion == outOrderDetail.PVer)
+                            {
+                                if (x.StockPcsQty - x.OutboundQuantity >= needQuantity)
+                                {
+                                    x.OutboundQuantity += needQuantity;
+                                    needQuantity = 0;
+                                }
+                                else
+                                {
+                                    needQuantity -= (x.StockPcsQty - x.OutboundQuantity);
+                                    x.OutboundQuantity = x.StockPcsQty;
+                                }
+                            }
+                        });
+                    }
+                    assignOutStocks.Add(stockInfo);
+                }
+            }
+            residueQuantity = needQuantity;
+            return assignOutStocks;
+        }
     }
 }

--
Gitblit v1.9.3