From 314e894c0d6ce2739344dcd1c94ae7770868a0f1 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期三, 28 五月 2025 14:51:16 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/common/utils/ShuttleOperaUtils.java |   60 +++++++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 53 insertions(+), 7 deletions(-)

diff --git a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
index 4c14010..45f6a71 100644
--- a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
+++ b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
@@ -260,13 +260,15 @@
                 continue;
             }
 
-            HashMap<String, Integer> carMap = findCarMap();
-
             String targetLocNo = null;
             for (NavigateNode node : outerNodes) {
                 String dispatchLocNo = NavigatePositionConvert.nodeToLocNo(node);
-                if (carMap.containsKey(dispatchLocNo)) {
-                    continue;
+                //鑾峰彇鍐呭湀鑺傜偣
+                List<NavigateNode> avoidInnerNodes = getInnerNodes(dispatchLocNo, innerCircle, new ArrayList<>());
+                //璁$畻鍐呭湀鏄惁鏈夊皬杞�
+                List<Integer> avoidNodesCar = findNodesCar(avoidInnerNodes);
+                if(!avoidNodesCar.isEmpty()) {
+                   continue;
                 }
                 targetLocNo = dispatchLocNo;
                 break;
@@ -331,7 +333,7 @@
 
         for (int i = 0; i < outerCircle; i++) {
             int idx = i + 1;
-            List<NavigateNode> list = extend_nodes(map, currentNode, idx);
+            List<NavigateNode> list = extend_outer_nodes(map, currentNode, idx);
             if (list.isEmpty()) {
                 continue;
             }
@@ -372,7 +374,7 @@
 
         for (int i = 0; i < innerCircle; i++) {
             int idx = i + 1;
-            List<NavigateNode> list = extend_nodes(map, currentNode, idx);
+            List<NavigateNode> list = extend_inner_nodes(map, currentNode, idx);
             if (list.isEmpty()) {
                 continue;
             }
@@ -395,7 +397,7 @@
         return innerNodes;
     }
 
-    private List<NavigateNode> extend_nodes(int[][] map, NavigateNode startNode, int innerCircleIdx) {
+    private List<NavigateNode> extend_inner_nodes(int[][] map, NavigateNode startNode, int innerCircleIdx) {
         //榛樿鍦板浘姣嶈建鏂瑰悜x
         String mapDirection = "x";
         ConfigService configService = SpringUtils.getBean(ConfigService.class);
@@ -502,6 +504,50 @@
         return nodes;
     }
 
+    private List<NavigateNode> extend_outer_nodes(int[][] map, NavigateNode startNode, int innerCircleIdx) {
+        ArrayList<NavigateNode> nodes = new ArrayList<>();
+        int x = startNode.getX();
+        int y = startNode.getY();
+        int z = startNode.getZ();
+
+        if (is_valid(map, x + innerCircleIdx, y)) {
+            NavigateNode node = new NavigateNode(x + innerCircleIdx, y);
+            node.setNodeValue(map[x + innerCircleIdx][y]);
+            node.setZ(z);
+            if (node.getNodeValue().equals(startNode.getNodeValue())) {
+                nodes.add(node);
+            }
+        }
+
+        if (is_valid(map, x - innerCircleIdx, y)) {
+            NavigateNode node = new NavigateNode(x - innerCircleIdx, y);
+            node.setNodeValue(map[x - innerCircleIdx][y]);
+            node.setZ(z);
+            if (node.getNodeValue().equals(startNode.getNodeValue())) {
+                nodes.add(node);
+            }
+        }
+
+        if (is_valid(map, x, y + innerCircleIdx)) {
+            NavigateNode node = new NavigateNode(x, y + innerCircleIdx);
+            node.setNodeValue(map[x][y + innerCircleIdx]);
+            node.setZ(z);
+            if (node.getNodeValue().equals(startNode.getNodeValue())) {
+                nodes.add(node);
+            }
+        }
+
+        if (is_valid(map, x, y - innerCircleIdx)) {
+            NavigateNode node = new NavigateNode(x, y - innerCircleIdx);
+            node.setNodeValue(map[x][y - innerCircleIdx]);
+            node.setZ(z);
+            if (node.getNodeValue().equals(startNode.getNodeValue())) {
+                nodes.add(node);
+            }
+        }
+        return nodes;
+    }
+
     private boolean is_valid(int[][] map, int x, int y) {
         if (x < 0 || x >= map.length
                 || y < 0 || y >= map[0].length) {

--
Gitblit v1.9.1