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