| | |
| | | _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); |
| | | var distinctModels = input.Select(x => x.MaterialModel).Distinct().ToList(); |
| | | if (distinctModels.Count > 1) |
| | | { |
| | | throw new UserFriendlyException("一次叫料只能针对同一型号的物料!"); |
| | | } |
| | | foreach (var inputItem in input) |
| | | { |
| | | var order = await _wmsInOutStockOrderRepository.FindByNameAsync(inputItem.OrderNo); |
| | | if(order == null) |
| | | { |
| | | throw new UserFriendlyException("出库单据不存在"); |
| | | } |
| | | if(input.MaterialNumber <=0) |
| | | if (inputItem.MaterialNumber <= 0) |
| | | { |
| | | throw new UserFriendlyException("叫料数量必须大于0"); |
| | | } |
| | | if(order.MaterialNumber< input.MaterialNumber) |
| | | if (order.MaterialNumber < inputItem.MaterialNumber) |
| | | { |
| | | throw new UserFriendlyException("叫料数量不能大于单据数量"); |
| | | } |
| | | order.OrderStatus = OrderStatusEnum.Executing; |
| | | order.DistributeNumber = input.MaterialNumber; |
| | | order.DistributeNumber = inputItem.MaterialNumber; |
| | | |
| | | await _wmsInOutStockOrderRepository.UpdateAsync(order); |
| | | |
| | | var stockresult = await _wmsCommonAppService.FindStockAsync(input.MaterialModel, input.MaterialNumber); |
| | | var stockresult = await _wmsCommonAppService.FindStockAsync(inputItem.MaterialModel, inputItem.MaterialNumber); |
| | | if(stockresult == null) |
| | | { |
| | | throw new UserFriendlyException("当前无库存"); |
| | |
| | | SourcePlace = stock.PlaceNo, |
| | | ToPlace = "201",// place.PlaceNo, |
| | | TaskType = TaskTypeEnum.CHUKU, |
| | | SonTaskType = input.OrderType == OrderTypeEnum.PRODUCTCALL ? SonTaskTypeEnum.ZDCHUKU : SonTaskTypeEnum.RGRUKU, |
| | | SonTaskType = inputItem.OrderType == OrderTypeEnum.PRODUCTCALL ? SonTaskTypeEnum.ZDCHUKU : SonTaskTypeEnum.RGRUKU, |
| | | TaskStatus = WmsTaskStatus.WEIZHIXING, |
| | | TaskLevel = 999, |
| | | TaskLevel = order.Priority, |
| | | Aisle = 1, |
| | | DodeviceId = 0, |
| | | TaskDodeviceStatus = TaskDodeviceStatus.SrmNoStart, |
| | | IsNextTask = (int)YesNoEnum.Y, |
| | | IsRead = true, |
| | | SourceOrderNo = input.OrderNo, |
| | | MutableParam1 = input.MaterialModel, |
| | | SourceOrderNo = inputItem.OrderNo, |
| | | MutableParam1 = inputItem.MaterialModel, |
| | | }; |
| | | taskList.Add(task); |
| | | } |
| | | } |
| | | await _wmsTaskRepository.InsertManyAsync(taskList); |
| | | } |
| | | |
| | | await uow.SaveChangesAsync(); |
| | | await uow.CompleteAsync(); |