Files
huachuang/docs/superpowers/plans/2026-08-03-task-callback-mode.md

68 lines
4.0 KiB
Markdown
Raw Normal View History

# 任务完成与取消双通道回调实现计划
> **面向 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` 通过,仅有工作区行尾转换提示。