From b690250002ee04f4309e6a90fd16fbfd9bd959e2 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期五, 01 五月 2026 23:11:23 +0800
Subject: [PATCH] feat(router): 添加托盘操作页面路由

---
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs |   75 +++++++++++++++++++++++--------------
 1 files changed, 47 insertions(+), 28 deletions(-)

diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs
index ecb24ae..3792119 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs
@@ -203,46 +203,65 @@
                     return;
                 }
 
-                if (state.CurrentAction == "Picking" || state.CurrentAction == "Puting")
-                {
-                    return;
-                }
 
-                // 杞鑾峰彇璇ヨ澶囩殑寰呭鐞嗕换鍔�
-                // 浼樺厛閫氳繃鐘舵�佷腑缂撳瓨鐨勪换鍔$紪鍙锋煡鎵炬墽琛屼腑鐨勪换鍔�
-                Dt_RobotTask? task = null;
-                if (state.CurrentTaskNum.HasValue)
-                {
-                    task = _taskProcessor.GetTaskByNum(state.CurrentTaskNum.Value);
-                }
+                // 鑾峰彇璇ヨ澶囩殑浜掓枼閿侊紝纭繚 Job 鎵ц涓庢秷鎭鐞嗕簰鏂�
+                var robotLock = _stateManager.GetOrCreateLock(ipAddress);
 
-                // 缂撳瓨鐨勪换鍔″彿鏈壘鍒板搴斾换鍔℃椂锛屾寜璁惧缂栫爜鑾峰彇鏂颁换鍔�
-                task ??= _taskProcessor.GetTask(robotCrane);
-
-                // 濡傛灉娌℃湁鑾峰彇鍒板緟澶勭悊浠诲姟锛屼笖RobotArmObject涓�1锛堟湁鐗╂枡锛夛紝鍒欒幏鍙栬璁惧鎵ц涓殑浠诲姟
-                //if (task == null && state.RobotArmObject == 1)
+                // 閿佽娑堟伅澶勭悊鍣ㄥ崰鐢ㄦ椂鐩存帴璺宠繃鏈 tick锛岀瓑涓嬫璋冨害鍐嶆墽琛�
+                //if (!await robotLock.WaitAsync(TimeSpan.Zero))
                 //{
-                //    task = _taskProcessor.GetExecutingTask(robotCrane);
+                //    return;
                 //}
 
-                // 濡傛灉鏈夊緟澶勭悊浠诲姟
-                if (task != null)
+                // 鑾峰彇璇ヨ澶囩殑浜掓枼閿侊紝纭繚 Job 鎵ц涓庢秷鎭鐞嗕簰鏂�
+                await robotLock.WaitAsync();
+                try
                 {
-                    // 鑾峰彇鏈�鏂扮殑璁惧鐘舵��
-                    var latestState = _stateManager.GetState(ipAddress);
-                    if (latestState == null)
+                    if (state.CurrentAction == "Picking" || state.CurrentAction == "Puting")
                     {
-                        // 鐘舵�佷笉瀛樺湪锛屽彲鑳借澶囨湭鍒濆鍖�
                         return;
                     }
 
-                    // 妫�鏌ヤ换鍔℃�绘暟鏄惁鏈揪鍒颁笂闄�
-                    if (latestState.RobotTaskTotalNum < RobotConst.MaxTaskTotalNum)
+                    // 杞鑾峰彇璇ヨ澶囩殑寰呭鐞嗕换鍔�
+                    // 浼樺厛閫氳繃鐘舵�佷腑缂撳瓨鐨勪换鍔$紪鍙锋煡鎵炬墽琛屼腑鐨勪换鍔�
+                    Dt_RobotTask? task = null;
+                    if (state.CurrentTaskNum.HasValue)
                     {
-                        // 璋冪敤宸ヤ綔娴佺紪鎺掑櫒鎵ц浠诲姟
-                        // 缂栨帓鍣ㄤ細鏍规嵁褰撳墠鐘舵�佸喅瀹氫笅涓�姝ュ姩浣�
-                        await _workflowOrchestrator.ExecuteAsync(latestState, task, ipAddress);
+                        task = _taskProcessor.GetTaskByNum(state.CurrentTaskNum.Value);
                     }
+
+                    // 缂撳瓨鐨勪换鍔″彿鏈壘鍒板搴斾换鍔℃椂锛屾寜璁惧缂栫爜鑾峰彇鏂颁换鍔�
+                    task ??= _taskProcessor.GetTask(robotCrane);
+
+                    // 濡傛灉娌℃湁鑾峰彇鍒板緟澶勭悊浠诲姟锛屼笖RobotArmObject涓�1锛堟湁鐗╂枡锛夛紝鍒欒幏鍙栬璁惧鎵ц涓殑浠诲姟
+                    //if (task == null && state.RobotArmObject == 1)
+                    //{
+                    //    task = _taskProcessor.GetExecutingTask(robotCrane);
+                    //}
+
+                    // 濡傛灉鏈夊緟澶勭悊浠诲姟
+                    if (task != null)
+                    {
+                        // 鑾峰彇鏈�鏂扮殑璁惧鐘舵��
+                        var latestState = _stateManager.GetState(ipAddress);
+                        if (latestState == null)
+                        {
+                            // 鐘舵�佷笉瀛樺湪锛屽彲鑳借澶囨湭鍒濆鍖�
+                            return;
+                        }
+
+                        // 妫�鏌ヤ换鍔℃�绘暟鏄惁鏈揪鍒颁笂闄�
+                        if (latestState.RobotTaskTotalNum < RobotConst.MaxTaskTotalNum)
+                        {
+                            // 璋冪敤宸ヤ綔娴佺紪鎺掑櫒鎵ц浠诲姟
+                            // 缂栨帓鍣ㄤ細鏍规嵁褰撳墠鐘舵�佸喅瀹氫笅涓�姝ュ姩浣�
+                            await _workflowOrchestrator.ExecuteAsync(latestState, task, ipAddress);
+                        }
+                    }
+                }
+                finally
+                {
+                    robotLock.Release();
                 }
             }
             catch (Exception ex)

--
Gitblit v1.9.3