| | |
| | | |
| | | 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_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>(); |
| | | 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(); |
| | | if (StockSelectViews.Count < 1) throw new Exception($"æªæ¾å°å¯åé
åºå"); |
| | | StockSelectViewDTO? stockSelectView = StockSelectViews.Where(x => x.UseableQuantity == item.OrderQuantity)?.OrderBy(x => x.InDate).First(); |
| | | if (stockSelectView == null) |
| | | { |
| | | throw new Exception($"æªæ¾å°å¯åé
åºå"); |
| | | } |
| | | 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); |
| | | } |
| | | locationInfos.AddRange(_basicService.LocationInfoService.Repository.GetLocationInfos(LocationCodes)); |
| | | locationInfos.ForEach(x => |
| | | { |
| | | x.LocationStatus = LocationStatusEnum.Outbounding.ObjToInt(); |
| | | }); |
| | | return (outStocks, outboundOrderDetails, outStockLockInfos, locationInfos, outboundOrder); |
| | | } |
| | | } |
| | | } |