#
luxiaotao1123
2024-10-30 da7c1947a55418767e258c734e85c1732d663b42
#
2个文件已修改
59 ■■■■ 已修改文件
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java
@@ -45,7 +45,7 @@
    }
    /**
     * 寻址 ===>> A*
     * 寻址 ===>> A Star
     */
    public synchronized List<String> checkoutPath(String agvNo, Code startCode, Code endCode
            , Boolean lock, List<String> whiteList, List<String> blackList) {
@@ -66,7 +66,7 @@
        ArrayList<NavigateNode> navigateNodes = new ArrayList<>();
        // 渲染
        NavigateNode parentNode = null;//当前循环上一节点,用于拐点计算
        NavigateNode parentNode = null; //  当前循环上一节点,用于拐点计算
        while (finishNode != null) {
            navigateNodes.add(finishNode);
@@ -76,12 +76,9 @@
        Collections.reverse(navigateNodes);
        //将每个节点里面的fatherNode至为null(方便后续计算时父节点过多导致显示的节点太多)
        for (NavigateNode navigateNode : navigateNodes) {
            //父节点设置为null,不影响计算结果,不影响后续操作。
            //此操作仅为后续排查处理提供视觉方便。
            navigateNode.setParent(null);
        }
//        for (NavigateNode navigateNode : navigateNodes) {
//            navigateNode.setParent(null);
//        }
        return navigateNodes.stream().map(NavigateNode::getCodeData).collect(Collectors.toList());
    }
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java
@@ -2,11 +2,11 @@
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.acs.common.constant.RedisConstant;
import com.zy.acs.common.utils.RedisSupport;
import com.zy.acs.framework.common.Cools;
import com.zy.acs.framework.common.SnowflakeIdWorker;
import com.zy.acs.framework.exception.CoolException;
import com.zy.acs.common.constant.RedisConstant;
import com.zy.acs.common.utils.RedisSupport;
import com.zy.acs.manager.common.utils.MapDataUtils;
import com.zy.acs.manager.core.domain.TaskPosDto;
import com.zy.acs.manager.core.domain.TrafficJamDto;
@@ -26,10 +26,7 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.*;
/**
 * Wavefront
@@ -84,24 +81,23 @@
            Travel travel = travelService.getById(segment.getTravelId());
            Agv agv = agvService.getById(travel.getAgvId());
            AgvDetail agvDetail = agvDetailService.selectByAgvId(travel.getAgvId());
            long endNode = segment.getEndNode();
            Code startCode = codeService.getById(agvDetail.getRecentCode());
            Code endCode = codeService.getById(endNode);
            // valid ----------------------------------------------------
            if (!agvService.judgeEnable(agv.getId())) {
                return;
            }
            if (!Cools.isEmpty(segmentService.getByAgvAndState(agv.getId(), SegmentStateType.RUNNING.toString()))) {
                return;
            }
            List<Segment> waitingSegList = segmentService.getByAgvAndState(agv.getId(), SegmentStateType.WAITING.toString());
            if (!Cools.isEmpty(waitingSegList)) {
                for (Segment seg : waitingSegList) {
                    if (!seg.getId().equals(segment.getId())) {
                for (Segment waitingSeg : waitingSegList) {
                    if (!waitingSeg.getId().equals(segment.getId())) {
                        return;
                    }
                }
            }
            if (jamService.count(new LambdaQueryWrapper<Jam>()
                    .eq(Jam::getJamAgv, agv.getId())
                    .eq(Jam::getJamSeg, segment.getId())
@@ -112,23 +108,27 @@
                return;
            }
            // execute -----------------------------------------------
            //        ArrayList<List<TaskPosDto>> list = JSON.parseObject(travel.getTaskContent(), new TypeReference<ArrayList<List<TaskPosDto>>>() {});
            List<Segment> segmentList = new ArrayList<>();
            segmentList.add(segment);
            // get path list
            avoidWaveCalculator.calcWaveScope();    // * sync wave scope
            List<String> pathList = this.checkoutPath(agv, startCode, endCode, segment);
            // checkout path
            Code startCode = codeService.getById(agvDetail.getRecentCode());
            Code endCode = codeService.getById(endNode);
            List<String> pathList = this.checkoutPath(agv, startCode, endCode, segment);
            if (Cools.isEmpty(pathList)) {
                return;
            }
            String lastCodeData = pathList.get(pathList.size() - 1);
            List<Segment> segmentList = new ArrayList<>();
            segmentList.add(segment);
            // slice
            String lastCodeData = pathList.get(pathList.size() - 1);
            if (!endCode.getData().equals(lastCodeData)) {
                // slice
                Code lastCode = codeService.selectByData(lastCodeData);
//                if (pathList.size() <= MIN_SLICE_PATH_LENGTH) {
//                    return;
@@ -138,11 +138,9 @@
                segment.setState(SegmentStateType.INIT.toString());
                segment.setUpdateTime(now);
                if (!segmentService.updateById(segment)) {
                    log.error("Segment [{}] 更新失败 !!!", segment.getTravelId() + " - " + segment.getSerial());
                    log.error("Segment [{}] failed to update !!!", segment.getGroupId() + " - " + segment.getSerial());
                }
                segmentList.clear();
                Code lastCode = codeService.selectByData(lastCodeData);
                // new move seg
                Segment insertSeg = new Segment();
@@ -157,7 +155,6 @@
                if (!segmentService.save(insertSeg)) {
                    log.error("Segment [{}] 保存失败 !!!", segment.getTravelId() + " - " + segment.getSerial());
                }
                segmentList.add(insertSeg);
            } else {
@@ -231,7 +228,8 @@
        List<String> lockPathList = mapService.checkoutPath(agvNo, startCode, endCode, true);
        if (!Cools.isEmpty(lockPathList) && // 存在避让解
            Math.abs(lockPathList.size() - unlockPathList.size()) <= Math.max((mapDataDispatcher.getCodeMatrix(lev)[0].length / 2), 5)) {
            Math.abs(lockPathList.size() - unlockPathList.size()) <= Arrays.stream(mapDataDispatcher.getCodeMatrix(lev)).mapToInt(row -> row.length).sum() / 10
        ) {
            pathList = lockPathList;
        } else {