From c720e1ca147093cac0137e4bd9d053e5e04c8e7a Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期五, 01 十一月 2024 12:51:42 +0800
Subject: [PATCH] #
---
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java | 65 ++++++++++++++------------------
1 files changed, 29 insertions(+), 36 deletions(-)
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 7922cee..3953bb6 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,11 +2,11 @@
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zy.acs.common.constant.RedisConstant;
+import com.zy.acs.common.utils.RedisSupport;
import com.zy.acs.framework.common.Cools;
import com.zy.acs.framework.common.SnowflakeIdWorker;
import com.zy.acs.framework.exception.CoolException;
-import com.zy.acs.common.constant.RedisConstant;
-import com.zy.acs.common.utils.RedisSupport;
import com.zy.acs.manager.common.utils.MapDataUtils;
import com.zy.acs.manager.core.domain.TaskPosDto;
import com.zy.acs.manager.core.domain.TrafficJamDto;
@@ -26,10 +26,7 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
/**
* Wavefront
@@ -84,24 +81,23 @@
Travel travel = travelService.getById(segment.getTravelId());
Agv agv = agvService.getById(travel.getAgvId());
AgvDetail agvDetail = agvDetailService.selectByAgvId(travel.getAgvId());
-
long endNode = segment.getEndNode();
- Code startCode = codeService.getById(agvDetail.getRecentCode());
- Code endCode = codeService.getById(endNode);
+ // valid ----------------------------------------------------
+ if (!agvService.judgeEnable(agv.getId())) {
+ return;
+ }
if (!Cools.isEmpty(segmentService.getByAgvAndState(agv.getId(), SegmentStateType.RUNNING.toString()))) {
return;
}
-
List<Segment> waitingSegList = segmentService.getByAgvAndState(agv.getId(), SegmentStateType.WAITING.toString());
if (!Cools.isEmpty(waitingSegList)) {
- for (Segment seg : waitingSegList) {
- if (!seg.getId().equals(segment.getId())) {
+ for (Segment waitingSeg : waitingSegList) {
+ if (!waitingSeg.getId().equals(segment.getId())) {
return;
}
}
}
-
if (jamService.count(new LambdaQueryWrapper<Jam>()
.eq(Jam::getJamAgv, agv.getId())
.eq(Jam::getJamSeg, segment.getId())
@@ -112,23 +108,27 @@
return;
}
+ // execute -----------------------------------------------
// ArrayList<List<TaskPosDto>> list = JSON.parseObject(travel.getTaskContent(), new TypeReference<ArrayList<List<TaskPosDto>>>() {});
-
- List<Segment> segmentList = new ArrayList<>();
- segmentList.add(segment);
// get path list
avoidWaveCalculator.calcWaveScope(); // * sync wave scope
- List<String> pathList = this.checkoutPath(agv, startCode, endCode, segment);
+ // checkout path
+ Code startCode = codeService.getById(agvDetail.getRecentCode());
+ Code endCode = codeService.getById(endNode);
+ List<String> pathList = this.checkoutPath(agv, startCode, endCode, segment);
if (Cools.isEmpty(pathList)) {
return;
}
- String lastCodeData = pathList.get(pathList.size() - 1);
+ List<Segment> segmentList = new ArrayList<>();
+ segmentList.add(segment);
- // slice
+ String lastCodeData = pathList.get(pathList.size() - 1);
if (!endCode.getData().equals(lastCodeData)) {
+ // slice
+ Code lastCode = codeService.selectByData(lastCodeData);
// if (pathList.size() <= MIN_SLICE_PATH_LENGTH) {
// return;
@@ -138,11 +138,9 @@
segment.setState(SegmentStateType.INIT.toString());
segment.setUpdateTime(now);
if (!segmentService.updateById(segment)) {
- log.error("Segment [{}] 鏇存柊澶辫触 锛侊紒锛�", segment.getTravelId() + " - " + segment.getSerial());
+ log.error("Segment [{}] failed to update 锛侊紒锛�", segment.getGroupId() + " - " + segment.getSerial());
}
segmentList.clear();
-
- Code lastCode = codeService.selectByData(lastCodeData);
// new move seg
Segment insertSeg = new Segment();
@@ -157,7 +155,6 @@
if (!segmentService.save(insertSeg)) {
log.error("Segment [{}] 淇濆瓨澶辫触 锛侊紒锛�", segment.getTravelId() + " - " + segment.getSerial());
}
-
segmentList.add(insertSeg);
} else {
@@ -231,7 +228,8 @@
List<String> lockPathList = mapService.checkoutPath(agvNo, startCode, endCode, true);
if (!Cools.isEmpty(lockPathList) && // 瀛樺湪閬胯瑙�
- Math.abs(lockPathList.size() - unlockPathList.size()) <= Math.max((mapDataDispatcher.getCodeMatrix(lev)[0].length / 2), 5)) {
+ Math.abs(lockPathList.size() - unlockPathList.size()) <= Arrays.stream(mapDataDispatcher.getCodeMatrix(lev)).mapToInt(row -> row.length).sum() / 10
+ ) {
pathList = lockPathList;
} else {
@@ -245,7 +243,6 @@
String jamAgvNo = jamVehicleList.get(0);
if (mapDataDispatcher.queryCodeListFromDynamicNode(null, jamAgvNo).size() > 1 && pathList.size() <= MIN_SLICE_PATH_LENGTH) {
pathList.clear();
-// return pathList;
}
}
@@ -481,35 +478,31 @@
* avoidPathList include wave node and dynamic node
*/
private boolean notifyVehicleAvoid(String agvNo, String agvPosCode, List<String> avoidPathList, String sponsor, Jam jam) {
-
- assert avoidPathList.size() >= 2;
+ Agv agv = agvService.selectByUuid(agvNo);
+ if (!Cools.isEmpty(segmentService.getByAgvAndState(agv.getId(), SegmentStateType.RUNNING.toString()))) {
+ log.warn("{}鍙疯溅杈嗛伩璁╁け璐ワ紝瀛樺湪杩涜涓换鍔★紒锛侊紒", agvNo);
+ return false;
+ }
int[] startMapIdx = mapDataDispatcher.getCodeMatrixIdx(null, agvPosCode);
-
RetreatNavigateNode startNode = new RetreatNavigateNode(startMapIdx[0], startMapIdx[1], agvPosCode);
+ assert avoidPathList.size() >= 2;
RetreatNavigateNode finalNode = retreatNavigateService.execute(agvNo, startNode, avoidPathList, sponsor, jam);
if (null == finalNode) {
log.warn("{}鍙疯溅杈嗛伩璁╁け璐ワ紝妫�绱㈤伩璁╃偣澶辫触锛侊紒锛�", agvNo);
return false;
}
- Date now = new Date();
String endCodeData = finalNode.getCodeData();
- Agv agv = agvService.selectByUuid(agvNo);
Code endCode = codeService.selectByData(endCodeData);
-
jam.setAvoCode(endCode.getId());
-
- if (!Cools.isEmpty(segmentService.getByAgvAndState(agv.getId(), SegmentStateType.RUNNING.toString()))) {
- log.warn("{}鍙疯溅杈嗛伩璁╁け璐ワ紝瀛樺湪杩涜涓换鍔★紒锛侊紒", agvNo);
- return false;
- }
List<Segment> waitingSegList = segmentService.getByAgvAndState(agv.getId(), SegmentStateType.WAITING.toString());
if (!Cools.isEmpty(waitingSegList)) {
// revert
+ Date now = new Date();
for (Segment seg : waitingSegList) {
seg.setState(SegmentStateType.INIT.toString());
seg.setUpdateTime(now);
--
Gitblit v1.9.1