From dad4b7fd3a7fcaed73d28f0ebd9e90d86ca21225 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 22 七月 2025 12:34:51 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/controller/ConsoleController.java    |   19 ++
 src/main/java/com/zy/common/utils/NavigateMapUtils.java        |  165 +++++++++++------------
 src/main/webapp/views/admin/locMap/locMap.html                 |    4 
 src/main/java/com/zy/common/utils/ShuttleOperaUtils.java       |    4 
 src/main/java/com/zy/asrs/controller/ShuttleController.java    |    4 
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java    |    4 
 src/main/java/com/zy/asrs/ws/ConsoleWebSocket.java             |    4 
 src/main/java/com/zy/common/utils/NavigateUtils.java           |   47 +++---
 src/main/java/com/zy/core/enums/RedisKeyType.java              |    3 
 src/main/java/com/zy/common/utils/NavigateMapData.java         |   63 ++++++++
 src/main/java/com/zy/common/utils/NavigateSolution.java        |   54 +++----
 src/main/java/com/zy/common/model/enums/NavigationMapType.java |    5 
 12 files changed, 227 insertions(+), 149 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/ConsoleController.java b/src/main/java/com/zy/asrs/controller/ConsoleController.java
index 186f708..5b4a3d8 100644
--- a/src/main/java/com/zy/asrs/controller/ConsoleController.java
+++ b/src/main/java/com/zy/asrs/controller/ConsoleController.java
@@ -91,6 +91,25 @@
         //瑙f瀽json鍦板浘鏁版嵁
         ArrayList arrayList = JSON.parseObject(basMap.getData(), ArrayList.class);
 
+        List<List<MapNode>> lists = navigateMapData.filterMap(NavigationMapType.getMapTypes(NavigationMapType.NONE, NavigationMapType.PATH_LOCK), arrayList, lev, null, null);//杩囨护鍦板浘鏁版嵁
+        return R.ok().add(lists);
+    }
+
+    /**
+     * 鑾峰彇搴撲綅鍦板浘鏁版嵁
+     */
+    @GetMapping("/locMap/{lev}/auth")
+    @ManagerAuth
+    public R getLocMap(@PathVariable Integer lev) {
+        Object data = redisUtil.get(RedisKeyType.MAP.key + lev);
+        if (data == null) {
+            return R.error();
+        }
+
+        BasMap basMap = JSON.parseObject(data.toString(), BasMap.class);
+        //瑙f瀽json鍦板浘鏁版嵁
+        ArrayList arrayList = JSON.parseObject(basMap.getData(), ArrayList.class);
+
         List<List<MapNode>> lists = navigateMapData.filterMap(NavigationMapType.getMapTypes(NavigationMapType.NONE), arrayList, lev, null, null);//杩囨护鍦板浘鏁版嵁
         return R.ok().add(lists);
     }
diff --git a/src/main/java/com/zy/asrs/controller/ShuttleController.java b/src/main/java/com/zy/asrs/controller/ShuttleController.java
index 1f9b30c..f7bdebb 100644
--- a/src/main/java/com/zy/asrs/controller/ShuttleController.java
+++ b/src/main/java/com/zy/asrs/controller/ShuttleController.java
@@ -310,9 +310,9 @@
 
         if (shuttleTaskModeType == ShuttleTaskModeType.MOVE_LOC_NO) {
             //绉诲姩鍒扮洰鏍囧簱浣�
-            List<NavigationMapType> mapTypes = NavigationMapType.getMapTypes(NavigationMapType.NORMAL);
+            List<NavigationMapType> mapTypes = NavigationMapType.getMapTypes(NavigationMapType.NORMAL, NavigationMapType.PATH_LOCK);
             if (shuttleProtocol.getHasLift()) {
-                mapTypes = NavigationMapType.getMapTypes(NavigationMapType.DFX);
+                mapTypes = NavigationMapType.getMapTypes(NavigationMapType.DFX, NavigationMapType.PATH_LOCK);
             }
             List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), param.getDistLocNo(), mapTypes, assignCommand, shuttleThread);
             if (commands == null) {
diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index cd2efe4..3f01cfd 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -87,7 +87,7 @@
                 Object data = redisUtil.get(RedisKeyType.MAP.key + lev);
                 if (data == null) {//redis鍦板浘鏁版嵁涓虹┖
                     //杞藉叆鍦板浘
-                    List<List<MapNode>> lists = navigateMapData.getJsonData(lev, NavigationMapType.getMapTypes(NavigationMapType.NONE), null, null);//鑾峰彇瀹屾暣鍦板浘(鍖呮嫭鍏ュ簱鍑哄簱)
+                    List<List<MapNode>> lists = navigateMapData.getJsonOriginData(lev, NavigationMapType.getMapTypes(NavigationMapType.NONE), null, null);//鑾峰彇瀹屾暣鍦板浘(鍖呮嫭鍏ュ簱鍑哄簱)
 
                     //瀛樺叆鏁版嵁搴�
                     basMap.setData(JSON.toJSONString(lists));
@@ -1492,7 +1492,7 @@
             assignCommand.setAuto(true);//鑷姩妯″紡
 
             //璁$畻杩戠偣浣嶇疆
-            String endLocation = navigateUtils.calcEndLocation(shuttleProtocol.getCurrentLocNo(), liftSta.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), null, null, 1);
+            String endLocation = navigateUtils.calcEndLocation(shuttleProtocol.getCurrentLocNo(), liftSta.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL, NavigationMapType.PATH_LOCK), null, null, 1);
             if (endLocation == null) {
                 News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞﹁繎鐐逛綅缃绠楀け璐�", wrkMast.getWrkNo());
                 return false;
diff --git a/src/main/java/com/zy/asrs/ws/ConsoleWebSocket.java b/src/main/java/com/zy/asrs/ws/ConsoleWebSocket.java
index 2234aaf..ec77cf5 100644
--- a/src/main/java/com/zy/asrs/ws/ConsoleWebSocket.java
+++ b/src/main/java/com/zy/asrs/ws/ConsoleWebSocket.java
@@ -86,6 +86,10 @@
             R result = consoleController.getMapFromRedis(Integer.parseInt(socketMessage.getData()));
             socketMessage.setData(JSON.toJSONString(result));
             this.sendMessage(JSON.toJSONString(socketMessage));
+        } else if (socketMessage.getUrl().equals("/console/locMap/auth")) {
+            R result = consoleController.getLocMap(Integer.parseInt(socketMessage.getData()));
+            socketMessage.setData(JSON.toJSONString(result));
+            this.sendMessage(JSON.toJSONString(socketMessage));
         }
 //        log.info("鏀跺埌鏉ヨ嚜杩炴帴锛�" + sessionId + "鐨勪俊鎭�:" + message);
     }
diff --git a/src/main/java/com/zy/common/model/enums/NavigationMapType.java b/src/main/java/com/zy/common/model/enums/NavigationMapType.java
index e73b771..4556a94 100644
--- a/src/main/java/com/zy/common/model/enums/NavigationMapType.java
+++ b/src/main/java/com/zy/common/model/enums/NavigationMapType.java
@@ -10,6 +10,7 @@
     NORMAL(2, "鍦板浘鎼哄甫搴撲綅鐘舵�乆"),
     SHUTTLE(3, "鍦板浘鎼哄甫灏忚溅"),
     LIFT(4, "鍦板浘鎼哄甫鎻愬崌鏈�"),
+    PATH_LOCK(5, "璺緞閿�"),
     ;
 
     public Integer id;
@@ -45,11 +46,11 @@
     }
 
     public static List<NavigationMapType> getDfxWithDevice() {
-        return getMapTypes(DFX, SHUTTLE, LIFT);
+        return getMapTypes(DFX, SHUTTLE, LIFT, PATH_LOCK);
     }
 
     public static List<NavigationMapType> getNormalWithDevice() {
-        return getMapTypes(NORMAL, SHUTTLE, LIFT);
+        return getMapTypes(NORMAL, SHUTTLE, LIFT, PATH_LOCK);
     }
 
     public static List<NavigationMapType> getMapTypes(NavigationMapType... types) {
diff --git a/src/main/java/com/zy/common/utils/NavigateMapData.java b/src/main/java/com/zy/common/utils/NavigateMapData.java
index c8e72b9..3df92d7 100644
--- a/src/main/java/com/zy/common/utils/NavigateMapData.java
+++ b/src/main/java/com/zy/common/utils/NavigateMapData.java
@@ -22,7 +22,9 @@
 import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * A*绠楁硶鍦板浘鑾峰彇绫�
@@ -30,6 +32,8 @@
 @Component
 public class NavigateMapData {
 
+    @Autowired
+    private RedisUtil redisUtil;
     @Autowired
     private DeviceConfigService deviceConfigService;
     @Autowired
@@ -67,7 +71,6 @@
      * 灏濊瘯浠巖edis鑾峰彇鏁版嵁
      */
     public int[][] getDataFromRedis(Integer lev, List<NavigationMapType> mapTypes, List<int[]> whitePoints, List<int[]> shuttlePoints) {
-        RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class);
         Object o = redisUtil.get(RedisKeyType.MAP.key + lev);
         if (o == null) {
             return null;
@@ -99,8 +102,27 @@
         return map;
     }
 
-    //鑾峰彇JSON鏍煎紡鏁版嵁
+    //鑾峰彇瀹炴椂鍦板浘-JSON鏍煎紡鏁版嵁
     public List<List<MapNode>> getJsonData(Integer lev, List<NavigationMapType> mapTypes, List<int[]> whitePoints, List<int[]> shuttlePoints) {
+        try {
+            Object data = redisUtil.get(RedisKeyType.MAP.key + lev);
+            if (data == null) {
+                return null;
+            }
+
+            BasMap basMap = JSON.parseObject(data.toString(), BasMap.class);
+            //瑙f瀽json鍦板浘鏁版嵁
+            ArrayList arrayList = JSON.parseObject(basMap.getData(), ArrayList.class);
+            List<List<MapNode>> lists = filterMap(mapTypes, arrayList, lev, whitePoints, shuttlePoints);//杩囨护鍦板浘鏁版嵁
+            return lists;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    //鑾峰彇鍘熷鍦板浘-JSON鏍煎紡鏁版嵁
+    public List<List<MapNode>> getJsonOriginData(Integer lev, List<NavigationMapType> mapTypes, List<int[]> whitePoints, List<int[]> shuttlePoints) {
         try {
             BasMap basMap = basMapService.selectLatestMap(lev);
             String originData = basMap.getOriginData();
@@ -158,9 +180,14 @@
                 lists = loadShuttle(lists, shuttlePoints);
             }
 
-            if (mapType.equals(NavigationMapType.SHUTTLE)) {
+            if (mapType.equals(NavigationMapType.LIFT)) {
                 //鍔犺浇璐у弶鎻愬崌鏈虹偣浣�
                 lists = loadForkLift(lists, lev);
+            }
+
+            if(mapType.equals(NavigationMapType.PATH_LOCK)) {
+                //鍔犺浇璺緞閿�
+                lists = loadPathLock(lists, lev);
             }
         }
 
@@ -339,4 +366,34 @@
         return lists;
     }
 
+    //鍔犺浇璺緞閿�
+    public List<List<MapNode>> loadPathLock(List<List<MapNode>> lists, Integer lev) {
+        try {
+            HashMap<String, Object> lockMap = new HashMap<>();
+            Object o = redisUtil.get(RedisKeyType.LOCK_MAP_NODES.key + lev);
+            if (o != null) {
+                lockMap = (HashMap<String, Object>) o;
+            }
+
+            for (Map.Entry<String, Object> entry : lockMap.entrySet()) {
+                String key = entry.getKey();
+                int row = Utils.getRow(key);
+                int bay = Utils.getBay(key);
+
+                List<MapNode> list = lists.get(row);
+                MapNode mapNode = list.get(bay);
+
+                //鑺傜偣璁剧疆鎴愯矾寰勯攣
+                mapNode.setValue(MapNodeType.LOCK.id);
+
+                //鏇存柊list
+                list.set(bay, mapNode);
+                lists.set(row, list);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return lists;
+    }
+
 }
diff --git a/src/main/java/com/zy/common/utils/NavigateMapUtils.java b/src/main/java/com/zy/common/utils/NavigateMapUtils.java
index 6a43158..733f56c 100644
--- a/src/main/java/com/zy/common/utils/NavigateMapUtils.java
+++ b/src/main/java/com/zy/common/utils/NavigateMapUtils.java
@@ -1,108 +1,101 @@
 package com.zy.common.utils;
 
-import com.alibaba.fastjson.JSON;
-import com.core.common.SpringUtils;
-import com.core.exception.CoolException;
-import com.zy.asrs.entity.BasMap;
 import com.zy.asrs.utils.Utils;
-import com.zy.common.model.MapNode;
 import com.zy.common.model.NavigateNode;
-import com.zy.common.model.enums.NavigationMapType;
-import com.zy.core.enums.MapNodeType;
 import com.zy.core.enums.RedisKeyType;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
-import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 
 @Component
 public class NavigateMapUtils {
+
+    @Autowired
+    private RedisUtil redisUtil;
 
     /**
      * 鍐欏叆璺緞鑺傜偣鏁版嵁鍒皉edis鍦板浘涓�
      * lock涓簍rue 绂佺敤搴撲綅锛宭ock涓篺alse鎭㈠搴撲綅
      */
     public synchronized boolean writeNavigateNodeToRedisMap(Integer lev, Integer shuttleNo, List<NavigateNode> nodes, boolean lock) {
-        RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class);
-        NavigateMapData navigateMapData = SpringUtils.getBean(NavigateMapData.class);
-        try {
-            if (nodes.isEmpty()) {
-                return true;
-            }
-
-            Object o = redisUtil.get(RedisKeyType.MAP.key + lev);
-            if (o == null) {
-                return false;
-            }
-
-            //鑾峰彇灏忚溅鑺傜偣
-            int[] shuttlePoint = Utils.getShuttlePoint(shuttleNo);
-            if (shuttlePoint == null) {
-                return false;
-            }
-
-            //鑾峰彇灏忚溅鑺傜偣-鑾峰彇闄ょ櫧鍚嶅崟澶栫殑鎸囧畾妤煎眰鍏ㄩ儴绌挎杞y鍧愭爣鐐�
-            List<int[]> shuttlePoints = Utils.getShuttlePoints(shuttleNo, lev);
-
-            BasMap basMap = JSON.parseObject(o.toString(), BasMap.class);
-            ArrayList arrayList = JSON.parseObject(basMap.getData(), ArrayList.class);
-            //甯﹀皬杞﹀湴鍥�
-            List<NavigationMapType> mapTypes = new ArrayList<>();
-            mapTypes.add(NavigationMapType.NONE);
-            mapTypes.add(NavigationMapType.SHUTTLE);
-            List<List<MapNode>> listsHasShuttle = navigateMapData.filterMap(mapTypes, arrayList, lev, null, shuttlePoints);//鑾峰彇甯﹀皬杞﹀湴鍥炬暟鎹�
-
-            //鑾峰彇鍏ㄩ儴鍦板浘鏁版嵁
-            List<List<MapNode>> lists = navigateMapData.rebuildData(arrayList);
-            //杞藉叆搴撲綅淇℃伅
-            lists = navigateMapData.loadLocMast(NavigationMapType.NONE.id, lists, lev, null);
-
-            //妫�娴嬭矾寰勬槸鍚﹁閿佸畾
-            if (lock) {
-                for (NavigateNode node : nodes) {
-                    //鍒ゆ柇鏄惁涓哄綋鍓嶅皬杞�
-                    if(shuttlePoint[0] == node.getX() && shuttlePoint[1] == node.getY()) {
-                        continue;
-                    }
-
-                    List<MapNode> listX = listsHasShuttle.get(node.getX());
-                    MapNode mapNode = listX.get(node.getY());
-                    if (mapNode.getValue() == MapNodeType.LOCK.id) {
-                        return false;//璺緞琚攣瀹氳繃锛岀姝㈠啀娆¢攣瀹�
-                    }
-                    if (mapNode.getValue() == MapNodeType.CAR.id) {
-                        return false;//璺緞瀛樺湪灏忚溅锛岀姝㈤攣瀹�
-                    }
-                }
-            }
-
-            //灏濊瘯閿佸畾/瑙i攣璺緞
-            for (NavigateNode node : nodes) {
-                if (node.getZ() != lev) {
-                    continue;
-                }
-
-                List<MapNode> listX = lists.get(node.getX());
-                MapNode mapNode = listX.get(node.getY());
-                if (lock) {
-                    mapNode.setValue(MapNodeType.LOCK.id);//绂佺敤搴撲綅
-                } else {
-                    mapNode.setValue(node.getNodeValue());//鎭㈠鍘熷鑺傜偣鏁版嵁
-                }
-
-                listX.set(node.getY(), mapNode);
-                lists.set(node.getX(), listX);
-            }
-            basMap.setData(JSON.toJSONString(lists));
-            basMap.setUpdateTime(new Date());
-            //灏嗘暟鎹簱鍦板浘鏁版嵁瀛樺叆redis
-            redisUtil.set(RedisKeyType.MAP.key + lev, JSON.toJSONString(basMap));
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
+        if (lock) {
+            return lockNodes(lev, shuttleNo, nodes);
+        }else {
+            return unlockNodes(lev, shuttleNo, nodes);
         }
-        return false;
+    }
+
+    public synchronized boolean lockNodes(Integer lev, Integer shuttleNo, List<NavigateNode> nodes) {
+        if (nodes.isEmpty()) {
+            return false;
+        }
+
+        HashMap<String, Object> lockMap = new HashMap<>();
+        Object o = redisUtil.get(RedisKeyType.LOCK_MAP_NODES.key + lev);
+        if (o != null) {
+            lockMap = (HashMap<String, Object>) o;
+        }
+
+        List<String> shuttleList = new ArrayList<>();
+        //鑾峰彇灏忚溅鑺傜偣-鑾峰彇闄ょ櫧鍚嶅崟澶栫殑鎸囧畾妤煎眰鍏ㄩ儴绌挎杞y鍧愭爣鐐�
+        List<int[]> shuttlePoints = Utils.getShuttlePoints(shuttleNo, lev);
+        for (int[] point : shuttlePoints) {
+            String key = Utils.getLocNo(point[0], point[1], lev);
+            shuttleList.add(key);
+        }
+
+        HashMap<String, Object> tmpMap = new HashMap<>();
+        for (NavigateNode node : nodes) {
+            String key = Utils.getLocNo(node.getX(), node.getY(), lev);
+
+            //鍒ゆ柇鑺傜偣鏄惁鏈夊皬杞�
+            if(shuttleList.contains(key)) {
+                return false;
+            }
+
+            //鍒ゆ柇鑺傜偣鏄惁琚攣瀹�
+            if(lockMap.containsKey(key)) {
+                return false;
+            }
+
+            tmpMap.put(key, shuttleNo);
+        }
+
+        lockMap.putAll(tmpMap);
+
+        redisUtil.set(RedisKeyType.LOCK_MAP_NODES.key + lev, lockMap);
+        return true;
+    }
+
+    public synchronized boolean unlockNodes(Integer lev, Integer shuttleNo, List<NavigateNode> nodes) {
+        if (nodes.isEmpty()) {
+            return false;
+        }
+
+        HashMap<String, Object> lockMap = new HashMap<>();
+        Object o = redisUtil.get(RedisKeyType.LOCK_MAP_NODES.key + lev);
+        if (o != null) {
+            lockMap = (HashMap<String, Object>) o;
+        }
+
+        for (NavigateNode node : nodes) {
+            String key = Utils.getLocNo(node.getX(), node.getY(), lev);
+
+            if(!lockMap.containsKey(key)) {
+                continue;
+            }
+
+            Integer deviceNo = (Integer) lockMap.get(key);
+            if(deviceNo.equals(shuttleNo)) {
+                lockMap.remove(key);
+            }
+        }
+        lockMap.putAll(lockMap);
+        redisUtil.set(RedisKeyType.LOCK_MAP_NODES.key + lev, lockMap);
+        return true;
     }
 
 }
diff --git a/src/main/java/com/zy/common/utils/NavigateSolution.java b/src/main/java/com/zy/common/utils/NavigateSolution.java
index 3fc56ed..6910520 100644
--- a/src/main/java/com/zy/common/utils/NavigateSolution.java
+++ b/src/main/java/com/zy/common/utils/NavigateSolution.java
@@ -104,6 +104,18 @@
     }
 
     public NavigateNode astarSearchJava(NavigateNode start, NavigateNode end) {
+        //榛樿鍦板浘姣嶈建鏂瑰悜x
+        String mapDirection = "x";
+        ConfigService configService = SpringUtils.getBean(ConfigService.class);
+        if (configService != null) {
+            Config config = configService.selectOne(new EntityWrapper<Config>()
+                    .eq("code", "direction_map")
+                    .eq("status", 1));
+            if (config != null) {
+                mapDirection = config.getValue();
+            }
+        }
+
         //鎶婄涓�涓紑濮嬬殑缁撶偣鍔犲叆鍒癘pen琛ㄤ腑
         this.Open.add(start);
         //涓诲惊鐜�
@@ -118,7 +130,7 @@
             //灏嗚繖涓粨鐐瑰姞鍏ュ埌Close琛ㄤ腑
             Close.add(current_node);
             //瀵瑰綋鍓嶇粨鐐硅繘琛屾墿灞曪紝寰楀埌涓�涓洓鍛ㄧ粨鐐圭殑鏁扮粍
-            ArrayList<NavigateNode> neighbour_node = extend_current_node(current_node);
+            ArrayList<NavigateNode> neighbour_node = extend_current_node(current_node, mapDirection);
             //瀵硅繖涓粨鐐归亶鍘嗭紝鐪嬫槸鍚︽湁鐩爣缁撶偣鍑虹幇
             for (NavigateNode node : neighbour_node) {
                 // G + H + E (瀵瑰惎鍙戝嚱鏁板鍔犲幓鎷愮偣鏂规calcNodeExtraCost)
@@ -144,19 +156,7 @@
     }
 
 
-    public ArrayList<NavigateNode> extend_current_node(NavigateNode current_node) {
-        //榛樿鍦板浘姣嶈建鏂瑰悜x
-        String mapDirection = "x";
-        ConfigService configService = SpringUtils.getBean(ConfigService.class);
-        if (configService != null) {
-            Config config = configService.selectOne(new EntityWrapper<Config>()
-                    .eq("code", "direction_map")
-                    .eq("status", 1));
-            if (config != null) {
-                mapDirection = config.getValue();
-            }
-        }
-
+    public ArrayList<NavigateNode> extend_current_node(NavigateNode current_node, String mapDirection) {
         //鑾峰彇褰撳墠缁撶偣鐨剎, y
         int x = current_node.getX();
         int y = current_node.getY();
@@ -193,14 +193,12 @@
         if (mapDirection.equals("x")) {//姣嶈建x鏂瑰悜
             if (map[x][y] == MapNodeType.MAIN_PATH.id) {
                 //姣嶈建鎵嶈兘杩涜涓婁笅绉诲姩
-                if (is_valid(x + 1, y))
-                {
+                if (is_valid(x + 1, y)) {
                     NavigateNode node = new NavigateNode(x + 1, y);
                     node.setNodeValue(map[x + 1][y]);
                     neighbour_node.add(node);
                 }
-                if (is_valid(x - 1, y))
-                {
+                if (is_valid(x - 1, y)) {
                     NavigateNode node = new NavigateNode(x - 1, y);
                     node.setNodeValue(map[x - 1][y]);
                     neighbour_node.add(node);
@@ -209,30 +207,26 @@
 
             if (map[x][y] == MapNodeType.NORMAL_PATH.id || map[x][y] == MapNodeType.MAIN_PATH.id || map[x][y] == MapNodeType.CONVEYOR_CAR_GO.id || map[x][y] == MapNodeType.CHARGE.id || map[x][y] == MapNodeType.LIFT.id) {
                 //瀛愯建鍜屾瘝杞ㄣ�佸皬杞﹀彲璧拌緭閫佺嚎銆佸厖鐢垫々銆佹彁鍗囨満鎵嶈兘杩涜宸﹀彸绉诲姩
-                if (is_valid(x, y + 1))
-                {
+                if (is_valid(x, y + 1)) {
                     NavigateNode node = new NavigateNode(x, y + 1);
                     node.setNodeValue(map[x][y + 1]);
                     neighbour_node.add(node);
                 }
-                if (is_valid(x, y - 1))
-                {
+                if (is_valid(x, y - 1)) {
                     NavigateNode node = new NavigateNode(x, y - 1);
                     node.setNodeValue(map[x][y - 1]);
                     neighbour_node.add(node);
                 }
             }
-        }else if (mapDirection.equals("y")) {//姣嶈建y鏂瑰悜
+        } else if (mapDirection.equals("y")) {//姣嶈建y鏂瑰悜
             if (map[x][y] == MapNodeType.MAIN_PATH.id) {
                 //姣嶈建鎵嶈兘杩涜宸﹀彸绉诲姩
-                if (is_valid(x, y + 1))
-                {
+                if (is_valid(x, y + 1)) {
                     NavigateNode node = new NavigateNode(x, y + 1);
                     node.setNodeValue(map[x][y + 1]);
                     neighbour_node.add(node);
                 }
-                if (is_valid(x, y - 1))
-                {
+                if (is_valid(x, y - 1)) {
                     NavigateNode node = new NavigateNode(x, y - 1);
                     node.setNodeValue(map[x][y - 1]);
                     neighbour_node.add(node);
@@ -241,14 +235,12 @@
 
             if (map[x][y] == MapNodeType.NORMAL_PATH.id || map[x][y] == MapNodeType.MAIN_PATH.id || map[x][y] == MapNodeType.CONVEYOR_CAR_GO.id || map[x][y] == MapNodeType.CHARGE.id || map[x][y] == MapNodeType.LIFT.id) {
                 //瀛愯建鍜屾瘝杞ㄣ�佸皬杞﹀彲璧拌緭閫佺嚎銆佸厖鐢垫々銆佹彁鍗囨満鎵嶈兘杩涜涓婁笅绉诲姩
-                if (is_valid(x + 1, y))
-                {
+                if (is_valid(x + 1, y)) {
                     NavigateNode node = new NavigateNode(x + 1, y);
                     node.setNodeValue(map[x + 1][y]);
                     neighbour_node.add(node);
                 }
-                if (is_valid(x - 1, y))
-                {
+                if (is_valid(x - 1, y)) {
                     NavigateNode node = new NavigateNode(x - 1, y);
                     node.setNodeValue(map[x - 1][y]);
                     neighbour_node.add(node);
diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java
index c6e94ab..dd88872 100644
--- a/src/main/java/com/zy/common/utils/NavigateUtils.java
+++ b/src/main/java/com/zy/common/utils/NavigateUtils.java
@@ -2,7 +2,6 @@
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
-import com.core.common.SpringUtils;
 import com.core.exception.CoolException;
 import com.zy.asrs.utils.Utils;
 import com.zy.common.model.MapNode;
@@ -288,10 +287,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,7 +308,7 @@
                 //鐩磋绾胯矾
                 navigateNode.setDirection(direction);//璁剧疆琛岃蛋鏂瑰悜
             }
-            Integer distance = getXToNextDistance(navigateNode);//鑾峰彇褰撳墠鐐瑰埌涓嬩竴鐐圭殑琛岃蛋璺濈
+            Integer distance = getXToNextDistance(mapNodes, navigateNode);//鑾峰彇褰撳墠鐐瑰埌涓嬩竴鐐圭殑琛岃蛋璺濈
             navigateNode.setMoveDistance(distance);
         }
 
@@ -362,25 +364,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;
     }
 
diff --git a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
index 4ad11e8..171640f 100644
--- a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
+++ b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
@@ -17,7 +17,6 @@
 import com.zy.core.enums.MapNodeType;
 import com.zy.core.enums.ShuttleRunDirection;
 import com.zy.core.enums.SlaveType;
-import com.zy.core.model.ShuttleSlave;
 import com.zy.core.model.command.ShuttleAssignCommand;
 import com.zy.core.model.command.ShuttleCommand;
 import com.zy.core.model.protocol.ShuttleProtocol;
@@ -91,9 +90,12 @@
             lockNode.add(node.clone());
         }
 
+        long startTime = System.currentTimeMillis();
         List<ShuttleCommand> commands = new ArrayList<>();
         //鑾峰彇鍒嗘璺緞
         List<List<NavigateNode>> data = navigateUtils.getSectionPath(nodeList);
+        long endTime = System.currentTimeMillis();
+        News.info("getSection path time:{}", (endTime - startTime));
         //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护
         for (List<NavigateNode> nodes : data) {
             //寮�濮嬭矾寰�
diff --git a/src/main/java/com/zy/core/enums/RedisKeyType.java b/src/main/java/com/zy/core/enums/RedisKeyType.java
index a6550d9..da700bd 100644
--- a/src/main/java/com/zy/core/enums/RedisKeyType.java
+++ b/src/main/java/com/zy/core/enums/RedisKeyType.java
@@ -14,6 +14,9 @@
     FORK_LIFT_PUT_COMPLETE("fork_lift_put_complete_"),
     OUT_TASK_PREVIEW_DISPATCH_FORKLIFT("out_task_preview_dispatch_forklift_"),
 
+    //鍦板浘閿佸畾鑺傜偣
+    LOCK_MAP_NODES("lock_map_nodes_"),
+
     //璁惧娑堟伅KEY
     DEVICE_SHUTTLE_MSG_KEY_("deviceShuttleMsgKey_"),
     DEVICE_FORK_LIFT_MSG_KEY_("deviceForkLiftMsgKey_"),
diff --git a/src/main/webapp/views/admin/locMap/locMap.html b/src/main/webapp/views/admin/locMap/locMap.html
index 4b25c9a..1942958 100644
--- a/src/main/webapp/views/admin/locMap/locMap.html
+++ b/src/main/webapp/views/admin/locMap/locMap.html
@@ -321,7 +321,7 @@
       //鑾峰彇鍦板浘鏁版嵁
       getMap(lev) {
         this.sendWs(JSON.stringify({
-          "url": "/console/map/auth",
+          "url": "/console/locMap/auth",
           "data": lev
         }))
       },
@@ -697,6 +697,8 @@
           this.setSiteInfo(JSON.parse(result.data))
         }else if (result.url == "/console/map/auth") {
           this.setMap(JSON.parse(result.data))
+        }else if (result.url == "/console/locMap/auth") {
+          this.setMap(JSON.parse(result.data))
         }else if (result.url == "/console/barcode/output/site") {
           this.setCodeData(JSON.parse(result.data))
         }

--
Gitblit v1.9.1