zy-acs-flow/src/map/constants.js
@@ -1,5 +1,5 @@ export const ANIMATE_DURING_TIME = 300; export const ANIMATE_DURING_TIME = 600; export const MAP_DEFAULT_ROTATION = 270; zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java
@@ -33,7 +33,7 @@ @Component public class MapDataWsScheduler { public static final int WEBSOCKET_BROADCAST_INTERVAL = 300; public static final int WEBSOCKET_BROADCAST_INTERVAL = 600; private ExecutorService singleThreadExecutor; zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/LaneService.java
@@ -37,6 +37,8 @@ private final Map<String, List<String>> adjacencyCodeMap = new HashMap<>(); private final Map<String, List<int[]>> laneCodeIdxMap = new HashMap<>(); private boolean initialized = Boolean.FALSE; @Autowired @@ -47,6 +49,10 @@ private SnowflakeIdWorker snowflakeIdWorker; @Autowired private ConfigService configService; @Autowired private MapDataDispatcher mapDataDispatcher; // service ------------------------------------------------------- public Boolean isInitialized() { return this.initialized; @@ -64,13 +70,25 @@ return null; } public List<int[]> getLaneCodeIdxList(String codeData) { if (Cools.isEmpty(codeData)) { return new ArrayList<>(); } List<int[]> list = this.laneCodeIdxMap.get(codeData); if (null == list) { return new ArrayList<>(); } return list; } // launcher ------------------------------------------------------- @PostConstruct public void init() { Integer lev = MapDataDispatcher.MAP_DEFAULT_LEV; String laneDataStr = redis.getValue(RedisConstant.MAP_LANE_DATA, String.valueOf(lev)); if (!Cools.isEmpty(laneDataStr)) { this.lanes = GsonUtils.fromJsonToList(laneDataStr, Lane.class); this.initialized = Boolean.TRUE; } else { StopWatch stopWatch = new StopWatch(); @@ -84,6 +102,8 @@ redis.setValue(RedisConstant.MAP_LANE_DATA, String.valueOf(lev), GsonUtils.toJson(this.lanes)); } this.generateLaneCodeIdx(null); this.initialized = Boolean.TRUE; // System.out.println(GsonUtils.toJson(this.lanes)); } @@ -104,7 +124,6 @@ this.generateLaneHash(); this.initialized = Boolean.TRUE; log.info("the lane data initialization has been completed in rcs system."); } @@ -327,4 +346,19 @@ return sb.toString(); } public void generateLaneCodeIdx(Integer lev) { log.info("There is initializing Lane CodeIdxMap......"); long l = System.currentTimeMillis(); if (Cools.isEmpty(this.lanes)) { return; } for (Lane lane : this.lanes) { List<int[]> codeIdxList = new ArrayList<>(); for (String code : lane.getCodes()) { int[] codeMatrixIdx = mapDataDispatcher.getCodeMatrixIdx(lev, code); codeIdxList.add(codeMatrixIdx); this.laneCodeIdxMap.put(code, codeIdxList); } } } } zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java
@@ -212,7 +212,7 @@ for (int i = 0; i < dynamicMatrix.length; i++) { for (int j = 0; j < dynamicMatrix[i].length; j++) { if (i == codeMatrixIdx[0] && j == codeMatrixIdx[1]) { continue; } // if (i == codeMatrixIdx[0] && j == codeMatrixIdx[1]) { continue; } DynamicNode node = dynamicMatrix[i][j]; if (node.getVehicle().equals(agvNo)) { zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/RetreatNavigateService.java
@@ -124,29 +124,26 @@ // lane if (pointOfTurn) { Lane lane = laneService.search(node.getCodeData()); if (null != lane) { List<int[]> laneCodeIdxList = laneService.getLaneCodeIdxList(node.getCodeData()); if (!Cools.isEmpty(laneCodeIdxList)) { Set<String> lanVehicleSet = new HashSet<>(); for (String laneCodeData : lane.getCodes()) { for (int[] codeMatrixIdx : laneCodeIdxList) { // overlap with sponsor String laneCodeData = codeMatrix[codeMatrixIdx[0]][codeMatrixIdx[1]]; if (avoidPathList.contains(laneCodeData)) { lanVehicleSet.add(sponsor); } int[] laneCodeMatrixIdx = mapDataDispatcher.getCodeMatrixIdx(null, laneCodeData); // scan dynamicMatrix or WaveMatrix DynamicNode laneDynamicNode = dynamicMatrix[laneCodeMatrixIdx[0]][laneCodeMatrixIdx[1]]; DynamicNode laneDynamicNode = dynamicMatrix[codeMatrixIdx[0]][codeMatrixIdx[1]]; String laneVehicle = laneDynamicNode.getVehicle(); assert !laneVehicle.equals(DynamicNodeType.BLOCK.val); if (!laneVehicle.equals(DynamicNodeType.ACCESS.val)) { if (!laneVehicle.equals(agvNo)) { lanVehicleSet.add(laneVehicle); // redis.setObject(RedisConstant.AGV_TO_STANDBY_FLAG, laneVehicle, true, 30); } } } if (lanVehicleSet.size() + 1 > maxAgvCountInLane) { phaseSecond = false; // there is a running way continue; @@ -155,6 +152,7 @@ weight += WEIGHT_CALC_FACTOR * 2; } } } Code code = codeService.selectByData(node.getCodeData()); @@ -224,24 +222,20 @@ for (RetreatNavigateNode node : neighborNodes) { // lane Lane lane = laneService.search(node.getCodeData()); if (null != lane) { List<int[]> laneCodeIdxList = laneService.getLaneCodeIdxList(node.getCodeData()); if (!Cools.isEmpty(laneCodeIdxList)) { Set<String> lanVehicleSet = new HashSet<>(); for (String laneCodeData : lane.getCodes()) { int[] laneCodeMatrixIdx = mapDataDispatcher.getCodeMatrixIdx(null, laneCodeData); // scan dynamicMatrix or WaveMatrix DynamicNode laneDynamicNode = dynamicMatrix[laneCodeMatrixIdx[0]][laneCodeMatrixIdx[1]]; for (int[] codeMatrixIdx : laneCodeIdxList) { DynamicNode laneDynamicNode = dynamicMatrix[codeMatrixIdx[0]][codeMatrixIdx[1]]; String laneVehicle = laneDynamicNode.getVehicle(); assert !laneVehicle.equals(DynamicNodeType.BLOCK.val); if (!laneVehicle.equals(DynamicNodeType.ACCESS.val)) { if (!laneVehicle.equals(agvNo)) { lanVehicleSet.add(laneVehicle); // redis.setObject(RedisConstant.AGV_TO_STANDBY_FLAG, laneVehicle, true, 30); } } } if (lanVehicleSet.size() + 1 > maxAgvCountInLane) { continue; } zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java
@@ -121,30 +121,24 @@ } // 单巷道车辆容载数量 Lane lane = laneService.search(node.getCodeData()); if (null != lane) { List<int[]> laneCodeIdxList = laneService.getLaneCodeIdxList(node.getCodeData()); if (!Cools.isEmpty(laneCodeIdxList)) { Set<String> lanVehicleSet = new HashSet<>(); List<String> laneCodes = lane.getCodes(); for (String laneCodeData : laneCodes) { int[] laneCodeMatrixIdx = mapDataDispatcher.getCodeMatrixIdx(null, laneCodeData); // scan dynamicMatrix or WaveMatrix DynamicNode laneDynamicNode = dynamicMatrix[laneCodeMatrixIdx[0]][laneCodeMatrixIdx[1]]; for (int[] codeMatrixIdx : laneCodeIdxList) { DynamicNode laneDynamicNode = dynamicMatrix[codeMatrixIdx[0]][codeMatrixIdx[1]]; String laneVehicle = laneDynamicNode.getVehicle(); assert !laneVehicle.equals(DynamicNodeType.BLOCK.val); if (!laneVehicle.equals(DynamicNodeType.ACCESS.val)) { if (!laneVehicle.equals(agvNo)) { lanVehicleSet.add(laneVehicle); // redis.setObject(RedisConstant.AGV_TO_STANDBY_FLAG, laneVehicle, true, 30); } } } if (lanVehicleSet.size() + 1 > maxAgvCountInLane) { continue; } } //找到目标结点就返回 if (isEndNode) {