From fbc6fae6c793220d0b67ac603ce9bbf22837de79 Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期四, 19 六月 2025 17:50:47 +0800
Subject: [PATCH] 1

---
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/OutboundOrderDetailService.cs |  124 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 123 insertions(+), 1 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/OutboundOrderDetailService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/OutboundOrderDetailService.cs"
index d7ef4d1..74ccbd6 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/OutboundOrderDetailService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/OutboundOrderDetailService.cs"
@@ -1,5 +1,6 @@
 锘縰sing OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
 using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.Linq;
 using System.Reflection;
@@ -35,7 +36,7 @@
 
         public IOutboundOrderDetailRepository Repository => BaseDal;
 
-        public OutboundOrderDetailService(IOutboundOrderDetailRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IStockService stockService, IBasicService basicService,  IRecordService recordService, IOutboundRepository outboundRepository, IOutStockLockInfoService outStockLockInfoService) : base(BaseDal)
+        public OutboundOrderDetailService(IOutboundOrderDetailRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IStockService stockService, IBasicService basicService, IRecordService recordService, IOutboundRepository outboundRepository, IOutStockLockInfoService outStockLockInfoService) : base(BaseDal)
         {
             _unitOfWorkManage = unitOfWorkManage;
             _stockService = stockService;
@@ -44,5 +45,126 @@
             _outboundRepository = outboundRepository;
             _outStockLockInfoService = outStockLockInfoService;
         }
+
+        public (List<Dt_StockInfo>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>, Dt_OutboundOrder) AssignStockOutbound(Dt_OutboundOrderDetail outboundOrderDetail)
+        {
+            Dt_OutboundOrder outboundOrder = _outboundRepository.OutboundOrderRepository.QueryFirst(x => x.Id == outboundOrderDetail.OrderId);
+            List<Dt_StockInfo> outStocks = new List<Dt_StockInfo>();
+            List<string> LocationCodes = new List<string>();
+            List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>();
+            List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
+            return (outStocks, outStockLockInfos, locationInfos, outboundOrder);
+        }
+
+        public (List<Dt_StockInfo>, List<Dt_OutboundOrderDetail>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>, Dt_OutboundOrder) AssignStockOutbound(List<Dt_OutboundOrderDetail> outboundOrderDetails)
+        {
+            if (outboundOrderDetails.GroupBy(x => x.OrderId).Count() > 1)
+            {
+                throw new Exception($"璇峰嬁鍚屾椂鎿嶄綔澶氫釜鍗曟嵁鏄庣粏");
+            }
+            Dt_OutboundOrder outboundOrder = _outboundRepository.OutboundOrderRepository.QueryFirst(x => x.Id == outboundOrderDetails.FirstOrDefault().OrderId);
+            List<Dt_StockInfo> outStocks = new List<Dt_StockInfo>();
+            List<string> LocationCodes = new List<string>();
+            List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>();
+            List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
+            List<int> keys = new List<int>();
+            foreach (var item in outboundOrderDetails)
+            {
+                var StockSelectViews = _stockService.StockInfoService.GetStockSelectViews(item.MaterielCode);
+                if (StockSelectViews.Count < 1) throw new Exception($"鏈壘鍒板彲鍒嗛厤搴撳瓨");
+                StockSelectViews = StockSelectViews.Where(x => !keys.Contains(x.Id)).OrderBy(x => x.InDate).ToList();
+                if (StockSelectViews.Count < 1) throw new Exception($"鍙垎閰嶅簱瀛樹笉瓒�");
+                foreach (var StockSelectView in StockSelectViews.GroupBy(x => x.LocationCode))
+                {
+                    if (item.OrderQuantity - item.LockQuantity <= 0) break;
+                    decimal StockQuantity = StockSelectView.Sum(x => x.UseableQuantity);
+                    if (StockQuantity <= item.OrderQuantity - item.LockQuantity)
+                    {
+                        foreach (var Stock in StockSelectView.OrderByDescending(x => x.InDate))
+                        {
+                            keys.Add(Stock.Id);
+                            item.LockQuantity += Stock.UseableQuantity;
+                            item.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
+                            List<Dt_StockInfo> dt_StockInfos = _stockService.StockInfoService.Repository.QueryData(x => Stock.PalletCode.Contains(x.PalletCode));
+                            dt_StockInfos.ForEach(x =>
+                            {
+                                x.StockStatus = StockStatusEmun.鍑哄簱涓�.ObjToInt();
+                            });
+                            outboundOrder.OrderStatus = OutboundStatusEnum.鍑哄簱涓�.ObjToInt();
+                            outStockLockInfos.AddRange(_outStockLockInfoService.GetOutStockLockInfo(outboundOrder, item, dt_StockInfos, BatchNo: Stock.BatchNo));
+                            outStocks.AddRange(dt_StockInfos);
+                        }
+                        LocationCodes.Add(StockSelectView.Key);
+                    }
+                    else
+                    {
+                        foreach (var Stock in StockSelectView.OrderByDescending(x => x.InDate))
+                        {
+                            if (item.OrderQuantity - item.LockQuantity - Stock.UseableQuantity >= 0)
+                            {
+                                keys.Add(Stock.Id);
+                                item.LockQuantity += Stock.UseableQuantity;
+                                item.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
+                                List<Dt_StockInfo> StockInfos = _stockService.StockInfoService.Repository.QueryData(x => Stock.PalletCode.Contains(x.PalletCode));
+                                StockInfos.ForEach(x =>
+                                {
+                                    x.StockStatus = StockStatusEmun.鍑哄簱涓�.ObjToInt();
+                                });
+                                outboundOrder.OrderStatus = OutboundStatusEnum.鍑哄簱涓�.ObjToInt();
+                                outStockLockInfos.AddRange(_outStockLockInfoService.GetOutStockLockInfo(outboundOrder, item, StockInfos, BatchNo: Stock.BatchNo));
+                                outStocks.AddRange(StockInfos);
+                                LocationCodes.Add(Stock.LocationCode);
+                            }
+                        }
+                    }
+                }
+                #region MyRegion
+                //StockSelectViewDTO? stockSelectView = StockSelectViews.Where(x => x.UseableQuantity == item.OrderQuantity).FirstOrDefault();
+                //if (stockSelectView == null)
+                //{
+                //    foreach (var StockSelectView in StockSelectViews)
+                //    {
+                //        if (item.OrderQuantity - item.LockQuantity - StockSelectView.UseableQuantity >= 0)
+                //        {
+                //            keys.Add(StockSelectView.Id);
+                //            item.LockQuantity += StockSelectView.UseableQuantity;
+                //            item.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
+                //            List<Dt_StockInfo> StockInfos = _stockService.StockInfoService.Repository.QueryData(x => StockSelectView.PalletCode.Contains(x.PalletCode));
+                //            StockInfos.ForEach(x =>
+                //            {
+                //                x.StockStatus = StockStatusEmun.鍑哄簱涓�.ObjToInt();
+                //            });
+                //            outboundOrder.OrderStatus = OutboundStatusEnum.鍑哄簱涓�.ObjToInt();
+                //            outStockLockInfos.AddRange(_outStockLockInfoService.GetOutStockLockInfo(outboundOrder, item, StockInfos, BatchNo: StockSelectView.BatchNo));
+                //            outStocks.AddRange(StockInfos);
+                //            LocationCodes.Add(StockSelectView.LocationCode);
+                //        }
+                //    }
+                //    if (keys.Count < 1) throw new Exception($"鏈壘鍒板尮閰嶅嚭搴撳崟鏁伴噺搴撳瓨");
+                //}
+                //else
+                //{
+                //    keys.Add(stockSelectView.Id);
+                //    item.LockQuantity = stockSelectView.UseableQuantity;
+                //    item.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
+                //    List<Dt_StockInfo> dt_StockInfos = _stockService.StockInfoService.Repository.QueryData(x => stockSelectView.PalletCode.Contains(x.PalletCode));
+                //    dt_StockInfos.ForEach(x =>
+                //    {
+                //        x.StockStatus = StockStatusEmun.鍑哄簱涓�.ObjToInt();
+                //    });
+                //    outboundOrder.OrderStatus = OutboundStatusEnum.鍑哄簱涓�.ObjToInt();
+                //    outStockLockInfos.AddRange(_outStockLockInfoService.GetOutStockLockInfo(outboundOrder, item, dt_StockInfos, BatchNo: stockSelectView.BatchNo));
+                //    outStocks.AddRange(dt_StockInfos);
+                //    LocationCodes.Add(stockSelectView.LocationCode);
+                //} 
+                #endregion
+            }
+            locationInfos.AddRange(_basicService.LocationInfoService.Repository.GetLocationInfos(LocationCodes));
+            locationInfos.ForEach(x =>
+            {
+                x.LocationStatus = LocationStatusEnum.Outbounding.ObjToInt();
+            });
+            return (outStocks, outboundOrderDetails, outStockLockInfos, locationInfos, outboundOrder);
+        }
     }
 }

--
Gitblit v1.9.3