From 0023d3db5bd701864b73e57c0240c219c40c3a4e Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期一, 14 七月 2025 14:12:34 +0800
Subject: [PATCH] 1

---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/MesRworkOutboundOrderService.cs |  115 +++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 71 insertions(+), 44 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/MesRworkOutboundOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/MesRworkOutboundOrderService.cs"
index 332fcd7..c0b232b 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/MesRworkOutboundOrderService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/MesRworkOutboundOrderService.cs"
@@ -26,6 +26,8 @@
 using WIDESEA_OutboundRepository;
 using WIDESEA_Common.APIEnum;
 using WIDESEA_Common.OrderEnum;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
+using System.Reflection.Metadata;
 
 namespace WIDESEA_OutboundService
 {
@@ -66,63 +68,50 @@
             Dt_MesRworkOutboundOrder assignOutOrder= new Dt_MesRworkOutboundOrder();
             List<Dt_OutProStockInfo> outProStockInfos=new List<Dt_OutProStockInfo>();
             List<Dt_LocationInfo> locationInfos=new List<Dt_LocationInfo>();
-            float originalNeedQuantity = mesRworkOutboundOrder.RequiredQuantity;
-
-            float needQuantity = originalNeedQuantity;
-
+            float needQty = mesRworkOutboundOrder.RequiredQuantity;
             //鏌ユ壘鍙敤搴撳瓨
             List<Dt_ProStockInfo> stockInfoss = _stockService.ProStockInfoService.GetUseableStocks(mesRworkOutboundOrder);
             if (!stockInfoss.Any())
             {
                 throw new Exception("鏈壘鍒板彲鍒嗛厤搴撳瓨");
             }
-            List<Dt_ProStockInfo> autoAssignStocks = _stockService.ProStockInfoService.GetOutboundStocks(stockInfoss,mesRworkOutboundOrder, needQuantity,out float residueQuantity);
-            mesRworkOutboundOrder.LockQuantity += needQuantity - residueQuantity;
-            autoAssignStocks.OrderBy(x => x.proStockInfoDetails.FirstOrDefault()?.StockPcsQty).ToList();
-            proStockInfos.AddRange(autoAssignStocks);
-            float assignQuantity = needQuantity - residueQuantity;
-
+            //鑾峰彇鍑哄簱搴撳瓨
+            List<Dt_ProStockInfo> assignOutStocks = _stockService.ProStockInfoService.GetOutboundStocks(stockInfoss, mesRworkOutboundOrder, needQty, out float residueQuantity);
+            mesRworkOutboundOrder.LockQuantity += needQty - residueQuantity;
+            if (mesRworkOutboundOrder.RequiredQuantity > mesRworkOutboundOrder.LockQuantity)
+            {
+                throw new Exception($"浜у搧缂栫爜{mesRworkOutboundOrder.ProductCode},鐗堟湰{mesRworkOutboundOrder.ProductVersion}鍙垎閰嶆暟閲忎笉瓒�,鍙敤鏁伴噺{mesRworkOutboundOrder.LockQuantity}");
+            }
+            proStockInfos.AddRange(assignOutStocks);
+            //鍒嗛厤鍑哄簱鐨凱CS鏁伴噺
+            float assignQuantity = needQty;
+            //璁㈠崟鏄庣粏鐨勫嚭搴揚CS鏁伴噺
             float orderQuantity = mesRworkOutboundOrder.RequiredQuantity;
-            bool isCanDate = string.IsNullOrEmpty(mesRworkOutboundOrder.DateCode);
-            for (int j = 0; j < autoAssignStocks.Count; j++)
+            for (int j = 0; j < assignOutStocks.Count; j++)
             {
                 //鍑哄簱璁㈠崟鏄庣粏宸插垎閰嶆暟閲�
-                float detailAssignQuantity = outProStockInfos
-                    .Where(x => x.SaleOrder == mesRworkOutboundOrder.SaleOrder 
-                    && x.PCode == mesRworkOutboundOrder.ProductCode 
-                    && x.PVer == mesRworkOutboundOrder.ProductVersion
-                    && (isCanDate ? isCanDate : x.DateCode == mesRworkOutboundOrder.DateCode))
-                    .Sum(x => x.AssignQuantity);
+                float detailAssignQuantity = outProStockInfos.Where(x => x.OrderDetailId == mesRworkOutboundOrder.Id).Sum(x => x.AssignQuantity);
 
-                //鍑哄簱璇︽儏宸插垎閰嶆暟閲�
-                float palletAssignQuantity = outProStockInfos
-                    .Where(x => x.SaleOrder == mesRworkOutboundOrder.SaleOrder 
-                    && x.PCode == mesRworkOutboundOrder.ProductCode 
-                    && x.PVer == mesRworkOutboundOrder.ProductVersion 
-                    && x.PalletCode == autoAssignStocks[j].PalletCode
-                    && (isCanDate ? isCanDate : x.DateCode == mesRworkOutboundOrder.DateCode))
-                    .Sum(x => x.AssignQuantity);
-
-                float palletOutboundQuantity = autoAssignStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity);
-                if (palletAssignQuantity < palletOutboundQuantity)//濡傛灉鍑哄簱璇︽儏宸插垎閰嶆暟閲忓皬浜庢墭鐩樺凡鍒嗛厤鏁伴噺锛屽垯鍙互缁х画娣诲姞璇ユ墭鐩樺嚭搴撲俊鎭�
+                //鎵�鍓╂暟閲�
+                float orderDetailNeedQuantity = mesRworkOutboundOrder.RequiredQuantity - detailAssignQuantity;
+                //鐢熸垚鍑哄簱璇︽儏
+                if (orderDetailNeedQuantity > assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity))
                 {
-                    float orderDetailNeedQuantity = mesRworkOutboundOrder.RequiredQuantity - detailAssignQuantity;
-                    if (orderDetailNeedQuantity > autoAssignStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity) - palletAssignQuantity)
-                    {
-                        mesRworkOutboundOrder.LockQuantity += autoAssignStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity) - palletAssignQuantity;
-                        Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(mesRworkOutboundOrder, autoAssignStocks[j], autoAssignStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity) - palletAssignQuantity);
-                        outProStockInfos.Add(outStockLockInfo);
-                    }
-                    else
-                    {
-                        Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(mesRworkOutboundOrder, autoAssignStocks[j], mesRworkOutboundOrder.RequiredQuantity-mesRworkOutboundOrder.LockQuantity);
-                        outProStockInfos.Add(outStockLockInfo);
-                        mesRworkOutboundOrder.LockQuantity = mesRworkOutboundOrder.RequiredQuantity;
-                        break;
-                    }
+                    mesRworkOutboundOrder.LockQuantity += assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity);
+                    Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(mesRworkOutboundOrder, assignOutStocks[j], assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity));
+                    outProStockInfos.Add(outStockLockInfo);
+                }
+                else
+                {
+                    Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(mesRworkOutboundOrder, assignOutStocks[j], mesRworkOutboundOrder.RequiredQuantity - detailAssignQuantity);
+                    outProStockInfos.Add(outStockLockInfo);
+                    mesRworkOutboundOrder.LockQuantity = mesRworkOutboundOrder.RequiredQuantity;
+                    break;
                 }
             }
-            locationInfos.AddRange(_basicService.LocationInfoService.Repository.GetLocationInfos(proStockInfos.Select(x => x.LocationCode).ToList()));
+            List<string> locationArr = proStockInfos.Select(x => x.LocationCode).ToList();
+
+            locationInfos.AddRange(_basicService.LocationInfoService.Repository.GetLocationInfos(locationArr));
 
             return (proStockInfos, mesRworkOutboundOrder, outProStockInfos, locationInfos);
         }
@@ -311,6 +300,44 @@
             };
             return mesProductOutBound;
         }
+        //搴撳瓨鏉挎暟鎹浆鎹�
+        public MesProductOutBound MesProOutBound(Dt_MesRworkOutboundOrder mesRworkOutboundOrder, List<Dt_ProStockInfoDetail> proStockInfoDetails)
+        {
+            //鑾峰彇浠撳簱淇℃伅
+            Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == mesRworkOutboundOrder.WarehouseId);
+            List<MesInventoryInfo> inventoryInfos = new List<MesInventoryInfo>();
+            foreach (var item in proStockInfoDetails.Where(x=>x.OutboundQuantity>0))
+            {
+                int setinterval = (int)item.StockPcsQty / (int)item.SETQty;
+                if (setinterval == 0)
+                {
+                    throw new Exception($"{item.BagNo}鑾峰彇SET鏁伴噺杞崲澶辫触");
+                }
+                item.OutSETQty = (int)item.OutboundQuantity / setinterval;
+                if (item.OutSETQty == 0)
+                {
+                    throw new Exception($"{item.BagNo}鑾峰彇SET鏁伴噺杞崲澶辫触");
+                }
+                MesInventoryInfo mesInventoryInfo = new MesInventoryInfo()
+                {
+                    Warhouseno = warehouse.WarehouseCode,
+                    InternalPackageNumber = item.BagNo,
+                    SetCount = (int)item.OutSETQty,
+                    EligiblePcsCount = (int)item.OutboundQuantity
+                };
+                inventoryInfos.Add(mesInventoryInfo);
+            }
+            MesProductOutBound mesProductOutBound = new MesProductOutBound()
+            {
+                TaskNo = mesRworkOutboundOrder.TaskNo,
+                ProductCode = mesRworkOutboundOrder.ProductCode,
+                ProductVersion = mesRworkOutboundOrder.ProductVersion,
+                DateCode = mesRworkOutboundOrder.DateCode,
+                SaleOrder = mesRworkOutboundOrder.SaleOrder,
+                InventoryInfo = inventoryInfos
+            };
+            return mesProductOutBound;
+        }
         /// <summary>
         /// 鎴愬搧搴撳瓨鏉垮悓姝ユ帴鍙�
         /// </summary>

--
Gitblit v1.9.3