| | |
| | | package com.zy.common.utils; |
| | | |
| | | import com.core.common.SpringUtils; |
| | | import com.zy.asrs.utils.Utils; |
| | | import com.zy.common.model.NavigateNode; |
| | | import com.zy.common.model.NyShuttleOperaResult; |
| | |
| | | * @param startPoint 起点(小车当前位置) |
| | | * @param targetPoint 目标点(货物目标位置) |
| | | */ |
| | | public static NyShuttleOperaResult getShuttleTransportCommands(Integer shuttleNo, Integer wrkNo, String startPoint, String targetPoint) { |
| | | public static synchronized NyShuttleOperaResult getShuttleTransportCommands(Integer shuttleNo, Integer wrkNo, String startPoint, String targetPoint) { |
| | | //行走路径 |
| | | ArrayList<NavigateNode> nodes = new ArrayList<>(); |
| | | //命令集合 |
| | |
| | | * @param middlePoint 中间点(货物位置) |
| | | * @param targetPoint 目标点(货物目标位置) |
| | | */ |
| | | public static NyShuttleOperaResult getShuttleTransportCommands(Integer shuttleNo, Integer wrkNo, String startPoint, String middlePoint, String targetPoint) { |
| | | public static synchronized NyShuttleOperaResult getShuttleTransportCommands(Integer shuttleNo, Integer wrkNo, String startPoint, String middlePoint, String targetPoint) { |
| | | //行走路径 |
| | | ArrayList<NavigateNode> nodes = new ArrayList<>(); |
| | | //命令集合 |
| | |
| | | /** |
| | | * 获取起点到目标点行走命令 |
| | | */ |
| | | public static NyShuttleOperaResult getStartToTargetCommands(Integer shuttleNo, Integer wrkNo, String startPoint, String targetPoint, Integer mapType) { |
| | | public static synchronized NyShuttleOperaResult 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))); |
| | | 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); |
| | |
| | | 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 NyShuttleOperaResult 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); |
| | | //将每一段路径分成command指令 |
| | | 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); |
| | | } |
| | | |