From 80d8b0ed5a43ba329c31b557fff81eceb42b022c Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期二, 26 十一月 2024 10:26:55 +0800 Subject: [PATCH] # --- zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java | 19 ++++----- zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/type/BlockSeverityType.java | 26 +++++++++++++ zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java | 30 +++----------- zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java | 5 +- 4 files changed, 45 insertions(+), 35 deletions(-) diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/type/BlockSeverityType.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/type/BlockSeverityType.java new file mode 100644 index 0000000..13fa31f --- /dev/null +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/type/BlockSeverityType.java @@ -0,0 +1,26 @@ +package com.zy.acs.manager.core.domain.type; + +public enum BlockSeverityType { + +// NONE(0), + NONE(0), + SEVERE(20000), + ; + + public long duration; + + BlockSeverityType(long duration) { + this.duration = duration; + } + + public static BlockSeverityType query(Long duration) { + if (null == duration) { + return BlockSeverityType.NONE; + } + if (duration > SEVERE.duration) { + return BlockSeverityType.SEVERE; + } + return BlockSeverityType.NONE; + } + +} diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java index d67e920..25a3aa7 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java @@ -4,6 +4,7 @@ import com.zy.acs.common.enums.AgvDirectionType; import com.zy.acs.framework.common.Cools; import com.zy.acs.manager.common.utils.MapDataUtils; +import com.zy.acs.manager.core.domain.type.BlockSeverityType; import com.zy.acs.manager.core.service.astart.*; import com.zy.acs.manager.core.service.astart.domain.DynamicNode; import com.zy.acs.manager.core.service.floyd.FloydNavigateService; @@ -45,7 +46,7 @@ * 瀵诲潃 ===>> A Star */ public synchronized List<String> checkoutPath(String agvNo, Code startCode, Code endCode - , Boolean lock, List<String> blackList, Segment segment) { + , Boolean lock, List<String> blackList, Segment segment, BlockSeverityType blockSeverity) { int[] startMapIdx = mapDataDispatcher.getCodeMatrixIdx(null, startCode.getData()); int[] endMapIdx = mapDataDispatcher.getCodeMatrixIdx(null, endCode.getData()); @@ -53,7 +54,7 @@ NavigateNode startNode = new NavigateNode(startMapIdx[0], startMapIdx[1], startCode.getData()); NavigateNode endNode = new NavigateNode(endMapIdx[0], endMapIdx[1], endCode.getData()); - NavigateNode finishNode = aStarNavigateService.execute(agvNo, startNode, endNode, lock, blackList, segment); + NavigateNode finishNode = aStarNavigateService.execute(agvNo, startNode, endNode, lock, blackList, segment, blockSeverity); if (null == finishNode) { log.warn("{} 鍙稟GV妫�绱{}] ===>> [{}]璺緞澶辫触......", agvNo, startCode.getData(), endCode.getData()); 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 f57cbd4..6ca2b01 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 @@ -9,6 +9,7 @@ import com.zy.acs.manager.common.utils.MapDataUtils; import com.zy.acs.manager.core.domain.BlockVehicleDto; import com.zy.acs.manager.core.domain.TaskPosDto; +import com.zy.acs.manager.core.domain.type.BlockSeverityType; import com.zy.acs.manager.core.service.astart.MapDataDispatcher; import com.zy.acs.manager.core.service.astart.RetreatNavigateNode; import com.zy.acs.manager.core.service.astart.WaveNodeType; @@ -199,6 +200,7 @@ String agvNo = agv.getUuid(); 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 List<Jam> unfinishedOriginJamByCurrAgv = jamService.getUnfinishedOriginJamByAvo(agv.getId(), startCode.getId(), segment.getId()); List<String> blackPath = this.getBlackPathList(unfinishedOriginJamByCurrAgv); @@ -207,9 +209,9 @@ List<String> pathList = new ArrayList<>(); // 鏃犻殰纰嶈В - List<String> unlockPathList = mapService.checkoutPath(agvNo, startCode, endCode, false, blackPath, segment); + List<String> unlockPathList = mapService.checkoutPath(agvNo, startCode, endCode, false, blackPath, segment, null); // 閬胯瑙� - List<String> lockPathList = mapService.checkoutPath(agvNo, startCode, endCode, true, blackPath, segment); + List<String> lockPathList = mapService.checkoutPath(agvNo, startCode, endCode, true, blackPath, segment, null); if (!Cools.isEmpty(lockPathList) && // 瀛樺湪閬胯瑙� Math.abs(lockPathList.size() - unlockPathList.size()) <= Arrays.stream(mapDataDispatcher.getCodeMatrix(lev)).mapToInt(row -> row.length).sum() / 10 @@ -218,8 +220,10 @@ pathList = lockPathList; } else { + // preview path + List<String> draftPath = new ArrayList<>(unlockPathList); // 鍙蛋琛岃矾寰勯泦鍚堣绠� - List<BlockVehicleDto> blockVehicleList = this.slicePathAndReturnBlockVehicleList(lev, unlockPathList, agvNo, pathList); // jamAgvNo may was wave + List<BlockVehicleDto> blockVehicleList = this.slicePathAndReturnBlockVehicleList(lev, draftPath, agvNo, pathList); // jamAgvNo may was wave if (!Cools.isEmpty(pathList)) { @@ -252,8 +256,7 @@ Integer maxJamTimeoutFactor = null; // persist jam data - ArrayList<String> jamPath = new ArrayList<>(unlockPathList); - jam = this.createOrUpdateJam(agv, startCode, segment, jam, jamPath); + jam = this.createOrUpdateJam(agv, startCode, segment, jam, draftPath); // ? has unAvoidable block vehicles if (blockVehicleList.stream().anyMatch(blockVehicleDto -> !blockVehicleDto.isAvoidable())) { @@ -271,10 +274,6 @@ } else { // select optimal block vehicle -// String blockAgvNo = blockVehicleList.stream() -// .filter(BlockVehicleDto::isAvoidable) -// .map(BlockVehicleDto::getVehicle) -// .findFirst().orElse(null); String blockAgvNo = this.checkoutBestSolutionOfBlocks(blockVehicleList); if (Cools.isEmpty(blockAgvNo)) { @@ -306,7 +305,7 @@ } // notify block vehicle to avoid - if (this.notifyVehicleAvoid(blockAgvNo, blockAgvCode, jamPath, agvNo, jam)) { + if (this.notifyVehicleAvoid(blockAgvNo, blockAgvCode, draftPath, agvNo, jam)) { if (jam.getCycleAvo() == 1) { jam.setCycleCode(endCode.getId()); } 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 ce7c2ab..cfd22a3 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 @@ -4,6 +4,7 @@ import com.zy.acs.framework.common.Cools; import com.zy.acs.manager.common.utils.MapDataUtils; import com.zy.acs.manager.core.domain.Lane; +import com.zy.acs.manager.core.domain.type.BlockSeverityType; import com.zy.acs.manager.core.service.LaneService; import com.zy.acs.manager.core.service.astart.domain.DynamicNode; import com.zy.acs.manager.manager.entity.Route; @@ -43,7 +44,7 @@ private ConfigService configService; public synchronized NavigateNode execute(String agvNo, NavigateNode start, NavigateNode end - , Boolean lock, List<String> blackList, Segment segment) { + , Boolean lock, List<String> blackList, Segment segment, BlockSeverityType blockSeverity) { if (start.getX() == end.getX() && start.getY() == end.getY()) { return end; } @@ -59,32 +60,15 @@ DynamicNode[][] dynamicMatrix = mapDataDispatcher.getDynamicMatrix(null); String[][] waveMatrix = mapDataDispatcher.getWaveMatrix(null); -// List<String> included = new ArrayList<>(); -// if (!Cools.isEmpty(whiteList)) { -// included.addAll(whiteList); -// } -// included.add(agvNo); -// List<VehicleDto> vehicleDtoList = agvService.getVehicleDtoList(included); - while (openQueue.size() > 0) { // 鍙栦紭鍏堥槦鍒楅《閮ㄥ厓绱犲苟涓旀妸杩欎釜鍏冪礌浠嶰pen琛ㄤ腑鍒犻櫎锛屽彇F鍊兼渶灏忕殑鑺傜偣 NavigateNode currentNode = openQueue.poll(); - // 瀵瑰綋鍓嶇粨鐐硅繘琛屾墿灞曪紝寰楀埌涓�涓洓鍛ㄧ粨鐐圭殑鏁扮粍 + ArrayList<NavigateNode> neighbourNodes = this.getNeighborNodes(currentNode, mapMatrix, existNodes); - // 瀵硅繖涓粨鐐归亶鍘嗭紝鐪嬫槸鍚︽湁鐩爣缁撶偣鍑虹幇 - label: for (NavigateNode node : neighbourNodes) { + for (NavigateNode node : neighbourNodes) { + boolean isEndNode = node.getX() == end.getX() && node.getY() == end.getY(); + int weight = 0; - // 鑺傜偣瀛樺湪鍏朵粬杞﹁締 -// for (VehicleDto vehicleDto : vehicleDtoList) { -// if (node.getCodeData().equals(vehicleDto.getPosCode())) { -// if (!Cools.isEmpty(blackList) && blackList.contains(vehicleDto.getVehicle())) { -// continue label; -// } -// if (lock) { -// continue label; -// } -// } -// } if (!Cools.isEmpty(blackList) && blackList.contains(node.getCodeData())) { continue; @@ -155,7 +139,7 @@ //鎵惧埌鐩爣缁撶偣灏辫繑鍥� - if (node.getX() == end.getX() && node.getY() == end.getY()) { + if (isEndNode) { //骞朵笖璁$畻鍑篏锛� F锛� H绛夊�� node.initNode(currentNode, end); return node; -- Gitblit v1.9.1