|  |  |  | 
|---|
|  |  |  | * @param shuttleNo 小车号 | 
|---|
|  |  |  | * @param wrkNo 工作号 | 
|---|
|  |  |  | * @param startPoint 起点(小车当前位置) | 
|---|
|  |  |  | * @param targetPoint 目标点(货物目标位置) | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public static NyShuttleOperaResult getShuttleTransportCommands(Integer shuttleNo, Integer wrkNo, String startPoint, String targetPoint) { | 
|---|
|  |  |  | //行走路径 | 
|---|
|  |  |  | ArrayList<NavigateNode> nodes = new ArrayList<>(); | 
|---|
|  |  |  | //命令集合 | 
|---|
|  |  |  | ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //计算起点到目标点命令 | 
|---|
|  |  |  | NyShuttleOperaResult result = getStartToTargetCommands(shuttleNo, wrkNo, startPoint, targetPoint); | 
|---|
|  |  |  | 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 NyShuttleOperaResult getShuttleTransportCommands(Integer shuttleNo, Integer wrkNo, String startPoint, String middlePoint, String targetPoint) { | 
|---|
|  |  |  | //计算起点到中间点命令 | 
|---|
|  |  |  | NyShuttleOperaResult result1 = getStartToTargetCommands(shuttleNo, wrkNo, startPoint, middlePoint); | 
|---|
|  |  |  | //计算中间点到目标点命令 | 
|---|
|  |  |  | NyShuttleOperaResult result2 = getStartToTargetCommands(shuttleNo, wrkNo, middlePoint, targetPoint); | 
|---|
|  |  |  | if (result1 == null || result2 == null) { | 
|---|
|  |  |  | //两个计算结果必须不为空,否则计算失败 | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //行走路径 | 
|---|
|  |  |  | ArrayList<NavigateNode> nodes = new ArrayList<>(); | 
|---|
|  |  |  | nodes.addAll(result1.getNodes()); | 
|---|
|  |  |  | nodes.addAll(result2.getNodes()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //命令集合 | 
|---|
|  |  |  | ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>(); | 
|---|
|  |  |  | commands.addAll(result1.getCommands()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!startPoint.equals(middlePoint)) {//起点和中间点不一致,需要计算起点到中间点路径 | 
|---|
|  |  |  | //计算起点到中间点命令 | 
|---|
|  |  |  | NyShuttleOperaResult result1 = getStartToTargetCommands(shuttleNo, wrkNo, startPoint, middlePoint); | 
|---|
|  |  |  | if (result1 == null) { | 
|---|
|  |  |  | //计算结果必须不为空,否则计算失败 | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | nodes.addAll(result1.getNodes()); | 
|---|
|  |  |  | commands.addAll(result1.getCommands()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //计算中间点到目标点命令 | 
|---|
|  |  |  | NyShuttleOperaResult result2 = getStartToTargetCommands(shuttleNo, wrkNo, middlePoint, targetPoint); | 
|---|
|  |  |  | if (result2 == null) { | 
|---|
|  |  |  | //计算结果必须不为空,否则计算失败 | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | nodes.addAll(result2.getNodes()); | 
|---|
|  |  |  | //当小车行走到中间点后,需要下发一条顶升命令将货物进行搬运 | 
|---|
|  |  |  | commands.add(NyHttpUtils.getPalletLiftCommand(shuttleNo, wrkNo, true)); | 
|---|
|  |  |  | commands.addAll(result2.getCommands()); | 
|---|
|  |  |  | commands.addAll(result2.getCommands());//中间点到目标点移动命令 | 
|---|
|  |  |  | //当小车行走到目标点后,需要下发一条下降命令将货物放置 | 
|---|
|  |  |  | commands.add(NyHttpUtils.getPalletLiftCommand(shuttleNo, wrkNo, false)); | 
|---|
|  |  |  | return result(commands, nodes); | 
|---|
|  |  |  | 
|---|
|  |  |  | NavigateNode targetPath = nodes.get(nodes.size() - 1); | 
|---|
|  |  |  | //获取移动命令 | 
|---|
|  |  |  | NyShuttleHttpCommand moveCommand = NyHttpUtils.getMoveCommand(shuttleNo, wrkNo, startPath, targetPath); | 
|---|
|  |  |  | moveCommand.setNodes(nodes);//将行走节点添加到每一步命令中 | 
|---|
|  |  |  | commands.add(moveCommand); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|