| | |
| | | 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(); |
| | | } |
| | | |