#
luxiaotao1123
2025-01-08 36dcec12994c82fffe2a86a6acf12ecbd071fffb
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java
@@ -77,6 +77,12 @@
        try {
            Date now = new Date();
            // deprecate jam
            if (this.isExpiredJamByAvo(segment.getId())) {
                mainService.settleSegmentList(Utils.singletonList(segment), null);
                return;
            }
            // temporary -----------------
            Integer algoExtensionTime = configService.getVal("algoExtensionTime", Integer.class);
            if (null != algoExtensionTime && algoExtensionTime > 0) {
@@ -117,12 +123,6 @@
                return;
            }
            // deprecate jam
            if (this.isExpiredJamByAvo(segment.getId())) {
                mainService.settleSegmentList(Utils.singletonList(segment), null);
                return;
            }
            // execute -----------------------------------------------
            //        ArrayList<List<TaskPosDto>> list = JSON.parseObject(travel.getTaskContent(), new TypeReference<ArrayList<List<TaskPosDto>>>() {});
@@ -135,7 +135,9 @@
            // checkout path
            Code startCode = codeService.getById(agvDetail.getRecentCode());
            Code endCode = codeService.getById(endNode);
            long startTime = System.currentTimeMillis();
            List<String> pathList = this.checkoutPath(agv, startCode, endCode, segment);
            System.out.println("checkoutPath: " + (System.currentTimeMillis() - startTime));
            if (Cools.isEmpty(pathList)) {
                return;
            }
@@ -200,7 +202,9 @@
            mapService.lockPath(null, pathList, agv.getUuid());
            startTime = System.currentTimeMillis();
            mainService.generateAction(segment.getAgvId(), segmentList, pathList, now);
            System.out.println("generateAction: " + (System.currentTimeMillis() - startTime));
        } catch (Exception e) {
            log.error("TrafficService.trigger", e);
@@ -304,25 +308,25 @@
                            } else {
                                // block vehicle info
                                Agv blockAgv = agvService.selectByUuid(blockAgvNo);
                                String blockAgvCode = codeService.getById(agvDetailService.selectByAgvId(blockAgv.getId()).getRecentCode()).getData();
                                Long blockAgvId = agvService.getAgvId(blockAgvNo);
                                String blockAgvCode = codeService.getById(agvDetailService.selectByAgvId(blockAgvId).getRecentCode()).getData();
                                // create new jam if already notify the avoid vehicle
                                if (!Cools.isEmpty(jam.getAvoAgv(), jam.getAvoSeg()) && !blockAgv.getId().equals(jam.getAvoAgv())) {
                                if (!Cools.isEmpty(jam.getAvoAgv(), jam.getAvoSeg()) && !blockAgvId.equals(jam.getAvoAgv())) {
                                    jam = this.setupNewJam(jam, agv, startCode, segment, draftPath);
                                }
                                do {
                                    // 阻塞车辆正在原地作业,等待 ===>> 超过等待时间,绕路
                                    List<Segment> runningSegList = segmentService.getByAgvAndState(blockAgv.getId(), SegmentStateType.RUNNING.toString());
                                    List<Segment> runningSegList = segmentService.getByAgvAndState(blockAgvId, SegmentStateType.RUNNING.toString());
                                    if (!Cools.isEmpty(runningSegList)) {
                                        maxJamTimeoutFactor = 1;
                                        break;
                                    }
                                    // 判断下个任务是否为原地任务,如果是则等待 ===>> 超过等待时间,绕路;如果不是,让阻塞车辆避让
                                    List<Segment> waitingSegList = segmentService.getJustWaitingSeg(blockAgv.getId());
                                    List<Segment> waitingSegList = segmentService.getJustWaitingSeg(blockAgvId);
                                    if (null != waitingSegList
                                            && waitingSegList.stream().anyMatch(
                                            waitingSeg -> waitingSeg.getEndNode().equals(codeService.selectByData(blockAgvCode).getId())
@@ -336,7 +340,7 @@
                                        if (jam.getCycleAvo() == 1) {
                                            jam.setCycleCode(endCode.getId());
                                        }
                                        jam.setAvoAgv(blockAgv.getId());
                                        jam.setAvoAgv(blockAgvId);
                                        jam.setNotifyTime(new Date());
                                        if (!jamService.updateById(jam)) {
                                            throw new CoolException(jam.getUuid() + "-jam failed to update!!!");
@@ -355,7 +359,7 @@
                    // handle jam timeout
                    if (null != maxJamTimeoutFactor) {
                        if (System.currentTimeMillis() - jam.getStartTime().getTime() > MapDataConstant.MAX_JAM_TIMEOUT * maxJamTimeoutFactor) {
                        if (System.currentTimeMillis() - jam.getStartTime().getTime() > (long) MapDataConstant.MAX_JAM_TIMEOUT * maxJamTimeoutFactor) {
                            if (!Cools.isEmpty(lockPathList)) {
@@ -441,7 +445,7 @@
                List<String> otherWaveList = MapDataUtils.hasOtherWave(waveNodeList, agvNo);
                if (!Cools.isEmpty(otherWaveList)) {
                    for (String otherWave : otherWaveList) {
                        if (1 < mapDataDispatcher.queryCodeListFromDynamicNode(lev, otherWave).size()) {
                        if (mapService.isWalkingByVehicle(lev, otherWave)) {
                            blockVehicleList.add(new BlockVehicleDto(otherWave, false));
                        } else {
                            blockVehicleList.add(new BlockVehicleDto(otherWave, true));
@@ -585,7 +589,7 @@
                    List<String> list = GsonUtils.fromJsonToList(jam.getJamPath(), String.class);
                    Agv jamAgv = agvService.getById(jam.getJamAgv());
                    List<String> jamDynamicNodes = mapDataDispatcher.queryCodeListFromDynamicNode(lev, jamAgv.getUuid());
                    List<String> jamDynamicNodes = mapService.queryCodeListFromDynamicNode(lev, jamAgv.getUuid());
                    // jamDynamicNodes has sorted
                    String firstCodeNode = jamDynamicNodes.stream().findFirst().orElse(null);