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

68 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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