自动化立体仓库 - WMS系统
chen.llin
9 天以前 aa0c2969838c2a794d9a45da7d4b67c5f6cb70a5
AGV回调
2个文件已修改
95 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OpenController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 93 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -54,7 +54,9 @@
    public synchronized R agvCallback(@RequestHeader(required = false) String appkey,
                                      @RequestBody(required = false) AgvCallbackDto param,
                                      HttpServletRequest request) {
        auth(appkey, param, request);
        return openService.agvCallback(param);
    }
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -59,21 +59,92 @@
    private TaskService taskService;
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R agvCallback(AgvCallbackDto param) {
        String id = param.getId();
        Task task = taskService.selectById(id);
        log.debug("agvCallback param:{}", param);
        // 优先使用taskId,如果没有则使用id(向后兼容)
        String taskId = Cools.isEmpty(param.getTaskId()) ? param.getId() : param.getTaskId();
        if (Cools.isEmpty(taskId)) {
            return R.error("任务id不能为空");
        }
        log.info("收到AGV任务回调请求,taskId:{},fromBin:{},toBin:{},robotGroup:{},kind:{}",
            taskId, param.getFromBin(), param.getToBin(),
            Cools.isEmpty(param.getRobotGroup()) ? param.getRobotName() : param.getRobotGroup(),
            param.getKind());
        // 根据taskId查询任务
        Task task = null;
        try {
            // 尝试将taskId解析为Long类型的id
            Long taskIdLong = Long.parseLong(taskId);
            task = taskService.selectById(taskIdLong);
        } catch (NumberFormatException e) {
            // 如果不是数字,尝试通过其他字段查询(如sheetNo等)
            log.debug("taskId不是数字格式,尝试通过其他字段查询,taskId:{}", taskId);
            task = taskService.selectOne(
                new EntityWrapper<Task>().eq("sheet_no", taskId)
            );
        }
        if (task == null) {
            return R.parse(id +":id不存在");
            log.warn("未找到对应的任务,taskId:{}", taskId);
            return R.error("任务不存在,taskId:" + taskId);
        }
        switch (param.getStatus()) {
            case "Assigned":task.setInvWh(param.getRobotName());break;
            case "Done":task.setWrkSts(9L);break;
            case "Failed":
            case "Cancelled":
            default:
        // 更新任务信息
        if (!Cools.isEmpty(param.getFromBin())) {
            task.setSourceStaNo(param.getFromBin());
        }
        taskService.updateById(task);
        if (!Cools.isEmpty(param.getToBin())) {
            task.setLocNo(param.getToBin());
        }
        // 优先使用robotGroup,如果没有则使用robotName(向后兼容)
        String robotGroup = Cools.isEmpty(param.getRobotGroup()) ? param.getRobotName() : param.getRobotGroup();
        if (!Cools.isEmpty(robotGroup)) {
            task.setInvWh(robotGroup);
        }
        task.setModiTime(new Date());
        // 如果有status字段,按原有逻辑处理(向后兼容)
        if (!Cools.isEmpty(param.getStatus())) {
            switch (param.getStatus()) {
                case "Assigned":
                    if (Cools.isEmpty(robotGroup)) {
                        task.setInvWh(param.getRobotName());
                    }
                    break;
                case "Done":
                    task.setWrkSts(9L);
                    break;
                case "Failed":
                case "Cancelled":
                default:
                    break;
            }
        }
        // 根据任务类型进行相应处理
        if (!Cools.isEmpty(param.getKind())) {
            String kind = param.getKind();
            if ("货物转运".equals(kind)) {
                log.info("处理货物转运任务,taskId:{}", taskId);
            } else if ("实托入库".equals(kind)) {
                log.info("处理实托入库任务,taskId:{}", taskId);
            } else if ("实托出库".equals(kind)) {
                log.info("处理实托出库任务,taskId:{}", taskId);
            }
        }
        // 保存任务更新
        if (!taskService.updateById(task)) {
            log.error("更新任务失败,taskId:{}", taskId);
            return R.error("更新任务失败");
        }
        log.info("AGV任务回调处理成功,taskId:{}", taskId);
        return R.ok();
    }