#
vincentlu
2026-04-22 24fb5d17effaef4e24a4057062407bbcff0c8872
zy-acs-manager/src/main/java/com/zy/acs/manager/core/HandlerController.java
@@ -53,6 +53,8 @@
    @Autowired
    private TaskService taskService;
    @Autowired
    private AgvModelService agvModelService;
    @Autowired
    private MainService mainService;
    @Autowired
    private MainLockWrapService mainLockWrapService;
@@ -443,6 +445,90 @@
        return R.ok();
    }
    @PreAuthorize("hasAuthority('manager:agv:update')")
    @PostMapping("/control/agv/charge/stop")
    public R stopCharging(@RequestHeader String appKey,
                          @RequestBody HandlerPublishParam param) {
        if (Cools.isEmpty(param.getAgvNo(), appKey)) {
            return R.error();
        }
        if (!APP_KEY.equals(appKey)) {
            return R.error();
        }
        Agv agv = agvService.selectByUuid(param.getAgvNo());
        if (agv == null) {
            return R.error("AGV不存在");
        }
        if (!agvService.judgeEnable(agv.getId())) {
            log.info("{}号AGV不可用,停止充电失败...", agv.getUuid());
            return R.error();
        }
        AgvModel agvModel = agvModelService.getByAgvId(agv.getId());
        if (agvModel == null || !AgvModelType.UNDERDRIVE_AGV.toString().equals(agvModel.getType())) {
            return R.error("当前AGV车型不支持断开充电");
        }
        if (!hikInstantActionPublishService.support(agv.getId())) {
            return R.error("当前AGV协议不支持断开充电");
        }
        hikInstantActionPublishService.publishStopCharging(agv.getUuid());
        return R.ok("断开充电指令已发送");
    }
    @PreAuthorize("hasAuthority('manager:agv:update')")
    @PostMapping("/control/agv/task/cancel")
    @Transactional
    public R cancelAgvTask(@RequestHeader String appKey,
                           @RequestBody HandlerPublishParam param) {
        if (Cools.isEmpty(param.getAgvNo(), appKey)) {
            return R.error();
        }
        if (!APP_KEY.equals(appKey)) {
            return R.error();
        }
        Agv agv = agvService.selectByUuid(param.getAgvNo());
        if (agv == null) {
            return R.error("AGV不存在");
        }
        if (!agvService.judgeEnable(agv.getId())) {
            log.info("{}号AGV不可用,取消任务失败...", agv.getUuid());
            return R.error();
        }
        AgvModel agvModel = agvModelService.getByAgvId(agv.getId());
        if (agvModel == null || !AgvModelType.UNDERDRIVE_AGV.toString().equals(agvModel.getType())) {
            return R.error("当前AGV车型不支持取消任务");
        }
        if (!hikInstantActionPublishService.support(agv.getId())) {
            return R.error("当前AGV协议不支持取消任务");
        }
        hikInstantActionPublishService.publishCancelOrder(agv.getUuid());
//        List<Task> tasks = taskService.selectInSts(agv.getId(), TaskStsType.WAITING, TaskStsType.ASSIGN, TaskStsType.PROGRESS);
//        if (Cools.isEmpty(tasks)) {
//            return R.error("当前AGV没有可取消的任务");
//        }
//
//        Long userId = getLoginUserId();
//        Date now = new Date();
//        List<Long> taskIds = tasks.stream().map(Task::getId).collect(Collectors.toList());
//        for (Task task : tasks) {
//            taskService.cancel(task.getId(), userId, Constants.HANDLE);
//        }
//        actionService.update(new LambdaUpdateWrapper<Action>()
//                .in(Action::getTaskId, taskIds)
//                .set(Action::getActionSts, ActionStsType.FINISH.val())
//                .set(Action::getUpdateBy, userId)
//                .set(Action::getUpdateTime, now));
        return R.ok("取消任务指令已发送");
    }
    @RequestMapping(value = "/restore/agv", method = {RequestMethod.GET, RequestMethod.POST})
    public R restoreAgv(@RequestHeader String appKey, @RequestBody HandlerPublishParam param) {
        if (Cools.isEmpty(appKey)) {
@@ -454,19 +540,19 @@
        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!");
                    }
                }
            }
//            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) {