From cfc40ec33d286b9bf6106d32f20ee3e9533ed026 Mon Sep 17 00:00:00 2001 From: schangxiang@126.com <schangxiang@126.com> Date: 周五, 16 5月 2025 16:30:57 +0800 Subject: [PATCH] 22 --- HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsOutStockAppService.cs | 136 ++++++++++++++++++++++++++++----------------- 1 files changed, 85 insertions(+), 51 deletions(-) diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsOutStockAppService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsOutStockAppService.cs index 1c95d67..6e98af0 100644 --- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsOutStockAppService.cs +++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsOutStockAppService.cs @@ -1,4 +1,6 @@ -锘縰sing CMS.Plugin.HIAWms.Application.Contracts.Dtos.OutStockDto; +锘縰sing 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; @@ -25,8 +27,8 @@ 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 ) { @@ -37,68 +39,100 @@ _serviceProvider = serviceProvider; } - public async Task CallMaterial(CallMaterialInput input) + public async Task<List<CallMaterialOutput>> 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) + var callOutput = new List<CallMaterialOutput>(); + 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++) + if (inputItem.MaterialNumber <= 0) { - 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("鍙枡鏁伴噺蹇呴』澶т簬0"); } + if (!inputItem.IgnoreOrder) + { + var order = await _wmsInOutStockOrderRepository.FindByNameAsync(inputItem.OrderNo); + if (order == null) + { + throw new UserFriendlyException("鍑哄簱鍗曟嵁涓嶅瓨鍦�"); + } + if (order.OrderType == OrderTypeEnum.SelfMadeParts || order.OrderType == OrderTypeEnum.PERSONIN) + { + throw new UserFriendlyException("鍏ュ簱鍗曚笉鍏佽鍙枡"); + } + 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); + } + + 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 = inputItem.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 _wmsTaskRepository.InsertManyAsync(taskList); await uow.SaveChangesAsync(); await uow.CompleteAsync(); + + return callOutput; } } } -- Gitblit v1.9.3