From f319fd5d5e5e0332c4c7e209df64c351dfbe6887 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期六, 25 四月 2026 22:13:19 +0800
Subject: [PATCH] fix: 修复PLC通信及任务处理中的多个问题

---
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs |  237 ++++++++++++++++++++++++++---------------------------------
 1 files changed, 104 insertions(+), 133 deletions(-)

diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs
index 84113a2..838bd20 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs
@@ -79,7 +79,7 @@
         /// <summary>
         /// 鏃ュ織璁板綍鍣�
         /// </summary>
-        private readonly ILogger _logger;
+        private readonly ILogger _logger;
 
         /// <summary>
         /// 鏋勯�犲嚱鏁�
@@ -146,7 +146,7 @@
         /// <returns>鍒犻櫎鏄惁鎴愬姛</returns>
         public bool? DeleteTask(int ID)
         {
-            return _robotTaskService.Repository.DeleteDataById(ID);
+            return _robotTaskService.DeleteRobotTask(ID);
         }
 
         /// <summary>
@@ -170,36 +170,35 @@
             // 鏋勫缓鍙栬揣鎸囦护锛屾牸寮忥細Pickbattery,{婧愬湴鍧�}
             string taskString = $"Pickbattery,{task.RobotSourceAddress}";
 
-            // 閫氳繃 Socket 缃戝叧鍙戦�佹寚浠ゅ埌鏈哄櫒浜哄鎴风
-            bool result = await _socketClientGateway.SendToClientAsync(state.IPAddress, taskString);
+            // 鏇存柊浠诲姟鐘舵�佷负"鏈哄櫒浜烘墽琛屼腑"
+            task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
 
-            if (result)
+            // 灏嗕换鍔″叧鑱斿埌鐘舵�佸璞�
+            state.CurrentTask = task;
+
+            if (isScanNG)
             {
-                // 鍙戦�佹垚鍔燂紝璁板綍 Info 鏃ュ織
-                QuartzLogHelper.LogInfo(_logger, $"涓嬪彂鍙栬揣鎸囦护鎴愬姛锛屾寚浠�: {taskString}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
-
-                // 鏇存柊浠诲姟鐘舵�佷负"鏈哄櫒浜烘墽琛屼腑"
-                task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
-
-                // 灏嗕换鍔″叧鑱斿埌鐘舵�佸璞�
-                state.CurrentTask = task;
-
-                if (isScanNG)
-                {
-                    state.IsScanNG = true;
-                }
-
-                // 淇濇寔鍘熻涔夛細浠呭湪鐘舵�佸畨鍏ㄥ啓鍏ユ垚鍔熷悗鍐嶆洿鏂颁换鍔$姸鎬�
-                // 杩欐牱鍙互纭繚鐘舵�佸拰浠诲姟璁板綍鐨勪竴鑷存��
-                if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
-                {
-                    await _robotTaskService.UpdateRobotTaskAsync(task);
-                }
+                state.IsScanNG = true;
             }
-            else
+
+            // 淇濇寔鍘熻涔夛細浠呭湪鐘舵�佸畨鍏ㄥ啓鍏ユ垚鍔熷悗鍐嶆洿鏂颁换鍔$姸鎬�
+            // 杩欐牱鍙互纭繚鐘舵�佸拰浠诲姟璁板綍鐨勪竴鑷存��
+            if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
             {
-                // 鍙戦�佸け璐ワ紝璁板綍 Error 鏃ュ織
-                QuartzLogHelper.LogError(_logger, $"涓嬪彂鍙栬揣鎸囦护澶辫触锛屾寚浠�: {taskString}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+                QuartzLogHelper.LogInfo(_logger, $"鐘舵�佹洿鏂版垚鍔燂紝璁惧: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+                // 閫氳繃 Socket 缃戝叧鍙戦�佹寚浠ゅ埌鏈哄櫒浜哄鎴风
+                bool result = await _socketClientGateway.SendToClientAsync(state.IPAddress, taskString);
+                if (result)
+                {
+                    // 鍙戦�佹垚鍔燂紝璁板綍 Info 鏃ュ織
+                    QuartzLogHelper.LogInfo(_logger, $"涓嬪彂鍙栬揣鎸囦护鎴愬姛锛屾寚浠�: {taskString}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+                    //await _robotTaskService.UpdateRobotTaskAsync(task);
+                }
+                else
+                {
+                    // 鍙戦�佸け璐ワ紝璁板綍 Error 鏃ュ織
+                    QuartzLogHelper.LogError(_logger, $"涓嬪彂鍙栬揣鎸囦护澶辫触锛屾寚浠�: {taskString}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+                }
             }
         }
 
@@ -234,27 +233,26 @@
             // 鏍囪鐐逛綅涓哄凡浣跨敤
             _fakeBatteryPositionService.MarkAsUsed(positions);
 
-            // 閫氳繃 Socket 缃戝叧鍙戦�佹寚浠ゅ埌鏈哄櫒浜哄鎴风
-            bool result = await _socketClientGateway.SendToClientAsync(state.IPAddress, taskString);
+            // 鏇存柊浠诲姟鐘舵�佷负"鏈哄櫒浜烘墽琛屼腑"
+            task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
 
-            if (result)
+            // 灏嗕换鍔″叧鑱斿埌鐘舵�佸璞�
+            state.CurrentTask = task;
+
+            if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
             {
-                QuartzLogHelper.LogInfo(_logger, $"涓嬪彂鍋囩數鑺彇璐ф寚浠ゆ垚鍔燂紝鎸囦护: {taskString}锛岀偣浣�: {string.Join(",", positions)}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+                // 閫氳繃 Socket 缃戝叧鍙戦�佹寚浠ゅ埌鏈哄櫒浜哄鎴风
+                bool result = await _socketClientGateway.SendToClientAsync(state.IPAddress, taskString);
 
-                // 鏇存柊浠诲姟鐘舵�佷负"鏈哄櫒浜烘墽琛屼腑"
-                task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
-
-                // 灏嗕换鍔″叧鑱斿埌鐘舵�佸璞�
-                state.CurrentTask = task;
-
-                if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
+                if (result)
                 {
-                    await _robotTaskService.UpdateRobotTaskAsync(task);
+                    QuartzLogHelper.LogInfo(_logger, $"涓嬪彂鍋囩數鑺彇璐ф寚浠ゆ垚鍔燂紝鎸囦护: {taskString}锛岀偣浣�: {string.Join(",", positions)}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+                    //await _robotTaskService.UpdateRobotTaskAsync(task);
                 }
-            }
-            else
-            {
-                QuartzLogHelper.LogError(_logger, $"涓嬪彂鍋囩數鑺彇璐ф寚浠ゅけ璐ワ紝鎸囦护: {taskString}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+                else
+                {
+                    QuartzLogHelper.LogError(_logger, $"涓嬪彂鍋囩數鑺彇璐ф寚浠ゅけ璐ワ紝鎸囦护: {taskString}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+                }
             }
         }
 
@@ -307,31 +305,31 @@
         /// <param name="batchEnd">鎵规缁撴潫缂栧彿</param>
         public async Task SendPickWithBatchAsync(Dt_RobotTask task, RobotSocketState state, string position, int batchStart, int batchEnd)
         {
-            // 鍏堝彂閫佹�绘暟鎸囦护
-            string totalNumCmd = $"PickTotalNum,{task.RobotTaskTotalNum}";
-            await _socketClientGateway.SendToClientAsync(state.IPAddress, totalNumCmd);
 
-            // 鍐嶅彂閫佹壒娆″彇璐ф寚浠�
-            string range = batchEnd == 0 ? $"{batchStart}-0" : $"{batchStart}-{batchEnd}";
-            string taskString = $"Pickbattery,{position},{range}";
+            task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
+            state.CurrentTask = task;
 
-            bool result = await _socketClientGateway.SendToClientAsync(state.IPAddress, taskString);
-
-            if (result)
+            if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
             {
-                QuartzLogHelper.LogInfo(_logger, $"涓嬪彂鎵规鍙栬揣鎸囦护鎴愬姛锛屾寚浠�: {taskString}锛屾壒娆�: {range}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+                // 鍏堝彂閫佹�绘暟鎸囦护
+                string totalNumCmd = $"PickTotalNum,{task.RobotTaskTotalNum}";
+                await _socketClientGateway.SendToClientAsync(state.IPAddress, totalNumCmd);
 
-                task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
-                state.CurrentTask = task;
+                // 鍐嶅彂閫佹壒娆″彇璐ф寚浠�
+                string range = batchEnd == 0 ? $"{batchStart}-0" : $"{batchStart}-{batchEnd}";
+                string taskString = $"Pickbattery,{position},{range}";
 
-                if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
+                bool result = await _socketClientGateway.SendToClientAsync(state.IPAddress, taskString);
+
+                if (result)
                 {
-                    await _robotTaskService.UpdateRobotTaskAsync(task);
+                    QuartzLogHelper.LogInfo(_logger, $"涓嬪彂鎵规鍙栬揣鎸囦护鎴愬姛锛屾寚浠�: {taskString}锛屾壒娆�: {range}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+                    //await _robotTaskService.UpdateRobotTaskAsync(task);
                 }
-            }
-            else
-            {
-                QuartzLogHelper.LogError(_logger, $"涓嬪彂鎵规鍙栬揣鎸囦护澶辫触锛屾寚浠�: {taskString}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+                else
+                {
+                    QuartzLogHelper.LogError(_logger, $"涓嬪彂鎵规鍙栬揣鎸囦护澶辫触锛屾寚浠�: {taskString}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+                }
             }
         }
 
@@ -351,31 +349,31 @@
         /// <param name="batchEnd">鎵规缁撴潫缂栧彿</param>
         public async Task SendFakeBatteryPickWithBatchAsync(Dt_RobotTask task, RobotSocketState state, int batchStart, int batchEnd)
         {
-            // 鍏堝彂閫佹�绘暟鎸囦护
-            string totalNumCmd = $"PickTotalNum,{task.RobotTaskTotalNum}";
-            await _socketClientGateway.SendToClientAsync(state.IPAddress, totalNumCmd);
+            task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
+            state.CurrentTask = task;
 
-            // 鍐嶅彂閫佹壒娆″彇璐ф寚浠わ紙鍋囩數鑺浐瀹氫粠5鍙蜂綅鍙栵級
-            string range = batchEnd == 0 ? $"{batchStart}-0" : $"{batchStart}-{batchEnd}";
-            string taskString = $"Pickbattery,5,{range}";
-
-            bool result = await _socketClientGateway.SendToClientAsync(state.IPAddress, taskString);
-
-            if (result)
+            if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
             {
-                QuartzLogHelper.LogInfo(_logger, $"涓嬪彂鍋囩數鑺壒娆″彇璐ф寚浠ゆ垚鍔燂紝鎸囦护: {taskString}锛屾壒娆�: {range}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+                // 鍏堝彂閫佹�绘暟鎸囦护
+                string totalNumCmd = $"PickTotalNum,{task.RobotTaskTotalNum}";
+                await _socketClientGateway.SendToClientAsync(state.IPAddress, totalNumCmd);
 
-                task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
-                state.CurrentTask = task;
+                // 鍐嶅彂閫佹壒娆″彇璐ф寚浠わ紙鍋囩數鑺浐瀹氫粠5鍙蜂綅鍙栵級
+                string range = batchEnd == 0 ? $"{batchStart}-0" : $"{batchStart}-{batchEnd}";
+                string taskString = $"Pickbattery,5,{range}";
 
-                if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
+                bool result = await _socketClientGateway.SendToClientAsync(state.IPAddress, taskString);
+
+                if (result)
                 {
-                    await _robotTaskService.UpdateRobotTaskAsync(task);
+                    QuartzLogHelper.LogInfo(_logger, $"涓嬪彂鍋囩數鑺壒娆″彇璐ф寚浠ゆ垚鍔燂紝鎸囦护: {taskString}锛屾壒娆�: {range}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+
+                    //await _robotTaskService.UpdateRobotTaskAsync(task);
                 }
-            }
-            else
-            {
-                QuartzLogHelper.LogError(_logger, $"涓嬪彂鍋囩數鑺壒娆″彇璐ф寚浠ゅけ璐ワ紝鎸囦护: {taskString}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+                else
+                {
+                    QuartzLogHelper.LogError(_logger, $"涓嬪彂鍋囩數鑺壒娆″彇璐ф寚浠ゅけ璐ワ紝鎸囦护: {taskString}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+                }
             }
         }
 
@@ -396,31 +394,31 @@
         /// <param name="batchEnd">鎵规缁撴潫缂栧彿</param>
         public async Task SendPutWithBatchAsync(Dt_RobotTask task, RobotSocketState state, string position, int batchStart, int batchEnd)
         {
-            // 鍏堝彂閫佹�绘暟鎸囦护
-            string totalNumCmd = $"PutTotalNum,{task.RobotTaskTotalNum}";
-            await _socketClientGateway.SendToClientAsync(state.IPAddress, totalNumCmd);
+            task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
+            state.CurrentTask = task;
 
-            // 鍐嶅彂閫佹壒娆℃斁璐ф寚浠�
-            string range = batchEnd == 0 ? $"{batchStart}-0" : $"{batchStart}-{batchEnd}";
-            string taskString = $"Putbattery,{position},{range}";
-
-            bool result = await _socketClientGateway.SendToClientAsync(state.IPAddress, taskString);
-
-            if (result)
+            if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
             {
-                QuartzLogHelper.LogInfo(_logger, $"涓嬪彂鏀捐揣鎸囦护鎴愬姛锛屾寚浠�: {taskString}锛屾壒娆�: {range}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+                // 鍏堝彂閫佹�绘暟鎸囦护
+                string totalNumCmd = $"PutTotalNum,{task.RobotTaskTotalNum}";
+                await _socketClientGateway.SendToClientAsync(state.IPAddress, totalNumCmd);
 
-                task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
-                state.CurrentTask = task;
+                // 鍐嶅彂閫佹壒娆℃斁璐ф寚浠�
+                string range = batchEnd == 0 ? $"{batchStart}-0" : $"{batchStart}-{batchEnd}";
+                string taskString = $"Putbattery,{position},{range}";
 
-                if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
+                bool result = await _socketClientGateway.SendToClientAsync(state.IPAddress, taskString);
+
+                if (result)
                 {
-                    await _robotTaskService.UpdateRobotTaskAsync(task);
+                    QuartzLogHelper.LogInfo(_logger, $"涓嬪彂鏀捐揣鎸囦护鎴愬姛锛屾寚浠�: {taskString}锛屾壒娆�: {range}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+
+                    //await _robotTaskService.UpdateRobotTaskAsync(task);
                 }
-            }
-            else
-            {
-                QuartzLogHelper.LogError(_logger, $"涓嬪彂鏀捐揣鎸囦护澶辫触锛屾寚浠�: {taskString}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+                else
+                {
+                    QuartzLogHelper.LogError(_logger, $"涓嬪彂鏀捐揣鎸囦护澶辫触锛屾寚浠�: {taskString}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+                }
             }
         }
 
@@ -592,39 +590,6 @@
                 return false;
             }
 
-            // 瑙f瀽杩斿洖鐨勪换鍔′俊鎭�
-            //var taskInfos = JsonConvert.DeserializeObject<List<Dt_Task>>(content.Data.ToJson() ?? string.Empty) ?? new List<Dt_Task>();
-            //var taskInfo = taskInfos.FirstOrDefault();
-
-            //// 鑾峰彇婧愬湴鍧�
-            //string sourceAddress = taskDTO.SourceAddress;
-
-            //// 鏌ユ壘婧愬湴鍧�瀵瑰簲鐨勮緭閫佺嚎璁惧
-            //IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceProDTOs.Any(d => d.DeviceChildCode == sourceAddress));
-
-            //if (device != null)
-            //{
-            //    // 灏嗚澶囪浆鎹负杈撻�佺嚎绫诲瀷
-            //    CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
-
-            //    // 璁剧疆杈撻�佺嚎鐨勭洰鏍囧湴鍧�
-            //    conveyorLine.SetValue(ConveyorLineDBNameNew.Target, taskInfo.NextAddress, sourceAddress);
-
-            //    // 璁剧疆杈撻�佺嚎鐨勪换鍔″彿
-            //    conveyorLine.SetValue(ConveyorLineDBNameNew.TaskNo, taskInfo.TaskNum, sourceAddress);
-
-            //    // 瑙﹀彂杈撻�佺嚎寮�濮嬫墽琛岋紙鍐欏叆 WCS_ACK = 1锛�
-            //    conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, (short)1, sourceAddress);
-
-            //    // 鏇存柊浠诲姟鐘舵�佸埌涓嬩竴闃舵
-            //    if (_taskService.UpdateTaskStatusToNext(taskInfo).Status)
-            //    {
-            //        _logger.LogInformation("HandleInboundTaskAsync锛氬叆搴撲换鍔″鐞嗘垚鍔燂紝浠诲姟鍙�: {TaskNum}", taskInfo.TaskNum);
-            //        QuartzLogger.Info($"HandleInboundTaskAsync锛氬叆搴撲换鍔″鐞嗘垚鍔燂紝浠诲姟鍙�: {taskInfo.TaskNum}", state.RobotCrane?.DeviceName ?? "Unknown");
-            //        return true;
-            //    }
-            //}
-
             return true;
         }
 
@@ -785,5 +750,11 @@
 
             return result;
         }
+
+        public bool UpdateRobotTask(Dt_RobotTask task)
+        {
+            WebResponseContent content = _robotTaskService.UpdateData(task);
+            return content.Status;
+        }
     }
 }

--
Gitblit v1.9.3