From d3d3857cda8b4307d8f03bf15ec9fb2c98c34b64 Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期二, 17 十二月 2024 09:58:39 +0800 Subject: [PATCH] # --- zy-acs-manager/src/main/java/com/zy/acs/manager/core/HandlerController.java | 134 +++++++++++++++++++++++++++++--------------- 1 files changed, 89 insertions(+), 45 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 7b50d99..d45d318 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 @@ -3,25 +3,20 @@ import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.zy.acs.common.utils.Utils; -import com.zy.acs.manager.common.domain.param.HandlerPublishParam; -import com.zy.acs.manager.common.exception.BusinessException; -import com.zy.acs.manager.core.service.AvoidWaveCalculator; -import com.zy.acs.manager.core.service.MainService; -import com.zy.acs.manager.core.service.ThreadPoolRegulator; -import com.zy.acs.manager.core.service.TrafficService; -import com.zy.acs.manager.core.service.astart.MapDataDispatcher; -import com.zy.acs.manager.manager.entity.Agv; -import com.zy.acs.manager.manager.entity.AgvDetail; -import com.zy.acs.manager.manager.entity.Loc; -import com.zy.acs.manager.manager.entity.Task; -import com.zy.acs.manager.manager.enums.ActionStsType; -import com.zy.acs.manager.manager.enums.LocStsType; -import com.zy.acs.manager.manager.enums.TaskStsType; -import com.zy.acs.manager.manager.service.*; -import com.zy.acs.manager.system.controller.BaseController; import com.zy.acs.framework.common.Cools; import com.zy.acs.framework.common.R; 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.service.*; +import com.zy.acs.manager.core.service.astart.MapDataDispatcher; +import com.zy.acs.manager.manager.entity.*; +import com.zy.acs.manager.manager.enums.ActionStsType; +import com.zy.acs.manager.manager.enums.LocStsType; +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.system.controller.BaseController; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; @@ -38,7 +33,7 @@ */ @Slf4j @RestController -@RequestMapping("/handler") +@RequestMapping("/api/handler") public class HandlerController extends BaseController { public static final String APP_KEY = "xltys1995"; @@ -51,6 +46,8 @@ private TaskService taskService; @Autowired private MainService mainService; + @Autowired + private MainLockWrapService mainLockWrapService; @Autowired private SnowflakeIdWorker snowflakeIdWorker; @Autowired @@ -67,12 +64,14 @@ private MapDataDispatcher mapDataDispatcher; @Autowired private AvoidWaveCalculator avoidWaveCalculator; + @Autowired + private PatrolService patrolService; - @RequestMapping(value = "/publish", method = {RequestMethod.GET, RequestMethod.POST}) + @RequestMapping(value = "/control/agv", method = {RequestMethod.GET, RequestMethod.POST}) @Transactional - public R publish(@RequestHeader String appKey, + public R controlAgv(@RequestHeader String appKey, @RequestBody HandlerPublishParam param) { - if (Cools.isEmpty(param.getAgvNo(), param.getTaskType(), appKey)) { + if (Cools.isEmpty(param.getAgvNo(), param.getTaskMode(), appKey)) { return R.error(); } if (!APP_KEY.equals(appKey)) { @@ -101,36 +100,58 @@ } // generate - switch (param.getTaskType()) { + switch (param.getTaskMode()) { case MOVE: - if (Cools.isEmpty(param.getEndCode())) { + Code endCode = null; + if (!Cools.isEmpty(param.getEndCode())) { + endCode = codeService.getById(param.getEndCode()); + } + if (!Cools.isEmpty(param.getEndCodeStr())) { + endCode = codeService.selectByData(param.getEndCodeStr()); + } + if (null == endCode) { return R.error(); } - if (null == codeService.selectByData(param.getEndCode())) { - return R.error(); - } - if (!mainService.buildMinorTask(agv, agvDetail, param.getTaskType(), param.getEndCode())) { + if (!mainLockWrapService.buildMinorTask(agv, param.getTaskMode(), endCode.getData(), null)) { return R.error(); } break; case TO_CHARGE: case TO_STANDBY: - if (!mainService.buildMinorTask(agv, agvDetail, param.getTaskType(), null)) { + if (!mainLockWrapService.buildMinorTask(agv, param.getTaskMode(), null, null)) { return R.error(); } break; case LOC_TO_LOC: - if (Cools.isEmpty(param.getStartLocNo(), param.getEndLocNo())) { - return R.error(); + // oriLoc + Loc oriLoc = null; + if (!Cools.isEmpty(param.getStartLocNo())) { + oriLoc = locService.getById(param.getStartLocNo()); } - Loc oriLoc = locService.selecatByLocNo(param.getStartLocNo()); + if (!Cools.isEmpty(param.getStartLocNoStr())) { + oriLoc = locService.selecatByLocNo(param.getStartLocNoStr()); + } if (null == oriLoc) { return R.error(); } - Loc destLoc = locService.selecatByLocNo(param.getEndLocNo()); + if (!oriLoc.getLocSts().equals(LocStsType.STOCK.val())) { + throw new BusinessException("oriLoc锛�" + oriLoc.getLocNo() + " 涓嶆槸鍦ㄥ簱鐘舵��"); + } + // destLoc + Loc destLoc = null; + if (!Cools.isEmpty(param.getEndLocNo())) { + destLoc = locService.getById(param.getEndLocNo()); + } + if (!Cools.isEmpty(param.getEndLocNoStr())) { + destLoc = locService.selecatByLocNo(param.getEndLocNoStr()); + } if (null == destLoc) { return R.error(); } + if (!destLoc.getLocSts().equals(LocStsType.IDLE.val())) { + throw new BusinessException("destLoc锛�" + destLoc.getLocNo() + " 涓嶆槸绌洪棽鐘舵��"); + } + // task Task task = new Task(); @@ -140,9 +161,11 @@ task.setSeqNum(Utils.generateSeqNum(Cools.isEmpty(lastTasks)?null:lastTasks.get(0).getSeqNum())); task.setOriLoc(oriLoc.getId()); + task.setOriCode(oriLoc.getCode()); task.setDestLoc(destLoc.getId()); + task.setDestCode(destLoc.getCode()); - task.setTaskType(param.getTaskType().val()); + task.setTaskType(param.getTaskMode().val()); task.setTaskSts(TaskStsType.WAITING.val()); task.setPriority(999); @@ -153,26 +176,16 @@ } // loc - oriLoc = locService.getById(task.getOriLoc()); - if (!oriLoc.getLocSts().equals(LocStsType.STOCK.val())) { - throw new BusinessException("oriLoc锛�" + task.getOriLoc$() + " 涓嶆槸鍦ㄥ簱鐘舵��"); - } oriLoc.setLocSts(LocStsType.PAKOUT.val()); oriLoc.setUpdateTime(now); if (!locService.updateById(oriLoc)) { throw new BusinessException("oriLoc锛�" + task.getOriLoc$() + " 淇敼搴撲綅鐘舵�佸け璐�"); - } - - destLoc = locService.getById(task.getDestLoc()); - if (!destLoc.getLocSts().equals(LocStsType.IDLE.val())) { - throw new BusinessException("destLoc锛�" + task.getDestLoc$() + " 涓嶆槸绌洪棽鐘舵��"); } destLoc.setLocSts(LocStsType.PAKIN.val()); destLoc.setUpdateTime(now); if (!locService.updateById(destLoc)) { throw new BusinessException("destLoc锛�" + task.getDestLoc$() + " 淇敼搴撲綅鐘舵�佸け璐�"); } - break; default: break; @@ -181,9 +194,8 @@ return R.ok(); } - @RequestMapping(value = "/reset", method = {RequestMethod.GET, RequestMethod.POST}) - public R reset(@RequestHeader String appKey, - @RequestBody HandlerPublishParam param) { + @RequestMapping(value = "/restore/agv", method = {RequestMethod.GET, RequestMethod.POST}) + public R restoreAgv(@RequestHeader String appKey, @RequestBody HandlerPublishParam param) { if (Cools.isEmpty(appKey)) { return R.error(); } @@ -194,6 +206,18 @@ Agv agv = null; if (!Cools.isEmpty(param.getAgvNo())) { agv = agvService.selectByUuid(param.getAgvNo()); + List<Task> tasks = taskService.selectInSts(agv.getId(), TaskStsType.WAITING, TaskStsType.ASSIGN, TaskStsType.PROGRESS); + if (!Cools.isEmpty(tasks)) { + for (Task task : tasks) { + if (TaskTypeType.LOC_TO_LOC.toString().equals(task.getTaskTypeEl()) + || TaskTypeType.LOC_TO_STA.toString().equals(task.getTaskTypeEl()) + || TaskTypeType.STA_TO_LOC.toString().equals(task.getTaskTypeEl()) + || TaskTypeType.STA_TO_STA.toString().equals(task.getTaskTypeEl()) + ) { + return R.error("Restore Failed, because the agv has Tasks that are associated with Loc!"); + } + } + } } if (null != agv) { @@ -230,6 +254,8 @@ return R.error(); } + Agv agv = agvService.selectByUuid(param.getAgvNo()); + // block // Future<R> future = threadPoolRegulator.getInstance().submit(() -> { // mapDataDispatcher.modifyDynamicMatrix(null, null, param.getAgvNo(), true); @@ -240,6 +266,7 @@ // non-block CompletableFuture<?> completableFuture = CompletableFuture.supplyAsync(() -> { mapDataDispatcher.modifyDynamicMatrix(null, null, param.getAgvNo(), true); + avoidWaveCalculator.calcDynamicNodeByVehicle(agv, null); return R.ok(); }, threadPoolRegulator.getInstance()); @@ -253,4 +280,21 @@ return R.ok(); } + @RequestMapping(value = "/agv/patrol", method = {RequestMethod.GET, RequestMethod.POST}) + public R agvPatrol(@RequestHeader String appKey, + @RequestBody HandlerPublishParam param) throws ExecutionException, InterruptedException { + if (Cools.isEmpty(param.getAgvNo(), appKey)) { + return R.error(); + } + if (!APP_KEY.equals(appKey)) { + return R.error(); + } + String agvNo = param.getAgvNo(); + if (patrolService.isPatrolling(agvNo)) { + return patrolService.shutdownPatrol(agvNo); + } else { + return patrolService.startupPatrol(agvNo); + } + } + } -- Gitblit v1.9.1