| | |
| | | using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup; |
| | | using System; |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Reflection; |
| | |
| | | |
| | | 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; |
| | |
| | | _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); |
| | | } |
| | | } |
| | | } |