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