#
Junjie
3 小时以前 114b4110c46d1976c53ca1373e45c63471e2c9ba
src/main/java/com/zy/common/utils/NavigateUtils.java
@@ -3,6 +3,7 @@
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;
@@ -187,6 +188,54 @@
        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;
    }
    //判断当前节点到下一个节点是否为拐点
    public HashMap<String,Object> searchInflectionPoint(NavigateNode currentNode, NavigateNode fatherNode, NavigateNode nextNode) {
        HashMap<String, Object> map = new HashMap<>();