| | |
| | | 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; |
| | | import com.zy.common.model.NavigateNode; |
| | |
| | | |
| | | //获取当前节点计算的层高,并赋值到每一个节点中 |
| | | int lev = Utils.getLev(startPoint); |
| | | NavigateSolution solution = new NavigateSolution(mapType, lev, whiteList, shuttlePoints); |
| | | int[][] map = solution.map; |
| | | |
| | | //初始化开始节点 |
| | | NavigateNode start = new NavigateNode(startArr[0], startArr[1]); |
| | | //开始节点无父节点 |
| | | start.setFather(null); |
| | | start.setNodeValue(map[startArr[0]][startArr[1]]); |
| | | |
| | | NavigateNode end = new NavigateNode(endArr[0], endArr[1]); |
| | | NavigateSolution solution = new NavigateSolution(mapType, lev, whiteList, shuttlePoints); |
| | | end.setNodeValue(map[endArr[0]][endArr[1]]); |
| | | //开始节点,不纳入禁用节点内计算 |
| | | |
| | | NavigateNode res_node = solution.astarSearchJava(start, end); |
| | |
| | | |
| | | //获取当前节点计算的层高,并赋值到每一个节点中 |
| | | int lev = Utils.getLev(startPoint); |
| | | NavigateSolution solution = new NavigateSolution(mapType, lev, whiteList, shuttlePoints); |
| | | int[][] map = solution.map; |
| | | |
| | | //初始化开始节点 |
| | | NavigateNode start = new NavigateNode(startArr[0], startArr[1]); |
| | | start.setNodeValue(map[startArr[0]][startArr[1]]); |
| | | //开始节点无父节点 |
| | | start.setFather(null); |
| | | |
| | | NavigateNode end = new NavigateNode(endArr[0], endArr[1]); |
| | | NavigateSolution solution = new NavigateSolution(mapType, lev, whiteList, shuttlePoints); |
| | | end.setNodeValue(map[endArr[0]][endArr[1]]); |
| | | //开始节点,不纳入禁用节点内计算 |
| | | |
| | | String pathStr = solution.astarSearchPython(start, end, pythonCalcPath); |
| | |
| | | //更新节点列表 |
| | | list.set(0, startNode); |
| | | return list; |
| | | } |
| | | |
| | | //计算带末端段落路径 |
| | | public ArrayList<ArrayList<NavigateNode>> calcEndPath(String startPoint, String endPoint, Integer mapType, List<int[]> shuttlePoints, List<int[]> whites, int lastPathPart) { |
| | | //计算路径 |
| | | List<NavigateNode> navigateNodes = calc(startPoint, endPoint, mapType, shuttlePoints, whites); |
| | | if (navigateNodes == null) { |
| | | News.error("{} dash {} can't find navigate path!", startPoint, endPoint); |
| | | return null; |
| | | } |
| | | |
| | | //获取分段路径 |
| | | ArrayList<ArrayList<NavigateNode>> partList = this.getSectionPath(navigateNodes); |
| | | //根据传入的末端段落路径,找到末端点位 |
| | | int partResult = partList.size() - lastPathPart; |
| | | if (partResult == 0) {//路径数量相同无需分割 |
| | | return partList; |
| | | } else if (partResult < 0) { |
| | | throw new CoolException("分段路径与末端路径数量计算异常"); |
| | | } |
| | | int pathIdx = partResult - 1; |
| | | ArrayList<ArrayList<NavigateNode>> filterList = new ArrayList<>(); |
| | | for (int i = 0; i <= pathIdx; i++) { |
| | | filterList.add(partList.get(i)); |
| | | } |
| | | return filterList; |
| | | } |
| | | |
| | | //计算末端段落地址 |
| | | public String calcEndLocation(String startPoint, String endPoint, Integer mapType, List<int[]> shuttlePoints, List<int[]> whites, int lastPathPart) { |
| | | ArrayList<ArrayList<NavigateNode>> endPath = calcEndPath(startPoint, endPoint, mapType, shuttlePoints, whites, lastPathPart); |
| | | if (endPath == null) { |
| | | return null; |
| | | } |
| | | |
| | | return findTargetLocation(endPath); |
| | | } |
| | | |
| | | public String findTargetLocation(List<NavigateNode> nodeList) { |
| | | ArrayList<ArrayList<NavigateNode>> sectionPath = this.getSectionPath(nodeList); |
| | | return findTargetLocation(sectionPath); |
| | | } |
| | | |
| | | public String findTargetLocation(ArrayList<ArrayList<NavigateNode>> partList) { |
| | | ArrayList<NavigateNode> nodes = partList.get(partList.size() - 1); |
| | | NavigateNode targetNode = nodes.get(0); |
| | | String locNo = NavigatePositionConvert.nodeToLocNo(targetNode); |
| | | return locNo; |
| | | } |
| | | |
| | | //判断当前节点到下一个节点是否为拐点 |
| | |
| | | return 0D; |
| | | } |
| | | |
| | | //检测库位路径是否可用(用于库位是否可移动检测) |
| | | public boolean checkLocPathIsAvailable(String startLocNo, String endLocNo) { |
| | | List<int[]> shuttlePoints = Utils.getShuttlePoints(0, Utils.getLev(startLocNo)); |
| | | //计算库位到提升机库位,路径是否可用 |
| | | List<NavigateNode> nodeList = this.calc(startLocNo, endLocNo, NavigationMapType.DFX.id, shuttlePoints, null); |
| | | if (nodeList == null) { |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | // //计算路径 |
| | | // List<NavigateNode> calc = calc("1000901", "1800201", NavigationMapType.NONE.id, null); |