From da5d613a85d97ecd826e343eae6d901806120a05 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期三, 18 三月 2026 14:18:36 +0800
Subject: [PATCH] fix: 修复输送线目标地址选择器并完善机械手任务地址映射

---
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs |  205 +++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 181 insertions(+), 24 deletions(-)

diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
index c0645bf..adc48a7 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -18,10 +18,12 @@
 #endregion << 鐗� 鏈� 娉� 閲� >>
 
 using MapsterMapper;
+using Microsoft.Extensions.Configuration;
+using Microsoft.IdentityModel.Tokens;
 using Newtonsoft.Json;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
 using SqlSugar;
 using System.Diagnostics.CodeAnalysis;
-using System.Text.Json;
 using WIDESEA_Core;
 using WIDESEAWCS_Common.HttpEnum;
 using WIDESEAWCS_Common.TaskEnum;
@@ -29,13 +31,15 @@
 using WIDESEAWCS_Core.BaseServices;
 using WIDESEAWCS_Core.Enums;
 using WIDESEAWCS_Core.Helper;
-using WIDESEAWCS_Core.Http;
 using WIDESEAWCS_DTO;
 using WIDESEAWCS_DTO.Stock;
 using WIDESEAWCS_DTO.TaskInfo;
 using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_ITaskInfoService;
 using WIDESEAWCS_Model.Models;
+using WIDESEAWCS_QuartzJob;
+using WIDESEAWCS_QuartzJob.DeviceBase;
+using WIDESEAWCS_QuartzJob.DTO;
 using WIDESEAWCS_QuartzJob.Models;
 using WIDESEAWCS_QuartzJob.Service;
 
@@ -48,6 +52,7 @@
         private readonly ITaskExecuteDetailRepository _taskExecuteDetailRepository;
         private readonly IMapper _mapper;
         private readonly HttpClientHelper _httpClientHelper;
+        private readonly IRobotTaskService _robotTaskService;
 
         private Dictionary<string, OrderByType> _taskOrderBy = new()
             {
@@ -66,13 +71,14 @@
 
         public List<int> TaskRobotTypes => typeof(TaskOtherTypeEnum).GetEnumIndexList();
 
-        public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, HttpClientHelper httpClientHelper) : base(BaseDal)
+        public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, HttpClientHelper httpClientHelper, IRobotTaskService robotTaskService) : base(BaseDal)
         {
             _routerService = routerService;
             _taskExecuteDetailService = taskExecuteDetailService;
             _taskExecuteDetailRepository = taskExecuteDetailRepository;
             _mapper = mapper;
             _httpClientHelper = httpClientHelper;
+            _robotTaskService = robotTaskService;
         }
 
         /// <summary>
@@ -96,9 +102,16 @@
                     task.Creater = "WMS";
                     if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                     {
-                        Dt_Router router = _routerService.QueryNextRoute(item.RoadWay, item.TargetAddress,item.TaskType);
+                        int taskType = 0;
+                        if (task.TaskType == (int)TaskOutboundTypeEnum.OutEmpty)
+                        {
+                            taskType = 100;
+                        }
+                        else
+                            taskType = task.TaskType;
+                        Dt_Router router = _routerService.QueryNextRoute(item.Roadway, item.TargetAddress, taskType);
                         //鏆備笉鑰冭檻澶氳矾寰�
-                        if (router !=null )
+                        if (router != null)
                         {
                             task.TaskStatus = (int)TaskOutStatusEnum.OutNew;
                             task.CurrentAddress = item.SourceAddress;
@@ -147,7 +160,7 @@
                     TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
                     Grade = 1,
                     PalletCode = palletCode,
-                    RoadWay = "SC01",
+                    Roadway = "SC01",
                     SourceAddress = sourceAddress,
                     TargetAddress = "SC01",
                     TaskState = (int)TaskInStatusEnum.InNew,
@@ -369,7 +382,14 @@
             // 鏇存柊浠诲姟鏁版嵁
             task.ModifyDate = DateTime.Now;
             task.Modifier = "System";
-            BaseDal.UpdateData(task);
+            if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutFinish)
+            {
+                BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.鑷姩鍒犻櫎);
+            }
+            else
+            {
+                BaseDal.UpdateData(task);
+            }
 
             // 璁板綍浠诲姟鎵ц璇︽儏
             string logMessage = App.User.UserId > 0
@@ -394,14 +414,20 @@
                 return WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙烦杞埌涓嬩竴姝�,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskStatus}銆�");
 
             // 鏍规嵁鐘舵�佽皟鐢ㄤ笉鍚岀殑WMS鎺ュ彛
-            if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutFinish)
+            if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutFinish && task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
             {
-                return NotifyWMSOutboundFinish(task);
+                return GetWMSOutboundTrayTask(task);
+            }
+            else if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutFinish && task.TaskType == (int)TaskOutboundTypeEnum.OutEmpty)
+            {
+                return _robotTaskService.GetWMSRobotTask(task);
             }
             else
             {
-                // return UpdateWMSTaskStatus(task);
-                return WebResponseContent.Instance.OK();
+                if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutExecuting)
+                    return WebResponseContent.Instance.OK();
+                else
+                    return UpdateWMSTaskStatus(task);
             }
         }
 
@@ -489,6 +515,34 @@
         }
 
         /// <summary>
+        /// 鑾峰彇绌烘墭鍑哄簱浠诲姟
+        /// </summary>
+        private WebResponseContent GetWMSOutboundTrayTask(Dt_Task task)
+        {
+            var targetAddress = task.TargetAddress;
+            var warehouseId = _robotTaskService.MapWarehouseIdConfigKey(task.TargetAddress);
+            string sourceLineNo = _robotTaskService.ResolveRobotRuleValue(targetAddress, "AddressSourceLineNoMap", task.TargetAddress);
+
+            var result = _httpClientHelper.Post<WebResponseContent>(
+                nameof(ConfigKey.GetOutBoundTrayTaskAsync),
+                new CreateTaskDto { WarehouseId = warehouseId, TargetAddress = sourceLineNo }.ToJson());
+
+            if (!result.IsSuccess || !result.Data.Status)
+                return WebResponseContent.Instance.Error($"鑾峰彇WMS绯荤粺绌烘墭鐩樺嚭搴撲换鍔″け璐�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�,閿欒淇℃伅:銆恵result.Data?.Message}銆�");
+
+            var wMSTask = JsonConvert.DeserializeObject<WMSTaskDTO>(result.Data.Data?.ToString() ?? string.Empty);
+
+            var tasks = new List<WMSTaskDTO>
+            {
+                wMSTask
+            };
+
+            return ReceiveWMSTask(tasks);
+        }
+
+       
+
+        /// <summary>
         /// 浠嶹MS绯荤粺鑾峰彇鍏ュ簱鐩爣鍦板潃
         /// </summary>
         private WebResponseContent GetWMSInboundLocation(Dt_Task task)
@@ -568,7 +622,8 @@
                 string oldCurrentPos = task.CurrentAddress;
                 string oldNextPos = task.NextAddress;
 
-                Dt_Router routers = _routerService.QueryNextRoute(task.CurrentAddress);
+
+                Dt_Router routers = _routerService.QueryNextRoute(oldNextPos, task.TargetAddress);
                 if (routers == null) throw new Exception($"鏈壘鍒拌澶囪矾鐢变俊鎭�");
 
                 task.CurrentAddress = task.NextAddress;
@@ -603,29 +658,45 @@
 
                 if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskStatus == (int)TaskOutStatusEnum.SC_OutExecuting)
                 {
-                    List<Dt_Router> routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress);
-                    if (!routers.Any()) return WebResponseContent.Instance.Error($"鏈壘鍒拌澶囪矾鐢变俊鎭�");
+                    int taskType = 0;
+                    if (task.TaskType == (int)TaskOutboundTypeEnum.OutEmpty)
+                    {
+                        taskType = 100;
+                    }
+                    else
+                        taskType = task.TaskType;
+                    Dt_Router router = _routerService.QueryNextRoute(task.NextAddress, task.TargetAddress, taskType);
+                    if (router == null) return WebResponseContent.Instance.Error($"鏈壘鍒拌澶囪矾鐢变俊鎭�");
 
                     int nextStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskOutStatusEnum>();
                     task.TaskStatus = nextStatus;
                     task.CurrentAddress = task.NextAddress;
-                    task.NextAddress = routers.FirstOrDefault().ChildPosi;
+                    task.NextAddress = router.ChildPosi;
                     task.ModifyDate = DateTime.Now;
                     task.Modifier = "System";
 
-                    var result = _httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.OutboundFinishTaskAsync), (new StockInfoDTO() { PalletCode = task.PalletCode, TaskNum = task.TaskNum }).ToJson());
-                    if (result.IsSuccess && result.Data.Status)
+                    content = NotifyWMSOutboundFinish(task);
+                    if (content.Status)
                     {
                         BaseDal.UpdateData(task);
 
                         _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄嚭搴撳畬鎴�");
                         return content.Error($"閫氱煡WMS绯荤粺鍫嗗灈鏈哄嚭搴撳畬鎴愭垚鍔�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�");
+                    }
 
-                    }
-                    else
-                    {
-                        return content.Error($"閫氱煡WMS绯荤粺鍫嗗灈鏈哄嚭搴撳畬鎴愬け璐�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�,閿欒淇℃伅:銆恵result.Data.Message}銆�");
-                    }
+                    //var result = _httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.OutboundFinishTaskAsync), (new StockInfoDTO() { PalletCode = task.PalletCode, TaskNum = task.TaskNum }).ToJson());
+                    //if (result.IsSuccess && result.Data.Status)
+                    //{
+                    //    BaseDal.UpdateData(task);
+
+                    //    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄嚭搴撳畬鎴�");
+                    //    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.TaskStatus == (int)TaskInStatusEnum.SC_InExecuting)
                 {
@@ -633,8 +704,6 @@
                     task.TaskStatus = nextStatus;
                     task.ModifyDate = DateTime.Now;
                     task.Modifier = "System";
-
-
 
                     var result = _httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.InboundFinishTaskAsync), (new CreateTaskDto()
                     {
@@ -817,4 +886,92 @@
             return BaseDal.QueryFirst(x => x.TaskNum == taskNum);
         }
     }
+
+    public enum ConveyorLineDBNameNew
+    {
+        Barcode
+    }
+    public class ConveyorLineTaskCommandNew : DeviceCommand
+    {
+        /// <summary>
+        /// 浠诲姟鍙�
+        /// </summary>
+        public short TaskNo { get; set; }
+
+        /// <summary>
+        /// 婧愪綅缃� 寮�濮嬪湴鍧�
+        /// </summary>
+        public short Source { get; set; }
+
+        /// <summary>
+        /// 鐩爣浣嶇疆
+        /// </summary>
+        public short Target { get; set; }
+
+        /// <summary>
+        /// 绠卞瀷
+        /// </summary>
+        public byte BoxType { get; set; }
+
+        /// <summary>
+        /// 杈撻�佺嚎鐘舵�� 璁惧绌洪棽鐘舵��
+        /// </summary>
+        public byte CV_State { get; set; }
+
+        /// <summary>
+        /// 杈撻�佺嚎閿欒浠g爜
+        /// </summary>
+        public byte CV_ERRCode { get; set; }
+
+        /// <summary>
+        /// WCS灏辩华鏍囧織 WCS涓嬪彂瀹屾垚鏃讹紝瑙﹀彂涓�1
+        /// </summary>
+        public byte WCS_STB { get; set; }
+
+        /// <summary>
+        /// WCS搴旂瓟鏍囧織 WCS鏀跺埌瀹屾垚鏃讹紝瑙﹀彂涓�1
+        /// </summary>
+        public byte WCS_ACK { get; set; }
+
+        /// <summary>
+        /// PLC灏辩华鏍囧織 瀹屾垚浠诲姟鏃讹紝瑙﹀彂涓�1
+        /// </summary>
+        public byte PLC_STB { get; set; }
+
+        /// <summary>
+        /// PLC搴旂瓟鏍囧織 鏀跺埌浠诲姟鏃讹紝瑙﹀彂涓�1
+        /// </summary>
+        public byte PLC_ACK { get; set; }
+
+        /// <summary>
+        /// PLC璇锋眰鏍囧織 鍏ュ簱绔欏彴锛屽埌浣嶅啓1
+        /// </summary>
+        public byte PLC_REQ { get; set; }
+
+        /// <summary>
+        /// WCS閿欒浠g爜
+        /// </summary>
+        public byte WCS_ERRCode { get; set; }
+
+        /// <summary>
+        /// WCS鐗规畩鏍囧織 (鏃嬭浆鏍囪瘑銆佸己鍒舵斁琛屻�佸惊鐜�佺壒娈婄敵璇枫�佹槸鍚﹀彔鐩樸�佹槸鍚﹀牭濉�)
+        /// </summary>
+        public byte WCS_Special { get; set; }
+
+        /// <summary>
+        /// 璁惧鑷姩妯″紡 鎵嬪姩1锛岃嚜鍔�2
+        /// </summary>
+        public byte Equ_Auto { get; set; }
+
+        /// <summary>
+        /// 灏炬澘鏍囧織
+        /// </summary>
+        public byte Last_pallet { get; set; }
+
+        /// <summary>
+        /// 鏉$爜锛�22涓瓧绗︼級
+        /// </summary>
+        [DataLength(22)]
+        public string Barcode { get; set; }
+    }
 }

--
Gitblit v1.9.3