| | |
| | | using System; |
| | | using Microsoft.AspNetCore.Http; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | |
| | | using WIDESEA_Core.BaseServices; |
| | | using WIDESEA_Core.Enums; |
| | | using WIDESEA_Core.Helper; |
| | | using WIDESEA_DTO.Outbound; |
| | | using WIDESEA_IRecordService; |
| | | using WIDESEA_IStockService; |
| | | using WIDESEA_Model.Models; |
| | |
| | | _recordService = recordService; |
| | | } |
| | | |
| | | public Dt_OutStockLockInfo GetOutStockLockInfo(Dt_OutboundOrder outboundOrder, Dt_OutboundOrderDetail outboundOrderDetail, Dt_StockInfo outStock, decimal assignQuantity, int? taskNum = null) |
| | | { |
| | | |
| | | Dt_OutStockLockInfo outStockLockInfo = new Dt_OutStockLockInfo() |
| | | { |
| | | PalletCode = outStock.PalletCode, |
| | | AssignQuantity = assignQuantity, |
| | | MaterielCode = outboundOrderDetail.MaterielCode, |
| | | BatchNo = outboundOrderDetail.BatchNo ?? outStock.Details.FirstOrDefault()?.BatchNo, |
| | | LocationCode = outStock.LocationCode, |
| | | MaterielName = outboundOrderDetail.MaterielName, |
| | | OrderDetailId = outboundOrderDetail.Id, |
| | | OrderNo = outboundOrder.OrderNo, |
| | | OrderType = outboundOrder.OrderType, |
| | | |
| | | OriginalQuantity = outStock.Details.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode).Sum(x => x.StockQuantity), |
| | | Status = taskNum == null ? OutLockStockStatusEnum.å·²åé
.ObjToInt() : OutLockStockStatusEnum.åºåºä¸.ObjToInt(), |
| | | StockId = outStock.Id, |
| | | TaskNum = taskNum, |
| | | OrderQuantity = outboundOrderDetail.OrderQuantity, |
| | | Unit = outboundOrderDetail.Unit, |
| | | //ProductionDate = outStock.Details.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode).FirstOrDefault()?.ProductionDate, |
| | | //EffectiveDate = outStock.Details.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode).FirstOrDefault()?.EffectiveDate |
| | | }; |
| | | |
| | | return outStockLockInfo; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å建åºåºéå®ä¿¡æ¯ |
| | | /// å建åºåºéå® |
| | | /// </summary> |
| | | public Dt_OutStockLockInfo GetOutStockLockInfo(Dt_OutboundOrder outboundOrder, Dt_OutboundOrderDetail outboundOrderDetail, Dt_StockInfo outStock, decimal assignQuantity, string barcode = null, int? taskNum = null) |
| | | public Dt_OutStockLockInfo GetOutStockLockInfo( |
| | | Dt_OutboundOrder outboundOrder, |
| | | Dt_OutboundOrderDetail outboundOrderDetail, |
| | | Dt_StockInfo outStock, |
| | | decimal assignQuantity, |
| | | string barcode = null) |
| | | { |
| | | // è·ååºåæç»ä¸çæ¡ç ä¿¡æ¯ï¼å¦ææªæå®æ¡ç ï¼ä½¿ç¨ç¬¬ä¸ä¸ªå¯ç¨æ¡ç ï¼ |
| | | var stockDetails = outStock.Details.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode && x.StockQuantity > x.OutboundQuantity) |
| | | .OrderBy(x => x.ProductionDate).ToList(); |
| | | // è·ååºåæç»ä¿¡æ¯ |
| | | var stockDetails = outStock.Details |
| | | .Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode) |
| | | .ToList(); |
| | | |
| | | if (!stockDetails.Any()) |
| | | { |
| | | throw new Exception($"æªæ¾å°ç©æ[{outboundOrderDetail.MaterielCode}]çå¯ç¨åºåæç»"); |
| | | throw new Exception($"æªæ¾å°ç©æ[{outboundOrderDetail.MaterielCode}]çåºåæç»"); |
| | | } |
| | | |
| | | // ç¡®å®æ¡ç ï¼å¦ææªæå®ï¼ä½¿ç¨ææ©å
¥åºçæ¡ç ï¼ |
| | | var targetBarcode = barcode; |
| | | if (string.IsNullOrEmpty(targetBarcode)) |
| | | // ç¡®å®æ¡ç |
| | | string targetBarcode; |
| | | var firstAvailableDetail=new Dt_StockInfoDetail(); |
| | | if (!string.IsNullOrEmpty(barcode)) |
| | | { |
| | | targetBarcode = stockDetails.First().Barcode; |
| | | // éªè¯æå®çæ¡ç æ¯å¦åå¨ |
| | | firstAvailableDetail = stockDetails.FirstOrDefault(x => x.Barcode == barcode); |
| | | if (firstAvailableDetail == null) |
| | | { |
| | | throw new Exception($"æå®çæ¡ç [{barcode}]å¨åºåä¸ä¸åå¨"); |
| | | } |
| | | |
| | | targetBarcode = barcode; |
| | | } |
| | | // è·å该æ¡ç çå¯ç¨æ°é |
| | | var barcodeDetail = stockDetails.FirstOrDefault(x => x.Barcode == targetBarcode); |
| | | if (barcodeDetail == null) |
| | | else |
| | | { |
| | | throw new Exception($"æ¡ç [{targetBarcode}]å¨åºåä¸ä¸åå¨"); |
| | | // 使ç¨ç¬¬ä¸ä¸ªå¯ç¨æ¡ç |
| | | firstAvailableDetail = stockDetails |
| | | .Where(x => x.StockQuantity > x.OutboundQuantity) |
| | | .OrderBy(x => x.CreateDate) |
| | | .FirstOrDefault(); |
| | | |
| | | if (firstAvailableDetail == null) |
| | | { |
| | | throw new Exception($"ç©æ[{outboundOrderDetail.MaterielCode}]没æå¯ç¨åºå"); |
| | | } |
| | | targetBarcode = firstAvailableDetail.Barcode; |
| | | } |
| | | |
| | | return new Dt_OutStockLockInfo() |
| | | { |
| | | { |
| | | PalletCode = outStock.PalletCode, |
| | | AssignQuantity = assignQuantity, |
| | | MaterielCode = outboundOrderDetail.MaterielCode, |
| | | BatchNo = outboundOrderDetail.BatchNo ?? outStock.Details.FirstOrDefault()?.BatchNo, |
| | | AssignQuantity = assignQuantity, |
| | | LocationCode = outStock.LocationCode, |
| | | MaterielName = outboundOrderDetail.MaterielName, |
| | | OrderDetailId = outboundOrderDetail.Id, |
| | |
| | | OriginalQuantity = outStock.Details |
| | | .Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode) |
| | | .Sum(x => x.StockQuantity), |
| | | Status = taskNum == null ? (int)OutLockStockStatusEnum.å·²åé
: (int)OutLockStockStatusEnum.åºåºä¸, |
| | | StockId = outStock.Id, |
| | | TaskNum = taskNum, |
| | | Unit = outboundOrderDetail.Unit, |
| | | |
| | | |
| | | // æ°å¢å段èµå¼ |
| | | CurrentBarcode = targetBarcode, // å½ååé
çæ¡ç |
| | | OriginalLockQuantity = assignQuantity, // åå§é宿°é |
| | | IsSplitted = 0 // åå§æªæå
|
| | | Status = (int)OutLockStockStatusEnum.å·²åé
, |
| | | StockId = outStock.Id, |
| | | OrderType=outboundOrder.OrderType, |
| | | SupplyCode = firstAvailableDetail.SupplyCode, |
| | | WarehouseCode = firstAvailableDetail.WarehouseCode, |
| | | // æ°å¢å段 |
| | | CurrentBarcode = targetBarcode, |
| | | OriginalLockQuantity = assignQuantity, |
| | | IsSplitted = 0, |
| | | MaterielCode = outboundOrderDetail.MaterielCode, |
| | | BatchNo = firstAvailableDetail.BatchNo, |
| | | Unit = firstAvailableDetail.BarcodeUnit, |
| | | FactoryArea = firstAvailableDetail.FactoryArea, |
| | | lineNo = outboundOrderDetail.lineNo, |
| | | }; |
| | | } |
| | | |
| | | |
| | | public List<Dt_OutStockLockInfo> GetOutStockLockInfos(Dt_OutboundOrder outboundOrder, Dt_OutboundOrderDetail outboundOrderDetail, List<Dt_StockInfo> outStocks, int? taskNum = null) |
| | | { |
| | | List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>(); |
| | | |
| | | foreach (var item in outStocks) |
| | | { |
| | | Dt_OutStockLockInfo outStockLockInfo = new Dt_OutStockLockInfo() |
| | | { |
| | | PalletCode = item.PalletCode, |
| | | AssignQuantity = item.Details.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode).Sum(x => x.OutboundQuantity), |
| | | MaterielCode = outboundOrderDetail.MaterielCode, |
| | | BatchNo = outboundOrderDetail.BatchNo, |
| | | LocationCode = item.LocationCode, |
| | | MaterielName = outboundOrderDetail.MaterielName, |
| | | OrderDetailId = outboundOrderDetail.Id, |
| | | OrderNo = outboundOrder.OrderNo, |
| | | OrderType = outboundOrder.OrderType, |
| | | OriginalQuantity = item.Details.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode).Sum(x => x.StockQuantity), |
| | | Status = taskNum == null ? OutLockStockStatusEnum.å·²åé
.ObjToInt() : OutLockStockStatusEnum.åºåºä¸.ObjToInt(), |
| | | StockId = item.Id, |
| | | TaskNum = taskNum, |
| | | |
| | | |
| | | }; |
| | | outStockLockInfos.Add(outStockLockInfo); |
| | | } |
| | | |
| | | return outStockLockInfos; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | .Where(x => x.OrderDetailId == orderDetailId) |
| | | .OrderBy(x => x.Id) |
| | | .ToListAsync(); |
| | | } |
| | | |
| | | public async Task<LockInfoDetailDto> GetLockInfoDetail(int lockInfoId) |
| | | { |
| | | var lockInfo = await Db.Queryable<Dt_OutStockLockInfo>() |
| | | .LeftJoin<Dt_OutboundOrderDetail>((lockInfo, detail) => lockInfo.OrderDetailId == detail.Id) |
| | | .Where((lockInfo, detail) => lockInfo.Id == lockInfoId) |
| | | .Select((lockInfo, detail) => new LockInfoDetailDto |
| | | { |
| | | Id = lockInfo.Id, |
| | | OrderNo = lockInfo.OrderNo, |
| | | OrderDetailId = lockInfo.OrderDetailId, |
| | | BatchNo = lockInfo.BatchNo, |
| | | MaterielCode = lockInfo.MaterielCode, |
| | | StockId = lockInfo.StockId, |
| | | OrderQuantity = lockInfo.OrderQuantity, |
| | | OriginalQuantity = lockInfo.OriginalQuantity, |
| | | AssignQuantity = lockInfo.AssignQuantity, |
| | | PickedQty = lockInfo.PickedQty, |
| | | LocationCode = lockInfo.LocationCode, |
| | | PalletCode = lockInfo.PalletCode, |
| | | Status = lockInfo.Status, |
| | | IsSplitted = lockInfo.IsSplitted, |
| | | ParentLockId = lockInfo.ParentLockId, |
| | | |
| | | MaterielName = detail.MaterielName, |
| | | Unit = detail.Unit |
| | | }) |
| | | .FirstAsync(); |
| | | |
| | | return lockInfo; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | public List<Dt_OutStockLockInfo> GetByOrderDetailId(int orderDetailId, OutLockStockStatusEnum? outStockStatus) |
| | | { |
| | | return BaseDal.QueryData(x => x.OrderDetailId == orderDetailId ); |
| | | } |
| | | |
| | | } |
| | | } |