Files
yidaima/RuoYi-Vue/docs/superpowers/plans/2026-07-11-one-click-generation-history-recovery.md

5.1 KiB
Raw Permalink Blame History

项目一键生成历史与阶段恢复 Implementation Plan

For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (- [ ]) syntax for tracking.

Goal: 让用户查看项目历次一键生成,理解失败阶段,并从服务器判定的最近检查点继续生成。

Architecture: 使用现有任务、阶段和检查点表计算最近 20 条轻量历史摘要;复用现有任务重试与检查点恢复内核;前端用独立 Drawer 组件承载历史展示与操作。

Tech Stack: Java 8、Spring MVC、MyBatis、JUnit 4、Vue 3、Element Plus、Node test runner、Vite。

Global Constraints

  • 不新增数据库表或迁移。
  • 不向历史响应暴露请求、结果或检查点 Payload。
  • 恢复起点只能由服务器根据可信检查点决定。
  • 当前用户必须拥有项目,且不能并发重试同项目的另一个活动一键任务。
  • 工作区存在其他改造,本轮不自动提交或回退无关变更。

Task 1: 轻量任务历史契约

Files:

  • Create: ruoyi-generator/src/main/java/com/ruoyi/generator/domain/front/dto/AiGenerationTaskHistoryItem.java

  • Modify: ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/front/AiGenerationTaskMapper.java

  • Modify: ruoyi-generator/src/main/resources/mapper/front/AiGenerationTaskMapper.xml

  • Modify: ruoyi-generator/src/main/java/com/ruoyi/generator/service/front/IAiGenerationTaskService.java

  • Modify: ruoyi-generator/src/main/java/com/ruoyi/generator/service/front/AiGenerationTaskServiceImpl.java

  • Modify: ruoyi-admin/src/main/java/com/ruoyi/web/controller/front/FrontProjectController.java

  • Test: ruoyi-generator/src/test/java/com/ruoyi/generator/service/front/AiGenerationTaskServiceImplTest.java

  • Test: ruoyi-admin/src/test/java/com/ruoyi/web/controller/front/FrontProjectControllerRunPreviewTest.java

  • 先添加服务和控制器失败测试固定所有权、20 条限制和轻量字段。

  • 添加 History DTO 与显式 MyBatis result map。

  • 一次查询任务、最近失败阶段、最近完成阶段和检查点恢复位置。

  • 添加 listOneClickTaskHistory(Long userId, Long projectId) 和 GET API。

  • 运行聚焦后端测试。

Task 2: 历史重试并发保护

Files:

  • Modify: ruoyi-generator/src/main/java/com/ruoyi/generator/service/front/AiGenerationTaskServiceImpl.java

  • Test: ruoyi-generator/src/test/java/com/ruoyi/generator/service/front/AiGenerationTaskServiceImplTest.java

  • 添加“另一个同类型任务活动时拒绝旧任务重试”的失败测试。

  • 在预留额度前检查 selectActiveTaskByProjectType,同一任务除外。

  • 重跑任务服务测试,确认现有重试行为不回归。

Task 3: 历史 Drawer 组件

Files:

  • Create: easycode-web/src/components/OneClickGenerationHistoryDrawer.vue

  • Create: easycode-web/src/components/oneClickGenerationHistoryDrawer.test.mjs

  • Modify: easycode-web/src/api/project.js

  • 先添加 API 与组件契约失败测试。

  • 添加历史 API 客户端。

  • 实现加载、刷新、空状态、失败诊断、查看任务和继续事件。

  • 历史加载失败保持在 Drawer 内,不污染项目工作台。

  • 运行组件契约测试。

Task 4: 接入项目列表与生成工作台

Files:

  • Modify: easycode-web/src/views/ProjectListView.vue

  • Modify: easycode-web/src/views/projectListView.test.mjs

  • Modify: easycode-web/src/views/GenerateView.vue

  • Modify: easycode-web/src/views/generateView.test.mjs

  • 项目列表增加生成记录图标并携带 history=1

  • 生成工作台挂载 Drawer处理路由打开与关闭。

  • 查看历史任务时复用 restoreTaskById 并同步 taskId

  • 继续生成前确认恢复阶段,再复用现有 retryTask

  • 活动任务期间禁用历史重试,并在完成后刷新 Drawer。

  • 运行项目列表与生成工作台契约测试。

Task 5: 文档与回归

Files:

  • Modify: docs/superpowers/specs/2026-07-10-ai-software-factory-roadmap.md

  • Modify: docs/superpowers/specs/2026-07-11-one-click-generation-history-recovery-design.md

  • Modify: docs/superpowers/plans/2026-07-11-one-click-generation-history-recovery.md

  • 更新 P1-I 实施记录与验证结果。

  • 解析 Mapper XML 并执行后端聚焦测试。

  • 执行前端主流程契约测试和生产构建。

  • 执行 ruoyi-admin 全量测试。

  • 检查差异,确认没有数据库迁移和无关配置改动。

Verification Record

  • AiGenerationTaskServiceImplTestAiGenerationTaskHistoryMapperContractTest19 项通过。
  • FrontProjectControllerRunPreviewTest13 项通过;ruoyi-admin 全量40 项通过。
  • EasyCode 历史抽屉、项目列表与生成工作台契约53 项通过。
  • EasyCode 生产构建通过,开发服务 http://localhost:5174 返回 HTTP 200。
  • AiGenerationTaskMapper.xml 已成功解析;本轮未新增数据库迁移,未修改开发凭据与 TLS 配置。