From 8819606b0442ca27731b07aa4f8b93715a0da8fe Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期日, 01 十二月 2024 19:51:24 +0800
Subject: [PATCH] #

---
 zy-acs-flow/.env                                                                              |    8 +-
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java                 |    4 
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/RetreatNavigateService.java      |   31 ++++++-
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java              |  120 +++++++++++++++++++++++++----
 zy-acs-flow/src/page/jam/JamList.jsx                                                          |    2 
 zy-acs-manager/src/main/resources/mapper/manager/JamMapper.xml                                |    3 
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java |   10 ++
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/JamServiceImpl.java      |    1 
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TravelServiceImpl.java   |    2 
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java  |   15 +++
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java           |    2 
 11 files changed, 163 insertions(+), 35 deletions(-)

diff --git a/zy-acs-flow/.env b/zy-acs-flow/.env
index 3b8a2b1..ecc2ec9 100644
--- a/zy-acs-flow/.env
+++ b/zy-acs-flow/.env
@@ -1,5 +1,5 @@
-# VITE_BASE_IP=localhost
-# VITE_BASE_PORT=8088
+VITE_BASE_IP=localhost
+VITE_BASE_PORT=8088
 
-VITE_BASE_IP=192.168.1.100
-VITE_BASE_PORT=8080
\ No newline at end of file
+# VITE_BASE_IP=192.168.1.100
+# VITE_BASE_PORT=8080
\ No newline at end of file
diff --git a/zy-acs-flow/src/page/jam/JamList.jsx b/zy-acs-flow/src/page/jam/JamList.jsx
index 117584d..212cfb0 100644
--- a/zy-acs-flow/src/page/jam/JamList.jsx
+++ b/zy-acs-flow/src/page/jam/JamList.jsx
@@ -251,7 +251,7 @@
                                     rowClick={(id, resource, record) => false}
                                     // expand={() => <JamPanel />}
                                     // expandSingle={true}
-                                    omit={['id', 'uuid', 'cycleCode', 'updateBy', 'updateTime', 'createTime', 'createBy', 'statusBool', 'memo']}
+                                    omit={['id', 'endTime', 'uuid', 'cycleCode', 'updateBy', 'updateTime', 'createTime', 'createBy', 'statusBool', 'memo']}
                                 >
                                     <NumberField source="id" />
                                     <TextField source="uuid" label="table.field.jam.uuid" />
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
index 3b6ad34..45bdd19 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
@@ -15,6 +15,7 @@
 import com.zy.acs.common.enums.AgvCompleteType;
 import com.zy.acs.common.enums.AgvDirectionType;
 import com.zy.acs.common.enums.AgvSpeedType;
+import com.zy.acs.common.utils.GsonUtils;
 import com.zy.acs.common.utils.Utils;
 import com.zy.acs.framework.common.Cools;
 import com.zy.acs.framework.common.SnowflakeIdWorker;
@@ -560,7 +561,7 @@
             travel.setTravelId(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
             travel.setAgvId(agv.getId());
 //            travel.setTaskContent(JSON.toJSONString(list));
-            travel.setTaskIds(JSON.toJSONString(Collections.singletonList(task.getId())));
+            travel.setTaskIds(GsonUtils.toJson(Utils.singletonList(task.getId())));
             travel.setState(TravelStateType.RUNNING.toString());
             if (!travelService.save(travel)) {
                 throw new BusinessException("travel failed to save");
@@ -606,6 +607,7 @@
                 } else {
                     if (null != jam && i == 0) {
                         jam.setAvoSeg(next.getId());
+                        jam.setAvoCode(endCode.getId());
                     }
                 }
             }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/RetreatNavigateService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/RetreatNavigateService.java
index a7b7cc9..fa4c317 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/RetreatNavigateService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/RetreatNavigateService.java
@@ -1,5 +1,6 @@
 package com.zy.acs.manager.core.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zy.acs.common.utils.RedisSupport;
 import com.zy.acs.common.utils.Utils;
 import com.zy.acs.framework.common.Cools;
@@ -8,12 +9,12 @@
 import com.zy.acs.manager.core.domain.Lane;
 import com.zy.acs.manager.core.service.astart.*;
 import com.zy.acs.manager.core.service.astart.domain.DynamicNode;
+import com.zy.acs.manager.manager.entity.Code;
 import com.zy.acs.manager.manager.entity.Jam;
 import com.zy.acs.manager.manager.entity.Route;
-import com.zy.acs.manager.manager.service.AgvModelService;
-import com.zy.acs.manager.manager.service.AgvService;
-import com.zy.acs.manager.manager.service.CodeService;
-import com.zy.acs.manager.manager.service.RouteService;
+import com.zy.acs.manager.manager.entity.Segment;
+import com.zy.acs.manager.manager.enums.JamStateType;
+import com.zy.acs.manager.manager.service.*;
 import com.zy.acs.manager.system.service.ConfigService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -49,6 +50,10 @@
     private LaneService laneService;
     @Autowired
     private ConfigService configService;
+    @Autowired
+    private SegmentService segmentService;
+    @Autowired
+    private JamService jamService;
 
     /**
      * avoidPathList ===>>  [ minor vehicle ] [wave] [ curr vehicle ] [ code2 ] [ code3 ] ......
@@ -91,6 +96,7 @@
             boolean pointOfTurn = neighborNodes.size() >= 2;
             label: for (RetreatNavigateNode node : neighborNodes) {
                 if (node.getCodeData().equals(breakPoint)) { continue; }
+                Code code = codeService.selectByData(node.getCodeData());
 
                 int weight = 0;
 
@@ -105,7 +111,7 @@
                             continue label;
                         }
                         if (1 < mapDataDispatcher.queryCodeListFromDynamicNode(lev, otherWave).size()) {
-                            phaseSecond = false;    // there is a way to go
+                            phaseSecond = false;    // there is a running way
                             continue label;
                         } else {
                             weight += WEIGHT_CALC_FACTOR;
@@ -139,7 +145,7 @@
                         }
 
                         if (lanVehicleSet.size() + 1 > maxAgvCountInLane) {
-                            phaseSecond = false;    // there is a way to go
+                            phaseSecond = false;    // there is a running way
                             continue;
                         }
                         if (lanVehicleSet.contains(sponsor)) {
@@ -148,6 +154,19 @@
                     }
                 }
 
+                // judge whether the node has already been marked as a retreat node?
+                // This is a very troublesome matter, if the node be repeatedly mark as a retreat node
+                List<Segment> runningSegments = segmentService.getRunningByEndCode(code.getId());
+                for (Segment runningSeg : runningSegments) {
+                    if (0 < jamService.count(new LambdaQueryWrapper<Jam>()
+                            .eq(Jam::getAvoSeg, runningSeg.getId())
+                            .ne(Jam::getState, JamStateType.DEPRECATED.toString()))) {
+                        weight += WEIGHT_CALC_FACTOR * 3;
+                    } else {
+                        weight += WEIGHT_CALC_FACTOR;
+                    }
+                }
+
                 // enable
                 if (!avoidPathListWave.contains(node.getCodeData())) {
                     enableNodes.add(node);
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java
index 11d5fb2..b1afab4 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zy.acs.common.utils.GsonUtils;
+import com.zy.acs.common.utils.Utils;
 import com.zy.acs.framework.common.Cools;
 import com.zy.acs.framework.common.SnowflakeIdWorker;
 import com.zy.acs.framework.exception.CoolException;
@@ -107,6 +108,13 @@
                 return;
             }
 
+            // deprecate jam
+            if (this.isJamBeDeprecatedByAvo(segment.getId())) {
+                if (this.skipCurrSegment(segment)) {
+                    return;
+                }
+            }
+
             // execute -----------------------------------------------
             //        ArrayList<List<TaskPosDto>> list = JSON.parseObject(travel.getTaskContent(), new TypeReference<ArrayList<List<TaskPosDto>>>() {});
 
@@ -196,7 +204,7 @@
         Date now = new Date();
         Jam jam = jamService.getJam(agv.getId(), startCode.getId(), segment.getId());
         BlockSeverityType blockSeverity = BlockSeverityType.query(null == jam ? null : jam.getDuration());
-        // judge avoid of jam
+        // judge avoid of jam 濡傛灉宸茬粡鍦ㄩ伩璁╃偣锛堝洜涓哄綋鍓嶈溅鎵ц浜嗛伩璁╀换鍔★級锛岄偅涔堝垯涓嶈兘鍐嶅幓妫�绱箣鍓嶇殑闃诲璺緞
         List<Jam> unfinishedOriginJamByCurrAgv = jamService.getUnfinishedOriginJamByAvo(agv.getId(), startCode.getId(), segment.getId());
         List<String> blackPath = this.getBlackPathList(unfinishedOriginJamByCurrAgv);
 
@@ -277,7 +285,7 @@
                         } else {
 
                             // select optimal block vehicle
-                            String blockAgvNo = this.checkoutBestSolutionOfBlocks(blockVehicleList);
+                            String blockAgvNo = this.checkoutBestSolutionOfBlocks(blockVehicleList, segment);
                             if (Cools.isEmpty(blockAgvNo)) {
 
                                 maxJamTimeoutFactor = 2;
@@ -287,6 +295,11 @@
                                 // block vehicle info
                                 Agv blockAgv = agvService.selectByUuid(blockAgvNo);
                                 String blockAgvCode = codeService.getById(agvDetailService.selectByAgvId(blockAgv.getId()).getRecentCode()).getData();
+
+                                // create new jam if already notify the avoid vehicle
+                                if (!Cools.isEmpty(jam.getAvoAgv(), jam.getAvoSeg()) && !blockAgv.getId().equals(jam.getAvoAgv())) {
+                                    jam = this.setupNewJam(jam, agv, startCode, segment, draftPath);
+                                }
 
                                 do {
 
@@ -356,10 +369,32 @@
         if (!Cools.isEmpty(pathList)) {
 
             if (null != jam) {
+                boolean beDeprecate = false;
+                if (blockSeverity.equals(BlockSeverityType.SEVERE) && !Cools.isEmpty(jam.getJamPath())) {
+                    List<String> jamPath = GsonUtils.fromJsonToList(jam.getJamPath(), String.class);
+                    if (!this.comparePathLists(jamPath, pathList)) {    // jamPath >= pathList
+                        beDeprecate = true;
+                    }
+                }
                 jam.setEndTime(now);
                 jam.setUpdateTime(now);
-                jam.setState(JamStateType.FINISH.toString());
-                if (!jamService.updateById(jam)) {
+                jam.setState(beDeprecate ? JamStateType.DEPRECATED.toString() : JamStateType.FINISH.toString());
+                if (jamService.updateById(jam)) {
+                    if (beDeprecate) {
+                        // search previous jam that jamSeg from this segment
+                        List<Jam> previousJams = jamService.list(new LambdaQueryWrapper<Jam>()
+                                .eq(Jam::getJamSeg, segment.getId())
+                                .eq(Jam::getState, JamStateType.FINISH.toString())
+                        );
+                        for (Jam previousJam : previousJams) {
+                            previousJam.setState(JamStateType.DEPRECATED.toString());
+                            previousJam.setUpdateTime(now);
+                            if (!jamService.updateById(previousJam)) {
+                                log.error("Jam[{}] failed to update锛侊紒锛�", previousJam.getUuid());
+                            }
+                        }
+                    }
+                } else {
                     log.error("Jam[{}] failed to update锛侊紒锛�", jam.getUuid());
                 }
             }
@@ -369,7 +404,7 @@
                     .eq(Jam::getState, JamStateType.RUNNING.toString()))) {
                 expiredJam.setEndTime(now);
                 expiredJam.setUpdateTime(now);
-                expiredJam.setState(JamStateType.FINISH.toString());
+                expiredJam.setState(JamStateType.DEPRECATED.toString());
                 if (!jamService.updateById(expiredJam)) {
                     log.error("Jam[{}] failed to update锛侊紒锛�", expiredJam.getUuid());
                 }
@@ -445,7 +480,6 @@
 
         String endCodeData = finalNode.getCodeData();
         Code endCode = codeService.selectByData(endCodeData);
-        jam.setAvoCode(endCode.getId());
 
         List<Segment> waitingSegList = segmentService.getByAgvAndState(agv.getId(), SegmentStateType.WAITING.toString());
         if (!Cools.isEmpty(waitingSegList)) {
@@ -479,6 +513,7 @@
                 return false;
             } else {
                 jam.setAvoSeg(insertSeg.getId());
+                jam.setAvoCode(endCode.getId());
             }
 
         } else {
@@ -512,6 +547,23 @@
         return jam;
     }
 
+    private Jam setupNewJam(Jam originJam, Agv agv, Code startCode, Segment segment, List<String> draftPath) {
+        originJam.setUpdateTime(new Date());
+        originJam.setState(JamStateType.FINISH.toString());
+        if (!jamService.updateById(originJam)) {
+            log.error("Jam[{}] failed to update", originJam.getUuid());
+            return originJam;
+        } else {
+            return this.createOrUpdateJam(
+                    agv
+                    , startCode
+                    , segment
+                    , null
+                    , draftPath
+            );
+        }
+    }
+
     private List<String> getBlackPathList(List<Jam> unfinishedOriginJamByCurrAgv) {
         List<String> blackPathList = new ArrayList<>();
         Integer lev = MapDataDispatcher.MAP_DEFAULT_LEV;
@@ -530,16 +582,16 @@
                         int idx = list.indexOf(firstCodeNode);
                         if (idx != -1) {
                             list = new ArrayList<>(list.subList(idx, list.size()));
-                        }
 
-                        // the wave of first node
-                        Double avoidDistance = MapDataUtils.getVehicleWaveSafeDistance(
-                                agvModelService.getById(jamAgv.getAgvModel()).getDiameter(),
-                                MapDataConstant.MAX_DISTANCE_BETWEEN_ADJACENT_AGV_FACTOR
-                        );
-                        List<String> waveCodeList = mapService.getWaveScopeByCode(lev, firstCodeNode, avoidDistance)
-                                .stream().map(NavigateNode::getCodeData).distinct().collect(Collectors.toList());
-                        list.addAll(waveCodeList);
+                            // the wave of first node
+                            Double avoidDistance = MapDataUtils.getVehicleWaveSafeDistance(
+                                    agvModelService.getById(jamAgv.getAgvModel()).getDiameter(),
+                                    MapDataConstant.MAX_DISTANCE_BETWEEN_ADJACENT_AGV_FACTOR
+                            );
+                            List<String> waveCodeList = mapService.getWaveScopeByCode(lev, firstCodeNode, avoidDistance)
+                                    .stream().map(NavigateNode::getCodeData).distinct().collect(Collectors.toList());
+                            list.addAll(waveCodeList);
+                        }
                     }
 
                     blackPathList.addAll(list);
@@ -549,18 +601,48 @@
         return blackPathList.stream().distinct().collect(Collectors.toList());
     }
 
-    private String checkoutBestSolutionOfBlocks(List<BlockVehicleDto> blockVehicleList) {
+    private String checkoutBestSolutionOfBlocks(List<BlockVehicleDto> blockVehicleList, Segment segment) {
         assert !Cools.isEmpty(blockVehicleList);
         for (BlockVehicleDto blockVehicleDto : blockVehicleList) {
             if (!blockVehicleDto.isAvoidable()) {
                 continue;
             }
-            // 娌℃湁閬胯涓殑浠诲姟
-            if (Cools.isEmpty(jamService.getUnfinishedAvoSegByAvo(blockVehicleDto.getVehicle(), null))) {
-                return blockVehicleDto.getVehicle();
+            // 褰撳墠vehicle姝e湪杩涜閬胯浣滀笟
+            if (!Cools.isEmpty(jamService.getUnfinishedAvoSegByAvo(blockVehicleDto.getVehicle(), null))) {
+                continue;
             }
+            return blockVehicleDto.getVehicle();
         }
         return null;
     }
 
+    public boolean comparePathLists(List<String> list1, List<String> list2) {
+        if (list1.equals(list2)) {
+            return true;
+        }
+        if (list1.containsAll(list2)) {
+            return true;
+        }
+        return false;
+    }
+
+    private boolean isJamBeDeprecatedByAvo(Long avoSeg) {
+        return 0 < jamService.count(new LambdaQueryWrapper<Jam>()
+//                .eq(Jam::getAvoAgv, avoAgv)
+                .eq(Jam::getAvoSeg, avoSeg)
+                .eq(Jam::getState, JamStateType.DEPRECATED.toString())
+        );
+    }
+
+    private boolean skipCurrSegment(Segment currSegment) {
+        currSegment.setState(SegmentStateType.FINISH.toString());
+        currSegment.setUpdateTime(new Date());
+        if (!segmentService.updateById(currSegment)) {
+            log.error("Segment [{}] failed to update 锛侊紒锛�", currSegment.getTravelId() + " - " + currSegment.getSerial());
+            return false;
+        }
+        segmentService.processNext(Utils.singletonList(currSegment));
+        return true;
+    }
+
 }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java
index 64ba32f..7cbe7b0 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java
@@ -72,6 +72,14 @@
                 if (!Cools.isEmpty(blackList) && blackList.contains(node.getCodeData())) {
                     continue;
                 }
+                // 鐗规畩鎯呭喌锛屽綋blackList鏈変笖鍙湁涓�涓厓绱犱笖涓簊tartNode鏃�
+                // 璇存槑blackList宸茬粡鐭ラ亾褰撳墠瀵艰埅璧峰鐐瑰拰鐩爣鐐逛负鐩搁偦鑺傜偣
+                // 浣嗘槸褰撳墠blackList鐨勪换鍔℃槸涓嶈绯荤粺璧扮浉閭荤殑鏈�鐭矾寰勶紝鎵�浠ユ墠浼氭湁涓嬮潰鐨勫垽鏂拰continue
+                if (blackList.size() == 1 && blackList.get(0).equals(start.getCodeData())) {
+                    if (isEndNode && currentNode.getCodeData().equals(start.getCodeData())) {
+                        continue;
+                    }
+                }
 
                 // 鑺傜偣琚崰鐢�
                 DynamicNode dynamicNode = dynamicMatrix[node.getX()][node.getY()];
@@ -80,7 +88,7 @@
                 if (!vehicle.equals(DynamicNodeType.ACCESS.val)) {
                     if (!vehicle.equals(agvNo)) {
 
-                        // 瀛樺湪杞﹁締锛屼笖涓哄凡缁忛伩璁╃殑杞︼紝鍒欐潈閲嶅�煎鍔�
+                        // vehicle宸茬粡涓哄綋鍓峴egment鍋氳繃浜嗛伩璁╋紝涓旈伩璁╀换鍔″凡瀹屾垚锛屽垯鏉冮噸鍊煎鍔�
                         if (null != segment) {
                             if (!Cools.isEmpty(jamService.getJamFromSegmentByAvo(segment, vehicle))) {
                                 weight += WEIGHT_CALC_FACTOR;
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java
index 737f465..f0b16a1 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java
@@ -20,4 +20,6 @@
 
     List<String> getGroupNo(SegmentStateType state, Long agvId, String groupNo);
 
+    List<Segment> getRunningByEndCode(Long codeId);
+
 }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/JamServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/JamServiceImpl.java
index d99d5f8..137f08f 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/JamServiceImpl.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/JamServiceImpl.java
@@ -58,6 +58,7 @@
                 .eq(Jam::getJamSeg, jamSeg)
                 .eq(Jam::getAvoAgv, agvService.selectByUuid(avoAgvNo).getId())
                 .eq(Jam::getCycleAvo, 1)
+                .ne(Jam::getState, JamStateType.DEPRECATED.toString())
 //                .eq(Jam::getState, JamStateType.RUNNING.toString())
         );
         if (!Cools.isEmpty(jams)) {
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java
index c17f43c..a2df1e6 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java
@@ -13,6 +13,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.Date;
 import java.util.List;
@@ -28,7 +29,6 @@
 
     @Override
     public void processNext(List<Segment> segmentList) {
-        Date now = new Date();
 
         segmentList.stream().max(Comparator.comparingInt(Segment::getSerial)).ifPresent(segment -> {
             Segment nextSegment = this.getNextStepOfInit(segment.getTravelId(), segment.getSerial());
@@ -36,7 +36,7 @@
             if (null != nextSegment) {
 
                 nextSegment.setState(SegmentStateType.WAITING.toString());
-                nextSegment.setUpdateTime(now);
+                nextSegment.setUpdateTime(new Date());
                 if (!this.updateById(nextSegment)) {
                     log.error("Segment [{}] failed to update 锛侊紒锛�", nextSegment.getGroupId() + " - " + nextSegment.getSerial());
                 }
@@ -92,4 +92,15 @@
         return this.baseMapper.getGroupNo(state.toString(), agvId, groupNo);
     }
 
+    @Override
+    public List<Segment> getRunningByEndCode(Long codeId) {
+        if (null == codeId) {
+            return new ArrayList<>();
+        }
+        return this.list(new LambdaQueryWrapper<Segment>()
+                .eq(Segment::getEndNode, codeId)
+                .in(Segment::getState, SegmentStateType.WAITING.toString(), SegmentStateType.RUNNING.toString())
+        );
+    }
+
 }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TravelServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TravelServiceImpl.java
index c90f569..de403bb 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TravelServiceImpl.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TravelServiceImpl.java
@@ -40,7 +40,7 @@
             travel.setState(TravelStateType.FINISH.toString());
             travel.setUpdateTime(new Date());
             if (!this.updateById(travel)) {
-                throw new CoolException("鏇存柊Travel澶辫触");
+                throw new CoolException("Travel failed to update");
             }
         }
     }
diff --git a/zy-acs-manager/src/main/resources/mapper/manager/JamMapper.xml b/zy-acs-manager/src/main/resources/mapper/manager/JamMapper.xml
index d1a55fc..c2672cd 100644
--- a/zy-acs-manager/src/main/resources/mapper/manager/JamMapper.xml
+++ b/zy-acs-manager/src/main/resources/mapper/manager/JamMapper.xml
@@ -30,6 +30,7 @@
         LEFT JOIN man_segment jam_seg ON mj.jam_seg = jam_seg.id
         LEFT JOIN man_segment avo_seg ON mj.avo_seg = avo_seg.id
         WHERE 1=1
+        AND mj.state != 'DEPRECATED'
         AND jam_seg.state in ('INIT', 'WAITING')
         AND avo_seg.state not in ('INIT', 'WAITING')
         AND mj.avo_agv = #{avoAgv}
@@ -48,6 +49,7 @@
         LEFT JOIN man_segment jam_seg ON mj.jam_seg = jam_seg.id
         LEFT JOIN man_segment avo_seg ON mj.avo_seg = avo_seg.id
         WHERE 1=1
+        AND mj.state != 'DEPRECATED'
         AND avo_seg.state NOT IN ('INIT', 'WAITING')
         AND mj.jam_seg = #{jamSeg}
         AND mj.avo_agv = #{avoAgv}
@@ -60,6 +62,7 @@
         LEFT JOIN man_segment jam_seg ON mj.jam_seg = jam_seg.id
         LEFT JOIN man_segment avo_seg ON mj.avo_seg = avo_seg.id
         WHERE 1=1
+        AND mj.state != 'DEPRECATED'
         AND avo_seg.state IN ('INIT', 'WAITING')
         AND mj.avo_agv = #{avoAgv}
         <if test="currSeg != null">

--
Gitblit v1.9.1