自动化立体仓库 - WCS系统
Junjie
2023-11-03 72bd968bf48058cad19361ebf723f9262d6369e1
src/main/java/com/zy/common/utils/NyShuttleOperaUtils.java
@@ -1,5 +1,6 @@
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;
@@ -86,14 +87,16 @@
     * 获取起点到目标点行走命令
     */
    public static 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(targetPoint)));
        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);
@@ -107,8 +110,52 @@
            NyShuttleHttpCommand moveCommand = NyHttpUtils.getMoveCommand(shuttleNo, wrkNo, startPath, targetPath);
            moveCommand.setNodes(nodes);//将行走节点添加到每一步命令中
            commands.add(moveCommand);
            allNode.addAll(nodes);
        }
        boolean result = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(startPoint), allNode, true);//锁定路径
        if (!result) {
            return null;//路径锁定失败
        }
        return result(commands, calc);
    }
    /**
     * 获取起点到目标点行走命令(可传白名单)
     */
    public static 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);
        }
        boolean result = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(startPoint), allNode, true);//锁定路径
        if (!result) {
            return null;//路径锁定失败
        }
        return result(commands, calc);
    }