From 6cbb420754e6e29fa134a6afca4514b8dfd62918 Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期二, 13 一月 2026 16:14:49 +0800
Subject: [PATCH] #
---
zy-acs-manager/src/main/java/com/zy/acs/manager/core/HandlerController.java | 152 +++++++++++++++++++++++++++++++-------------------
1 files changed, 93 insertions(+), 59 deletions(-)
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 9b744ed..0814a51 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
@@ -13,6 +13,7 @@
import com.zy.acs.manager.common.exception.BusinessException;
import com.zy.acs.manager.core.service.*;
import com.zy.acs.manager.core.service.astart.MapDataDispatcher;
+import com.zy.acs.manager.core.service.astart.domain.DynamicNode;
import com.zy.acs.manager.manager.entity.*;
import com.zy.acs.manager.manager.enums.*;
import com.zy.acs.manager.manager.service.*;
@@ -28,6 +29,7 @@
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
+import java.util.stream.Collectors;
/**
* Created by vincent on 8/1/2024
@@ -71,17 +73,59 @@
private AvoidWaveCalculator avoidWaveCalculator;
@Autowired
private PatrolService patrolService;
+ @Autowired
+ private StaReserveService staReserveService;
@PreAuthorize("hasAuthority('manager:agv:update')")
@OperationLog("Locate All Agv")
@PostMapping("/locateAllAgv")
- public synchronized R locateAllAgv() throws InterruptedException {
+ public synchronized R locateAllAgv() {
final Integer MAP_DEFAULT_LEV = 1;
redis.deleteValue(RedisConstant.AGV_MAP_ASTAR_DYNAMIC_FLAG, String.valueOf(MAP_DEFAULT_LEV));
avoidWaveCalculator.calcDynamicNodeWhenBoot();
return R.ok();
}
+ @PreAuthorize("hasAuthority('manager:agv:update')")
+ @PostMapping("/patrol/batch/startup")
+ public synchronized R patrolBatchStartup() {
+ List<Agv> list = agvService.list(new LambdaQueryWrapper<Agv>().eq(Agv::getStatus, StatusType.ENABLE.val));
+ DynamicNode[][] dynamicMatrix = mapDataDispatcher.getDynamicMatrix(MapDataDispatcher.MAP_DEFAULT_LEV);
+ int result = 0;
+ for (Agv agv : list) {
+ String agvNo = agv.getUuid();
+
+ boolean inMap = false;
+ label: for (int i = 0; i < dynamicMatrix.length; i++) {
+ for (int j = 0; j < dynamicMatrix[i].length; j++) {
+ DynamicNode dynamicNode = dynamicMatrix[i][j];
+ String vehicle = dynamicNode.getVehicle();
+ if (agvNo.equals(vehicle)) {
+ inMap = true;
+ break label;
+ }
+ }
+ }
+
+ if (inMap) {
+ patrolService.startupPatrol(agvNo);
+ result++;
+ }
+ }
+ return R.ok().add(result);
+ }
+
+ @PreAuthorize("hasAuthority('manager:agv:update')")
+ @PostMapping("/patrol/batch/shutdown")
+ public synchronized R patrolBatchShutdown() {
+ List<Agv> list = agvService.list(new LambdaQueryWrapper<Agv>());
+ for (String agvNo : list.stream().map(Agv::getUuid).collect(Collectors.toList())) {
+ if (patrolService.isPatrolling(agvNo)) {
+ patrolService.shutdownPatrol(agvNo);
+ }
+ }
+ return R.ok();
+ }
@RequestMapping(value = "/control/agv", method = {RequestMethod.GET, RequestMethod.POST})
@Transactional
@@ -107,12 +151,29 @@
.eq(Task::getTaskSts, TaskStsType.ASSIGN.val())
.or().eq(Task::getTaskSts, TaskStsType.PROGRESS.val());
})) > 0) {
- log.info(agv.getUuid() + "鍙稟GV涓嶅彲鐢紝宸茬粡瀛樺湪杩涜涓殑浠诲姟...");
+ log.info("{}鍙稟GV涓嶅彲鐢紝宸茬粡瀛樺湪杩涜涓殑浠诲姟...", agv.getUuid());
return R.error();
}
if (!agvService.judgeEnable(agv.getId())) {
- log.info(agv.getUuid() + "鍙稟GV涓嶅彲鐢紝浠诲姟鏃犳硶璁$畻...");
+ log.info("{}鍙稟GV涓嶅彲鐢紝浠诲姟鏃犳硶璁$畻...", agv.getUuid());
return R.error();
+ }
+
+ Task task = new Task();
+ task.setAgvId(agv.getId());
+ task.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
+ List<Task> lastTasks = taskService.list(new LambdaQueryWrapper<Task>().orderByDesc(Task::getId));
+ task.setSeqNum(Utils.generateSeqNum(Cools.isEmpty(lastTasks)?null:lastTasks.get(0).getSeqNum()));
+
+ task.setTaskType(param.getTaskMode().val());
+ task.setTaskSts(TaskStsType.WAITING.val());
+
+ task.setPriority(999);
+ task.setIoTime(now);
+ task.setStartTime(now);
+ task.setMemo("AUTO");
+ if (!taskService.save(task)) {
+ throw new BusinessException(task.getSeqNum() + "浠诲姟淇濆瓨澶辫触");
}
// generate
@@ -120,7 +181,6 @@
Loc destLoc = null;
Sta oriSta = null;
Sta destSta = null;
- Task task = null;
switch (param.getTaskMode()) {
case MOVE:
Code endCode = null;
@@ -133,12 +193,20 @@
if (null == endCode) {
return R.error();
}
+ if (!taskService.removeById(task.getId())) {
+ throw new BusinessException("failed to remove task");
+ }
+ task = null;
if (!mainLockWrapService.buildMinorTask(agv.getId(), param.getTaskMode(), endCode.getData(), null)) {
return R.error();
}
break;
case TO_CHARGE:
case TO_STANDBY:
+ if (!taskService.removeById(task.getId())) {
+ throw new BusinessException("failed to remove task");
+ }
+ task = null;
if (!mainLockWrapService.buildMinorTask(agv.getId(), param.getTaskMode(), null, null)) {
return R.error();
}
@@ -149,7 +217,7 @@
oriLoc = locService.getById(param.getStartLocNo());
}
if (!Cools.isEmpty(param.getStartLocNoStr())) {
- oriLoc = locService.selecatByLocNo(param.getStartLocNoStr());
+ oriLoc = locService.selectByLocNo(param.getStartLocNoStr());
}
if (null == oriLoc) {
return R.error();
@@ -168,7 +236,7 @@
destLoc = locService.getById(param.getEndLocNo());
}
if (!Cools.isEmpty(param.getEndLocNoStr())) {
- destLoc = locService.selecatByLocNo(param.getEndLocNoStr());
+ destLoc = locService.selectByLocNo(param.getEndLocNoStr());
}
if (null == destLoc) {
return R.error();
@@ -183,8 +251,6 @@
}
// task
- task = new Task();
-
task.setOriLoc(oriLoc.getId());
task.setOriCode(oriLoc.getCode());
task.setDestLoc(destLoc.getId());
@@ -196,7 +262,7 @@
oriLoc = locService.getById(param.getStartLocNo());
}
if (!Cools.isEmpty(param.getStartLocNoStr())) {
- oriLoc = locService.selecatByLocNo(param.getStartLocNoStr());
+ oriLoc = locService.selectByLocNo(param.getStartLocNoStr());
}
if (null == oriLoc) {
return R.error();
@@ -220,22 +286,16 @@
if (null == destSta) {
return R.error();
}
- if (!destSta.getStaSts().equals(StaStsType.IDLE.val())) {
- throw new BusinessException("destSta锛�" + destSta.getStaNo() + " 涓嶆槸鏃犺揣鐘舵��");
+ if (null == staReserveService.reserveStaIn(destSta, task, 1)) {
+ throw new BusinessException("destSta锛�" + destSta.getStaNo() + " 棰勭害澶辫触");
}
- destSta.setStaSts(StaStsType.READY_RELEASE.val());
- destSta.setUpdateTime(now);
- if (!staService.updateById(destSta)) {
- throw new BusinessException("destSta锛�" + destSta.getStaNo() + " 淇敼绔欑偣鐘舵�佸け璐�");
- }
-
// task
- task = new Task();
-
task.setOriLoc(oriLoc.getId());
task.setOriCode(oriLoc.getCode());
task.setDestSta(destSta.getId());
task.setDestCode(destSta.getCode());
+
+ staReserveService.allocateCallBack(task, agv.getId());
break;
case STA_TO_LOC:
// oriSta
@@ -248,13 +308,8 @@
if (null == oriSta) {
return R.error();
}
- if (!oriSta.getStaSts().equals(StaStsType.STOCK.val())) {
- throw new BusinessException("oriSta锛�" + oriSta.getStaNo() + " 涓嶆槸鏈夎揣鐘舵��");
- }
- oriSta.setStaSts(StaStsType.READY_TAKE.val());
- oriSta.setUpdateTime(now);
- if (!staService.updateById(oriSta)) {
- throw new BusinessException("oriSta锛�" + oriSta.getStaNo() + " 淇敼绔欑偣鐘舵�佸け璐�");
+ if (null == staReserveService.reserveStaOut(oriSta, task, 1)) {
+ throw new BusinessException("oriSta锛�" + oriSta.getStaNo() + " 棰勭害澶辫触");
}
// destLoc
@@ -262,7 +317,7 @@
destLoc = locService.getById(param.getEndLocNo());
}
if (!Cools.isEmpty(param.getEndLocNoStr())) {
- destLoc = locService.selecatByLocNo(param.getEndLocNoStr());
+ destLoc = locService.selectByLocNo(param.getEndLocNoStr());
}
if (null == destLoc) {
return R.error();
@@ -277,12 +332,12 @@
}
// task
- task = new Task();
-
task.setOriSta(oriSta.getId());
task.setOriCode(oriSta.getCode());
task.setDestLoc(destLoc.getId());
task.setDestCode(destLoc.getCode());
+
+ staReserveService.allocateCallBack(task, agv.getId());
break;
case STA_TO_STA:
// oriSta
@@ -295,14 +350,10 @@
if (null == oriSta) {
return R.error();
}
- if (!oriSta.getStaSts().equals(StaStsType.STOCK.val())) {
- throw new BusinessException("oriSta锛�" + oriSta.getStaNo() + " 涓嶆槸鏈夎揣鐘舵��");
+ if (null == staReserveService.reserveStaOut(oriSta, task, 1)) {
+ throw new BusinessException("oriSta锛�" + oriSta.getStaNo() + " 棰勭害澶辫触");
}
- oriSta.setStaSts(StaStsType.READY_TAKE.val());
- oriSta.setUpdateTime(now);
- if (!staService.updateById(oriSta)) {
- throw new BusinessException("oriSta锛�" + oriSta.getStaNo() + " 淇敼绔欑偣鐘舵�佸け璐�");
- }
+
// destSta
if (!Cools.isEmpty(param.getEndStaNo())) {
@@ -314,44 +365,27 @@
if (null == destSta) {
return R.error();
}
- if (!destSta.getStaSts().equals(StaStsType.IDLE.val())) {
- throw new BusinessException("destSta锛�" + destSta.getStaNo() + " 涓嶆槸鏃犺揣鐘舵��");
- }
- destSta.setStaSts(StaStsType.READY_RELEASE.val());
- destSta.setUpdateTime(now);
- if (!staService.updateById(destSta)) {
- throw new BusinessException("destSta锛�" + destSta.getStaNo() + " 淇敼绔欑偣鐘舵�佸け璐�");
+ if (null == staReserveService.reserveStaIn(destSta, task, 1)) {
+ throw new BusinessException("destSta锛�" + destSta.getStaNo() + " 棰勭害澶辫触");
}
// task
- task = new Task();
-
task.setOriSta(oriSta.getId());
task.setOriCode(oriSta.getCode());
task.setDestSta(destSta.getId());
task.setDestCode(destSta.getCode());
+
+ staReserveService.allocateCallBack(task, agv.getId());
break;
default:
break;
}
if (null != task) {
- task.setAgvId(agv.getId());
- task.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
- List<Task> lastTasks = taskService.list(new LambdaQueryWrapper<Task>().orderByDesc(Task::getId));
- task.setSeqNum(Utils.generateSeqNum(Cools.isEmpty(lastTasks)?null:lastTasks.get(0).getSeqNum()));
-
- task.setTaskType(param.getTaskMode().val());
- task.setTaskSts(TaskStsType.WAITING.val());
-
- task.setPriority(999);
- task.setIoTime(now);
- task.setStartTime(now);
- if (!taskService.save(task)) {
- throw new BusinessException(task.getSeqNum() + "浠诲姟淇濆瓨澶辫触");
+ if (!taskService.updateById(task)) {
+ throw new BusinessException("浠诲姟鏇存柊澶辫触");
}
}
-
return R.ok();
}
--
Gitblit v1.9.1