From aefdecd0aa3226b7d00d1dc764241b82658b3be8 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期五, 06 三月 2026 10:41:02 +0800
Subject: [PATCH] 添加机器人客户端;更新 WCS 缓存及任务

---
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs |   92 +++++++++++++++++++++++++++++-----------------
 1 files changed, 58 insertions(+), 34 deletions(-)

diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
index 2c57b09..4ebcb83 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -21,12 +21,15 @@
 using SqlSugar;
 using System.Diagnostics.CodeAnalysis;
 using System.Text.Json;
+using WIDESEA_Core;
 using WIDESEAWCS_Common.HttpEnum;
 using WIDESEAWCS_Common.TaskEnum;
 using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.BaseServices;
 using WIDESEAWCS_Core.Enums;
+using WIDESEAWCS_Core.Helper;
 using WIDESEAWCS_Core.Http;
+using WIDESEAWCS_DTO.Stock;
 using WIDESEAWCS_DTO.TaskInfo;
 using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_ITaskInfoService;
@@ -42,6 +45,7 @@
         private readonly ITaskExecuteDetailService _taskExecuteDetailService;
         private readonly ITaskExecuteDetailRepository _taskExecuteDetailRepository;
         private readonly IMapper _mapper;
+        private readonly HttpClientHelper _httpClientHelper;
 
         private Dictionary<string, OrderByType> _taskOrderBy = new()
             {
@@ -58,12 +62,13 @@
 
         public List<int> TaskRobotTypes => typeof(TaskOtherTypeEnum).GetEnumIndexList();
 
-        public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper) : base(BaseDal)
+        public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, HttpClientHelper httpClientHelper) : base(BaseDal)
         {
             _routerService = routerService;
             _taskExecuteDetailService = taskExecuteDetailService;
             _taskExecuteDetailRepository = taskExecuteDetailRepository;
             _mapper = mapper;
+            _httpClientHelper = httpClientHelper;
         }
 
         /// <summary>
@@ -98,13 +103,13 @@
                     }
                     else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                     {
-                        List<Dt_Router> routers = _routerService.QueryNextRoutes(item.SourceAddress, item.TargetAddress);
+                        Dt_Router routers = _routerService.QueryNextRoute(item.SourceAddress);
                         //鏆備笉鑰冭檻澶氳矾寰�
-                        if (routers.Count > 0)
+                        if (!routers.IsNullOrEmpty())
                         {
                             task.TaskState = (int)TaskInStatusEnum.InNew;
                             task.CurrentAddress = item.SourceAddress;
-                            task.NextAddress = routers.FirstOrDefault().ChildPosi;
+                            task.NextAddress = routers.ChildPosi;
                         }
                     }
                     tasks.Add(task);
@@ -113,7 +118,7 @@
 
                 _taskExecuteDetailService.AddTaskExecuteDetail(tasks.Select(x => x.TaskNum).ToList(), "鎺ユ敹WMS浠诲姟");
 
-                content = WebResponseContent.Instance.OK("鎴愬姛");
+                content = WebResponseContent.Instance.OK("鎴愬姛", tasks);
             }
             catch (Exception ex)
             {
@@ -174,6 +179,9 @@
         /// <returns></returns>
         public Dt_Task QueryExecutingConveyorLineTask(int taskNum, string nextAddress)
         {
+            if (string.IsNullOrEmpty(nextAddress))
+                throw new ArgumentNullException(nameof(nextAddress), "涓嬩竴鍦板潃涓嶈兘涓虹┖");
+
             return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.NextAddress == nextAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting), TaskOrderBy);
         }
 
@@ -185,6 +193,9 @@
         /// <returns></returns>
         public Dt_Task QueryCompletedConveyorLineTask(int taskNum, string currentAddress)
         {
+            if (string.IsNullOrEmpty(currentAddress))
+                throw new ArgumentNullException(nameof(currentAddress), "褰撳墠鍦板潃涓嶈兘涓虹┖");
+
             return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InFinish || x.TaskState == (int)TaskOutStatusEnum.Line_OutFinish), TaskOrderBy);
         }
 
@@ -268,6 +279,9 @@
             WebResponseContent content = new WebResponseContent();
             try
             {
+                if (string.IsNullOrEmpty(message))
+                    throw new ArgumentNullException(nameof(message), "寮傚父淇℃伅涓嶈兘涓虹┖");
+
                 Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                 if (task == null) return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅,浠诲姟鍙�:銆恵taskNum}銆�");
                 if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
@@ -361,28 +375,19 @@
 
                     if (task.TaskState == (int)TaskInStatusEnum.Line_InFinish)
                     {
-                        //Random random = new Random();
-                        //task.CurrentAddress = task.NextAddress;
-                        //task.NextAddress = $"{random.Next(1, 100).ToString().PadLeft(3, '0')}-{random.Next(1, 100).ToString().PadLeft(3, '0')}-{random.Next(1, 100).ToString().PadLeft(3, '0')}";
-                        //task.TargetAddress = task.NextAddress;
-
                         // 璋冪敤WMS绯荤粺鎺ュ彛锛岃幏鍙栨渶缁堢洰鏍囧湴鍧�
                         CreateTaskDto taskDto = new CreateTaskDto()
                         {
-                            Roadway = task.TargetAddress,
                             PalletCode = task.PalletCode,
-                            SourceAddress = task.SourceAddress,
-                            // 鐩爣鍦板潃寰呭畾
-                            TargetAddress = "CLOutAreaA",
-                            TaskType = task.TaskType,
                         };
-                        content = HttpRequestHelper.HTTPPostAsync(nameof(Category.WMS), taskDto.ToString(), nameof(ConfigKey.GetTasksLocation)).Result;
-                        if (!content.Status)
+
+                        var result = _httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.GetTasksLocation), taskDto.ToJson(), nameof(ConfigKey.GetTasksLocation));
+                        if (!result.IsSuccess && !result.Data.Status)
                         {
                             return WebResponseContent.Instance.Error($"璋冪敤WMS鎺ュ彛鑾峰彇浠诲姟鐩爣鍦板潃澶辫触,浠诲姟鍙�:銆恵task.TaskNum}銆�,閿欒淇℃伅:銆恵content.Message}銆�");
                         }
 
-                        string wmsTargetAddress = content.Data?.ToString() ?? string.Empty;
+                        string wmsTargetAddress = result.Data.Data?.ToString() ?? string.Empty;
                         if (string.IsNullOrEmpty(wmsTargetAddress))
                         {
                             return WebResponseContent.Instance.Error($"璋冪敤WMS鎺ュ彛鑾峰彇浠诲姟鐩爣鍦板潃澶辫触,浠诲姟鍙�:銆恵task.TaskNum}銆�,閿欒淇℃伅:銆愭湭鑾峰彇鍒版湁鏁堢殑鐩爣鍦板潃銆�");
@@ -391,6 +396,14 @@
                         task.NextAddress = wmsTargetAddress;
                         task.TargetAddress = wmsTargetAddress;
                         task.CurrentAddress = task.NextAddress;
+                    }
+                    else
+                    {
+                        //_httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.GetTasksLocation), taskDto.ToJson(), nameof(ConfigKey.GetTasksLocation));
+                        //if (!result.IsSuccess && !result.Data.Status)
+                        //{
+                        //    return WebResponseContent.Instance.Error($"璋冪敤WMS鎺ュ彛鑾峰彇浠诲姟鐩爣鍦板潃澶辫触,浠诲姟鍙�:銆恵task.TaskNum}銆�,閿欒淇℃伅:銆恵content.Message}銆�");
+                        //}
                     }
                 }
                 else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OtherGroup)
@@ -439,6 +452,9 @@
         {
             try
             {
+                if (string.IsNullOrEmpty(currentAddress))
+                    throw new ArgumentNullException(nameof(currentAddress), "褰撳墠鍦板潃涓嶈兘涓虹┖");
+
                 Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress);
                 if (task == null) throw new Exception($"鏈壘鍒拌浠诲姟淇℃伅,浠诲姟鍙�:銆恵taskNum}銆�");
 
@@ -460,6 +476,7 @@
             }
             catch (Exception ex)
             {
+                Console.WriteLine($"UpdatePosition 鏇存柊浠诲姟浣嶇疆澶辫触,浠诲姟鍙�:銆恵taskNum}銆�,閿欒淇℃伅:銆恵ex.Message}銆�");
             }
             return null;
         }
@@ -491,13 +508,20 @@
                     BaseDal.UpdateData(task);
 
                     _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄嚭搴撳畬鎴�");
-                    //todo 鍚屾鍒癢MS
 
-                    //鏆備笉鑰冭檻澶氫釜鍑哄簱鍙�
+                    var result = _httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.OutboundFinishTaskAsync), (new StockInfoDTO() { PalletCode = task.PalletCode, TaskNum = task.TaskNum }).ToJson());
+                    if (result.IsSuccess && result.Data.Status)
+                    {
+                        return content.Error($"閫氱煡WMS绯荤粺鍫嗗灈鏈哄嚭搴撳畬鎴愭垚鍔�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�");
+
+                    }
+                    else
+                    {
+                        return content.Error($"閫氱煡WMS绯荤粺鍫嗗灈鏈哄嚭搴撳畬鎴愬け璐�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�,閿欒淇℃伅:銆恵result.Data.Message}銆�");
+                    }
                 }
                 else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting)
                 {
-                    //todo
                     int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
                     task.TaskState = nextStatus;
                     task.ModifyDate = DateTime.Now;
@@ -505,20 +529,20 @@
                     BaseDal.UpdateData(task);
                     _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄叆搴撳畬鎴�");
 
-                    WMSTaskDTO taskDTO = new WMSTaskDTO()
-                    {
-                        TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
-                        Grade = 1,
-                        PalletCode = task.PalletCode + "S",
-                        RoadWay = "SC01",
-                        SourceAddress = task.TargetAddress,
-                        TargetAddress = "CLOutAreaA",
-                        TaskState = (int)TaskOutStatusEnum.OutNew,
-                        Id = 0,
-                        TaskType = (int)TaskOutboundTypeEnum.Outbound
-                    };
 
-                    content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
+                    var result = _httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.InboundFinishTaskAsync), (new CreateTaskDto()
+                    {
+                        PalletCode = task.PalletCode,
+                    }).ToJson());
+
+                    if (result.IsSuccess && result.Data.Status)
+                    {
+                        return content.Error($"閫氱煡WMS绯荤粺鍫嗗灈鏈哄叆搴撳畬鎴愭垚鍔�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�");
+                    }
+                    else
+                    {
+                        return content.Error($"閫氱煡WMS绯荤粺鍫嗗灈鏈哄叆搴撳畬鎴愬け璐�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�,閿欒淇℃伅:銆恵result.Data.Message}銆�");
+                    }
                 }
                 else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
                 {

--
Gitblit v1.9.3