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