From 13ea8b334572c2423abb8d156fd8428f8d074172 Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期四, 03 七月 2025 08:24:58 +0800
Subject: [PATCH] 1
---
zy-acs-manager/src/main/java/com/zy/acs/manager/core/HandlerController.java | 4
zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/KernelScheduler.java | 39
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/OpenAlgorithmController.java | 40
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/OpenAlgorithmServiceImpl.java | 47 +
zy-acs-manager/src/main/java/com/zy/acs/manager/common/security/SecurityConfig.java | 1
zy-acs-manager/src/main/java/com/zy/acs/manager/core/DemoController.java | 2
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainLxtService.java | 4
zy-acs-manager/src/main/java/com/zy/acs/manager/core/third/zkd/dto/AllocateTaskResponse.java | 2
zy-acs-manager/src/main/java/com/zy/acs/manager/core/third/zkd/dto/Navigation.java | 2
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficZkdService.java | 42
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Segment.java | 5
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java | 2
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/BaseMainService.java | 4
zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/AutoRunScheduler.java | 4
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataService.java | 2
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java | 1462 ++++++++++++++++++++++++------------------------
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainZkdService.java | 119 ++-
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Task.java | 5
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/result/OpenAgvInfo.java | 2
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java | 2
20 files changed, 936 insertions(+), 854 deletions(-)
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/common/security/SecurityConfig.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/security/SecurityConfig.java
index 3fe3948..3f5a9d6 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/common/security/SecurityConfig.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/security/SecurityConfig.java
@@ -34,6 +34,7 @@
public class SecurityConfig extends WebSecurityConfigurerAdapter {
public static final String[] FILTER_PATH = new String[]{
+ "/api/open/**",
"/demo/**",
"/test/**",
"/fake/**",
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/DemoController.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/DemoController.java
index a7e2e61..341654f 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/DemoController.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/DemoController.java
@@ -47,8 +47,6 @@
@Autowired
private LocService locService;
@Autowired
- private TrafficService trafficService;
- @Autowired
private ThreadPoolRegulator threadPoolRegulator;
@Autowired
private MapDataDispatcher mapDataDispatcher;
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/HandlerController.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/HandlerController.java
index ca24d60..1324f81 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/HandlerController.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/HandlerController.java
@@ -62,8 +62,8 @@
private LocService locService;
@Autowired
private StaService staService;
- @Autowired
- private TrafficService trafficService;
+// @Autowired
+// private TrafficService trafficService;
@Autowired
private ThreadPoolRegulator threadPoolRegulator;
@Autowired
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/AutoRunScheduler.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/AutoRunScheduler.java
index 5491b80..318a076 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/AutoRunScheduler.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/AutoRunScheduler.java
@@ -11,7 +11,6 @@
import com.zy.acs.manager.core.constant.StaGroupConstant;
import com.zy.acs.manager.core.service.MainLockWrapService;
import com.zy.acs.manager.core.service.MainLxtService;
-import com.zy.acs.manager.core.service.TrafficService;
import com.zy.acs.manager.manager.controller.param.OpenBusSubmitParam;
import com.zy.acs.manager.manager.entity.*;
import com.zy.acs.manager.manager.enums.*;
@@ -44,8 +43,7 @@
private ActionService actionService;
@Autowired
private SegmentService segmentService;
- @Autowired
- private TrafficService trafficService;
+
@Autowired
private ConfigService configService;
@Autowired
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/KernelScheduler.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/KernelScheduler.java
index cd4e72d..765fde1 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/KernelScheduler.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/KernelScheduler.java
@@ -2,9 +2,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.acs.manager.core.domain.AgvTaskDto;
-import com.zy.acs.manager.core.service.MainLockWrapService;
-import com.zy.acs.manager.core.service.MainLxtService;
-import com.zy.acs.manager.core.service.TrafficService;
+import com.zy.acs.manager.core.service.*;
import com.zy.acs.manager.manager.entity.Bus;
import com.zy.acs.manager.manager.entity.Segment;
import com.zy.acs.manager.manager.entity.Task;
@@ -16,6 +14,8 @@
import com.zy.acs.manager.system.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.event.ApplicationReadyEvent;
+import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@@ -53,13 +53,15 @@
@Autowired
private MainLxtService mainService;
@Autowired
+ private MainZkdService mainZkdService;
+ @Autowired
private MainLockWrapService mainLockWrapService;
@Autowired
private ActionService actionService;
@Autowired
private SegmentService segmentService;
@Autowired
- private TrafficService trafficService;
+ private TrafficZkdService trafficZkdService;
@Autowired
private ConfigService configService;
@Autowired
@@ -67,20 +69,24 @@
@Autowired
private AgvModelService agvModelService;
- //@Scheduled(cron = "0/1 * * * * ? ")
+ @Scheduled(cron = "0/1 * * * * ? ")
private void startupBus() throws InterruptedException {
// if (!configService.getVal("TaskAssignMode", Boolean.class)) { return; }
- if (!this.lock.tryLock(LOCK_TIMEOUT, TimeUnit.SECONDS)) { return; }
+ if (!this.lock.tryLock(LOCK_TIMEOUT, TimeUnit.SECONDS)) {
+ return;
+ }
List<Bus> busList = busService.selectBySts(BusStsType.RECEIVE);
for (Bus bus : busList) {
- mainService.allocateTask(bus);
+ mainZkdService.allocateTask(bus);
}
this.lock.unlock();
}
//@Scheduled(cron = "0/1 * * * * ? ")
private void calculateSeg() throws InterruptedException {
- if (!this.lock.tryLock(LOCK_TIMEOUT, TimeUnit.SECONDS)) { return; }
+ if (!this.lock.tryLock(LOCK_TIMEOUT, TimeUnit.SECONDS)) {
+ return;
+ }
List<Task> taskList = taskService.selectBySts(TaskStsType.WAITING);
List<AgvTaskDto> taskDtoList = new ArrayList<>();
@@ -101,9 +107,12 @@
this.lock.unlock();
}
- //@EventListener(ApplicationReadyEvent.class)
+ @EventListener(ApplicationReadyEvent.class)
public void init() {
- try { Thread.sleep(1200); } catch (InterruptedException ignore) {}
+ try {
+ Thread.sleep(1200);
+ } catch (InterruptedException ignore) {
+ }
// traffic calculate
this.trafficCalcThread = new Thread(() -> {
while (!Thread.currentThread().isInterrupted()) {
@@ -115,7 +124,7 @@
);
for (Segment segment : segments) {
long startTime = System.currentTimeMillis();
- trafficService.trigger(segment);
+ trafficZkdService.trigger(segment);
// log.info("traffic calculation spend {} ms", System.currentTimeMillis() - startTime);
}
@@ -148,7 +157,7 @@
// patch ----------------------------------------------------------------------------------------------
@Scheduled(cron = "0/3 * * * * ? ")
- private void busFinishPatch(){
+ private void busFinishPatch() {
List<Bus> busList = busService.selectBySts(BusStsType.PROGRESS);
for (Bus bus : busList) {
boolean finish = true;
@@ -180,12 +189,12 @@
@PreDestroy
- public void shutDown(){
+ public void shutDown() {
if (this.trafficCalcThread != null) {
- this.trafficCalcThread .interrupt();
+ this.trafficCalcThread.interrupt();
}
if (this.actionPublicThread != null) {
- this.actionPublicThread .interrupt();
+ this.actionPublicThread.interrupt();
}
}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataService.java
index c63c585..c14ca71 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataService.java
@@ -44,8 +44,6 @@
@Autowired
private WebsocketService websocketService;
@Autowired
- private TrafficService trafficService;
- @Autowired
private MapService mapService;
@Autowired
private ThreadPoolRegulator threadPoolRegulator;
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/BaseMainService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/BaseMainService.java
index d9c55cb..8d02b7b 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/BaseMainService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/BaseMainService.java
@@ -83,8 +83,8 @@
private TravelService travelService;
@Autowired
private SegmentService segmentService;
- @Autowired
- private TrafficService trafficService;
+// @Autowired
+// private TrafficService trafficService;
@Autowired
private AgvModelService agvModelService;
@Autowired
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainLxtService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainLxtService.java
index 945fa4c..0d6ca93 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainLxtService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainLxtService.java
@@ -76,8 +76,8 @@
private TravelService travelService;
@Autowired
private SegmentService segmentService;
- @Autowired
- private TrafficService trafficService;
+// @Autowired
+// private TrafficService trafficService;
@Autowired
private AgvModelService agvModelService;
@Autowired
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainZkdService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainZkdService.java
index 04391b8..540b950 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainZkdService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainZkdService.java
@@ -2,17 +2,22 @@
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zy.acs.framework.common.Cools;
import com.zy.acs.framework.common.SnowflakeIdWorker;
import com.zy.acs.manager.common.domain.param.HandlerPublishParam;
import com.zy.acs.manager.common.exception.BusinessException;
+import com.zy.acs.manager.core.domain.TaskPosDto;
import com.zy.acs.manager.core.service.astart.MapDataDispatcher;
import com.zy.acs.manager.core.third.zkd.HttpUtils;
import com.zy.acs.manager.core.third.zkd.dto.AllocateTask;
import com.zy.acs.manager.core.third.zkd.dto.AllocateTaskResponse;
import com.zy.acs.manager.core.third.zkd.dto.Navigation;
import com.zy.acs.manager.manager.entity.*;
-import com.zy.acs.manager.manager.enums.*;
+import com.zy.acs.manager.manager.enums.BusStsType;
+import com.zy.acs.manager.manager.enums.SegmentStateType;
+import com.zy.acs.manager.manager.enums.TaskStsType;
+import com.zy.acs.manager.manager.enums.TaskTypeType;
import com.zy.acs.manager.manager.service.*;
import com.zy.acs.manager.manager.utils.ActionSorter;
import com.zy.acs.manager.system.service.ConfigService;
@@ -74,8 +79,8 @@
private TravelService travelService;
@Autowired
private SegmentService segmentService;
- @Autowired
- private TrafficService trafficService;
+ // @Autowired
+// private TrafficService trafficService;
@Autowired
private AgvModelService agvModelService;
@Autowired
@@ -149,20 +154,33 @@
allocateTask.setEnd(endCode);
allocateTask.setType("1");
allocateTask.setPriority(task.getPriority());
+ allocateTasks.add(allocateTask);
}
- allocateTasks.add(allocateTask);
- String post = HttpUtils.post("http://localhost:8080/zy-acs-manager/api/v1/zkd/allocateTask", JSON.toJSONString(allocateTasks));
- List<AllocateTaskResponse> allocateTaskResponses = JSON.parseArray(post, AllocateTaskResponse.class);
- for (AllocateTaskResponse allocateTaskResponse : allocateTaskResponses) {
- Task task = taskService.getById(allocateTaskResponse.getTaskId());
- task.setAgvId(Long.parseLong(allocateTaskResponse.getAgvId()));
- task.setTaskSts(TaskStsType.WAITING.val());
- task.setIoTime(now);
- task.setUpdateTime(now);
- if (!taskService.updateById(task)) {
- throw new BusinessException("seqNum: " + task.getSeqNum() + " failed to update");
+ log.info("allocateTask:{}", JSON.toJSONString(allocateTasks));
+ String post = HttpUtils.post("http://10.10.10.239:8002/open/task/send/v1", JSON.toJSONString(allocateTasks));
+ if (post == null) {
+ return;
+ }
+ Object data = JSON.parseObject(post).get("data");
+ if (data != null) {
+ List<AllocateTaskResponse> allocateTaskResponses = JSON.parseArray(data.toString(), AllocateTaskResponse.class);
+ if (Cools.isEmpty(allocateTaskResponses)) {
+ log.error("allocateTaskResponses is null,{}", post);
+ throw new BusinessException("浠诲姟涓嬪彂澶辫触");
+ }
+ for (AllocateTaskResponse allocateTaskResponse : allocateTaskResponses) {
+ Task task = taskService.getById(allocateTaskResponse.getTaskId());
+ task.setAgvId(agvService.getAgvId(allocateTaskResponse.getAgvId()));
+ task.setBack(allocateTaskResponse.getLev_id());
+ task.setTaskSts(TaskStsType.WAITING.val());
+ task.setIoTime(now);
+ task.setUpdateTime(now);
+ if (!taskService.updateById(task)) {
+ throw new BusinessException("seqNum: " + task.getSeqNum() + " failed to update");
+ }
}
}
+
} catch (Exception e) {
log.error("mainService.allocateTaskByZkd", e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -175,37 +193,53 @@
* todo: {@link com.zy.acs.manager.core.HandlerController#controlAgv(String, HandlerPublishParam)}
*/
@Transactional(propagation = Propagation.REQUIRES_NEW)
- public void buildMajorTask(Long agvId, Navigation navigation) {
+ public boolean buildMajorTask(Long agvId, Navigation navigation) {
try {
// generate travel
- Travel travel = new Travel();
- travel.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
- travel.setTravelId(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
- travel.setAgvId(agvId);
- travel.setTaskContent(JSON.toJSONString(navigation));
- //travel.setTaskIds(JSON.toJSONString(taskList.stream().map(Task::getId).collect(Collectors.toList())));
- travel.setState(TravelStateType.RUNNING.toString());
- if (!travelService.save(travel)) {
- throw new BusinessException("浠诲姟缁勪繚瀛樺け璐�");
- }
+// Travel travel = new Travel();
+// travel.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
+// travel.setTravelId(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
+// travel.setAgvId(agvId);
+// travel.setTaskContent(JSON.toJSONString(navigation));
+// //travel.setTaskIds(JSON.toJSONString(taskList.stream().map(Task::getId).collect(Collectors.toList())));
+// travel.setState(TravelStateType.RUNNING.toString());
+// if (!travelService.save(travel)) {
+// throw new BusinessException("浠诲姟缁勪繚瀛樺け璐�");
+// }
// generate segment
- int segSerial = 0;
- List<Segment> segmentList = new ArrayList<>();
+ Segment segment = segmentService.getOne(new QueryWrapper<Segment>().eq("uuid", navigation.getSegId()));
+ if (segment == null) {
+ segment = new Segment();
+ }
+ int segSerial = 1;
+ //segment.setTravelId(travel.getId());
+ segment.setAgvId(agvId);
+
+ segment.setSerial(segSerial);
for (Navigation.CodeDTO codeDTO : navigation.getCodeList()) {
- segSerial++;
+ //segSerial++;
Task task = taskService.getById(Long.parseLong(codeDTO.getTaskId()));
- Segment segment = new Segment();
- segment.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
- segment.setTravelId(travel.getId());
- segment.setAgvId(agvId);
+ segment.setUuid(navigation.getSegId());
segment.setTaskId(task.getId());
- segment.setSerial(segSerial);
- Code cacheByData = codeService.getCacheByData(codeDTO.getCode());
+ Code cacheByData = codeService.getCacheById(Long.parseLong(codeDTO.getCode()));
+ if (cacheByData == null) {
+ throw new BusinessException(codeDTO.getCode() + "鐐逛綅涓嶅瓨鍦�");
+ }
segment.setEndNode(cacheByData.getId());
- segment.setPosType(codeDTO.getPosType());
+ if (codeDTO.getPosType() != null) {
+ if (task.getTaskType().equals(TaskTypeType.LOC_TO_STA.val())) {
+ segment.setPosType(codeDTO.getPosType().equals("1") ? TaskPosDto.PosType.ORI_LOC.toString() : TaskPosDto.PosType.DEST_STA.toString());
+ } else if (task.getTaskType().equals(TaskTypeType.STA_TO_LOC.val())) {
+ segment.setPosType(codeDTO.getPosType().equals("1") ? TaskPosDto.PosType.ORI_STA.toString() : TaskPosDto.PosType.DEST_LOC.toString());
+ } else if (task.getTaskType().equals(TaskTypeType.STA_TO_STA.val())) {
+ segment.setPosType(codeDTO.getPosType().equals("1") ? TaskPosDto.PosType.ORI_STA.toString() : TaskPosDto.PosType.DEST_STA.toString());
+ } else if (task.getTaskType().equals(TaskTypeType.LOC_TO_LOC.val())) {
+ segment.setPosType(codeDTO.getPosType().equals("1") ? TaskPosDto.PosType.ORI_LOC.toString() : TaskPosDto.PosType.DEST_LOC.toString());
+ }
+ }
segment.setBackpack(codeDTO.getLev());
segment.setState(SegmentStateType.INIT.toString());
- segmentList.add(segment);
+ segment.setPath((Cools.isEmpty(segment.getPath()) ? "" : segment.getPath()) + cacheByData.getData() + ",");
task.setTaskSts(TaskStsType.ASSIGN.val());
task.setStartTime(new Date());
@@ -214,20 +248,17 @@
throw new BusinessException(task.getUuid() + "浠诲姟鏇存柊澶辫触");
}
}
- for (int i = 0; i < segmentList.size(); i++) {
- Segment segment = segmentList.get(i);
- if (i == 0) {
- segment.setState(SegmentStateType.WAITING.toString());
- }
- if (!segmentService.save(segment)) {
- throw new BusinessException("浠诲姟缁勪繚瀛樺け璐�");
- }
+
+ segment.setState(SegmentStateType.WAITING.toString());
+ if (!segmentService.save(segment)) {
+ throw new BusinessException("浠诲姟缁勪繚瀛樺け璐�");
}
} catch (Exception e) {
log.error("mainService.buildMajorTask[task]", e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
+ return true;
}
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 5f4df21..e1c4631 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
@@ -35,7 +35,7 @@
@Component("mapService")
public class MapService {
- private final static int[][] DIRECTIONS = {{0,1},{0,-1},{-1,0},{1,0}};
+ private final static int[][] DIRECTIONS = {{0, 1}, {0, -1}, {-1, 0}, {1, 0}};
@Value("${floyd.enable}")
private Boolean floydEnable;
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 30cd237..2b4dc48 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
@@ -1,742 +1,742 @@
-package com.zy.acs.manager.core.service;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.zy.acs.common.utils.GsonUtils;
-import com.zy.acs.common.utils.Utils;
-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.manager.common.utils.MapDataUtils;
-import com.zy.acs.manager.core.constant.MapDataConstant;
-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.NavigateNode;
-import com.zy.acs.manager.core.service.astart.RetreatNavigateNode;
-import com.zy.acs.manager.core.service.astart.WaveNodeType;
-import com.zy.acs.manager.manager.entity.*;
-import com.zy.acs.manager.manager.enums.JamStateType;
-import com.zy.acs.manager.manager.enums.SegmentStateType;
-import com.zy.acs.manager.manager.enums.TaskTypeType;
-import com.zy.acs.manager.manager.service.*;
-import com.zy.acs.manager.system.service.ConfigService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.transaction.interceptor.TransactionAspectSupport;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * Wavefront
- * Created by vincent on 6/25/2024
- */
-@Slf4j
-@Component
-public class TrafficService {
-
- @Autowired
- private AgvService agvService;
- @Autowired
- private AgvDetailService agvDetailService;
- @Autowired
- private CodeService codeService;
- @Autowired
- private TravelService travelService;
- @Autowired
- private SegmentService segmentService;
- @Autowired
- private MainLxtService mainService;
- @Autowired
- private MainLockWrapService mainLockWrapService;
- @Autowired
- private MapService mapService;
- @Autowired
- private MapDataDispatcher mapDataDispatcher;
- @Autowired
- private SnowflakeIdWorker snowflakeIdWorker;
- @Autowired
- private AgvModelService agvModelService;
- @Autowired
- private RetreatNavigateService retreatNavigateService;
- @Autowired
- private ConfigService configService;
- @Autowired
- private JamService jamService;
- @Autowired
- private AvoidWaveCalculator avoidWaveCalculator;
- @Autowired
- private TaskService taskService;
- @Autowired
- private FuncStaService funcStaService;
-
- @Transactional
- public synchronized void trigger(Segment segment) {
- try {
- Date now = new Date();
-
- // deprecate jam
- if (this.isExpiredJamByAvo(segment.getId())) {
- mainService.settleSegmentList(Utils.singletonList(segment), null);
- return;
- }
-
- // temporary -----------------
- Integer algoExtensionTime = configService.getVal("algoExtensionTime", Integer.class);
- if (null != algoExtensionTime && algoExtensionTime > 0) {
- Thread.sleep(algoExtensionTime);
- }
- // ---------------------------
-
- Travel travel = travelService.getById(segment.getTravelId());
- Agv agv = agvService.getById(travel.getAgvId());
- AgvDetail agvDetail = agvDetailService.selectByAgvId(travel.getAgvId());
- long endNode = segment.getEndNode();
-
- // valid ----------------------------------------------------
- if (!agvService.judgeEnable(agv.getId())) {
- return;
- }
-
- // resolve deadlock
-// if (configService.getVal("unlockSwitch", Boolean.class)) {
+//package com.zy.acs.manager.core.service;
//
-// 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;
-// }
-// }
+//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+//import com.zy.acs.common.utils.GsonUtils;
+//import com.zy.acs.common.utils.Utils;
+//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.manager.common.utils.MapDataUtils;
+//import com.zy.acs.manager.core.constant.MapDataConstant;
+//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.NavigateNode;
+//import com.zy.acs.manager.core.service.astart.RetreatNavigateNode;
+//import com.zy.acs.manager.core.service.astart.WaveNodeType;
+//import com.zy.acs.manager.manager.entity.*;
+//import com.zy.acs.manager.manager.enums.JamStateType;
+//import com.zy.acs.manager.manager.enums.SegmentStateType;
+//import com.zy.acs.manager.manager.enums.TaskTypeType;
+//import com.zy.acs.manager.manager.service.*;
+//import com.zy.acs.manager.system.service.ConfigService;
+//import lombok.extern.slf4j.Slf4j;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.stereotype.Component;
+//import org.springframework.transaction.annotation.Transactional;
+//import org.springframework.transaction.interceptor.TransactionAspectSupport;
//
-// 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))) {
+//import java.util.ArrayList;
+//import java.util.Arrays;
+//import java.util.Date;
+//import java.util.List;
+//import java.util.stream.Collectors;
//
-// Task task = taskService.getById(segment.getTaskId());
-// if (task.getTaskSts().equals(TaskStsType.PROGRESS.val())
-// && DateUtils.diffToMilliseconds(task.getUpdateTime(), now) > MapDataConstant.DEADLOCK_TASK_TIMEOUT) {
+///**
+// * Wavefront
+// * Created by vincent on 6/25/2024
+// */
+//@Slf4j
+//@Component
+//public class TrafficService {
//
-// 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;
-// }
+// @Autowired
+// private AgvService agvService;
+// @Autowired
+// private AgvDetailService agvDetailService;
+// @Autowired
+// private CodeService codeService;
+// @Autowired
+// private TravelService travelService;
+// @Autowired
+// private SegmentService segmentService;
+// @Autowired
+// private MainLxtService mainService;
+// @Autowired
+// private MainLockWrapService mainLockWrapService;
+// @Autowired
+// private MapService mapService;
+// @Autowired
+// private MapDataDispatcher mapDataDispatcher;
+// @Autowired
+// private SnowflakeIdWorker snowflakeIdWorker;
+// @Autowired
+// private AgvModelService agvModelService;
+// @Autowired
+// private RetreatNavigateService retreatNavigateService;
+// @Autowired
+// private ConfigService configService;
+// @Autowired
+// private JamService jamService;
+// @Autowired
+// private AvoidWaveCalculator avoidWaveCalculator;
+// @Autowired
+// private TaskService taskService;
+// @Autowired
+// private FuncStaService funcStaService;
//
-// segment.setState(SegmentStateType.INIT.toString());
-// segment.setUpdateTime(now);
-// if (!segmentService.updateById(segment)) {
-// log.error("Segment [{}] failed to update 锛侊紒锛�", segment.getGroupId() + " - " + segment.getSerial());
-// return;
-// }
+// @Transactional
+// public synchronized void trigger(Segment segment) {
+// try {
+// Date now = new Date();
//
-// // 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;
-// }
+// // deprecate jam
+// if (this.isExpiredJamByAvo(segment.getId())) {
+// mainService.settleSegmentList(Utils.singletonList(segment), null);
+// return;
+// }
+//
+// // temporary -----------------
+// Integer algoExtensionTime = configService.getVal("algoExtensionTime", Integer.class);
+// if (null != algoExtensionTime && algoExtensionTime > 0) {
+// Thread.sleep(algoExtensionTime);
+// }
+// // ---------------------------
+//
+// Travel travel = travelService.getById(segment.getTravelId());
+// Agv agv = agvService.getById(travel.getAgvId());
+// AgvDetail agvDetail = agvDetailService.selectByAgvId(travel.getAgvId());
+// long endNode = segment.getEndNode();
+//
+// // valid ----------------------------------------------------
+// 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;
+// }
+// List<Segment> waitingSegList = segmentService.getByAgvAndState(agv.getId(), SegmentStateType.WAITING.toString());
+// if (!Cools.isEmpty(waitingSegList)) {
+// for (Segment waitingSeg : waitingSegList) {
+// if (!waitingSeg.getId().equals(segment.getId())) {
+//// log.error("AGV[{}] 浠诲姟寮傚父锛屾湇鍔″櫒閿欒锛侊紒锛�", agv.getUuid());
// 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 waitingSeg : waitingSegList) {
- if (!waitingSeg.getId().equals(segment.getId())) {
-// log.error("AGV[{}] 浠诲姟寮傚父锛屾湇鍔″櫒閿欒锛侊紒锛�", agv.getUuid());
- return;
- }
- }
- }
-
- // dead lane
- if (jamService.count(new LambdaQueryWrapper<Jam>()
- .eq(Jam::getJamAgv, agv.getId())
- .eq(Jam::getJamSeg, segment.getId())
- .eq(Jam::getCycleAvo, 1)
- .eq(Jam::getCycleCode, endNode)
- .eq(Jam::getState, JamStateType.RUNNING.toString())
- ) > 0) {
- return;
- }
-
- // execute -----------------------------------------------
- // ArrayList<List<TaskPosDto>> list = JSON.parseObject(travel.getTaskContent(), new TypeReference<ArrayList<List<TaskPosDto>>>() {});
-
- // * sync wave scope
- if (!avoidWaveCalculator.calcWaveScope()) {
- log.error("failed to calculate avoid wave matrix ...");
- return;
- }
-
- // checkout path
- Code startCode = codeService.getCacheById(agvDetail.getRecentCode());
- Code endCode = codeService.getCacheById(endNode);
- long startTime = System.currentTimeMillis();
- List<String> pathList = this.checkoutPath(agv, startCode, endCode, segment);
-// System.out.println("checkoutPath: " + (System.currentTimeMillis() - startTime));
- if (Cools.isEmpty(pathList)) {
- return;
- }
-
- List<Segment> segmentList = new ArrayList<>();
- segmentList.add(segment);
-
- String lastCodeData = pathList.get(pathList.size() - 1);
- if (!endCode.getData().equals(lastCodeData)) {
- // slice
- Code lastCode = codeService.getCacheByData(lastCodeData);
-
-// if (pathList.size() <= MIN_SLICE_PATH_LENGTH) {
-// return;
+//
+// // dead lane
+// if (jamService.count(new LambdaQueryWrapper<Jam>()
+// .eq(Jam::getJamAgv, agv.getId())
+// .eq(Jam::getJamSeg, segment.getId())
+// .eq(Jam::getCycleAvo, 1)
+// .eq(Jam::getCycleCode, endNode)
+// .eq(Jam::getState, JamStateType.RUNNING.toString())
+// ) > 0) {
+// return;
+// }
+//
+// // execute -----------------------------------------------
+// // ArrayList<List<TaskPosDto>> list = JSON.parseObject(travel.getTaskContent(), new TypeReference<ArrayList<List<TaskPosDto>>>() {});
+//
+// // * sync wave scope
+// if (!avoidWaveCalculator.calcWaveScope()) {
+// log.error("failed to calculate avoid wave matrix ...");
+// return;
+// }
+//
+// // checkout path
+// Code startCode = codeService.getCacheById(agvDetail.getRecentCode());
+// Code endCode = codeService.getCacheById(endNode);
+// long startTime = System.currentTimeMillis();
+// List<String> pathList = this.checkoutPath(agv, startCode, endCode, segment);
+//// System.out.println("checkoutPath: " + (System.currentTimeMillis() - startTime));
+// if (Cools.isEmpty(pathList)) {
+// return;
+// }
+//
+// List<Segment> segmentList = new ArrayList<>();
+// segmentList.add(segment);
+//
+// String lastCodeData = pathList.get(pathList.size() - 1);
+// if (!endCode.getData().equals(lastCodeData)) {
+// // slice
+// Code lastCode = codeService.getCacheByData(lastCodeData);
+//
+//// if (pathList.size() <= MIN_SLICE_PATH_LENGTH) {
+//// return;
+//// }
+//
+// // revert
+// segment.setState(SegmentStateType.INIT.toString());
+// segment.setUpdateTime(now);
+// if (!segmentService.updateById(segment)) {
+// log.error("Segment [{}] failed to update 锛侊紒锛�", segment.getGroupId() + " - " + segment.getSerial());
// }
-
- // revert
- segment.setState(SegmentStateType.INIT.toString());
- segment.setUpdateTime(now);
- if (!segmentService.updateById(segment)) {
- log.error("Segment [{}] failed to update 锛侊紒锛�", segment.getGroupId() + " - " + segment.getSerial());
- }
- segmentList.clear();
-
- // new move seg
- Segment insertSeg = new Segment();
- insertSeg.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
- insertSeg.setTravelId(travel.getId());
- insertSeg.setAgvId(agv.getId());
- insertSeg.setTaskId(segment.getTaskId());
- insertSeg.setSerial(segment.getSerial() - 1);
- insertSeg.setEndNode(lastCode.getId());
- insertSeg.setPosType(TaskPosDto.PosType.MOVE.toString());
- insertSeg.setState(SegmentStateType.WAITING.toString());
- if (!segmentService.save(insertSeg)) {
- log.error("Segment [{}] failed to save 锛侊紒锛�", segment.getTravelId() + " - " + segment.getSerial());
- }
- segmentList.add(insertSeg);
-
- } 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;
- }
- }
-
- }
- }
-
- mapService.lockPath(null, pathList, agv.getUuid());
-
- startTime = System.currentTimeMillis();
- mainService.generateAction(segment.getAgvId(), segmentList, pathList, now);
-// System.out.println("generateAction: " + (System.currentTimeMillis() - startTime));
-
- } catch (Exception e) {
- log.error("TrafficService.trigger", e);
- TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-
- }
- }
-
- private List<String> checkoutPath(Agv agv, Code startCode, Code endCode, Segment segment) {
- Integer lev = null;
- 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);
-
- // 缁撴灉闆�
- List<String> pathList = new ArrayList<>();
-
- // 鏃犻殰纰嶈В
- List<String> unlockPathList = mapService.checkoutPath(agvNo, startCode, endCode, false, blackPath, segment);
- // 閬胯瑙�
- List<String> lockPathList = mapService.checkoutPath(agvNo, startCode, endCode, true, blackPath, segment);
-
- if (!Cools.isEmpty(lockPathList) && // 瀛樺湪閬胯瑙�
- Math.abs(lockPathList.size() - unlockPathList.size()) <= Arrays.stream(mapDataDispatcher.getCodeMatrix(lev)).mapToInt(row -> row.length).sum() / 10
- ) {
-
- pathList = lockPathList;
- } else {
-
- // preview path
- List<String> draftPath = new ArrayList<>(unlockPathList);
- if (blockSeverity.equals(BlockSeverityType.SEVERE)) {
- unlockPathList.remove(endCode.getData());
- blackPath.addAll(unlockPathList);
- List<String> newUnlockPathList = mapService.checkoutPath(agvNo, startCode, endCode, false, blackPath, segment);
- if (!Cools.isEmpty(newUnlockPathList)) {
- draftPath = newUnlockPathList;
- }
- }
- // 鍙蛋琛岃矾寰勯泦鍚堣绠�
- List<BlockVehicleDto> blockVehicleList = this.slicePathAndReturnBlockVehicleList(lev, draftPath, agvNo, pathList); // jamAgvNo may was wave
-
- if (!Cools.isEmpty(pathList)) {
-
- if (!pathList.get(pathList.size() - 1).equals(endCode.getData())) {
- assert !Cools.isEmpty(blockVehicleList);
-
- boolean hasUnavoidableBlocks = blockVehicleList.stream().anyMatch(blockVehicleDto -> !blockVehicleDto.isAvoidable());
- if (hasUnavoidableBlocks && pathList.size() <= MapDataConstant.MIN_SLICE_PATH_LENGTH) {
- log.info("AGV[{}] waiting in place, because the path list is too short...", agvNo);
- pathList.clear();
- }
-
- boolean hasCycleJam = blockVehicleList.stream().anyMatch(
- blockVehicleDto -> null != jamService.getCycleJam(agv.getId(), segment.getId(), blockVehicleDto.getVehicle())
- );
- if (hasCycleJam) {
- log.info("AGV[{}] waiting in place, because has cycle jam...", agvNo);
- pathList.clear();
- }
- }
-
- // 鏃犲彲璧拌璺緞
- } else {
-
- if (Cools.isEmpty(blockVehicleList)) {
- log.warn("AGV[{}] can't reach to code: {}, because there is too many vehicle in the lane...", agvNo, endCode.getData());
- } else {
-
- assert !Cools.isEmpty(blockVehicleList);
- Integer maxJamTimeoutFactor = null;
-
- // persist jam data
- jam = this.createOrUpdateJam(agv, startCode, segment, jam, draftPath);
-
- // ? has unAvoidable block vehicles
- if (blockVehicleList.stream().anyMatch(blockVehicleDto -> !blockVehicleDto.isAvoidable())) {
-
- // set factor of jam timeout
- maxJamTimeoutFactor = 1;
- } else {
-
- // ? already do notify to avoid
- if (!Cools.isEmpty(jam.getAvoAgv())
- && BlockVehicleDto.customContain(blockVehicleList, agvService.getById(jam.getAvoAgv()).getUuid())) {
-
- maxJamTimeoutFactor = 4;
-
- } else {
-
- // select optimal block vehicle
- String blockAgvNo = this.checkoutBestSolutionOfBlocks(blockVehicleList, segment);
- if (Cools.isEmpty(blockAgvNo)) {
-
- maxJamTimeoutFactor = 2;
-
- } else {
-
- // block vehicle info
- Long blockAgvId = agvService.getAgvId(blockAgvNo);
- String blockAgvCode = codeService.getCacheById(agvDetailService.selectMajorByAgvId(blockAgvId).getRecentCode()).getData();
-
- // create new jam if already notify the avoid vehicle
- if (!Cools.isEmpty(jam.getAvoAgv(), jam.getAvoSeg()) && !blockAgvId.equals(jam.getAvoAgv())) {
- jam = this.setupNewJam(jam, agv, startCode, segment, draftPath);
- }
-
- do {
-
- // 闃诲杞﹁締姝e湪鍘熷湴浣滀笟锛岀瓑寰� ===>> 瓒呰繃绛夊緟鏃堕棿锛岀粫璺�
- List<Segment> runningSegList = segmentService.getByAgvAndState(blockAgvId, SegmentStateType.RUNNING.toString());
- if (!Cools.isEmpty(runningSegList)) {
- maxJamTimeoutFactor = 1;
- break;
- }
-
- // 鍒ゆ柇涓嬩釜浠诲姟鏄惁涓哄師鍦颁换鍔★紝濡傛灉鏄垯绛夊緟 ===>> 瓒呰繃绛夊緟鏃堕棿锛岀粫璺紱濡傛灉涓嶆槸锛岃闃诲杞﹁締閬胯
- List<Segment> waitingSegList = segmentService.getJustWaitingSeg(blockAgvId);
- if (null != waitingSegList
- && waitingSegList.stream().anyMatch(
- waitingSeg -> waitingSeg.getEndNode().equals(codeService.getCacheByData(blockAgvCode).getId())
- )) {
- maxJamTimeoutFactor = 1;
- break;
- }
-
- // notify block vehicle to avoid
- if (this.notifyVehicleAvoid(blockAgvNo, blockAgvCode, draftPath, agvNo, jam)) {
- if (jam.getCycleAvo() == 1) {
- jam.setCycleCode(endCode.getId());
- }
- jam.setAvoAgv(blockAgvId);
- jam.setNotifyTime(new Date());
- if (!jamService.updateById(jam)) {
- throw new CoolException(jam.getUuid() + "-jam failed to update锛侊紒锛�");
- }
- } else {
-
- maxJamTimeoutFactor = 1;
- }
-
- } while (false);
- }
-
- }
-
- }
-
- // handle jam timeout
- if (null != maxJamTimeoutFactor) {
- if (System.currentTimeMillis() - jam.getStartTime().getTime() > (long) MapDataConstant.MAX_JAM_TIMEOUT * maxJamTimeoutFactor) {
-
- if (!Cools.isEmpty(lockPathList)) {
-
- pathList = lockPathList;
- } else {
- log.error("{}鍙疯溅杈嗘绱{}] ===>> [{}]璺緞澶辫触锛屽師鍥狅細{}"
- , agvNo, startCode.getData(), endCode.getData(), "璺緞闃诲瓒呮椂");
- }
- } else {
- log.warn("{}鍙疯溅杈嗘鍦ㄧ瓑寰呬氦閫氬牭濉烇紝闃诲杞﹁締锛氥�恵}銆�"
- , agvNo
- , blockVehicleList.stream().map(BlockVehicleDto::getVehicle).collect(Collectors.toList()).toString()
- );
- }
- }
-
- }
-
- }
- }
-
- if (!Cools.isEmpty(pathList)) {
-
- if (null != jam) {
- boolean beDeprecate = false;
- if (blockSeverity.equals(BlockSeverityType.SEVERE) && !Cools.isEmpty(jam.getJamPath())) {
- List<String> jamPath = GsonUtils.fromJsonToList(jam.getJamPath(), String.class);
- if (!this.comparePathLists(jamPath, pathList)) { // jamPath >= pathList
- beDeprecate = true;
- }
- }
- jam.setEndTime(now);
- jam.setUpdateTime(now);
- jam.setState(beDeprecate ? JamStateType.DEPRECATED.toString() : JamStateType.FINISH.toString());
- if (jamService.updateById(jam)) {
- if (beDeprecate) {
- // search previous jam that jamSeg from this segment
- List<Jam> previousJams = jamService.list(new LambdaQueryWrapper<Jam>()
- .eq(Jam::getJamSeg, segment.getId())
- .eq(Jam::getState, JamStateType.FINISH.toString())
- );
- for (Jam previousJam : previousJams) {
- previousJam.setState(JamStateType.DEPRECATED.toString());
- previousJam.setUpdateTime(now);
- if (!jamService.updateById(previousJam)) {
- log.error("Jam[{}] failed to update锛侊紒锛�", previousJam.getUuid());
- }
- }
- }
- } else {
- log.error("Jam[{}] failed to update锛侊紒锛�", jam.getUuid());
- }
- }
- // deal expired jam
- for (Jam expiredJam : jamService.list(new LambdaQueryWrapper<Jam>()
- .eq(Jam::getJamAgv, agv.getId())
- .eq(Jam::getState, JamStateType.RUNNING.toString()))) {
- expiredJam.setEndTime(now);
- expiredJam.setUpdateTime(now);
- expiredJam.setState(JamStateType.DEPRECATED.toString());
- if (!jamService.updateById(expiredJam)) {
- log.error("Jam[{}] failed to update锛侊紒锛�", expiredJam.getUuid());
- }
- }
-
- }
-
- return pathList;
- }
-
- private List<BlockVehicleDto> slicePathAndReturnBlockVehicleList(Integer lev, List<String> fullPathList, String agvNo, List<String> pathList) {
- List<BlockVehicleDto> blockVehicleList = new ArrayList<>();
-
- String[][] waveMatrix = mapDataDispatcher.getWaveMatrix(lev);
- 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[codeMatrixIdx[0]][codeMatrixIdx[1]];
- assert !waveNode.equals(WaveNodeType.DISABLE.val);
- if (!waveNode.equals(WaveNodeType.ENABLE.val)) {
- List<String> waveNodeList = MapDataUtils.parseWaveNode(waveNode);
- List<String> otherWaveList = MapDataUtils.hasOtherWave(waveNodeList, agvNo);
- if (!Cools.isEmpty(otherWaveList)) {
- for (String otherWave : otherWaveList) {
- if (mapService.isWalkingByVehicle(lev, otherWave)) {
- blockVehicleList.add(new BlockVehicleDto(otherWave, false));
- } else {
- blockVehicleList.add(new BlockVehicleDto(otherWave, true));
- }
- }
- break;
- }
- }
-
- pathList.add(codeData);
- }
-
- if (pathList.size() <= 1) {
- pathList.clear();
- }
-
- return blockVehicleList.stream().distinct().collect(Collectors.toList());
- }
-
- /**
- * avoidPathList include wave node and dynamic node
- */
- private boolean notifyVehicleAvoid(String agvNo, String agvPosCode, List<String> avoidPathList, String sponsor, Jam jam) {
- Long agvId = agvService.getAgvId(agvNo);
- if (!Cools.isEmpty(segmentService.getByAgvAndState(agvId, 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;
- }
-
- String endCodeData = finalNode.getCodeData();
- Code endCode = codeService.getCacheByData(endCodeData);
-
- List<Segment> waitingSegList = segmentService.getByAgvAndState(agvId, SegmentStateType.WAITING.toString());
- if (!Cools.isEmpty(waitingSegList)) {
-
- if (waitingSegList.size() > 1) {
- log.error("閬胯閫氱煡澶辫触锛寋}鍙疯溅杈嗗瓨鍦ㄥ涓瓑寰呬腑鐨凷egment锛侊紒锛�", agvNo);
- return false;
- }
- // revert
- Date now = new Date();
- for (Segment seg : waitingSegList) {
- seg.setState(SegmentStateType.INIT.toString());
- seg.setUpdateTime(now);
- if (!segmentService.updateById(seg)) {
- log.error("Segment [{}] 鏇存柊澶辫触 锛侊紒锛�", seg.getTravelId() + " - " + seg.getSerial());
- }
- }
- Segment segment = waitingSegList.get(0);
-
- Segment insertSeg = new Segment();
- insertSeg.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
- insertSeg.setTravelId(segment.getTravelId());
- insertSeg.setAgvId(agvId);
- insertSeg.setTaskId(segment.getTaskId());
- insertSeg.setSerial(segment.getSerial() - 1);
- insertSeg.setEndNode(endCode.getId());
- insertSeg.setPosType(TaskPosDto.PosType.MOVE.toString());
- insertSeg.setState(SegmentStateType.WAITING.toString());
- if (!segmentService.save(insertSeg)) {
- log.error("Segment [{}] 淇濆瓨澶辫触 锛侊紒锛�", segment.getTravelId() + " - " + segment.getSerial());
- return false;
- } else {
- jam.setAvoSeg(insertSeg.getId());
- jam.setAvoCode(endCode.getId());
- }
-
- } else {
-
- return mainLockWrapService.buildMinorTask(agvId, TaskTypeType.MOVE, endCodeData, jam);
- }
-
- return true;
- }
-
- private Jam createOrUpdateJam(Agv agv, Code startCode, Segment segment, Jam jam, List<String> jamPath) {
- if (jam == null) {
- jam = new Jam();
- jam.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
- jam.setJamAgv(agv.getId());
- jam.setJamCode(startCode.getId());
- jam.setJamSeg(segment.getId());
- jam.setJamPath(GsonUtils.toJson(jamPath));
- jam.setStartTime(new Date());
- jam.setState(JamStateType.RUNNING.toString());
- if (!jamService.save(jam)) {
- log.error("AGV[{}] failed to save jam", agv.getUuid());
- throw new CoolException("failed to save jam");
- }
- } else {
- jam.setDuration(System.currentTimeMillis() - jam.getStartTime().getTime());
- if (!jamService.updateById(jam)) {
- log.error("AGV[{}] failed to update jam", agv.getUuid());
- }
- }
- return jam;
- }
-
- private Jam setupNewJam(Jam originJam, Agv agv, Code startCode, Segment segment, List<String> draftPath) {
- originJam.setUpdateTime(new Date());
- originJam.setState(JamStateType.FINISH.toString());
- if (!jamService.updateById(originJam)) {
- log.error("Jam[{}] failed to update", originJam.getUuid());
- return originJam;
- } else {
- return this.createOrUpdateJam(
- agv
- , startCode
- , segment
- , null
- , draftPath
- );
- }
- }
-
- private List<String> getBlackPathList(List<Jam> unfinishedOriginJamByCurrAgv) {
- List<String> blackPathList = new ArrayList<>();
- Integer lev = MapDataDispatcher.MAP_DEFAULT_LEV;
- if (!Cools.isEmpty(unfinishedOriginJamByCurrAgv)) {
- for (Jam jam : unfinishedOriginJamByCurrAgv) {
- if (!Cools.isEmpty(jam.getJamPath())) {
-
- List<String> list = GsonUtils.fromJsonToList(jam.getJamPath(), String.class);
-
- Agv jamAgv = agvService.getById(jam.getJamAgv());
- List<String> jamDynamicNodes = mapService.queryCodeListFromDynamicNode(lev, jamAgv.getUuid());
- // jamDynamicNodes has sorted
- String firstCodeNode = jamDynamicNodes.stream().findFirst().orElse(null);
-
- if (!Cools.isEmpty(firstCodeNode)) {
- int idx = list.indexOf(firstCodeNode);
- if (idx != -1) {
- list = new ArrayList<>(list.subList(idx, list.size()));
-
- // the wave of first node
- Double avoidDistance = MapDataUtils.getVehicleWaveSafeDistance(
- agvModelService.getById(jamAgv.getAgvModel()).getDiameter(),
- MapDataConstant.MAX_DISTANCE_BETWEEN_ADJACENT_AGV_FACTOR
- );
- List<String> waveCodeList = mapService.getWaveScopeByCode(lev, firstCodeNode, avoidDistance)
- .stream().map(NavigateNode::getCodeData).distinct().collect(Collectors.toList());
- list.addAll(waveCodeList);
- } else {
- // 濡傛灉琚樆濉炶溅杈嗗凡缁忎笉鍦ㄥ師鏉ョ殑闃诲璺緞涓紝鑰冭檻閬胯杞﹁蛋琛屾椂涓嶉渶瑕佹妸涔嬪墠鐨勯樆濉炶矾寰勫姞鍏ラ粦鍚嶅崟
- list = new ArrayList<>();
- }
- }
-
- blackPathList.addAll(list);
- }
- }
- }
- return blackPathList.stream().distinct().collect(Collectors.toList());
- }
-
- private String checkoutBestSolutionOfBlocks(List<BlockVehicleDto> blockVehicleList, Segment segment) {
- assert !Cools.isEmpty(blockVehicleList);
- for (BlockVehicleDto blockVehicleDto : blockVehicleList) {
- if (!blockVehicleDto.isAvoidable()) {
- continue;
- }
- // 褰撳墠vehicle姝e湪杩涜閬胯浣滀笟
- if (!Cools.isEmpty(jamService.getUnfinishedAvoSegByAvo(blockVehicleDto.getVehicle(), null))) {
- continue;
- }
- return blockVehicleDto.getVehicle();
- }
- return null;
- }
-
- public boolean comparePathLists(List<String> list1, List<String> list2) {
- if (list1.equals(list2)) {
- return true;
- }
- if (list1.containsAll(list2)) {
- return true;
- }
- return false;
- }
-
- /**
- * 1. the jam was deprecated
- * 2. the jam segment is finished
- *
- * all these by avoid segment
- */
- private boolean isExpiredJamByAvo(Long avoSeg) {
- List<Jam> jamList = jamService.list(new LambdaQueryWrapper<Jam>()
-// .eq(Jam::getAvoAgv, avoAgv)
- .eq(Jam::getAvoSeg, avoSeg));
- if (Cools.isEmpty(jamList)) {
- return false;
- }
- if (jamList.size() > 1) {
- log.error("AvoSeg[id = {}] seg data has exception, result in two jams", avoSeg);
- }
- Jam jam = jamList.get(0);
- if (jam.getState().equals(JamStateType.DEPRECATED.toString())) {
- return true;
- }
- Segment jamSegment = segmentService.getById(jam.getJamSeg());
- if (jamSegment.getState().equals(SegmentStateType.FINISH.toString())) {
- return true;
- }
- return false;
- }
-
-}
+// segmentList.clear();
+//
+// // new move seg
+// Segment insertSeg = new Segment();
+// insertSeg.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
+// insertSeg.setTravelId(travel.getId());
+// insertSeg.setAgvId(agv.getId());
+// insertSeg.setTaskId(segment.getTaskId());
+// insertSeg.setSerial(segment.getSerial() - 1);
+// insertSeg.setEndNode(lastCode.getId());
+// insertSeg.setPosType(TaskPosDto.PosType.MOVE.toString());
+// insertSeg.setState(SegmentStateType.WAITING.toString());
+// if (!segmentService.save(insertSeg)) {
+// log.error("Segment [{}] failed to save 锛侊紒锛�", segment.getTravelId() + " - " + segment.getSerial());
+// }
+// segmentList.add(insertSeg);
+//
+// } 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;
+// }
+// }
+//
+// }
+// }
+//
+// mapService.lockPath(null, pathList, agv.getUuid());
+//
+// startTime = System.currentTimeMillis();
+// mainService.generateAction(segment.getAgvId(), segmentList, pathList, now);
+//// System.out.println("generateAction: " + (System.currentTimeMillis() - startTime));
+//
+// } catch (Exception e) {
+// log.error("TrafficService.trigger", e);
+// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+//
+// }
+// }
+//
+// private List<String> checkoutPath(Agv agv, Code startCode, Code endCode, Segment segment) {
+// Integer lev = null;
+// 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);
+//
+// // 缁撴灉闆�
+// List<String> pathList = new ArrayList<>();
+//
+// // 鏃犻殰纰嶈В
+// List<String> unlockPathList = mapService.checkoutPath(agvNo, startCode, endCode, false, blackPath, segment);
+// // 閬胯瑙�
+// List<String> lockPathList = mapService.checkoutPath(agvNo, startCode, endCode, true, blackPath, segment);
+//
+// if (!Cools.isEmpty(lockPathList) && // 瀛樺湪閬胯瑙�
+// Math.abs(lockPathList.size() - unlockPathList.size()) <= Arrays.stream(mapDataDispatcher.getCodeMatrix(lev)).mapToInt(row -> row.length).sum() / 10
+// ) {
+//
+// pathList = lockPathList;
+// } else {
+//
+// // preview path
+// List<String> draftPath = new ArrayList<>(unlockPathList);
+// if (blockSeverity.equals(BlockSeverityType.SEVERE)) {
+// unlockPathList.remove(endCode.getData());
+// blackPath.addAll(unlockPathList);
+// List<String> newUnlockPathList = mapService.checkoutPath(agvNo, startCode, endCode, false, blackPath, segment);
+// if (!Cools.isEmpty(newUnlockPathList)) {
+// draftPath = newUnlockPathList;
+// }
+// }
+// // 鍙蛋琛岃矾寰勯泦鍚堣绠�
+// List<BlockVehicleDto> blockVehicleList = this.slicePathAndReturnBlockVehicleList(lev, draftPath, agvNo, pathList); // jamAgvNo may was wave
+//
+// if (!Cools.isEmpty(pathList)) {
+//
+// if (!pathList.get(pathList.size() - 1).equals(endCode.getData())) {
+// assert !Cools.isEmpty(blockVehicleList);
+//
+// boolean hasUnavoidableBlocks = blockVehicleList.stream().anyMatch(blockVehicleDto -> !blockVehicleDto.isAvoidable());
+// if (hasUnavoidableBlocks && pathList.size() <= MapDataConstant.MIN_SLICE_PATH_LENGTH) {
+// log.info("AGV[{}] waiting in place, because the path list is too short...", agvNo);
+// pathList.clear();
+// }
+//
+// boolean hasCycleJam = blockVehicleList.stream().anyMatch(
+// blockVehicleDto -> null != jamService.getCycleJam(agv.getId(), segment.getId(), blockVehicleDto.getVehicle())
+// );
+// if (hasCycleJam) {
+// log.info("AGV[{}] waiting in place, because has cycle jam...", agvNo);
+// pathList.clear();
+// }
+// }
+//
+// // 鏃犲彲璧拌璺緞
+// } else {
+//
+// if (Cools.isEmpty(blockVehicleList)) {
+// log.warn("AGV[{}] can't reach to code: {}, because there is too many vehicle in the lane...", agvNo, endCode.getData());
+// } else {
+//
+// assert !Cools.isEmpty(blockVehicleList);
+// Integer maxJamTimeoutFactor = null;
+//
+// // persist jam data
+// jam = this.createOrUpdateJam(agv, startCode, segment, jam, draftPath);
+//
+// // ? has unAvoidable block vehicles
+// if (blockVehicleList.stream().anyMatch(blockVehicleDto -> !blockVehicleDto.isAvoidable())) {
+//
+// // set factor of jam timeout
+// maxJamTimeoutFactor = 1;
+// } else {
+//
+// // ? already do notify to avoid
+// if (!Cools.isEmpty(jam.getAvoAgv())
+// && BlockVehicleDto.customContain(blockVehicleList, agvService.getById(jam.getAvoAgv()).getUuid())) {
+//
+// maxJamTimeoutFactor = 4;
+//
+// } else {
+//
+// // select optimal block vehicle
+// String blockAgvNo = this.checkoutBestSolutionOfBlocks(blockVehicleList, segment);
+// if (Cools.isEmpty(blockAgvNo)) {
+//
+// maxJamTimeoutFactor = 2;
+//
+// } else {
+//
+// // block vehicle info
+// Long blockAgvId = agvService.getAgvId(blockAgvNo);
+// String blockAgvCode = codeService.getCacheById(agvDetailService.selectMajorByAgvId(blockAgvId).getRecentCode()).getData();
+//
+// // create new jam if already notify the avoid vehicle
+// if (!Cools.isEmpty(jam.getAvoAgv(), jam.getAvoSeg()) && !blockAgvId.equals(jam.getAvoAgv())) {
+// jam = this.setupNewJam(jam, agv, startCode, segment, draftPath);
+// }
+//
+// do {
+//
+// // 闃诲杞﹁締姝e湪鍘熷湴浣滀笟锛岀瓑寰� ===>> 瓒呰繃绛夊緟鏃堕棿锛岀粫璺�
+// List<Segment> runningSegList = segmentService.getByAgvAndState(blockAgvId, SegmentStateType.RUNNING.toString());
+// if (!Cools.isEmpty(runningSegList)) {
+// maxJamTimeoutFactor = 1;
+// break;
+// }
+//
+// // 鍒ゆ柇涓嬩釜浠诲姟鏄惁涓哄師鍦颁换鍔★紝濡傛灉鏄垯绛夊緟 ===>> 瓒呰繃绛夊緟鏃堕棿锛岀粫璺紱濡傛灉涓嶆槸锛岃闃诲杞﹁締閬胯
+// List<Segment> waitingSegList = segmentService.getJustWaitingSeg(blockAgvId);
+// if (null != waitingSegList
+// && waitingSegList.stream().anyMatch(
+// waitingSeg -> waitingSeg.getEndNode().equals(codeService.getCacheByData(blockAgvCode).getId())
+// )) {
+// maxJamTimeoutFactor = 1;
+// break;
+// }
+//
+// // notify block vehicle to avoid
+// if (this.notifyVehicleAvoid(blockAgvNo, blockAgvCode, draftPath, agvNo, jam)) {
+// if (jam.getCycleAvo() == 1) {
+// jam.setCycleCode(endCode.getId());
+// }
+// jam.setAvoAgv(blockAgvId);
+// jam.setNotifyTime(new Date());
+// if (!jamService.updateById(jam)) {
+// throw new CoolException(jam.getUuid() + "-jam failed to update锛侊紒锛�");
+// }
+// } else {
+//
+// maxJamTimeoutFactor = 1;
+// }
+//
+// } while (false);
+// }
+//
+// }
+//
+// }
+//
+// // handle jam timeout
+// if (null != maxJamTimeoutFactor) {
+// if (System.currentTimeMillis() - jam.getStartTime().getTime() > (long) MapDataConstant.MAX_JAM_TIMEOUT * maxJamTimeoutFactor) {
+//
+// if (!Cools.isEmpty(lockPathList)) {
+//
+// pathList = lockPathList;
+// } else {
+// log.error("{}鍙疯溅杈嗘绱{}] ===>> [{}]璺緞澶辫触锛屽師鍥狅細{}"
+// , agvNo, startCode.getData(), endCode.getData(), "璺緞闃诲瓒呮椂");
+// }
+// } else {
+// log.warn("{}鍙疯溅杈嗘鍦ㄧ瓑寰呬氦閫氬牭濉烇紝闃诲杞﹁締锛氥�恵}銆�"
+// , agvNo
+// , blockVehicleList.stream().map(BlockVehicleDto::getVehicle).collect(Collectors.toList()).toString()
+// );
+// }
+// }
+//
+// }
+//
+// }
+// }
+//
+// if (!Cools.isEmpty(pathList)) {
+//
+// if (null != jam) {
+// boolean beDeprecate = false;
+// if (blockSeverity.equals(BlockSeverityType.SEVERE) && !Cools.isEmpty(jam.getJamPath())) {
+// List<String> jamPath = GsonUtils.fromJsonToList(jam.getJamPath(), String.class);
+// if (!this.comparePathLists(jamPath, pathList)) { // jamPath >= pathList
+// beDeprecate = true;
+// }
+// }
+// jam.setEndTime(now);
+// jam.setUpdateTime(now);
+// jam.setState(beDeprecate ? JamStateType.DEPRECATED.toString() : JamStateType.FINISH.toString());
+// if (jamService.updateById(jam)) {
+// if (beDeprecate) {
+// // search previous jam that jamSeg from this segment
+// List<Jam> previousJams = jamService.list(new LambdaQueryWrapper<Jam>()
+// .eq(Jam::getJamSeg, segment.getId())
+// .eq(Jam::getState, JamStateType.FINISH.toString())
+// );
+// for (Jam previousJam : previousJams) {
+// previousJam.setState(JamStateType.DEPRECATED.toString());
+// previousJam.setUpdateTime(now);
+// if (!jamService.updateById(previousJam)) {
+// log.error("Jam[{}] failed to update锛侊紒锛�", previousJam.getUuid());
+// }
+// }
+// }
+// } else {
+// log.error("Jam[{}] failed to update锛侊紒锛�", jam.getUuid());
+// }
+// }
+// // deal expired jam
+// for (Jam expiredJam : jamService.list(new LambdaQueryWrapper<Jam>()
+// .eq(Jam::getJamAgv, agv.getId())
+// .eq(Jam::getState, JamStateType.RUNNING.toString()))) {
+// expiredJam.setEndTime(now);
+// expiredJam.setUpdateTime(now);
+// expiredJam.setState(JamStateType.DEPRECATED.toString());
+// if (!jamService.updateById(expiredJam)) {
+// log.error("Jam[{}] failed to update锛侊紒锛�", expiredJam.getUuid());
+// }
+// }
+//
+// }
+//
+// return pathList;
+// }
+//
+// private List<BlockVehicleDto> slicePathAndReturnBlockVehicleList(Integer lev, List<String> fullPathList, String agvNo, List<String> pathList) {
+// List<BlockVehicleDto> blockVehicleList = new ArrayList<>();
+//
+// String[][] waveMatrix = mapDataDispatcher.getWaveMatrix(lev);
+// 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[codeMatrixIdx[0]][codeMatrixIdx[1]];
+// assert !waveNode.equals(WaveNodeType.DISABLE.val);
+// if (!waveNode.equals(WaveNodeType.ENABLE.val)) {
+// List<String> waveNodeList = MapDataUtils.parseWaveNode(waveNode);
+// List<String> otherWaveList = MapDataUtils.hasOtherWave(waveNodeList, agvNo);
+// if (!Cools.isEmpty(otherWaveList)) {
+// for (String otherWave : otherWaveList) {
+// if (mapService.isWalkingByVehicle(lev, otherWave)) {
+// blockVehicleList.add(new BlockVehicleDto(otherWave, false));
+// } else {
+// blockVehicleList.add(new BlockVehicleDto(otherWave, true));
+// }
+// }
+// break;
+// }
+// }
+//
+// pathList.add(codeData);
+// }
+//
+// if (pathList.size() <= 1) {
+// pathList.clear();
+// }
+//
+// return blockVehicleList.stream().distinct().collect(Collectors.toList());
+// }
+//
+// /**
+// * avoidPathList include wave node and dynamic node
+// */
+// private boolean notifyVehicleAvoid(String agvNo, String agvPosCode, List<String> avoidPathList, String sponsor, Jam jam) {
+// Long agvId = agvService.getAgvId(agvNo);
+// if (!Cools.isEmpty(segmentService.getByAgvAndState(agvId, 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;
+// }
+//
+// String endCodeData = finalNode.getCodeData();
+// Code endCode = codeService.getCacheByData(endCodeData);
+//
+// List<Segment> waitingSegList = segmentService.getByAgvAndState(agvId, SegmentStateType.WAITING.toString());
+// if (!Cools.isEmpty(waitingSegList)) {
+//
+// if (waitingSegList.size() > 1) {
+// log.error("閬胯閫氱煡澶辫触锛寋}鍙疯溅杈嗗瓨鍦ㄥ涓瓑寰呬腑鐨凷egment锛侊紒锛�", agvNo);
+// return false;
+// }
+// // revert
+// Date now = new Date();
+// for (Segment seg : waitingSegList) {
+// seg.setState(SegmentStateType.INIT.toString());
+// seg.setUpdateTime(now);
+// if (!segmentService.updateById(seg)) {
+// log.error("Segment [{}] 鏇存柊澶辫触 锛侊紒锛�", seg.getTravelId() + " - " + seg.getSerial());
+// }
+// }
+// Segment segment = waitingSegList.get(0);
+//
+// Segment insertSeg = new Segment();
+// insertSeg.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
+// insertSeg.setTravelId(segment.getTravelId());
+// insertSeg.setAgvId(agvId);
+// insertSeg.setTaskId(segment.getTaskId());
+// insertSeg.setSerial(segment.getSerial() - 1);
+// insertSeg.setEndNode(endCode.getId());
+// insertSeg.setPosType(TaskPosDto.PosType.MOVE.toString());
+// insertSeg.setState(SegmentStateType.WAITING.toString());
+// if (!segmentService.save(insertSeg)) {
+// log.error("Segment [{}] 淇濆瓨澶辫触 锛侊紒锛�", segment.getTravelId() + " - " + segment.getSerial());
+// return false;
+// } else {
+// jam.setAvoSeg(insertSeg.getId());
+// jam.setAvoCode(endCode.getId());
+// }
+//
+// } else {
+//
+// return mainLockWrapService.buildMinorTask(agvId, TaskTypeType.MOVE, endCodeData, jam);
+// }
+//
+// return true;
+// }
+//
+// private Jam createOrUpdateJam(Agv agv, Code startCode, Segment segment, Jam jam, List<String> jamPath) {
+// if (jam == null) {
+// jam = new Jam();
+// jam.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
+// jam.setJamAgv(agv.getId());
+// jam.setJamCode(startCode.getId());
+// jam.setJamSeg(segment.getId());
+// jam.setJamPath(GsonUtils.toJson(jamPath));
+// jam.setStartTime(new Date());
+// jam.setState(JamStateType.RUNNING.toString());
+// if (!jamService.save(jam)) {
+// log.error("AGV[{}] failed to save jam", agv.getUuid());
+// throw new CoolException("failed to save jam");
+// }
+// } else {
+// jam.setDuration(System.currentTimeMillis() - jam.getStartTime().getTime());
+// if (!jamService.updateById(jam)) {
+// log.error("AGV[{}] failed to update jam", agv.getUuid());
+// }
+// }
+// return jam;
+// }
+//
+// private Jam setupNewJam(Jam originJam, Agv agv, Code startCode, Segment segment, List<String> draftPath) {
+// originJam.setUpdateTime(new Date());
+// originJam.setState(JamStateType.FINISH.toString());
+// if (!jamService.updateById(originJam)) {
+// log.error("Jam[{}] failed to update", originJam.getUuid());
+// return originJam;
+// } else {
+// return this.createOrUpdateJam(
+// agv
+// , startCode
+// , segment
+// , null
+// , draftPath
+// );
+// }
+// }
+//
+// private List<String> getBlackPathList(List<Jam> unfinishedOriginJamByCurrAgv) {
+// List<String> blackPathList = new ArrayList<>();
+// Integer lev = MapDataDispatcher.MAP_DEFAULT_LEV;
+// if (!Cools.isEmpty(unfinishedOriginJamByCurrAgv)) {
+// for (Jam jam : unfinishedOriginJamByCurrAgv) {
+// if (!Cools.isEmpty(jam.getJamPath())) {
+//
+// List<String> list = GsonUtils.fromJsonToList(jam.getJamPath(), String.class);
+//
+// Agv jamAgv = agvService.getById(jam.getJamAgv());
+// List<String> jamDynamicNodes = mapService.queryCodeListFromDynamicNode(lev, jamAgv.getUuid());
+// // jamDynamicNodes has sorted
+// String firstCodeNode = jamDynamicNodes.stream().findFirst().orElse(null);
+//
+// if (!Cools.isEmpty(firstCodeNode)) {
+// int idx = list.indexOf(firstCodeNode);
+// if (idx != -1) {
+// list = new ArrayList<>(list.subList(idx, list.size()));
+//
+// // the wave of first node
+// Double avoidDistance = MapDataUtils.getVehicleWaveSafeDistance(
+// agvModelService.getById(jamAgv.getAgvModel()).getDiameter(),
+// MapDataConstant.MAX_DISTANCE_BETWEEN_ADJACENT_AGV_FACTOR
+// );
+// List<String> waveCodeList = mapService.getWaveScopeByCode(lev, firstCodeNode, avoidDistance)
+// .stream().map(NavigateNode::getCodeData).distinct().collect(Collectors.toList());
+// list.addAll(waveCodeList);
+// } else {
+// // 濡傛灉琚樆濉炶溅杈嗗凡缁忎笉鍦ㄥ師鏉ョ殑闃诲璺緞涓紝鑰冭檻閬胯杞﹁蛋琛屾椂涓嶉渶瑕佹妸涔嬪墠鐨勯樆濉炶矾寰勫姞鍏ラ粦鍚嶅崟
+// list = new ArrayList<>();
+// }
+// }
+//
+// blackPathList.addAll(list);
+// }
+// }
+// }
+// return blackPathList.stream().distinct().collect(Collectors.toList());
+// }
+//
+// private String checkoutBestSolutionOfBlocks(List<BlockVehicleDto> blockVehicleList, Segment segment) {
+// assert !Cools.isEmpty(blockVehicleList);
+// for (BlockVehicleDto blockVehicleDto : blockVehicleList) {
+// if (!blockVehicleDto.isAvoidable()) {
+// continue;
+// }
+// // 褰撳墠vehicle姝e湪杩涜閬胯浣滀笟
+// if (!Cools.isEmpty(jamService.getUnfinishedAvoSegByAvo(blockVehicleDto.getVehicle(), null))) {
+// continue;
+// }
+// return blockVehicleDto.getVehicle();
+// }
+// return null;
+// }
+//
+// public boolean comparePathLists(List<String> list1, List<String> list2) {
+// if (list1.equals(list2)) {
+// return true;
+// }
+// if (list1.containsAll(list2)) {
+// return true;
+// }
+// return false;
+// }
+//
+// /**
+// * 1. the jam was deprecated
+// * 2. the jam segment is finished
+// *
+// * all these by avoid segment
+// */
+// private boolean isExpiredJamByAvo(Long avoSeg) {
+// List<Jam> jamList = jamService.list(new LambdaQueryWrapper<Jam>()
+//// .eq(Jam::getAvoAgv, avoAgv)
+// .eq(Jam::getAvoSeg, avoSeg));
+// if (Cools.isEmpty(jamList)) {
+// return false;
+// }
+// if (jamList.size() > 1) {
+// log.error("AvoSeg[id = {}] seg data has exception, result in two jams", avoSeg);
+// }
+// Jam jam = jamList.get(0);
+// if (jam.getState().equals(JamStateType.DEPRECATED.toString())) {
+// return true;
+// }
+// Segment jamSegment = segmentService.getById(jam.getJamSeg());
+// if (jamSegment.getState().equals(SegmentStateType.FINISH.toString())) {
+// return true;
+// }
+// return false;
+// }
+//
+//}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficZkdService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficZkdService.java
index 861f248..b592454 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficZkdService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficZkdService.java
@@ -76,30 +76,36 @@
}
// ---------------------------
- Travel travel = travelService.getById(segment.getTravelId());
- Agv agv = agvService.getById(travel.getAgvId());
- AgvDetail agvDetail = agvDetailService.selectByAgvId(travel.getAgvId());
- long endNode = segment.getEndNode();
+// Travel travel = travelService.getById(segment.getTravelId());
+// Agv agv = agvService.getById(travel.getAgvId());
+// AgvDetail agvDetail = agvDetailService.selectByAgvId(travel.getAgvId());
+// long endNode = segment.getEndNode();
- 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 waitingSeg : waitingSegList) {
- if (!waitingSeg.getId().equals(segment.getId())) {
-// log.error("AGV[{}] 浠诲姟寮傚父锛屾湇鍔″櫒閿欒锛侊紒锛�", agv.getUuid());
- 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 waitingSeg : waitingSegList) {
+// if (!waitingSeg.getId().equals(segment.getId())) {
+//// log.error("AGV[{}] 浠诲姟寮傚父锛屾湇鍔″櫒閿欒锛侊紒锛�", agv.getUuid());
+// return;
+// }
+// }
+// }
List<Segment> segmentList = new ArrayList<>();
segmentList.add(segment);
-
- mainZkdService.generateAction(segment.getAgvId(), segmentList, null, now);
+ List<String> pathList = new ArrayList<>();
+ String[] split = segment.getPath().split(",");
+ for (int i = 0; i < split.length; i++) {
+ if (!Cools.isEmpty(split[i])) {
+ pathList.add(split[i]);
+ }
+ }
+ mainZkdService.generateAction(segment.getAgvId(), segmentList, pathList, now);
} catch (Exception e) {
log.error("TrafficService.trigger", e);
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/third/zkd/dto/AllocateTaskResponse.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/third/zkd/dto/AllocateTaskResponse.java
index 5374127..69d5d1f 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/third/zkd/dto/AllocateTaskResponse.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/third/zkd/dto/AllocateTaskResponse.java
@@ -11,4 +11,6 @@
private String agvId;
+
+ private Integer lev_id;
}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/third/zkd/dto/Navigation.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/third/zkd/dto/Navigation.java
index e2b6b21..2bc45a4 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/third/zkd/dto/Navigation.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/third/zkd/dto/Navigation.java
@@ -10,7 +10,7 @@
private String agvId;
- private List<CodeDTO> CodeList;
+ private List<CodeDTO> codeList;
private String segId;
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/OpenAlgorithmController.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/OpenAlgorithmController.java
index f6fb37d..f351041 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/OpenAlgorithmController.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/OpenAlgorithmController.java
@@ -1,8 +1,7 @@
package com.zy.acs.manager.manager.controller;
-import com.zy.acs.framework.common.Cools;
+import com.alibaba.fastjson.JSONObject;
import com.zy.acs.framework.common.R;
-import com.zy.acs.manager.common.annotation.OperationLog;
import com.zy.acs.manager.core.service.MainZkdService;
import com.zy.acs.manager.core.third.zkd.dto.Navigation;
import com.zy.acs.manager.manager.controller.param.OpenAgvParam;
@@ -10,17 +9,15 @@
import com.zy.acs.manager.manager.service.CodeService;
import com.zy.acs.manager.manager.service.OpenAlgorithmService;
import com.zy.acs.manager.system.controller.BaseController;
-import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
/**
* Created by vincent on 2023/6/12
*/
-@Api(tags = "Open Api")
+//@Api(tags = "Open Api")
+@Slf4j
@RestController
@RequestMapping("/api/open/algorithm")
public class OpenAlgorithmController extends BaseController {
@@ -37,24 +34,31 @@
@Autowired
private CodeService codeService;
+ @GetMapping("/demo")
+ public R demo() {
+ return R.ok("demo");
+ }
+
@PostMapping("/getAgv")
- @OperationLog("get agv msg")
- public R save(@RequestBody OpenAgvParam param) {
- if (Cools.isEmpty(param)) {
- return R.error("涓嶈兘涓虹┖");
- }
- if (Cools.isEmpty(param.getMapId())) {
- return R.error("鍦板浘缂栧彿涓嶈兘涓虹┖");
- }
+// @OperationLog("get agv msg")
+ public R save(@RequestBody(required = false) OpenAgvParam param) {
+// if (Cools.isEmpty(param)) {
+// return R.error("涓嶈兘涓虹┖");
+// }
+// if (Cools.isEmpty(param.getMapId())) {
+// return R.error("鍦板浘缂栧彿涓嶈兘涓虹┖");
+// }
return R.ok(openAlgorithmService.listAgv(param));
}
@RequestMapping("/zkd/navigation/v1")
- public Object navigation(@RequestBody Navigation navigation) {
+ public Object navigation(@RequestBody String data) {
+ log.info("鏀跺埌鐨勫鑸俊鎭細{}", data);
+ Navigation navigation = JSONObject.parseObject(data, Navigation.class);
Long agvId = agvService.getAgvId(navigation.getAgvId());
mainZkdService.buildMajorTask(agvId, navigation);
- return null;
+ return R.ok();
}
}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/result/OpenAgvInfo.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/result/OpenAgvInfo.java
index 634355d..301890c 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/result/OpenAgvInfo.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/result/OpenAgvInfo.java
@@ -11,7 +11,7 @@
/**
* AGV缂栧彿
*/
- private String agvNo;
+ private String agvId;
/*
* 鐘舵��
*/
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Segment.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Segment.java
index 9f7cb82..95f82e5 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Segment.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Segment.java
@@ -75,6 +75,11 @@
*/
@ApiModelProperty(value= "鐩爣鑺傜偣")
private Long endNode;
+ /**
+ * 鐩爣鑺傜偣
+ */
+ @ApiModelProperty(value= "璺緞鑺傜偣")
+ private String path;
/**
* 浣滀笟绫诲埆
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Task.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Task.java
index af1c34c..86c3a04 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Task.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Task.java
@@ -96,6 +96,11 @@
*/
@ApiModelProperty(value= "寮傚父鏃堕棿")
private Date errTime;
+ /**
+ * 鑳岀瘬
+ */
+ @ApiModelProperty(value= "鑳岀瘬")
+ private Integer back;
/**
* 璧峰绔�
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/OpenAlgorithmServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/OpenAlgorithmServiceImpl.java
index e3f930e..0801e8a 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/OpenAlgorithmServiceImpl.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/OpenAlgorithmServiceImpl.java
@@ -1,12 +1,17 @@
package com.zy.acs.manager.manager.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.acs.common.utils.GsonUtils;
+import com.zy.acs.framework.common.Cools;
import com.zy.acs.manager.core.domain.BackpackDto;
import com.zy.acs.manager.manager.controller.param.OpenAgvParam;
import com.zy.acs.manager.manager.controller.result.BackpackVo;
import com.zy.acs.manager.manager.controller.result.OpenAgvInfo;
-import com.zy.acs.manager.manager.entity.*;
-import com.zy.acs.manager.manager.enums.SegmentStateType;
+import com.zy.acs.manager.manager.entity.Agv;
+import com.zy.acs.manager.manager.entity.AgvDetail;
+import com.zy.acs.manager.manager.entity.AgvModel;
+import com.zy.acs.manager.manager.entity.Task;
+import com.zy.acs.manager.manager.enums.TaskStsType;
import com.zy.acs.manager.manager.service.*;
import com.zy.acs.manager.system.service.ConfigService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -33,6 +38,14 @@
private ConfigService configService;
+ public static final ArrayList<String> FOURTH_AGV_GROUP = new ArrayList<String>() {{
+ add("113");
+ add("115");
+ add("116");
+ add("117");
+ add("119");
+ }};
+
@Override
public List<OpenAgvInfo> listAgv(OpenAgvParam param) {
List<Agv> agvList = agvService.list();
@@ -40,12 +53,16 @@
AgvDetail agvDetail;
AgvModel agvModel;
for (Agv agv : agvList) {
+ if (!FOURTH_AGV_GROUP.contains(agv.getUuid())) {
+ continue;
+ }
agvDetail = agvDetailService.getById(agv.getId());
List<Task> taskList = taskService.findTransportTasksByAgv(agvDetail.getId());
agvModel = agvModelService.getByAgvId(agv.getAgvModel());
OpenAgvInfo info = new OpenAgvInfo();
- info.setAgvNo(agvDetail.getUuid());
- info.setStatus(agvDetail.getStatus());
+ info.setAgvId(agv.getUuid());
+ info.setStatus(1);
+ //info.setStatus(agvDetail.getStatus());
info.setPosition(agvDetail.getCode$());
info.setDirection(agvDetail.getAgvAngle());
info.setVol(agvDetail.getVol());
@@ -57,16 +74,24 @@
BackpackVo backpackVo;
List<Long> taskIds = taskList.stream().map(Task::getId).collect(Collectors.toList());
List<BackpackDto> backpackDtos = GsonUtils.fromJsonToList(agvDetail.getBackpack(), BackpackDto.class);
- for (int i = 0; i < agvModel.getBackpack(); i++) {
- BackpackDto backpackDto = backpackDtos.get(i);
+ for (int i = 1; i <= agvModel.getBackpack(); i++) {
backpackVo = new BackpackVo();
- List<Segment> segments = segmentService.getByAgvAndTaskAndBackpack(agvDetail.getAgvId(), taskIds, backpackVo.getIndex());
- for (Segment segment : segments) {
- backpackVo.setTaskId(segment.getTaskId() + "");
- }
backpackVo.setIndex(i);
+ List<Task> taskList1 = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getAgvId, agv.getId()).eq(Task::getBack, i).in(Task::getTaskSts, TaskStsType.INIT.val(), TaskStsType.WAITING.val(), TaskStsType.ASSIGN.val(), TaskStsType.PROGRESS.val()));
+ //if (!Cools.isEmpty(taskIds)) {
+ // List<Segment> segments = segmentService.getByAgvAndTaskAndBackpack(agvDetail.getAgvId(), taskIds, backpackVo.getIndex());
+ // if (segments != null) {
+ // for (Segment segment : segments) {
+ if (!Cools.isEmpty(taskList1)) {
+ backpackVo.setTaskId(taskList1.get(0).getId() + "");
+ }
+ // }
+ // }
+ BackpackDto backpackDto = backpackDtos.get(i);
backpackVo.setLoaded(backpackDto.getLoaded());
- backpackVo.setExecute(segments.stream().anyMatch(segment -> segment.getState().equals(SegmentStateType.RUNNING.toString())));
+ //backpackVo.setExecute(one.getTaskSts()==);
+ //segments.stream().anyMatch(segment -> segment.getState().equals(SegmentStateType.RUNNING.toString()))
+ // }
backpackVos.add(backpackVo);
}
info.setBackpack(backpackVos);
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java
index d797b58..cceba96 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java
@@ -110,7 +110,7 @@
.eq(Segment::getAgvId, agvId)
.eq(Segment::getBackpack, backpack)
.in(Segment::getTaskId, taskIds)
- .orderByAsc(Segment::getSerial)
+ //.orderByAsc(Segment::getSerial)
);
}
--
Gitblit v1.9.1