From 60edff747d52eb42aadb036e3fbd580252de4c05 Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期四, 28 八月 2025 08:15:54 +0800
Subject: [PATCH] 1
---
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java | 130 +++++++++++++++++++++++++++++++++----------
1 files changed, 99 insertions(+), 31 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 a2a0f9f..f904df3 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
@@ -71,6 +71,10 @@
private JamService jamService;
@Autowired
private AvoidWaveCalculator avoidWaveCalculator;
+ @Autowired
+ private TaskService taskService;
+ @Autowired
+ private FuncStaService funcStaService;
@Transactional
public synchronized void trigger(Segment segment) {
@@ -99,6 +103,77 @@
if (!agvService.judgeEnable(agv.getId())) {
return;
}
+
+ // resolve deadlock
+// if (configService.getVal("unlockSwitch", Boolean.class)) {
+//
+// boolean preSegIsStandbyDeadLock = false;
+// Segment previousSeg = segmentService.getPreviousStepOfFinish(segment.getTravelId(), segment.getSerial(), MapDataConstant.RESOLVE_DEADLOCK);
+// preSegIsStandbyDeadLock = previousSeg != null;
+// if (preSegIsStandbyDeadLock && !jamService.isAvoidSeg(segment.getId())) {
+// if (0 < segmentService.count(new LambdaQueryWrapper<Segment>()
+// .in(Segment::getState, SegmentStateType.WAITING.toString(), SegmentStateType.RUNNING.toString())
+// .eq(Segment::getMemo, MapDataConstant.RESOLVE_DEADLOCK))) {
+// return;
+// }
+// }
+//
+// Jam jam = jamService.getJam(agv.getId(), agvDetail.getRecentCode(), segment.getId());
+// if (!preSegIsStandbyDeadLock && (null != jam && null != jam.getDuration() && jam.getDuration() > (BlockSeverityType.SEVERE.duration - MapDataConstant.MAX_JAM_TIMEOUT)
+// || DateUtils.diffToMilliseconds(segment.getUpdateTime(), now) > (BlockSeverityType.SEVERE.duration - MapDataConstant.MAX_JAM_TIMEOUT))
+// && (Cools.isEmpty(segment.getMemo()) || !segment.getMemo().equals(MapDataConstant.RESOLVE_DEADLOCK))) {
+//
+// Task task = taskService.getById(segment.getTaskId());
+// if (task.getTaskSts().equals(TaskStsType.PROGRESS.val())
+// && DateUtils.diffToMilliseconds(task.getUpdateTime(), now) > MapDataConstant.DEADLOCK_TASK_TIMEOUT) {
+//
+// Code endCode = null;
+// List<FuncSta> idleFunStaList = funcStaService.findInIdleStatus(FuncStaType.STANDBY, segment.getAgvId());
+// if (!Cools.isEmpty(idleFunStaList)) {
+// idleFunStaList = idleFunStaList.stream().filter(funcSta -> {
+// return 0 == segmentService.count(new LambdaQueryWrapper<Segment>()
+// .eq(Segment::getEndNode, funcSta.getCode())
+// .in(Segment::getState, SegmentStateType.WAITING.toString(), SegmentStateType.RUNNING.toString())
+// .eq(Segment::getMemo, MapDataConstant.RESOLVE_DEADLOCK)
+// );
+// }).collect(Collectors.toList());
+// FuncSta funcSta = funcStaService.checkoutFurthestFunSta(agvDetailService.getCurrentCode(segment.getAgvId()).getId(), idleFunStaList);
+// if (null != funcSta) {
+// endCode = codeService.getCacheById(funcSta.getCode());
+// }
+// }
+// if (null == endCode) {
+// log.warn("AGV[{}] failed to search destination锛宼here hadn't any idle funSta锛孴askTypeType锛歿}", segment.getAgvId(), FuncStaType.STANDBY);
+// return;
+// }
+//
+// segment.setState(SegmentStateType.INIT.toString());
+// segment.setUpdateTime(now);
+// if (!segmentService.updateById(segment)) {
+// log.error("Segment [{}] failed to update 锛侊紒锛�", segment.getGroupId() + " - " + segment.getSerial());
+// return;
+// }
+//
+// // new move seg
+// Segment insertSeg = new Segment();
+// insertSeg.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
+// insertSeg.setTravelId(segment.getTravelId());
+// insertSeg.setAgvId(segment.getAgvId());
+// insertSeg.setTaskId(segment.getTaskId());
+// insertSeg.setSerial(segment.getSerial() - 1);
+// insertSeg.setEndNode(endCode.getId());
+// insertSeg.setPosType(TaskPosDto.PosType.MOVE.toString());
+// insertSeg.setState(SegmentStateType.WAITING.toString());
+// insertSeg.setMemo(MapDataConstant.RESOLVE_DEADLOCK);
+// if (!segmentService.save(insertSeg)) {
+// log.error("Segment [{}] failed to save 锛侊紒锛�", segment.getTravelId() + " - " + segment.getSerial());
+// return;
+// }
+// return;
+// }
+// }
+// }
+
if (!Cools.isEmpty(segmentService.getByAgvAndState(agv.getId(), SegmentStateType.RUNNING.toString()))) {
return;
}
@@ -180,24 +255,24 @@
} else {
// complete first segment then merge behind segment
- int serial = segment.getSerial();
- boolean interrupt = false;
- while (!interrupt) {
-
- Segment nextStep = segmentService.getNextStepOfInit(travel.getId(), serial);
- serial ++;
- if (null == nextStep) {
- interrupt = true;
- } else {
- if (nextStep.getEndNode() == endNode) {
-
- segmentList.add(nextStep);
- } else {
- interrupt = true;
- }
- }
-
- }
+// int serial = segment.getSerial();
+// boolean interrupt = false;
+// while (!interrupt) {
+//
+// Segment nextStep = segmentService.getNextStepOfInit(travel.getId(), serial);
+// serial ++;
+// if (null == nextStep) {
+// interrupt = true;
+// } else {
+// if (nextStep.getEndNode() == endNode) {
+//
+// segmentList.add(nextStep);
+// } else {
+// interrupt = true;
+// }
+// }
+//
+// }
}
mapService.lockPath(null, pathList, agv.getUuid());
@@ -433,12 +508,13 @@
private List<BlockVehicleDto> slicePathAndReturnBlockVehicleList(Integer lev, List<String> fullPathList, String agvNo, List<String> pathList) {
List<BlockVehicleDto> blockVehicleList = new ArrayList<>();
-// DynamicNode[][] dynamicMatrix = mapDataDispatcher.getDynamicMatrix(lev);
String[][] waveMatrix = mapDataDispatcher.getWaveMatrix(lev);
- for (String code : fullPathList) {
- int[] node = mapDataDispatcher.getCodeMatrixIdx(lev, code);
+ List<int[]> codeMatrixIdxList = mapDataDispatcher.getCodeMatrixIdxList(lev, fullPathList);
+ for (int i = 0; i < fullPathList.size(); i++) {
+ String codeData = fullPathList.get(i);
+ int[] codeMatrixIdx = codeMatrixIdxList.get(i);
- String waveNode = waveMatrix[node[0]][node[1]];
+ String waveNode = waveMatrix[codeMatrixIdx[0]][codeMatrixIdx[1]];
assert !waveNode.equals(WaveNodeType.DISABLE.val);
if (!waveNode.equals(WaveNodeType.ENABLE.val)) {
List<String> waveNodeList = MapDataUtils.parseWaveNode(waveNode);
@@ -455,15 +531,7 @@
}
}
-// DynamicNode dynamicNode = dynamicMatrix[node[0]][node[1]];
-// String vehicle = dynamicNode.getVehicle();
-// assert !vehicle.equals(DynamicNodeType.BLOCK.val);
-// if (!vehicle.equals(DynamicNodeType.ACCESS.val) && !vehicle.equals(agvNo)) {
-// blockVehicleList.add(vehicle);
-// break;
-// }
-
- pathList.add(code);
+ pathList.add(codeData);
}
if (pathList.size() <= 1) {
--
Gitblit v1.9.1