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