From fe256a7afaa132910875d3dc73783d9ab2d7ace5 Mon Sep 17 00:00:00 2001
From: liulijun <liulijun@hnkhzn.com>
Date: 星期四, 12 三月 2026 18:57:44 +0800
Subject: [PATCH] 老厂排程单页面增加用纸顺序号和是否缺料

---
 项目代码/WMS/WMSServices/WIDESEA_StockService/ProStockInfoService.cs |   95 ++++++++++++++++++-----------------------------
 1 files changed, 36 insertions(+), 59 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_StockService/ProStockInfoService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_StockService/ProStockInfoService.cs"
index b15fe63..b584466 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_StockService/ProStockInfoService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_StockService/ProStockInfoService.cs"
@@ -26,75 +26,52 @@
             _stockRepository = stockRepository;
             _basicRepository = basicRepository;
         }
-        /// <summary>
-        /// 鏍规嵁澶栧寘淇℃伅瑙g粦鍐呭寘淇℃伅
-        /// </summary>
-        public WebResponseContent UnBindStock(List<Dt_ProStockInfoDetail> proStockInfoDetails)
+        public List<Dt_ProStockInfo> GetUseableStocks(string materielCode, int warehoseId)
         {
-            WebResponseContent content = new WebResponseContent();
-            //鏍规嵁鍐呭寘鍙疯繘琛屽簱瀛樻墸闄�
-            try
+            List<string> locationCodes = _basicRepository.LocationInfoRepository.GetCanOutLocationCodes(warehoseId);
+
+            return BaseDal.GetStockInfos(materielCode, locationCodes);
+        }
+        public List<Dt_ProStockInfo> GetOutboundStocks(List<Dt_ProStockInfo> stockInfos, decimal needQuantity)
+        {
+            List<Dt_ProStockInfo> assignOutStocks = new List<Dt_ProStockInfo>();
+
+            decimal stockTotalQuantity = stockInfos.Select(x => x.proStockInfoDetails.Sum(v => v.StockQty-v.OutboundQuantity)).Sum(x => x);
+
+            if (stockTotalQuantity >= needQuantity)//搴撳瓨澶�
             {
-                //鑾峰彇搴撳瓨
-                List<string> BagNos = proStockInfoDetails.Select(x => x.BagNo).Distinct().ToList();
-                List<Dt_ProStockInfo> proStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>()
-                    .Where(x => x.StockStatus == StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt())
-                    .Includes(x => x.proStockInfoDetails)
-                    .Where(x => x.proStockInfoDetails.Any(v => BagNos.Contains(v.BagNo))).Distinct().ToList();
-                List<Dt_ProStockInfoDetail> delProStockDetails=new List<Dt_ProStockInfoDetail>();
-                List<Dt_ProStockInfoDetail> upProStockDetails = new List<Dt_ProStockInfoDetail>();
-                List<Dt_ProStockInfo> delProStockInfos = new List<Dt_ProStockInfo>();
-                foreach (var item in proStockInfoDetails)
+                int index = 0;
+                while (needQuantity > 0)
                 {
-                    Dt_ProStockInfo? proStockInfo = proStockInfos.Where(x => x.proStockInfoDetails.Any(v => v.BagNo == item?.BagNo)).FirstOrDefault();
-                    Dt_ProStockInfoDetail? proStockInfoDetail = proStockInfo?.proStockInfoDetails.Where(x => x.BagNo == item?.BagNo).FirstOrDefault();
-                    if (proStockInfo==null || proStockInfoDetail == null)
+                    Dt_ProStockInfo stockInfo = stockInfos[index];
+                    decimal useableStockQuantity = stockInfo.proStockInfoDetails
+                        .Sum(x => x.StockQty - x.OutboundQuantity);
+                    if (useableStockQuantity < needQuantity && useableStockQuantity > 0)
                     {
-                       return content.Error($"鏈壘鍒皗item?.BagNo}搴撳瓨");
-                    }
-                    
-                    //鍒ゆ柇鏄庣粏鏄惁鍏ㄩ儴鎵嚭
-                    if (proStockInfoDetail.StockPcsQty==item.StockPcsQty)
-                    {
-                        delProStockDetails.Add(proStockInfoDetail);
-                        proStockInfo.proStockInfoDetails.Remove(proStockInfoDetail);
-                        item.OutDetailId = proStockInfoDetail.OutDetailId;
-                        item.OutDetailSaleNo = proStockInfoDetail.OutDetailSaleNo;
+                        stockInfo.proStockInfoDetails.ForEach(x => x.OutboundQuantity = x.StockQty);
+                        needQuantity -= useableStockQuantity;
                     }
                     else
                     {
-                        proStockInfoDetail.StockPcsQty -= item.StockPcsQty;
-                        proStockInfoDetail.SETQty -= item.SETQty;
-                        proStockInfoDetail.OutboundQuantity = 0;
-                        item.OutDetailId = 0;
-                        item.OutDetailSaleNo = "";
-                        upProStockDetails.Add(proStockInfoDetail);
+                        stockInfo.proStockInfoDetails.ForEach(x =>
+                        {
+                            if (x.StockQty - x.OutboundQuantity >= needQuantity)
+                            {
+                                x.OutboundQuantity += needQuantity;
+                                needQuantity = 0;
+                            }
+                            else
+                            {
+                                needQuantity -= (x.StockQty - x.OutboundQuantity);
+                                x.OutboundQuantity = x.StockQty;
+                            }
+                        });
                     }
-
-                    if (proStockInfo.proStockInfoDetails.Count==0)
-                    {
-                        delProStockInfos.Add(proStockInfo);
-                    }
+                    assignOutStocks.Add(stockInfo);
+                    index++;
                 }
-                if (delProStockInfos.Count>0)
-                {
-                    BaseDal.DeleteAndMoveIntoHty(delProStockInfos, OperateTypeEnum.鑷姩鍒犻櫎);
-                }
-                if (delProStockDetails.Count > 0)
-                {
-                    _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(delProStockDetails, OperateTypeEnum.鑷姩鍒犻櫎);
-                }
-                if (upProStockDetails.Count > 0)
-                {
-                    _stockRepository.ProStockInfoDetailRepository.UpdateData(upProStockDetails);
-                }
-                content.OK("鎴愬姛", proStockInfoDetails);
             }
-            catch (Exception ex)
-            {
-                content.Error(ex.Message);
-            }
-            return content;
+            return assignOutStocks;
         }
     }
 }

--
Gitblit v1.9.3