| | |
| | | public IRepository<Dt_StockInfo> Repository => BaseDal; |
| | | private readonly IRepository<Dt_StockInfoDetail> _stockInfoDetailRepository; |
| | | private readonly IOutboundOrderService _outboundOrderService; |
| | | private readonly IOutboundOrderDetailService _outboundOrderDetailService; |
| | | private readonly ILocationInfoService _locationInfoService; |
| | | public StockInfoService(IRepository<Dt_StockInfo> BaseDal, IMapper mapper, IRepository<Dt_StockInfoDetail> stockInfoDetailRepository, IRecordService recordService, ILocationInfoService locationInfoService, IOutboundOrderService outboundOrderService) : base(BaseDal) |
| | | public StockInfoService(IRepository<Dt_StockInfo> BaseDal, IMapper mapper, IRepository<Dt_StockInfoDetail> stockInfoDetailRepository, IRecordService recordService, ILocationInfoService locationInfoService, IOutboundOrderService outboundOrderService, IOutboundOrderDetailService outboundOrderDetailService) : base(BaseDal) |
| | | { |
| | | _mapper = mapper; |
| | | _stockInfoDetailRepository = stockInfoDetailRepository; |
| | | _recordService = recordService; |
| | | _locationInfoService = locationInfoService; |
| | | _outboundOrderService = outboundOrderService; |
| | | _outboundOrderDetailService = outboundOrderDetailService; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | { |
| | | return Db.Queryable<Dt_StockInfo>().Where(x => palletCodes.Contains(x.PalletCode)).Includes(x => x.Details).OrderBy(x => x.CreateDate).ToList(); |
| | | } |
| | | // æ·»å è·åå个æçåºåçæ¹æ³ï¼å¦æä¸åå¨ï¼ |
| | | public Dt_StockInfo GetStockInfoByPalletCode(string palletCode) |
| | | { |
| | | return Db.Queryable<Dt_StockInfo>() |
| | | .Where(x => x.PalletCode == palletCode) |
| | | .Includes(x => x.Details) |
| | | .First(); |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | /// <param name="orderId"></param> |
| | | /// <param name="materielCode"></param> |
| | | /// <returns></returns> |
| | | //public List<StockSelectViewDTO> GetStockSelectViews(int orderId, string materielCode) |
| | | //{ |
| | | // try |
| | | // { |
| | | // Dt_OutboundOrder outboundOrder = _outboundOrderService.Repository.QueryFirst(x => x.Id == orderId); |
| | | // if (outboundOrder == null) |
| | | // { |
| | | // throw new Exception($"æªæ¾å°åºåºåä¿¡æ¯"); |
| | | // } |
| | | |
| | | // List<string> locationCodes = _locationInfoService.GetCanOutLocationCodes(); |
| | | |
| | | // return 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, |
| | | // Barcode=b.Barcode, |
| | | // PalletCode = a.PalletCode, |
| | | // UseableQuantity = b.StockQuantity - b.OutboundQuantity |
| | | // }, a => locationCodes.Contains(a.LocationCode), b => b.StockQuantity > b.OutboundQuantity && b.MaterielCode == materielCode, x => true).GroupBy(x => x.PalletCode).Select(x => new StockSelectViewDTO |
| | | // { |
| | | // LocationCode = x.FirstOrDefault()?.LocationCode ?? "", |
| | | // MaterielCode = x.FirstOrDefault()?.MaterielCode ?? "", |
| | | // MaterielName = x.FirstOrDefault()?.MaterielName ?? "", |
| | | // Barcode=x.FirstOrDefault()?.Barcode??"", |
| | | // PalletCode = x.Key, |
| | | // UseableQuantity = x.Sum(x => x.UseableQuantity) |
| | | // }).ToList(); |
| | | // } |
| | | // catch (Exception ex) |
| | | // { |
| | | // return null; |
| | | // } |
| | | |
| | | //} |
| | | |
| | | public List<StockSelectViewDTO> GetStockSelectViews(int orderId, string materielCode) |
| | | { |
| | | try |
| | | Dt_OutboundOrder outboundOrder = _outboundOrderService.Repository.QueryFirst(x => x.Id == orderId); |
| | | if (outboundOrder == null) |
| | | { |
| | | Dt_OutboundOrder outboundOrder = _outboundOrderService.Repository.QueryFirst(x => x.Id == orderId); |
| | | if (outboundOrder == null) |
| | | throw new Exception($"æªæ¾å°ID为{orderId}çåºåºåä¿¡æ¯"); |
| | | } |
| | | |
| | | // è·ååºåºåæç»ï¼ç¨äºç¡®å®éè¦çæ¹æ¬¡åä¾åºå |
| | | var orderDetails = _outboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>().Where(x => x.OrderId == orderId && x.MaterielCode == materielCode).ToList(); |
| | | |
| | | if (!orderDetails.Any()) |
| | | { |
| | | throw new Exception($"åºåºå{orderId}䏿ªæ¾å°ç©æ{materielCode}çæç»ä¿¡æ¯"); |
| | | } |
| | | |
| | | List<string> locationCodes = _locationInfoService.GetCanOutLocationCodes(); |
| | | var result = new List<StockSelectViewDTO>(); |
| | | |
| | | // 为æ¯ä¸ªåºåºåæç»æ¥è¯¢å¯¹åºçåºå |
| | | foreach (var orderDetail in orderDetails) |
| | | { |
| | | // æå»ºæ¥è¯¢æ¡ä»¶ |
| | | var stockQuery = Db.Queryable<Dt_StockInfo>() |
| | | .Where(x => locationCodes.Contains(x.LocationCode)) |
| | | .Where(x => x.StockStatus == (int)StockStatusEmun.å
¥åºå®æ) |
| | | .Includes(x => x.Details); |
| | | |
| | | // æ§è¡æ¥è¯¢å¹¶æå
è¿å
åºæåº |
| | | var stocks = stockQuery.ToList() |
| | | .Where(x => x.Details.Any(d => |
| | | d.MaterielCode == materielCode && |
| | | d.BatchNo == orderDetail.BatchNo && |
| | | d.SupplyCode == orderDetail.SupplyCode && |
| | | d.StockQuantity > d.OutboundQuantity |
| | | )) |
| | | .OrderBy(x => x.CreateDate) |
| | | .ToList(); |
| | | |
| | | foreach (var stock in stocks) |
| | | { |
| | | throw new Exception($"æªæ¾å°åºåºåä¿¡æ¯"); |
| | | var relevantDetails = stock.Details |
| | | .Where(d => d.MaterielCode == materielCode && |
| | | d.BatchNo == orderDetail.BatchNo && |
| | | d.SupplyCode == orderDetail.SupplyCode && |
| | | d.StockQuantity > d.OutboundQuantity) |
| | | .ToList(); |
| | | |
| | | if (relevantDetails.Any()) |
| | | { |
| | | var firstDetail = relevantDetails.First(); |
| | | var useableQuantity = relevantDetails.Sum(d => d.StockQuantity - d.OutboundQuantity); |
| | | |
| | | result.Add(new StockSelectViewDTO |
| | | { |
| | | LocationCode = stock.LocationCode, |
| | | MaterielCode = materielCode, |
| | | MaterielName = firstDetail.MaterielName, |
| | | BatchNo = orderDetail.BatchNo, |
| | | SupplyCode = orderDetail.SupplyCode, |
| | | Barcode = firstDetail.Barcode, |
| | | PalletCode = stock.PalletCode, |
| | | UseableQuantity = useableQuantity, |
| | | StockCreateDate = stock.CreateDate, |
| | | StockId = stock.Id, |
| | | OrderDetailId = orderDetail.Id // å
³èå°å
·ä½çåºåºåæç» |
| | | }); |
| | | } |
| | | } |
| | | |
| | | List<string> locationCodes = _locationInfoService.GetCanOutLocationCodes(); |
| | | |
| | | return 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, |
| | | Barcode=b.Barcode, |
| | | PalletCode = a.PalletCode, |
| | | UseableQuantity = b.StockQuantity - b.OutboundQuantity |
| | | }, a => locationCodes.Contains(a.LocationCode), b => b.StockQuantity > b.OutboundQuantity && b.MaterielCode == materielCode, x => true).GroupBy(x => x.PalletCode).Select(x => new StockSelectViewDTO |
| | | { |
| | | LocationCode = x.FirstOrDefault()?.LocationCode ?? "", |
| | | MaterielCode = x.FirstOrDefault()?.MaterielCode ?? "", |
| | | MaterielName = x.FirstOrDefault()?.MaterielName ?? "", |
| | | Barcode=x.FirstOrDefault()?.Barcode??"", |
| | | PalletCode = x.Key, |
| | | UseableQuantity = x.Sum(x => x.UseableQuantity) |
| | | }).ToList(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return null; |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | |
| | | } |
| | | } |