zs
2025-05-12 743c2748dd4e3c2c2a84c7ae930a9cf287453a84
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsOutStockAppService.cs
@@ -1,4 +1,6 @@
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;
@@ -37,7 +39,7 @@
            _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>();
@@ -48,6 +50,7 @@
            {
                throw new UserFriendlyException("一次叫料只能针对同一型号的物料!");
            }
            var callOutput = new List<CallMaterialOutput>();
            foreach (var inputItem in input)
            {
                var order = await _wmsInOutStockOrderRepository.FindByNameAsync(inputItem.OrderNo);
@@ -55,16 +58,25 @@
                {
                    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);
@@ -93,13 +105,22 @@
                            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);
@@ -107,6 +128,8 @@
            await uow.SaveChangesAsync();
            await uow.CompleteAsync();
            return callOutput;
        }
    }
}