From 5c79d2221f27d384b97e0808e18d32fd29326dc5 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期五, 15 十一月 2024 14:48:40 +0800
Subject: [PATCH] #

---
 /dev/null                                                                                     |   37 ------------
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java              |   31 ++++++++-
 zy-acs-manager/src/main/java/com/zy/acs/manager/fake/AgvSimulatorTask.java                    |    7 +-
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java        |    4 +
 zy-acs-manager/src/main/resources/mapper/manager/JamMapper.xml                                |   18 ++++++
 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      |    9 +++
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/JamMapper.java                 |    5 +
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Jam.java                       |    6 ++
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/JamService.java               |    2 
 10 files changed, 76 insertions(+), 53 deletions(-)

diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java
index a28cb5b..7131104 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java
@@ -31,6 +31,8 @@
 @Component
 public class MapDataWsScheduler {
 
+    public static final int WEBSOCKET_BROADCAST_INTERVAL = 500;
+
     private ExecutorService singleThreadExecutor;
 
     @Autowired
@@ -54,7 +56,7 @@
                 MapWsVo mapWsVo = new MapWsVo();
                 mapWsVo.setAgvVos(syncAgv());
                 MapWebSocket.broadcast(GsonUtils.toJson(mapWsVo));
-                try { Thread.sleep(500); } catch (InterruptedException ignore) {}
+                try { Thread.sleep(WEBSOCKET_BROADCAST_INTERVAL); } catch (InterruptedException ignore) {}
             }
         });
     }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MockService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MockService.java
deleted file mode 100644
index de2f583..0000000
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MockService.java
+++ /dev/null
@@ -1,281 +0,0 @@
-package com.zy.acs.manager.core.service;
-
-import com.zy.acs.framework.common.Cools;
-import com.zy.acs.common.utils.RedisSupport;
-import com.zy.acs.manager.common.domain.MockAgvDto;
-import com.zy.acs.manager.common.domain.MockDto;
-import com.zy.acs.manager.common.domain.MockStepDto;
-import com.zy.acs.manager.common.domain.MockVo;
-import com.zy.acs.manager.common.exception.BusinessException;
-import com.zy.acs.manager.core.domain.AgvMockDto;
-import com.zy.acs.manager.core.domain.TaskPosDto;
-import com.zy.acs.manager.core.service.astart.AStarNavigateService;
-import com.zy.acs.manager.core.service.astart.MapDataDispatcher;
-import com.zy.acs.manager.manager.entity.Agv;
-import com.zy.acs.manager.manager.entity.AgvDetail;
-import com.zy.acs.manager.manager.entity.Code;
-import com.zy.acs.manager.manager.entity.CodeGap;
-import com.zy.acs.manager.manager.service.AgvDetailService;
-import com.zy.acs.manager.manager.service.AgvService;
-import com.zy.acs.manager.manager.service.CodeGapService;
-import com.zy.acs.manager.manager.service.CodeService;
-import com.zy.acs.manager.system.service.ConfigService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.*;
-
-/**
- * Created by vincent on 2023/7/29
- */
-@Slf4j
-@Service
-public class MockService {
-
-    private final RedisSupport redis = RedisSupport.defaultRedisSupport;
-
-    @Autowired
-    private MapService mapService;
-    @Autowired
-    private AgvService agvService;
-    @Autowired
-    private AgvDetailService agvDetailService;
-    @Autowired
-    private CodeService codeService;
-    @Autowired
-    private CodeGapService codeGapService;
-    @Autowired
-    private MapDataDispatcher mapDataDispatcher;
-    @Autowired
-    private AStarNavigateService aStarNavigateService;
-    @Autowired
-    private ConfigService configService;
-
-    public void astarMock() {
-        Code startCode = codeService.selectByData("00000028");
-        Code endCode = codeService.selectByData("00000057");
-
-        List<String> strings = mapService.checkoutPath("1", startCode, endCode, false);
-
-        List<String> pathList = mapService.validFeasibility(startCode, endCode);
-
-        System.out.println("end");
-    }
-
-    @Transactional
-    public List<MockVo> submit(List<MockAgvDto> agvList, List<MockDto> taskList) {
-        final String sameGroupXy = configService.getVal("sameGroupXy", String.class);
-        List<MockVo> result = new ArrayList<>();
-
-        if (Cools.isEmpty(taskList)) {
-            throw new BusinessException("璇锋坊鍔� MOCK 浠诲姟");
-        }
-        taskList.sort((o1, o2) -> o2.getPriority() - o1.getPriority());
-
-        // 浠� agv 鍒嗙粍
-        List<AgvMockDto> taskDtos = new ArrayList<>();
-        for (MockDto task : taskList) {
-            AgvMockDto taskDto = new AgvMockDto(task.getAgv(), task);
-            if (AgvMockDto.has(taskDtos, taskDto)) {
-                AgvMockDto dto = AgvMockDto.find(taskDtos, taskDto);
-                assert dto != null;
-                dto.getTaskList().add(task);
-            } else {
-                taskDtos.add(taskDto);
-            }
-        }
-
-        // 閲嶇粍褰撳墠 agv 鐨勬墍鏈変换鍔�
-        for (AgvMockDto taskDto : taskDtos) {
-
-            /**
-             * key锛歽 鍧愭爣 + 浠诲姟绫诲埆锛堣揣鏋跺彇璐с�佺珯鐐瑰彇璐с�佽揣鏋舵斁璐с�佺珯鐐规斁璐э級
-             * val锛氫换鍔d + 浠诲姟鍧愭爣 + 鏉$爜 + 浠诲姟绫诲埆
-             */
-            Map<String, List<TaskPosDto>> groups = new HashMap<>();
-
-            for (MockDto mockDto : taskDto.getTaskList()) {
-                Code startCode = codeService.selectByData(mockDto.getStart());
-                Code endCode = codeService.selectByData(mockDto.getEnd());
-
-                TaskPosDto.packagePosGroup(groups, null, startCode, TaskPosDto.PosType.ORI_LOC, sameGroupXy);
-                TaskPosDto.packagePosGroup(groups, null, endCode, TaskPosDto.PosType.DEST_LOC, sameGroupXy);
-            }
-
-            // 浜岀淮鏁扮粍 锛� 姣忕粍鐨� y鍧愭爣 鍜� 浠诲姟绫诲埆 涓�鑷达級
-            ArrayList<List<TaskPosDto>> list = new ArrayList<>(groups.values());
-            // 浜屼綅鏁扮粍 瀛愭暟缁� 宸茬粡鑳界‘瀹� y鍧愭爣涓轰竴鑷淬�傛墍鏈� get(0).xy[1] 涓烘帓搴忥紙灏辨槸涓�鎺掍竴鎺掍换鍔¤繘琛屾帓搴忥級锛屽 涓�鎺掓帓浠诲姟浠� y鍧愭爣 灏辫闄嶅簭鎺掑簭
-            list.sort((o1, o2) -> {
-                double o1CompVal = (o1.get(0).getFirstWeight(sameGroupXy) * 100) + o1.get(0).getPosType().compOffset;
-                double o2CompVal = (o2.get(0).getFirstWeight(sameGroupXy) * 100) + o2.get(0).getPosType().compOffset;
-                return (int) (o1CompVal - o2CompVal);
-            });
-
-            // 瀵逛竴鎺掍换鍔¤繘琛� x鍧愭爣 椤哄簭鎺掑簭锛岄槻姝㈡潵鍥炶蛋琛�
-            for (List<TaskPosDto> taskPosDtoList : list) {
-                taskPosDtoList.sort((o1, o2) -> (int) (o1.getSecondWeight(sameGroupXy) * 100 - o2.getSecondWeight(sameGroupXy) * 100));
-            }
-
-            // 涓婁竴娆$殑 code锛� 绗竴娆′负 agv 褰撳墠code
-            String lastCodeData = this.getPosCode(agvList, taskDto.getAgvId());
-            if (Cools.isEmpty(lastCodeData)) {
-                throw new BusinessException(taskDto.getAgvId() + "鍙� agv 涓嶅湪鏉$爜瀹氫綅涓婏紒");
-            }
-            Code lastCode = codeService.selectByData(lastCodeData);
-
-            // 璧拌璺緞闆嗗悎
-            List<MockStepDto> stepList = new ArrayList<>();
-            stepList.add(new MockStepDto(lastCodeData, Boolean.FALSE));
-
-            for (List<TaskPosDto> taskPosDtoList : list) {
-
-                for (TaskPosDto dto : taskPosDtoList) {
-
-                    // 鐩爣 code
-                    Code code = codeService.getById(dto.getCodeId());
-
-                    if (!lastCode.getData().equals(code.getData())) {
-
-                        // 璁$畻璺緞鑺傜偣
-                        List<String> pathList = mapService.checkoutPath(taskDto.getAgvId(), lastCode, code, true);
-                        mapDataDispatcher.clearDynamicMatrixByCodeList(null, pathList);
-//                        List<String> pathList = mapService.validFeasibility(lastCode, code);
-
-                        if (Cools.isEmpty(pathList)) {
-                            throw new BusinessException(lastCode.getData() + " 鑷� " + code.getData() + "娌℃湁璺緞锛�");
-                        }
-
-                        // 绗竴涓妭鐐逛负鏈韩锛� 鎵�浠ヤ粠 涓嬫爣1 寮�濮�
-                        for (int i = 1; i < pathList.size(); i++) {
-
-                            String next = pathList.get(i);
-                            Code nextCode = codeService.selectByData(next);
-
-                            boolean pause = nextCode.getId().equals(dto.getCodeId());
-                            String action = "";
-                            if (pause) {
-                                switch (dto.getPosType()){
-                                    case ORI_LOC:
-                                    case ORI_STA:
-                                        action = "PICK";
-                                        break;
-                                    case DEST_LOC:
-                                    case DEST_STA:
-                                        action = "DROP";
-                                        break;
-                                    default:
-                                        break;
-                                }
-                            }
-
-                            stepList.add(new MockStepDto(nextCode.getData(), pause, action));
-
-                            lastCode = nextCode;
-                        }
-
-                    }
-                }
-            }
-
-            result.add(new MockVo(taskDto.getAgvId(), stepList));
-        }
-
-        plusData(result);
-
-
-
-        for (MockVo mockVo : result) {
-//            redis.setObject("PATH", mockVo.getAgv(), mockVo.getStepList().stream().map(MockStepDto::getCode).collect(Collectors.toList()));
-        }
-
-        return result;
-    }
-
-
-    private String getPosCode(List<MockAgvDto> agvList, String agv) {
-        for (MockAgvDto agvDto : agvList) {
-            if (agv.equals(agvDto.getAgv())) {
-                return agvDto.getPos();
-            }
-        }
-        return null;
-    }
-
-    private void plusData(List<MockVo> result) {
-        for (MockVo mockVo : result) {
-            int size = mockVo.getStepList().size();
-            int time = size * 500;
-
-            Code lastCode = null;
-            double totalDistance = 0;
-            for (MockStepDto stepDto : mockVo.getStepList()) {
-                Code code = codeService.selectByData(stepDto.getCode());
-
-                if (null != lastCode) {
-                    CodeGap gap = codeGapService.findByCodeOfBoth(code.getId(), lastCode.getId());
-                    if (null != gap) {
-                        totalDistance += gap.getDistance();
-                        stepDto.setDistance(gap.getDistance());
-                    }
-                }
-
-                lastCode = code;
-            }
-
-            for (MockStepDto stepDto : mockVo.getStepList()) {
-                if (null != stepDto.getDistance()) {
-                    double rate = stepDto.getDistance() / totalDistance;
-                    stepDto.setTime((int)(rate * time));
-                }
-            }
-
-
-        }
-
-
-    }
-
-
-
-    public List<MockVo> imitate() {
-        Agv agv = agvService.selectByUuid("1");
-        AgvDetail agvDetail = agvDetailService.selectByAgvId(agv.getId());
-        MockAgvDto mockAgvDto = new MockAgvDto();
-        mockAgvDto.setAgv(agv.getUuid());
-        mockAgvDto.setPos(codeService.getById(agvDetail.getCode()).getData());
-        List<MockAgvDto> mockAgvDtos = new ArrayList<>();
-        mockAgvDtos.add(mockAgvDto);
-
-        List<MockDto> taskList = new ArrayList<>();
-        List<Code> codeList = codeService.list();
-        Random random = new Random();
-        List<Integer> exitCodes = new ArrayList<>();
-        for (int i = 0; i < agv.getStage(); i++) {
-            MockDto mockDto = new MockDto();
-            mockDto.setAgv(agv.getUuid());
-
-            int startIdx;
-            do {
-                startIdx = random.nextInt(codeList.size());
-            } while (exitCodes.contains(startIdx));
-            exitCodes.add(startIdx);
-            Code startCode = codeList.get(startIdx);
-
-            int endIdx;
-            do {
-                endIdx = random.nextInt(codeList.size());
-            } while (exitCodes.contains(endIdx));
-            exitCodes.add(endIdx);
-            Code endCode = codeList.get(endIdx);
-
-            mockDto.setStart(startCode.getData());
-            mockDto.setEnd(endCode.getData());
-            taskList.add(mockDto);
-        }
-        return this.submit(mockAgvDtos, taskList);
-    }
-
-
-}
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 8a5d41f..6ec43b9 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
@@ -1,6 +1,7 @@
 package com.zy.acs.manager.core.service;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zy.acs.common.utils.GsonUtils;
 import com.zy.acs.common.utils.RedisSupport;
 import com.zy.acs.framework.common.Cools;
 import com.zy.acs.framework.common.SnowflakeIdWorker;
@@ -98,6 +99,8 @@
                     }
                 }
             }
+
+            // dead lane
             if (jamService.count(new LambdaQueryWrapper<Jam>()
                     .eq(Jam::getJamAgv, agv.getId())
                     .eq(Jam::getJamSeg, segment.getId())
@@ -196,14 +199,17 @@
         String agvNo = agv.getUuid();
         Date now = new Date();
         Jam jam = jamService.getJam(agv.getId(), startCode.getId(), segment.getId());
+        // judge avoid of jam
+        List<Jam> unfinishedOriginJamByCurrAgv = jamService.hasUnfinishedOriginJamByAvo(agv.getId(), startCode.getId(), segment.getId());
+        List<String> blackPath = this.getBlackPathList(unfinishedOriginJamByCurrAgv);
 
         // 缁撴灉闆�
         List<String> pathList = new ArrayList<>();
 
         // 鏃犻殰纰嶈В
-        List<String> unlockPathList = mapService.checkoutPath(agvNo, startCode, endCode, false);
+        List<String> unlockPathList = mapService.checkoutPath(agvNo, startCode, endCode, false, blackPath);
         // 閬胯瑙�
-        List<String> lockPathList = mapService.checkoutPath(agvNo, startCode, endCode, true);
+        List<String> lockPathList = mapService.checkoutPath(agvNo, startCode, endCode, true, blackPath);
 
         if (!Cools.isEmpty(lockPathList) && // 瀛樺湪閬胯瑙�
             Math.abs(lockPathList.size() - unlockPathList.size()) <= Arrays.stream(mapDataDispatcher.getCodeMatrix(lev)).mapToInt(row -> row.length).sum() / 10
@@ -246,7 +252,8 @@
                     Integer maxJamTimeoutFactor = null;
 
                     // persist jam data
-                    jam = this.createOrUpdateJam(agv, startCode, segment, jam);
+                    ArrayList<String> jamPath = new ArrayList<>(unlockPathList);
+                    jam = this.createOrUpdateJam(agv, startCode, segment, jam, jamPath);
 
                     // ? has unAvoidable block vehicles
                     if (blockVehicleList.stream().anyMatch(blockVehicleDto -> !blockVehicleDto.isAvoidable())) {
@@ -290,7 +297,7 @@
                                 }
 
                                 // notify block vehicle to avoid
-                                if (this.notifyVehicleAvoid(blockAgvNo, blockAgvCode, unlockPathList, agvNo, jam)) {
+                                if (this.notifyVehicleAvoid(blockAgvNo, blockAgvCode, jamPath, agvNo, jam)) {
                                     if (jam.getCycleAvo() == 1) {
                                         jam.setCycleCode(endCode.getId());
                                     }
@@ -465,13 +472,14 @@
         return true;
     }
 
-    private Jam createOrUpdateJam(Agv agv, Code startCode, Segment segment, Jam jam) {
+    private Jam createOrUpdateJam(Agv agv, Code startCode, Segment segment, Jam jam, List<String> jamPath) {
         if (jam == null) {
             jam = new Jam();
             jam.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
             jam.setJamAgv(agv.getId());
             jam.setJamCode(startCode.getId());
             jam.setJamSeg(segment.getId());
+            jam.setJamPath(GsonUtils.toJson(jamPath));
             jam.setStartTime(new Date());
             jam.setState(JamStateType.RUNNING.toString());
             if (!jamService.save(jam)) {
@@ -487,4 +495,17 @@
         return jam;
     }
 
+    private List<String> getBlackPathList(List<Jam> unfinishedOriginJamByCurrAgv) {
+        List<String> blackPathList = new ArrayList<>();
+        if (!Cools.isEmpty(unfinishedOriginJamByCurrAgv)) {
+            for (Jam jam : unfinishedOriginJamByCurrAgv) {
+                if (!Cools.isEmpty(jam.getJamPath())) {
+                    List<String> list = GsonUtils.fromJsonToList(jam.getJamPath(), String.class);
+                    blackPathList.addAll(list);
+                }
+            }
+        }
+        return blackPathList.stream().distinct().collect(Collectors.toList());
+    }
+
 }
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 adf32a6..37109bb 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
@@ -83,6 +83,10 @@
 //                    }
 //                }
 
+                if (!Cools.isEmpty(blackList) && blackList.contains(node.getCodeData())) {
+                    continue;
+                }
+
                 // 鑺傜偣琚崰鐢�
                 DynamicNode dynamicNode = dynamicMatrix[node.getX()][node.getY()];
                 String vehicle = dynamicNode.getVehicle();
@@ -90,9 +94,6 @@
                 if (!vehicle.equals(DynamicNodeType.ACCESS.val)) {
                     if (!vehicle.equals(agvNo)) {
 
-                        if (!Cools.isEmpty(blackList) && blackList.contains(vehicle)) {
-                            continue;
-                        }
                         if (lock) {
                             continue;
                         }
@@ -107,9 +108,6 @@
                     List<String> otherWaveList = MapDataUtils.hasOtherWave(waveNodeList, agvNo);
 
                     if (!Cools.isEmpty(otherWaveList)) {
-                        if (!Cools.isEmpty(blackList) && 0 < Cools.getIntersection(otherWaveList, blackList).size()) {
-                            continue;
-                        }
 
                         if (lock) {
                             continue;
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/fake/AgvSimulatorTask.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/fake/AgvSimulatorTask.java
index cd9b2aa..a19aff2 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/fake/AgvSimulatorTask.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/fake/AgvSimulatorTask.java
@@ -5,6 +5,7 @@
 import com.zy.acs.common.domain.protocol.AGV_11_UP;
 import com.zy.acs.common.enums.AgvCompleteType;
 import com.zy.acs.common.utils.RedisSupport;
+import com.zy.acs.manager.core.scheduler.MapDataWsScheduler;
 import com.zy.acs.manager.core.service.MapService;
 import com.zy.acs.manager.manager.entity.Action;
 import com.zy.acs.manager.manager.entity.Agv;
@@ -26,8 +27,6 @@
  */
 @Slf4j
 public class AgvSimulatorTask implements Runnable {
-
-    public static final int ACTION_DURING_TIME = 500;
 
     private final Agv agv;
     private final AgvDetailService agvDetailService;
@@ -116,7 +115,7 @@
         // 妯℃嫙鐢甸噺娑堣��
 //        agvDetail.setVol(agvDetail.getVol() - 0.1 * distanceToMove); // 鏍规嵁璺濈娑堣�楃數閲�
 
-        Thread.sleep(ACTION_DURING_TIME);
+        Thread.sleep(MapDataWsScheduler.WEBSOCKET_BROADCAST_INTERVAL);
 
         agvDetailService.updateById(agvDetail);
 
@@ -140,7 +139,7 @@
         // 妯℃嫙鐢甸噺娑堣��?
 //        agvDetail.setVol(agvDetail.getVol() - 0.05 * (angleToRotate / 15.0)); // 鏍规嵁瑙掑害娑堣�楃數閲�
 
-        Thread.sleep(ACTION_DURING_TIME);
+        Thread.sleep(MapDataWsScheduler.WEBSOCKET_BROADCAST_INTERVAL);
         agvDetailService.updateById(agvDetail);
         action.setActionSts(ActionStsType.FINISH.val());
         actionService.updateById(action);
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/MockController.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/MockController.java
deleted file mode 100644
index 8b0df67..0000000
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/MockController.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.zy.acs.manager.manager.controller;
-
-import com.zy.acs.framework.common.R;
-import com.zy.acs.manager.system.controller.BaseController;
-import com.zy.acs.manager.core.service.MockService;
-import com.zy.acs.manager.manager.controller.param.MockSubmitParam;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-
-/**
- * Created by vincent on 2023/7/29
- */
-@RestController
-@RequestMapping("/api/mock")
-public class MockController extends BaseController {
-
-    @Autowired
-    private MockService mockService;
-
-//    @PreAuthorize("hasAuthority('map:save')")
-    @PostMapping("/submit")
-    public R save(@RequestBody MockSubmitParam param) {
-        return R.ok().add(mockService.submit(param.getAgvList(), param.getTaskList()));
-    }
-
-    @GetMapping("/imitate")
-    public R imitate() {
-        return R.ok().add((mockService.imitate()));
-    }
-
-    @GetMapping("/astar")
-    public R astar() {
-        mockService.astarMock();
-        return R.ok();
-    }
-}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Jam.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Jam.java
index 722578e..cb0f80c 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Jam.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Jam.java
@@ -58,6 +58,12 @@
     private Long jamSeg;
 
     /**
+     * 闃诲璺緞
+     */
+    @ApiModelProperty(value= "闃诲璺緞")
+    private String jamPath;
+
+    /**
      * 閬胯杞﹁締
      */
     @ApiModelProperty(value= "閬胯杞﹁締")
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/JamMapper.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/JamMapper.java
index a72d9b4..e3e14e9 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/JamMapper.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/JamMapper.java
@@ -2,7 +2,12 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.zy.acs.manager.manager.entity.Jam;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 public interface JamMapper extends BaseMapper<Jam> {
 
+    List<Jam> selectUnfinishedJamByAvo(@Param("avoAgv")Long avoAgv, @Param("currCode")Long currCode, @Param("currSeg")Long currSeg);
+
 }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/JamService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/JamService.java
index ce8407c..2e1014a 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/JamService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/JamService.java
@@ -10,6 +10,8 @@
 
     Jam getJam(Long agvId, Long jamCode, Long jamSeg);
 
+    List<Jam> hasUnfinishedOriginJamByAvo(Long avoAgv, Long currCode, Long currSeg);
+
     Jam getCycleJam(Long jamAgv, Long jamSeg, String avoAgvNo);
 
     List<Jam> queryByAvoid(Long avoAgv, JamStateType jamState);
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 af8c23b..4dd476f 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
@@ -40,6 +40,15 @@
         return null;
     }
 
+    /**
+     * 鍥犱负浣犺�岄樆濉炵殑杞�,鐜板湪浣犲凡缁忓湪閬胯鐐逛簡
+     * 浣犵殑涓嬩竴涓猻egment鏄笉鏄張浼氬鑷撮樆濉�
+     */
+    @Override
+    public List<Jam> hasUnfinishedOriginJamByAvo(Long avoAgv, Long currCode, Long currSeg) {
+        return this.baseMapper.selectUnfinishedJamByAvo(avoAgv, null, null);
+    }
+
     @Override
     public Jam getCycleJam(Long jamAgv, Long jamSeg, String avoAgvNo) {
         List<Jam> jams = this.list(new LambdaQueryWrapper<Jam>()
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 3c00fa1..72d732b 100644
--- a/zy-acs-manager/src/main/resources/mapper/manager/JamMapper.xml
+++ b/zy-acs-manager/src/main/resources/mapper/manager/JamMapper.xml
@@ -23,4 +23,22 @@
         </where>
     </sql>
 
+    <select id="selectUnfinishedJamByAvo" resultType="com.zy.acs.manager.manager.entity.Jam">
+        SELECT
+        mj.*
+        FROM man_jam mj
+        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 jam_seg.state in ('INIT', 'WAITING')
+        AND avo_seg.state not in ('INIT', 'WAITING')
+        AND mj.avo_agv = #{avoAgv}
+        <if test="currSeg != null">
+            AND mj.avo_seg = #{currSeg}
+        </if>
+        <if test="currCode != null">
+            AND mj.avo_code = #{currCode}
+        </if>
+    </select>
+
 </mapper>

--
Gitblit v1.9.1