From 411b69b35e91d3d75fb7de7de1bc50e148038959 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期日, 03 八月 2025 08:58:12 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/common/utils/NavigateUtils.java |   71 ++++++++++++++++++++++++-----------
 1 files changed, 49 insertions(+), 22 deletions(-)

diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java
index c6e94ab..d49b64b 100644
--- a/src/main/java/com/zy/common/utils/NavigateUtils.java
+++ b/src/main/java/com/zy/common/utils/NavigateUtils.java
@@ -2,7 +2,8 @@
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
-import com.core.common.SpringUtils;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.SnowflakeIdWorker;
 import com.core.exception.CoolException;
 import com.zy.asrs.utils.Utils;
 import com.zy.common.model.MapNode;
@@ -11,6 +12,8 @@
 import com.zy.core.News;
 import com.zy.core.enums.MapNodeType;
 import com.zy.core.model.PythonSimilarityResult;
+import com.zy.system.entity.Config;
+import com.zy.system.service.ConfigService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
@@ -31,6 +34,10 @@
     private String pythonCalcSimilarity;
     @Autowired
     private NavigateMapData navigateMapData;
+    @Autowired
+    private SnowflakeIdWorker snowflakeIdWorker;
+    @Autowired
+    private ConfigService configService;
 
     public List<NavigateNode> calc(String startPoint, String endPoint, List<NavigationMapType> mapTypes, List<int[]> shuttlePoints, List<int[]> whites) {
         return calcJava(startPoint, endPoint, mapTypes, shuttlePoints, whites);
@@ -288,10 +295,13 @@
      * 鑾峰彇鍒嗘璺緞锛屾瘡褰撴湁涓�涓嫄鐐瑰垯杩涜涓�娆″垎娈碉紝鏈�缁堣繑鍥炴�诲垎娈垫暟鎹�
      */
     public List<List<NavigateNode>> getSectionPath(List<NavigateNode> mapList) {
-        List<List<NavigateNode>> list = new ArrayList<>();
+        NavigateNode firstNode = mapList.get(0);
+        //鑾峰彇鍦板浘
+        List<List<MapNode>> mapNodes = navigateMapData.getJsonData(firstNode.getZ(), NavigationMapType.getMapTypes(NavigationMapType.NONE), null, null);
 
+        List<List<NavigateNode>> list = new ArrayList<>();
         List<NavigateNode> data = new ArrayList<>();
-        String direction = mapList.get(0).getDirection();//琛岃蛋鏂瑰悜
+        String direction = firstNode.getDirection();//琛岃蛋鏂瑰悜
 
         for (NavigateNode navigateNode : mapList) {
             data.add(navigateNode);
@@ -306,22 +316,30 @@
                 //鐩磋绾胯矾
                 navigateNode.setDirection(direction);//璁剧疆琛岃蛋鏂瑰悜
             }
-            Integer distance = getXToNextDistance(navigateNode);//鑾峰彇褰撳墠鐐瑰埌涓嬩竴鐐圭殑琛岃蛋璺濈
+            Integer distance = getXToNextDistance(mapNodes, navigateNode);//鑾峰彇褰撳墠鐐瑰埌涓嬩竴鐐圭殑琛岃蛋璺濈
             navigateNode.setMoveDistance(distance);
         }
 
         //灏嗘渶鍚庝竴娈垫暟鎹坊鍔犺繘鍏�
         list.add(data);
 
+        //鍒嗘璺緞-澶勭悊瓒呴暱鐩寸嚎娈佃矾寰�
         List<List<NavigateNode>> paths = getSectionPathToSplitOverLength(list);
         return paths;
     }
 
     //鍒嗘璺緞-澶勭悊瓒呴暱鐩寸嚎娈佃矾寰�
     public List<List<NavigateNode>> getSectionPathToSplitOverLength(List<List<NavigateNode>> list) {
+        int overLength = 9;//榛樿9鑺�
+        Config shuttleMoveOverLengthConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "shuttleMoveOverLength"));
+        if (shuttleMoveOverLengthConfig != null) {
+            overLength = Integer.parseInt(shuttleMoveOverLengthConfig.getValue());
+        }
+
         List<List<NavigateNode>> paths = new ArrayList<>();
-        int overLength = 9;
         for (List<NavigateNode> nodes : list) {
+            long nextId = snowflakeIdWorker.nextId();
+
             if (nodes.size() > overLength) {
                 List<NavigateNode> copy = JSON.parseArray(JSON.toJSONString(nodes), NavigateNode.class);
                 List<NavigateNode> tmp = new ArrayList<>();
@@ -335,10 +353,12 @@
                         if (lastNode == null) {
                             NavigateNode startNode = tmp.get(0);
                             startNode.setLinePartAllowGo(true);//鐩寸嚎娈佃秴闀块儴鍒嗗厑璁哥洿鎺ヨ璧�
+                            startNode.setLinePartFlag(nextId);//鐩寸嚎娈垫暟鎹爣璇�
                             tmp.set(0, startNode);
                         }
                         NavigateNode targetNode = tmp.get(tmp.size() - 1);
                         targetNode.setLinePartAllowGo(true);//鐩寸嚎娈佃秴闀块儴鍒嗗厑璁哥洿鎺ヨ璧�
+                        targetNode.setLinePartFlag(nextId);//鐩寸嚎娈垫暟鎹爣璇�
                         if (lastNode != null) {
                             tmp.add(0, lastNode);
                         }
@@ -355,6 +375,10 @@
                     paths.add(tmp);
                 }
             }else {
+                NavigateNode startNode = nodes.get(0);
+                startNode.setLinePartAllowGo(true);//鐩寸嚎娈佃秴闀块儴鍒嗗厑璁哥洿鎺ヨ璧�
+                startNode.setLinePartFlag(nextId);//鐩寸嚎娈垫暟鎹爣璇�
+                nodes.set(0, startNode);
                 paths.add(nodes);
             }
         }
@@ -362,25 +386,28 @@
     }
 
     //鑾峰彇浠巟鐐瑰埌涓嬩竴鐐圭殑琛岃蛋璺濈
-    public Integer getXToNextDistance(NavigateNode xNode) {
-        NavigateMapData mapData = SpringUtils.getBean(NavigateMapData.class);
-        List<List<MapNode>> lists = mapData.getJsonData(xNode.getZ(), NavigationMapType.getMapTypes(NavigationMapType.NONE), null, null);
-        if (lists != null) {
-            MapNode mapNode = lists.get(xNode.getX()).get(xNode.getY());
-            if (mapNode != null) {
-                switch (xNode.getDirection()) {
-                    case "top":
-                        return mapNode.getTop();
-                    case "bottom":
-                        return mapNode.getBottom();
-                    case "left":
-                        return mapNode.getLeft();
-                    case "right":
-                        return mapNode.getRight();
-                }
-            }
+    public Integer getXToNextDistance(List<List<MapNode>> mapLists, NavigateNode xNode) {
+        if (mapLists == null) {
             return 0;
         }
+
+        if (mapLists.isEmpty()) {
+            return 0;
+        }
+
+        MapNode mapNode = mapLists.get(xNode.getX()).get(xNode.getY());
+        if (mapNode != null) {
+            switch (xNode.getDirection()) {
+                case "top":
+                    return mapNode.getTop();
+                case "bottom":
+                    return mapNode.getBottom();
+                case "left":
+                    return mapNode.getLeft();
+                case "right":
+                    return mapNode.getRight();
+            }
+        }
         return 0;
     }
 

--
Gitblit v1.9.1