From 946b8c5f52fd508890e65cd2c016c7f5174a0a35 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期五, 25 七月 2025 14:41:41 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/thread/impl/TrafficControlImplThread.java |   31 +++++++++++++++++++++++++++++++
 1 files changed, 31 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/zy/core/thread/impl/TrafficControlImplThread.java b/src/main/java/com/zy/core/thread/impl/TrafficControlImplThread.java
index f15a5c2..9d92ed2 100644
--- a/src/main/java/com/zy/core/thread/impl/TrafficControlImplThread.java
+++ b/src/main/java/com/zy/core/thread/impl/TrafficControlImplThread.java
@@ -9,6 +9,7 @@
 import com.zy.common.utils.NavigatePositionConvert;
 import com.zy.common.utils.NavigateUtils;
 import com.zy.common.utils.RedisUtil;
+import com.zy.common.utils.ShuttleOperaUtils;
 import com.zy.core.News;
 import com.zy.core.cache.SlaveConnection;
 import com.zy.core.enums.RedisKeyType;
@@ -35,6 +36,7 @@
     private HashMap<Integer, HashMap<String, List<Integer>>> levNodesMap = null;
 
 
+    private HashMap<Integer,Long> pathIdleShuttleMap = new HashMap<>();
     private HashMap<Integer,Long> applyRecordsMap = new HashMap<>();
     private HashMap<String, List<NavigateNode>> taskNodesMap = new HashMap<>();
     private List<TrafficControlDataModel> trafficControlDataList = new ArrayList<>();
@@ -443,6 +445,11 @@
 
     @Override
     public synchronized boolean applyTrafficControl(List<NavigateNode> totalNodeList, List<NavigateNode> nodeList, Integer shuttleNo, Integer taskNo) {
+        ShuttleOperaUtils shuttleOperaUtils = SpringUtils.getBean(ShuttleOperaUtils.class);
+        if (shuttleOperaUtils == null) {
+            return false;
+        }
+
         //鏇存柊浜ょ淇℃伅
         redisUtil.set(RedisKeyType.TRAFFIC_CONTROL_MAP.key, trafficControlDataList);
 
@@ -508,6 +515,30 @@
         //妫�娴嬭矾寰勬槸鍚︽湁灏忚溅
         for (String loc : totalLocList) {
             if(shuttleLocList.contains(loc)) {
+                ShuttleThread pathShuttleThread = Utils.searchShuttle(loc);
+                if (pathShuttleThread == null) {
+                    return false;
+                }
+
+                ShuttleProtocol shuttleProtocol = pathShuttleThread.getStatus();
+                if(shuttleProtocol == null) {
+                    return false;
+                }
+
+                if (pathShuttleThread.isIdle()) {
+                    if(pathIdleShuttleMap.containsKey(shuttleProtocol.getShuttleNo())) {
+                        Long idleTime = pathIdleShuttleMap.get(shuttleProtocol.getShuttleNo());
+                        if((System.currentTimeMillis() - idleTime) > 1000 * 10) {
+                            //妫�娴嬮殰纰嶇墿杞�
+                            boolean checkObstacle = shuttleOperaUtils.checkObstacle(shuttleProtocol.getCurrentLocNo(), new ArrayList<Integer>() {{
+                                add(shuttleNo);
+                            }});
+                            pathIdleShuttleMap.remove(shuttleProtocol.getShuttleNo());
+                        }
+                    }else {
+                        pathIdleShuttleMap.put(shuttleProtocol.getShuttleNo(), System.currentTimeMillis());
+                    }
+                }
                 return false;//node has shuttle
             }
         }

--
Gitblit v1.9.1