# 任务完成与取消双通道回调实现计划 > **面向 AI 代理的工作者:** 在当前会话逐任务实现;步骤使用复选框跟踪。当前工作区存在用户改动,不自动提交、不覆盖无关文件。 **目标:** 实现 YAML 驱动的 MQ 异步与 Feign 同步完成/取消链路,并在业务成功后统一推进任务最终状态。 **架构:** Task 操作管理器负责配置分流,execute starter 提供统一 Feign 业务入口,MQ Consumer 在业务处理后回调 Task。最终状态仅由 `TransportTaskCallbackService` 收口更新。 **技术栈:** Java 17、Spring Boot、OpenFeign、RocketMQ、MyBatis、JUnit 5 --- ### 任务 1:补齐 execute starter 的完成与取消入口 **文件:** - 修改:`nl-framework/nl-spring-boot-starter-execute/pom.xml` - 修改:`nl-framework/nl-spring-boot-starter-execute/src/main/java/cn/code/nl/framework/execute/biz/api/TaskCommonApi.java` - 修改:`nl-framework/nl-spring-boot-starter-execute/src/main/java/cn/code/nl/framework/execute/biz/api/AbstractTaskCommonApiImpl.java` - 创建:`nl-framework/nl-spring-boot-starter-execute/src/test/java/cn/code/nl/framework/execute/biz/api/AbstractTaskCommonApiImplLocalSpringTest.java` - [x] 编写 Spring 集成测试,调用 `doHandleFinished`、`doHandleCancelled` 并断言测试任务处理器收到正确 taskId 与 payload。 - [x] 运行定向测试,确认因接口缺失而失败。 - [x] 在 `TaskCommonApi` 和公共实现中增加两个接口,复用现有 `execute` 路由。 - [x] 重跑定向测试并确认通过。 ### 任务 2:增加 YAML 模式分流并统一同步状态收口 **文件:** - 创建:`nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/enums/TaskCallbackTypeEnum.java` - 修改:`nl-module-task/nl-module-task-server/src/main/resources/application.yaml` - 修改:`nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/manage/TransportTaskOperationManager.java` - 修改:`nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/service/transporttask/TransportTaskCallbackServiceImpl.java` - [x] 定义 `mq`、`feign` 配置枚举及严格解析方法。 - [x] 为 Task 服务增加 `nl.task.callback-type: mq`。 - [x] 将完成、取消共同的待处理状态保存后,按配置选择事务后发 MQ 或同步调用 `TaskCommonApi`。 - [x] Feign 成功后构造成功回调请求并调用 `TransportTaskCallbackService`。 - [x] 删除字符串状态码的错误格式化,直接使用枚举 code。 ### 任务 3:补齐 MQ 成功与失败回调 **文件:** - 修改:`nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/mq/consumer/LmsTaskStatusChangeConsumer.java` - 修改:`nl-module-wms/nl-module-wms-server/src/main/java/cn/code/nl/module/wms/mq/consumer/WmsTaskStatusChangeConsumer.java` - [x] 完成或取消业务正常结束后,通过 `TransportTaskApi.receiveCallbackResult` 回调 `SUCCESS` 并检查返回结果。 - [x] 业务异常时回调 `FAILED` 记录异常信息,再抛出原异常触发 MQ 重试。 - [x] 未找到处理器时抛出异常,避免消息被确认后任务永久停留在待处理状态。 - [x] 统一事件标识并使用 Redis 成功标识隔离业务执行与成功回调重试。 ### 任务 4:验证与审查 **文件:** - 检查:以上全部生产与测试文件 - [ ] 运行 execute starter 定向 Spring 集成测试。 - [ ] 编译 execute starter、task-api、task-server、lms-server、wms-server 及依赖模块。 - [ ] 检查 git diff,确认没有覆盖工作区既有改动。 - [ ] 按 Java 规范检查中文注释、`@Resource` 注入、Feign 返回值检查及异常日志。 ### 最终验证结果 - [x] execute starter 4 个 Spring 定向测试通过。 - [x] task-api 3 个业务归属与 Topic 映射 Spring 定向测试通过。 - [x] Execute、Task、LMS、WMS 及依赖共 33 个模块编译通过。 - [x] 聚合启动工程 `nl-server` 及依赖共 38 个模块编译通过。 - [x] `git diff --check` 通过,仅有工作区行尾转换提示。