| | |
| | | using CMS.Plugin.HIAWms.Application.Contracts.Dtos.OutStockDto; |
| | | using CMS.Plugin.HIAWms.Application.Contracts.Dtos.CommonDto; |
| | | using CMS.Plugin.HIAWms.Application.Contracts.Dtos.OutStockDto; |
| | | using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks; |
| | | using CMS.Plugin.HIAWms.Application.Contracts.Services; |
| | | using CMS.Plugin.HIAWms.Domain.Shared.Enums; |
| | | using CMS.Plugin.HIAWms.Domain.WmsInOutStockOrder; |
| | |
| | | _serviceProvider = serviceProvider; |
| | | } |
| | | |
| | | public async Task CallMaterialAsync(List<CallMaterialInput> input) |
| | | public async Task<List<CallMaterialOutput>>CallMaterialAsync(List<CallMaterialInput> input) |
| | | { |
| | | using var scope = _serviceProvider.CreateScope(); |
| | | var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>(); |
| | |
| | | { |
| | | throw new UserFriendlyException("一次叫料只能针对同一型号的物料!"); |
| | | } |
| | | var callOutput = new List<CallMaterialOutput>(); |
| | | foreach (var inputItem in input) |
| | | { |
| | | var order = await _wmsInOutStockOrderRepository.FindByNameAsync(inputItem.OrderNo); |
| | |
| | | { |
| | | throw new UserFriendlyException("出库单据不存在"); |
| | | } |
| | | if(order.OrderType == OrderTypeEnum.SelfMadeParts || order.OrderType == OrderTypeEnum.PERSONIN) |
| | | { |
| | | throw new UserFriendlyException("入库单不允许叫料"); |
| | | } |
| | | if (inputItem.MaterialNumber <= 0) |
| | | { |
| | | throw new UserFriendlyException("叫料数量必须大于0"); |
| | | } |
| | | if (order.MaterialNumber < inputItem.MaterialNumber) |
| | | if(order.OrderStatus == OrderStatusEnum.Finish) |
| | | { |
| | | throw new UserFriendlyException("已完成单据不允许叫料"); |
| | | } |
| | | if (order.MaterialNumber < inputItem.MaterialNumber+order.DistributeNumber) |
| | | { |
| | | throw new UserFriendlyException("叫料数量不能大于单据数量"); |
| | | } |
| | | order.OrderStatus = OrderStatusEnum.Executing; |
| | | order.DistributeNumber = inputItem.MaterialNumber; |
| | | order.OperateTime = DateTime.Now; |
| | | |
| | | await _wmsInOutStockOrderRepository.UpdateAsync(order); |
| | | |
| | |
| | | TaskLevel = order.Priority, |
| | | Aisle = 1, |
| | | DodeviceId = 0, |
| | | Dodevicetype = DodevicetypeEnum.Srm, |
| | | TaskDodeviceStatus = TaskDodeviceStatus.SrmNoStart, |
| | | IsNextTask = (int)YesNoEnum.Y, |
| | | IsRead = true, |
| | | PlcTaskId = new Random(Guid.NewGuid().GetHashCode()).Next(101, 99999), |
| | | SourceOrderNo = inputItem.OrderNo, |
| | | MutableParam1 = inputItem.MaterialModel, |
| | | MutableParam2 = inputItem.DataIdentifier |
| | | }; |
| | | taskList.Add(task); |
| | | |
| | | var output = ObjectMapper.Map<WmsMaterialStockDto, CallMaterialOutput>(stock); |
| | | output.TaskNo = task.TaskNo; |
| | | output.PlcTaskId = task.PlcTaskId; |
| | | output.SourceOrderNo = task.SourceOrderNo; |
| | | callOutput.Add(output); |
| | | } |
| | | } |
| | | await _wmsTaskRepository.InsertManyAsync(taskList); |
| | |
| | | |
| | | await uow.SaveChangesAsync(); |
| | | await uow.CompleteAsync(); |
| | | |
| | | return callOutput; |
| | | } |
| | | } |
| | | } |