From 87faf38ea97fffccc3cb4b16872da0188129aa66 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 13 五月 2025 09:08:12 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/common/utils/ShuttleOperaUtils.java | 567 +++++++++++++++++++++++++++++++++++++++----------------
1 files changed, 398 insertions(+), 169 deletions(-)
diff --git a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
index 4e09cb9..45f6a71 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.MapNode;
import com.zy.common.model.NavigateNode;
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);
@@ -44,15 +61,32 @@
Integer shuttleNo = shuttleProtocol.getShuttleNo();
//鑾峰彇灏忚溅绉诲姩閫熷害
Integer runSpeed = Optional.ofNullable(basShuttleService.selectOne(new EntityWrapper<BasShuttle>().eq("shuttle_no", shuttleNo)).getRunSpeed()).orElse(1000);
- List<NavigateNode> nodeList = navigateUtils.calc(startLocNo, endLocNo, mapType, Utils.getShuttlePoints(shuttleNo, Utils.getLev(startLocNo)), null);
+ List<NavigateNode> nodeList = navigateUtils.calc(startLocNo, endLocNo, mapType, Utils.getShuttlePoints(shuttleNo, Utils.getLev(startLocNo)), whites);
if (nodeList == null) {
News.error("{} dash {} can't find navigate path!", startLocNo, endLocNo);
+ shuttleThread.offerSystemMsg("{} dash {} can't find navigate path!", startLocNo, endLocNo);
return null;
}
List<NavigateNode> allNode = new ArrayList<>();
+ List<NavigateNode> lockNode = new ArrayList<>();
for (NavigateNode node : nodeList) {
allNode.add(node.clone());
+
+ if (whites != null) {
+ boolean flag = false;
+ for (int[] white : whites) {
+ if(white[0] == node.getX() && white[1] == node.getY()) {
+ flag = true;
+ break;
+ }
+ }
+
+ if (flag) {//鐧藉悕鍗曡烦杩囬攣瀹�
+ continue;
+ }
+ }
+ lockNode.add(node.clone());
}
List<ShuttleCommand> commands = new ArrayList<>();
@@ -78,9 +112,10 @@
assignCommand.setNodes(allNode);//褰撳墠浠诲姟鎵�鍗犵敤鐨勮妭鐐筶ist
- boolean result = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(startLocNo), shuttleNo, allNode, true);//閿佸畾璺緞
+ boolean result = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(startLocNo), shuttleNo, lockNode, true);//閿佸畾璺緞
if (!result) {
News.error("{} dash {} can't lock path!", startLocNo, endLocNo);
+ shuttleThread.offerSystemMsg("{} dash {} can't lock path!", startLocNo, endLocNo);
return null;//璺緞閿佸畾澶辫触
}
return commands;
@@ -103,6 +138,7 @@
boolean lockResult = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(endLocNo), shuttleProtocol.getShuttleNo(), unlockPath, false);//鎵�浣跨敤鐨勮矾寰勮繘琛岃В閿�
if (!lockResult) {
News.error("{} dash {} can't find unlock path!", startLocNo, endLocNo);
+ shuttleThread.offerSystemMsg("{} dash {} can't find unlock path!", startLocNo, endLocNo);
return null;//瑙i攣澶辫触
}
@@ -111,6 +147,7 @@
List<NavigateNode> nodeList = navigateUtils.calc(startLocNo, endLocNo, mapType, Utils.getShuttlePoints(shuttleNo, Utils.getLev(startLocNo)), null);
if (nodeList == null) {
News.error("{} dash {} can't find navigate path!", startLocNo, endLocNo);
+ shuttleThread.offerSystemMsg("{} dash {} can't find navigate path!", startLocNo, endLocNo);
return null;
}
@@ -169,6 +206,362 @@
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;
+ }
+
+ String targetLocNo = null;
+ for (NavigateNode node : outerNodes) {
+ String dispatchLocNo = NavigatePositionConvert.nodeToLocNo(node);
+ //鑾峰彇鍐呭湀鑺傜偣
+ List<NavigateNode> avoidInnerNodes = getInnerNodes(dispatchLocNo, innerCircle, new ArrayList<>());
+ //璁$畻鍐呭湀鏄惁鏈夊皬杞�
+ List<Integer> avoidNodesCar = findNodesCar(avoidInnerNodes);
+ if(!avoidNodesCar.isEmpty()) {
+ continue;
+ }
+ targetLocNo = dispatchLocNo;
+ break;
+ }
+
+ if(targetLocNo == null) {
+ continue;
+ }
+ shuttleDispatchUtils.dispatchShuttle(null, targetLocNo, shuttleNo);
+ }
+
+ return true;//鍐呭湀涓湁杞�
+ }
+
+ private HashMap<String, Integer> findCarMap() {
+ 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());
+ }
+ return carMap;
+ }
+
+ //鎼滅储鑺傜偣鍐呯殑灏忚溅缂栧彿
+ private List<Integer> findNodesCar(List<NavigateNode> nodes) {
+ List<Integer> list = new ArrayList<>();
+ HashMap<String, Integer> carMap = findCarMap();
+ 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]);
+ currentNode.setZ(lev);
+
+ List<List<MapNode>> lists = navigateMapData.getJsonData(lev, -1, null, null);//鑾峰彇瀹屾暣鍦板浘
+ int[][] map = navigateMapData.parseJsonDataArr(lists);
+ 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_outer_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);
+
+ List<List<MapNode>> lists = navigateMapData.getJsonData(lev, -1, null, null);//鑾峰彇瀹屾暣鍦板浘
+ int[][] map = navigateMapData.parseJsonDataArr(lists);
+ 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_inner_nodes(map, currentNode, idx);
+ if (list.isEmpty()) {
+ continue;
+ }
+
+ for (NavigateNode node : list) {
+ boolean flag = false;
+ for (int[] shuttlePoint : whiteShuttlePointList) {
+ if(node.getX() == shuttlePoint[0] && node.getY() == shuttlePoint[1]) {
+ flag = true;
+ break;
+ }
+ }
+ if(flag) {
+ continue;
+ }
+ innerNodes.add(node);
+ }
+ }
+
+ return innerNodes;
+ }
+
+ private List<NavigateNode> extend_inner_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);
+ 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 (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);
+ 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);
+ }
+ }
+ }
+ }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);
+ 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 (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);
+ 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);
+ }
+ }
+ }
+ }else {
+ throw new CoolException("寮傚父鍦板浘鏂瑰悜");
+ }
+
+ 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) {
+ 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)) {
@@ -215,170 +608,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