From 78478aecdc7b125e16cae01954f3a0ad25644b17 Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期一, 21 四月 2025 17:02:28 +0800 Subject: [PATCH] #调度避障算法 --- src/main/java/com/zy/common/utils/ShuttleOperaUtils.java | 450 +++++++++++++++++++++++++++++++------------------ src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 36 ++++ 2 files changed, 319 insertions(+), 167 deletions(-) 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 6699984..ffb8a10 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -179,6 +179,15 @@ return false; } + //妫�娴嬮殰纰嶇墿杞� + boolean checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{ + add(shuttleProtocol.getShuttleNo()); + }}); + if (checkObstacle) { + News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo()); + return false; + } + ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� assignCommand.setTaskMode(ShuttleTaskModeType.TRANSPORT.id);//灏忚溅绉诲簱浠诲姟 @@ -351,6 +360,15 @@ //灏忚溅涓嶅湪杈撻�佺珯鐐逛綅缃� shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐� News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屾湭鍒拌揪杈撻�佺珯鐐癸紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + //妫�娴嬮殰纰嶇墿杞� + boolean checkObstacle = shuttleOperaUtils.checkObstacle(liftSta.getLocNo(), new ArrayList<Integer>() {{ + add(shuttleProtocol.getShuttleNo()); + }}); + if (checkObstacle) { + News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo()); return false; } @@ -1361,6 +1379,15 @@ return false; } + //妫�娴嬮殰纰嶇墿杞� + boolean checkObstacle = shuttleOperaUtils.checkObstacle(basShuttleCharge.getWaitLocNo(), new ArrayList<Integer>() {{ + add(shuttleProtocol.getShuttleNo()); + }}); + if (checkObstacle) { + News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo()); + return false; + } + //璋冨害灏忚溅鍘诲緟鏈轰綅 boolean dispatched = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), basShuttleCharge.getWaitLocNo(), wrkMast.getShuttleNo()); if (!dispatched) { @@ -1744,6 +1771,15 @@ return false;//璺緞璁$畻澶辫触 } + //妫�娴嬮殰纰嶇墿杞� + boolean checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{ + add(shuttleProtocol.getShuttleNo()); + }}); + if (checkObstacle) { + News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo()); + return false; + } + assignCommand.setCommands(commands); wrkMast.setWrkSts(WrkStsType.MOVE_SHUTTLE.sts);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 310.灏忚溅绉诲姩涓� diff --git a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java index 9451d91..9292a44 100644 --- a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java +++ b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java @@ -1,22 +1,31 @@ package com.zy.common.utils; import com.baomidou.mybatisplus.mapper.EntityWrapper; +import com.core.common.SpringUtils; +import com.core.exception.CoolException; import com.zy.asrs.entity.BasShuttle; import com.zy.asrs.service.BasShuttleService; import com.zy.asrs.utils.Utils; import com.zy.common.model.NavigateNode; +import com.zy.common.model.enums.NavigationMapType; import com.zy.core.News; +import com.zy.core.cache.SlaveConnection; +import com.zy.core.dispatcher.ShuttleDispatchUtils; +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; +import com.zy.core.properties.SlaveProperties; import com.zy.core.thread.ShuttleThread; +import com.zy.system.entity.Config; +import com.zy.system.service.ConfigService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; +import java.util.*; /** * 鍥涘悜杞︽搷浣滃伐鍏风被 @@ -31,6 +40,14 @@ private NavigateUtils navigateUtils; @Autowired private NavigateMapUtils navigateMapUtils; + @Autowired + private NavigateMapData navigateMapData; + @Autowired + private ConfigService configService; + @Autowired + private SlaveProperties slaveProperties; + @Autowired + private ShuttleDispatchUtils shuttleDispatchUtils; public synchronized List<ShuttleCommand> getStartToTargetCommands(String startLocNo, String endLocNo, Integer mapType, ShuttleAssignCommand assignCommand, ShuttleThread shuttleThread) { return getStartToTargetCommands(startLocNo, endLocNo, mapType, null, assignCommand, shuttleThread); @@ -189,6 +206,269 @@ return commands; } + //妫�娴嬮殰纰嶇墿杞� + public synchronized boolean checkObstacle(String locNo, List<Integer> whiteShuttles) { + int innerCircle = 0; + int outerCircle = 3; + Config avoidInnerCircleConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "avoidInnerCircle")); + if(avoidInnerCircleConfig != null) { + innerCircle = Integer.parseInt(avoidInnerCircleConfig.getValue()); + } + + Config avoidOuterCircleConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "avoidOuterCircle")); + if(avoidOuterCircleConfig != null) { + outerCircle = Integer.parseInt(avoidOuterCircleConfig.getValue()); + } + + ArrayList<int[]> whiteShuttlePointList = new ArrayList<>(); + for (Integer shuttle : whiteShuttles) { + //鑾峰彇鍥涘悜绌挎杞︾嚎绋� + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle); + if (shuttleThread == null) { + continue; + } + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); + if (shuttleProtocol == null) { + continue; + } + String currentLocNo = shuttleProtocol.getCurrentLocNo(); + int[] shuttleArr = NavigatePositionConvert.positionToXY(currentLocNo); + whiteShuttlePointList.add(shuttleArr); + } + + //鑾峰彇鍐呭湀鑺傜偣 + List<NavigateNode> innerNodes = getInnerNodes(locNo, innerCircle, whiteShuttlePointList); + List<Integer> nodesCar = findNodesCar(innerNodes); + if (nodesCar.isEmpty()) { + return false;//鍐呭湀涓棤杞� + } + + //鑾峰彇澶栧湀鑺傜偣 + List<NavigateNode> outerNodes = getOuterNodes(locNo, outerCircle, whiteShuttlePointList, innerNodes); + + //灏嗗唴鍦堣妭鐐逛腑闅滅灏忚溅璋冪 + for (Integer shuttleNo : nodesCar) { + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo); + if (shuttleThread == null) { + continue; + } + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); + if (shuttleProtocol == null) { + continue; + } + if (!shuttleThread.isIdle()) { + continue; + } + + int nextInt = new Random().nextInt(outerNodes.size()); + NavigateNode randomNode = outerNodes.get(nextInt); + String randomLocNo = NavigatePositionConvert.nodeToLocNo(randomNode); + shuttleDispatchUtils.dispatchShuttle(null, randomLocNo, shuttleNo); + } + + return true;//鍐呭湀涓湁杞� + } + + //鎼滅储鑺傜偣鍐呯殑灏忚溅缂栧彿 + private List<Integer> findNodesCar(List<NavigateNode> nodes) { + List<Integer> list = new ArrayList<>(); + + HashMap<String, Integer> carMap = new HashMap<>(); + for (ShuttleSlave slave : slaveProperties.getShuttle()) { + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, slave.getId()); + if (shuttleThread == null) { + continue; + } + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); + if (shuttleProtocol == null) { + continue; + } + String currentLocNo = shuttleProtocol.getCurrentLocNo(); + if (currentLocNo == null) { + continue; + } + + carMap.put(currentLocNo, slave.getId()); + } + + for (NavigateNode node : nodes) { + String locNo = NavigatePositionConvert.nodeToLocNo(node); + if (carMap.containsKey(locNo)) { + list.add(carMap.get(locNo)); + } + } + + return list; + } + + private List<NavigateNode> getOuterNodes(String locNo, int outerCircle, List<int[]> whiteShuttlePointList, List<NavigateNode> innerNodes) { + List<NavigateNode> outerNodes = new ArrayList<>(); + List<NavigateNode> outerNodesTmp = new ArrayList<>(); + int lev = Utils.getLev(locNo); + int[] pointArr = NavigatePositionConvert.positionToXY(locNo); + NavigateNode currentNode = new NavigateNode(pointArr[0], pointArr[1]); + + int[][] map = navigateMapData.getDataFromRedis(lev, NavigationMapType.NORMAL.id, null, whiteShuttlePointList); + int nodeValue = map[pointArr[0]][pointArr[1]]; + currentNode.setNodeValue(nodeValue); + + for (int i = 0; i < outerCircle; i++) { + int idx = i + 1; + List<NavigateNode> list = extend_nodes(map, currentNode, idx); + if (list.isEmpty()) { + continue; + } + outerNodesTmp.addAll(list); + } + + for (NavigateNode node : outerNodesTmp) { + boolean flag = false; + for (NavigateNode innerNode : innerNodes) { + if(node.getX() == innerNode.getX() && node.getY() == innerNode.getY()) { + flag = true; + break; + } + } + + if(flag) { + continue; + } + + outerNodes.add(node); + } + + return outerNodes; + } + + private List<NavigateNode> getInnerNodes(String locNo, int innerCircle, List<int[]> whiteShuttlePointList) { + List<NavigateNode> innerNodes = new ArrayList<>(); + int lev = Utils.getLev(locNo); + int[] pointArr = NavigatePositionConvert.positionToXY(locNo); + NavigateNode currentNode = new NavigateNode(pointArr[0], pointArr[1]); + currentNode.setZ(lev); + innerNodes.add(currentNode); + + int[][] map = navigateMapData.getDataFromRedis(lev, NavigationMapType.NORMAL.id, null, whiteShuttlePointList); + int nodeValue = map[pointArr[0]][pointArr[1]]; + currentNode.setNodeValue(nodeValue); + + for (int i = 0; i < innerCircle; i++) { + int idx = i + 1; + List<NavigateNode> list = extend_nodes(map, currentNode, idx); + if (list.isEmpty()) { + continue; + } + innerNodes.addAll(list); + } + + return innerNodes; + } + + private List<NavigateNode> extend_nodes(int[][] map, NavigateNode startNode, int innerCircleIdx) { + //榛樿鍦板浘姣嶈建鏂瑰悜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(); + } + } + + ArrayList<NavigateNode> nodes = new ArrayList<>(); + int x = startNode.getX(); + int y = startNode.getY(); + int z = startNode.getZ(); + + if (mapDirection.equals("x")) {//姣嶈建x鏂瑰悜 + if (map[x][y] == MapNodeType.MAIN_PATH.id) { + //姣嶈建鎵嶈兘杩涜涓婁笅绉诲姩 + if (is_valid(map, x + innerCircleIdx, y)) { + NavigateNode node = new NavigateNode(x + innerCircleIdx, y); + node.setNodeValue(map[x + innerCircleIdx][y]); + node.setZ(z); + 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); + nodes.add(node); + } + } + + 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(map, x, y + innerCircleIdx)) { + NavigateNode node = new NavigateNode(x, y + innerCircleIdx); + node.setNodeValue(map[x][y + innerCircleIdx]); + node.setZ(z); + 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); + nodes.add(node); + } + } + }else if (mapDirection.equals("y")) {//姣嶈建y鏂瑰悜 + if (map[x][y] == MapNodeType.MAIN_PATH.id) { + //姣嶈建鎵嶈兘杩涜宸﹀彸绉诲姩 + if (is_valid(map, x, y + innerCircleIdx)) { + NavigateNode node = new NavigateNode(x, y + innerCircleIdx); + node.setNodeValue(map[x][y + innerCircleIdx]); + node.setZ(z); + 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); + nodes.add(node); + } + } + + 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(map, x + innerCircleIdx, y)) { + NavigateNode node = new NavigateNode(x + innerCircleIdx, y); + node.setNodeValue(map[x + innerCircleIdx][y]); + node.setZ(z); + 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); + nodes.add(node); + } + } + }else { + throw new CoolException("寮傚父鍦板浘鏂瑰悜"); + } + + return nodes; + } + + private boolean is_valid(int[][] map, int x, int y) { + if (x < 0 || x >= map.length + || y < 0 || y >= map[0].length) { + return false; + } + // 濡傛灉缁撶偣鐨勪綅缃皬浜�0锛屽垯涓嶅悎娉� + if (map[x][y] < 0) { + return false; + } + + //浠ヤ笂鎯呭喌閮芥病鏈夊垯鍚堟硶 + return true; + } + // private boolean checkSimilarityPath(Motion motion, ShuttleAssignCommand assignCommand) { // String movePath = motion.getMovePath(); // if (Cools.isEmpty(movePath)) { @@ -235,170 +515,6 @@ // } // // return true; -// } - -// /** -// * 璁$畻骞惰幏鍙栧皬杞︿粠璧风偣鈥斺�斾腑闂寸偣鈥斺�旂洰鏍囩偣涔嬮棿鎼繍璐х墿鍔ㄤ綔鍛戒护 -// * @param shuttleNo 灏忚溅鍙� -// * @param wrkNo 宸ヤ綔鍙� -// * @param startPoint 璧风偣锛堝皬杞﹀綋鍓嶄綅缃級 -// * @param targetPoint 鐩爣鐐癸紙璐х墿鐩爣浣嶇疆锛� -// */ -// public static synchronized ShuttleOperaResult getShuttleTransportCommands(Integer shuttleNo, Integer wrkNo, String startPoint, String targetPoint) { -// //琛岃蛋璺緞 -// ArrayList<NavigateNode> nodes = new ArrayList<>(); -// //鍛戒护闆嗗悎 -// ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>(); -// -// //璁$畻璧风偣鍒扮洰鏍囩偣鍛戒护 -// ShuttleOperaResult result = getStartToTargetCommands(shuttleNo, wrkNo, startPoint, targetPoint, NavigationMapType.DFX.id); -// if (result == null) { -// //璁$畻缁撴灉蹇呴』涓嶄负绌猴紝鍚﹀垯璁$畻澶辫触 -// return null; -// } -// nodes.addAll(result.getNodes()); -// //璧风偣浣嶇疆涓嬪彂涓�鏉¢《鍗囧懡浠ゅ皢璐х墿杩涜鎼繍 -// commands.add(NyHttpUtils.getPalletLiftCommand(shuttleNo, wrkNo, true)); -// commands.addAll(result.getCommands());//璧风偣鍒扮洰鏍囩偣绉诲姩鍛戒护 -// //褰撳皬杞﹁璧板埌鐩爣鐐瑰悗锛岄渶瑕佷笅鍙戜竴鏉′笅闄嶅懡浠ゅ皢璐х墿鏀剧疆 -// commands.add(NyHttpUtils.getPalletLiftCommand(shuttleNo, wrkNo, false)); -// return result(commands, nodes); -// } -// -// /** -// * 璁$畻骞惰幏鍙栧皬杞︿粠璧风偣鈥斺�斾腑闂寸偣鈥斺�旂洰鏍囩偣涔嬮棿鎼繍璐х墿鍔ㄤ綔鍛戒护 -// * @param shuttleNo 灏忚溅鍙� -// * @param wrkNo 宸ヤ綔鍙� -// * @param startPoint 璧风偣锛堝皬杞﹀綋鍓嶄綅缃級 -// * @param middlePoint 涓棿鐐癸紙璐х墿浣嶇疆锛� -// * @param targetPoint 鐩爣鐐癸紙璐х墿鐩爣浣嶇疆锛� -// */ -// public static synchronized ShuttleOperaResult getShuttleTransportCommands(Integer shuttleNo, Integer wrkNo, String startPoint, String middlePoint, String targetPoint) { -// //琛岃蛋璺緞 -// ArrayList<NavigateNode> nodes = new ArrayList<>(); -// //鍛戒护闆嗗悎 -// ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>(); -// -// if (!startPoint.equals(middlePoint)) {//璧风偣鍜屼腑闂寸偣涓嶄竴鑷达紝闇�瑕佽绠楄捣鐐瑰埌涓棿鐐硅矾寰� -// //璁$畻璧风偣鍒颁腑闂寸偣鍛戒护 -// ShuttleOperaResult result1 = getStartToTargetCommands(shuttleNo, wrkNo, startPoint, middlePoint, NavigationMapType.NORMAL.id); -// if (result1 == null) { -// //璁$畻缁撴灉蹇呴』涓嶄负绌猴紝鍚﹀垯璁$畻澶辫触 -// return null; -// } -// nodes.addAll(result1.getNodes()); -// commands.addAll(result1.getCommands()); -// } -// -// //璁$畻涓棿鐐瑰埌鐩爣鐐瑰懡浠� -// ShuttleOperaResult result2 = getStartToTargetCommands(shuttleNo, wrkNo, middlePoint, targetPoint, NavigationMapType.DFX.id); -// if (result2 == null) { -// //璁$畻缁撴灉蹇呴』涓嶄负绌猴紝鍚﹀垯璁$畻澶辫触 -// return null; -// } -// nodes.addAll(result2.getNodes()); -// //褰撳皬杞﹁璧板埌涓棿鐐瑰悗锛岄渶瑕佷笅鍙戜竴鏉¢《鍗囧懡浠ゅ皢璐х墿杩涜鎼繍 -// commands.add(NyHttpUtils.getPalletLiftCommand(shuttleNo, wrkNo, true)); -// commands.addAll(result2.getCommands());//涓棿鐐瑰埌鐩爣鐐圭Щ鍔ㄥ懡浠� -// //褰撳皬杞﹁璧板埌鐩爣鐐瑰悗锛岄渶瑕佷笅鍙戜竴鏉′笅闄嶅懡浠ゅ皢璐х墿鏀剧疆 -// commands.add(NyHttpUtils.getPalletLiftCommand(shuttleNo, wrkNo, false)); -// return result(commands, nodes); -// } -// -// /** -// * 鑾峰彇璧风偣鍒扮洰鏍囩偣琛岃蛋鍛戒护 -// */ -// public synchronized ShuttleOperaResult getStartToTargetCommands(Integer shuttleNo, Integer wrkNo, String startPoint, String targetPoint, Integer mapType) { -// NavigateMapUtils navigateMapUtils = SpringUtils.getBean(NavigateMapUtils.class); -// //璁$畻璧风偣鍒扮洰鏍囩偣琛岃蛋鑺傜偣 -// List<NavigateNode> calc = NavigateUtils.calc(startPoint, targetPoint, mapType, Utils.getShuttlePoints(shuttleNo, Utils.getLev(startPoint)), null); -// if (calc == null) { -// return null; -// } -// -// //鍛戒护闆嗗悎 -// ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>(); -// List<NavigateNode> allNode = new ArrayList<>(); -// -// //鑾峰彇鍒嗘璺緞 -// ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(calc); -// //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护 -// for (ArrayList<NavigateNode> nodes : data) { -// //寮�濮嬭矾寰� -// NavigateNode startPath = nodes.get(0); -// //鐩爣璺緞 -// NavigateNode targetPath = nodes.get(nodes.size() - 1); -// //鑾峰彇绉诲姩鍛戒护 -// NyShuttleHttpCommand moveCommand = NyHttpUtils.getMoveCommand(shuttleNo, wrkNo, startPath, targetPath); -// moveCommand.setNodes(nodes);//灏嗚璧拌妭鐐规坊鍔犲埌姣忎竴姝ュ懡浠や腑 -// commands.add(moveCommand); -// -// allNode.addAll(nodes); -// } -// -// boolean result = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(startPoint), shuttleNo, allNode, true);//閿佸畾璺緞 -// if (!result) { -// return null;//璺緞閿佸畾澶辫触 -// } -// return result(commands, calc); -// } -// -// /** -// * 鑾峰彇璧风偣鍒扮洰鏍囩偣琛岃蛋鍛戒护(鍙紶鐧藉悕鍗�) -// */ -// public static synchronized ShuttleOperaResult getStartToTargetCommandsByWhites(Integer shuttleNo, Integer wrkNo, String startPoint, String targetPoint, Integer mapType, List<int[]> whites) { -// NavigateMapUtils navigateMapUtils = SpringUtils.getBean(NavigateMapUtils.class); -// //璁$畻璧风偣鍒扮洰鏍囩偣琛岃蛋鑺傜偣 -// List<NavigateNode> calc = NavigateUtils.calc(startPoint, targetPoint, mapType, Utils.getShuttlePoints(shuttleNo, Utils.getLev(startPoint)), whites); -// if (calc == null) { -// return null; -// } -// -// //鍛戒护闆嗗悎 -// ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>(); -// List<NavigateNode> allNode = new ArrayList<>(); -// -// //鑾峰彇鍒嗘璺緞 -// ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(calc); -// //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护 -// for (ArrayList<NavigateNode> nodes : data) { -// //寮�濮嬭矾寰� -// NavigateNode startPath = nodes.get(0); -// //鐩爣璺緞 -// NavigateNode targetPath = nodes.get(nodes.size() - 1); -// //鑾峰彇绉诲姩鍛戒护 -// NyShuttleHttpCommand moveCommand = NyHttpUtils.getMoveCommand(shuttleNo, wrkNo, startPath, targetPath); -// moveCommand.setNodes(nodes);//灏嗚璧拌妭鐐规坊鍔犲埌姣忎竴姝ュ懡浠や腑 -// commands.add(moveCommand); -// -// allNode.addAll(nodes); -// } -// -// //閿佸畾璺緞鏃跺墧闄ょ櫧鍚嶅崟鑺傜偣 -// ArrayList<NavigateNode> nodes = new ArrayList<>(); -// for (NavigateNode node : allNode) { -// boolean flag = false; -// for (int[] white : whites) { -// if (node.getX() == white[0] && node.getY() == white[1]) { -// flag = true;//瀛樺湪鐧藉悕鍗曡妭鐐� -// break;//璺宠繃鐧藉悕鍗曡妭鐐� -// } -// } -// -// if (!flag) { -// nodes.add(node); -// } -// } -// boolean result = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(startPoint), shuttleNo, nodes, true);//閿佸畾璺緞 -// if (!result) { -// return null;//璺緞閿佸畾澶辫触 -// } -// return result(commands, calc); -// } -// -// //杩斿洖缁撴灉闆� -// public static ShuttleOperaResult result(List<NyShuttleHttpCommand> commands, List<NavigateNode> nodes) { -// return new ShuttleOperaResult(commands, nodes); // } } -- Gitblit v1.9.1