| | |
| | | using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup; |
| | | using System; |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Reflection; |
| | |
| | | _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) |
| | |
| | | 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 = BaseDal.QueryTabs<Dt_StockInfo, Dt_StockInfoDetail, StockSelectViewDTO>((a, b) => a.Id == b.StockId, (a, b) => new StockSelectViewDTO |
| | | { |
| | | LocationCode = a.LocationCode, |
| | | MaterielCode = b.MaterielCode, |
| | | MaterielName = b.MaterielName, |
| | | PalletCode = a.PalletCode, |
| | | UseableQuantity = b.StockQuantity, |
| | | BatchNo = b.BatchNo, |
| | | InDate = a.InDate |
| | | }, a => a.StockStatus == StockStatusEmun.å·²å
¥åº.ObjToInt(), b => b.Status == StockStatusEmun.å·²å
¥åº.ObjToInt() && b.MaterielCode == item.MaterielCode, x => true).GroupBy(x => x.LocationCode).Select(x => new StockSelectViewDTO |
| | | { |
| | | LocationCode = x.FirstOrDefault()?.LocationCode ?? "", |
| | | MaterielCode = x.FirstOrDefault()?.MaterielCode ?? "", |
| | | MaterielName = x.FirstOrDefault()?.MaterielName ?? "", |
| | | //PalletCode = string.Join(",", x.Select(x => x.PalletCode).ToList()), |
| | | PalletCode = x.Select(x => x.PalletCode).ToList().Aggregate((i, j) => i + "," + j), |
| | | UseableQuantity = x.Sum(x => x.UseableQuantity), |
| | | BatchNo = x.FirstOrDefault()?.BatchNo ?? "", |
| | | InDate = x.FirstOrDefault()?.InDate |
| | | }).ToList(); |
| | | var StockSelectViews = _stockService.StockInfoService.GetStockSelectViews(item.MaterielCode); |
| | | if (StockSelectViews.Count < 1) throw new Exception($"æªæ¾å°å¯åé
åºå"); |
| | | StockSelectViewDTO? stockSelectView = StockSelectViews.Where(x => x.UseableQuantity == item.OrderQuantity)?.OrderBy(x => x.InDate).First(); |
| | | if (stockSelectView == null) |
| | | 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)) |
| | | { |
| | | throw new Exception($"æªæ¾å°å¯åé
åºå"); |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | item.LockQuantity = stockSelectView.UseableQuantity; |
| | | item.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); |
| | | List<Dt_StockInfo> dt_StockInfos = _stockService.StockInfoService.Repository.QueryData(x => x.LocationCode == stockSelectView.LocationCode); |
| | | 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); |
| | | #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 => |