| | |
| | | private readonly IWmsTaskRepository _wmsTaskRepository; |
| | | private readonly IWmsInOutStockOrderRepository _wmsInOutStockOrderRepository; |
| | | private readonly IServiceProvider _serviceProvider; |
| | | public WmsOutStockAppService(IWmsMaterialStockRepository wmsMaterialStockRepository, |
| | | IWmsCommonAppService wmsCommonAppService, IWmsTaskRepository wmsTaskRepository, |
| | | public WmsOutStockAppService(IWmsMaterialStockRepository wmsMaterialStockRepository, |
| | | IWmsCommonAppService wmsCommonAppService, IWmsTaskRepository wmsTaskRepository, |
| | | IWmsInOutStockOrderRepository wmsInOutStockOrderRepository, IServiceProvider serviceProvider |
| | | ) |
| | | { |
| | |
| | | _serviceProvider = serviceProvider; |
| | | } |
| | | |
| | | public async Task CallMaterial(CallMaterialInput input) |
| | | public async Task CallMaterialAsync(List<CallMaterialInput> input) |
| | | { |
| | | using var scope = _serviceProvider.CreateScope(); |
| | | var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>(); |
| | | using var uow = unitOfWorkManager.Begin(requiresNew: true); |
| | | |
| | | var order = await _wmsInOutStockOrderRepository.FindByNameAsync(input.OrderNo); |
| | | if(order == null) |
| | | var distinctModels = input.Select(x => x.MaterialModel).Distinct().ToList(); |
| | | if (distinctModels.Count > 1) |
| | | { |
| | | throw new UserFriendlyException("出库单据不存在"); |
| | | throw new UserFriendlyException("一次叫料只能针对同一型号的物料!"); |
| | | } |
| | | if(input.MaterialNumber <=0) |
| | | foreach (var inputItem in input) |
| | | { |
| | | throw new UserFriendlyException("叫料数量必须大于0"); |
| | | } |
| | | if(order.MaterialNumber< input.MaterialNumber) |
| | | { |
| | | throw new UserFriendlyException("叫料数量不能大于单据数量"); |
| | | } |
| | | order.OrderStatus = OrderStatusEnum.Executing; |
| | | order.DistributeNumber = input.MaterialNumber; |
| | | |
| | | await _wmsInOutStockOrderRepository.UpdateAsync(order); |
| | | |
| | | var stockresult = await _wmsCommonAppService.FindStockAsync(input.MaterialModel, input.MaterialNumber); |
| | | if(stockresult == null) |
| | | { |
| | | throw new UserFriendlyException("当前无库存"); |
| | | } |
| | | var taskList = new List<WmsTask>(); |
| | | foreach (var kvp in stockresult) |
| | | { |
| | | var stock = kvp.Key; // WmsPlace对象 |
| | | var quantity = kvp.Value; // 分配数量 |
| | | |
| | | for (int i = 0; i < quantity; i++) |
| | | var order = await _wmsInOutStockOrderRepository.FindByNameAsync(inputItem.OrderNo); |
| | | if (order == null) |
| | | { |
| | | var task = new WmsTask |
| | | { |
| | | TaskNo = $"CK_{DateTime.Now:yyyyMMddHHmmss}_{Guid.NewGuid().ToString("N").Substring(0, 6)}", |
| | | ContainerNo = stock.ContainerNo, |
| | | SourcePlace = stock.PlaceNo, |
| | | ToPlace = "201",// place.PlaceNo, |
| | | TaskType = TaskTypeEnum.CHUKU, |
| | | SonTaskType = input.OrderType == OrderTypeEnum.PRODUCTCALL ? SonTaskTypeEnum.ZDCHUKU : SonTaskTypeEnum.RGRUKU, |
| | | TaskStatus = WmsTaskStatus.WEIZHIXING, |
| | | TaskLevel = 999, |
| | | Aisle = 1, |
| | | DodeviceId = 0, |
| | | TaskDodeviceStatus = TaskDodeviceStatus.SrmNoStart, |
| | | IsNextTask = (int)YesNoEnum.Y, |
| | | IsRead = true, |
| | | SourceOrderNo = input.OrderNo, |
| | | MutableParam1 = input.MaterialModel, |
| | | }; |
| | | taskList.Add(task); |
| | | throw new UserFriendlyException("出库单据不存在"); |
| | | } |
| | | if (inputItem.MaterialNumber <= 0) |
| | | { |
| | | throw new UserFriendlyException("叫料数量必须大于0"); |
| | | } |
| | | if (order.MaterialNumber < inputItem.MaterialNumber) |
| | | { |
| | | throw new UserFriendlyException("叫料数量不能大于单据数量"); |
| | | } |
| | | order.OrderStatus = OrderStatusEnum.Executing; |
| | | order.DistributeNumber = inputItem.MaterialNumber; |
| | | |
| | | await _wmsInOutStockOrderRepository.UpdateAsync(order); |
| | | |
| | | var stockresult = await _wmsCommonAppService.FindStockAsync(inputItem.MaterialModel, inputItem.MaterialNumber); |
| | | if (stockresult == null) |
| | | { |
| | | throw new UserFriendlyException("当前无库存"); |
| | | } |
| | | var taskList = new List<WmsTask>(); |
| | | foreach (var kvp in stockresult) |
| | | { |
| | | var stock = kvp.Key; // WmsPlace对象 |
| | | var quantity = kvp.Value; // 分配数量 |
| | | |
| | | for (int i = 0; i < quantity; i++) |
| | | { |
| | | var task = new WmsTask |
| | | { |
| | | TaskNo = $"CK_{DateTime.Now:yyyyMMddHHmmss}_{Guid.NewGuid().ToString("N").Substring(0, 6)}", |
| | | ContainerNo = stock.ContainerNo, |
| | | SourcePlace = stock.PlaceNo, |
| | | ToPlace = "201",// place.PlaceNo, |
| | | TaskType = TaskTypeEnum.CHUKU, |
| | | SonTaskType = inputItem.OrderType == OrderTypeEnum.PRODUCTCALL ? SonTaskTypeEnum.ZDCHUKU : SonTaskTypeEnum.RGRUKU, |
| | | TaskStatus = WmsTaskStatus.WEIZHIXING, |
| | | TaskLevel = order.Priority, |
| | | Aisle = 1, |
| | | DodeviceId = 0, |
| | | TaskDodeviceStatus = TaskDodeviceStatus.SrmNoStart, |
| | | IsNextTask = (int)YesNoEnum.Y, |
| | | IsRead = true, |
| | | SourceOrderNo = inputItem.OrderNo, |
| | | MutableParam1 = inputItem.MaterialModel, |
| | | }; |
| | | taskList.Add(task); |
| | | } |
| | | } |
| | | await _wmsTaskRepository.InsertManyAsync(taskList); |
| | | } |
| | | await _wmsTaskRepository.InsertManyAsync(taskList); |
| | | |
| | | await uow.SaveChangesAsync(); |
| | | await uow.CompleteAsync(); |