From c2bac53ff77d91dfffb4bda9b0bcbf6556fda9a1 Mon Sep 17 00:00:00 2001
From: zs <zhousong@weben-smart.com>
Date: 周二, 20 5月 2025 13:25:23 +0800
Subject: [PATCH] Merge branch 'master' of http://222.71.245.114:9086/r/HIA24016N_PipeLineDemo

---
 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