103 lines
5.7 KiB
Markdown
103 lines
5.7 KiB
Markdown
|
|
# 项目一键生成任务总览与跨会话恢复 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:** 让用户从“我的项目”看到一键生成进度,并通过服务器任务 ID 跨页面、跨缓存恢复同一个生成任务。
|
|||
|
|
|
|||
|
|
**Architecture:** 服务端增加按当前用户查询“每项目最新一键任务”的轻量只读接口;项目列表把任务总览与项目数据合并展示;生成工作台使用路由 `taskId` 恢复任务,并保留本地缓存作为兼容回退。
|
|||
|
|
|
|||
|
|
**Tech Stack:** Java 8、Spring MVC、MyBatis、JUnit 4、Vue 3、Vue Router、Element Plus、Node test runner、Vite。
|
|||
|
|
|
|||
|
|
## Global Constraints
|
|||
|
|
|
|||
|
|
- 不新增数据库表或数据库迁移。
|
|||
|
|
- 总览 DTO 不得包含 `requestPayload` 或 `resultPayload`。
|
|||
|
|
- 所有任务查询必须按当前登录 `userId` 隔离。
|
|||
|
|
- 现有 `localStorage` 恢复逻辑保留为兼容兜底。
|
|||
|
|
- 明文开发凭据和 TLS 跳过配置保持不变。
|
|||
|
|
- 工作区包含其他未提交改造,本轮不自动创建 Git 提交。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### Task 1: 最新一键生成任务总览接口
|
|||
|
|
|
|||
|
|
**Files:**
|
|||
|
|
- Create: `ruoyi-generator/src/main/java/com/ruoyi/generator/domain/front/dto/AiGenerationTaskOverview.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`
|
|||
|
|
|
|||
|
|
**Interfaces:**
|
|||
|
|
- Produces: `List<AiGenerationTaskOverview> listOneClickTaskOverview(Long userId)`
|
|||
|
|
- Produces: `GET /front/project/ai-tasks/one-click-overview`
|
|||
|
|
|
|||
|
|
- [x] 添加轻量 DTO 测试,确认不存在请求和结果 Payload 字段。
|
|||
|
|
- [x] 添加 Mapper 查询,一次返回当前用户每个项目最新的 `one_click_project` 任务。
|
|||
|
|
- [x] 添加服务映射和空用户校验。
|
|||
|
|
- [x] 添加当前登录用户控制器入口。
|
|||
|
|
- [x] 运行 `mvn -pl ruoyi-generator -am "-Dtest=AiGenerationTaskServiceImplTest" "-Dsurefire.failIfNoSpecifiedTests=false" test`,期望聚焦测试通过。
|
|||
|
|
- [x] 运行 `mvn -pl ruoyi-admin -am "-Dtest=FrontProjectControllerRunPreviewTest" "-Dsurefire.failIfNoSpecifiedTests=false" test`,期望聚焦测试通过。
|
|||
|
|
|
|||
|
|
### Task 2: 项目列表生成状态与继续入口
|
|||
|
|
|
|||
|
|
**Files:**
|
|||
|
|
- Modify: `easycode-web/src/api/project.js`
|
|||
|
|
- Modify: `easycode-web/src/views/ProjectListView.vue`
|
|||
|
|
- Test: `easycode-web/src/views/projectListView.test.mjs`
|
|||
|
|
|
|||
|
|
**Interfaces:**
|
|||
|
|
- Consumes: `listOneClickTaskOverview(): Promise<AiGenerationTaskOverview[]>`
|
|||
|
|
- Produces: `openOneClickTask(project)`,路由查询包含 `projectId`、`mode=one-click` 和可选 `taskId`
|
|||
|
|
|
|||
|
|
- [x] 添加总览 API 客户端。
|
|||
|
|
- [x] 在项目列表增加稳定宽度的状态、进度和当前步骤视图。
|
|||
|
|
- [x] 使用图标按钮进入对应一键生成任务。
|
|||
|
|
- [x] 对进度接口失败做降级,保留项目列表主体。
|
|||
|
|
- [x] 运行 `node --test src/views/projectListView.test.mjs`,期望全部通过。
|
|||
|
|
|
|||
|
|
### Task 3: 生成页服务器任务恢复
|
|||
|
|
|
|||
|
|
**Files:**
|
|||
|
|
- Modify: `easycode-web/src/views/GenerateView.vue`
|
|||
|
|
- Test: `easycode-web/src/views/generateView.test.mjs`
|
|||
|
|
|
|||
|
|
**Interfaces:**
|
|||
|
|
- Produces: `restoreTaskById(id, taskId, expectedGenerateType)`
|
|||
|
|
- Produces: `syncOneClickTaskRoute(id, taskId)`
|
|||
|
|
|
|||
|
|
- [x] 先添加路由任务恢复和新任务路由同步的失败测试。
|
|||
|
|
- [x] 从 `route.query.taskId` 加载并校验服务器任务。
|
|||
|
|
- [x] 没有路由任务时回退到现有本地缓存恢复。
|
|||
|
|
- [x] 监听同项目内的 `taskId` 变化,同时避免项目加载期和同任务重复轮询。
|
|||
|
|
- [x] 切换任务前使旧通道轮询失效,并防止旧轮询的收尾逻辑覆盖新任务状态。
|
|||
|
|
- [x] 新任务创建后立即同步地址栏;同步失败不终止任务轮询。
|
|||
|
|
- [x] 运行 `node --test src/views/generateView.test.mjs`,期望全部通过。
|
|||
|
|
|
|||
|
|
### Task 4: 文档与完整验证
|
|||
|
|
|
|||
|
|
**Files:**
|
|||
|
|
- Create: `docs/superpowers/specs/2026-07-11-one-click-task-overview-resume-design.md`
|
|||
|
|
- Create: `docs/superpowers/plans/2026-07-11-one-click-task-overview-resume.md`
|
|||
|
|
- Modify: `docs/superpowers/specs/2026-07-10-ai-software-factory-roadmap.md`
|
|||
|
|
|
|||
|
|
- [x] 记录本轮主线校正、设计边界和实施步骤。
|
|||
|
|
- [x] 解析 MyBatis XML,确认 Mapper 文件有效。
|
|||
|
|
- [x] 运行 EasyCode 页面契约测试和生产构建。
|
|||
|
|
- [x] 运行 `ruoyi-admin` 全量测试。
|
|||
|
|
- [x] 核对本轮 diff,确认没有数据库迁移、开发凭据或无关模块改动。
|
|||
|
|
|
|||
|
|
## Verification Record
|
|||
|
|
|
|||
|
|
- EasyCode 主流程页面契约:47 项通过,0 失败。
|
|||
|
|
- `AiGenerationTaskServiceImplTest`:16 项通过,0 失败。
|
|||
|
|
- `FrontProjectControllerRunPreviewTest`:12 项通过,0 失败。
|
|||
|
|
- `ruoyi-admin` 全量:39 项通过,0 失败。
|
|||
|
|
- `easycode-web` 生产构建:通过,保留既有大 Chunk 与第三方 PURE 注解警告。
|
|||
|
|
- MyBatis XML:成功解析并找到 `selectLatestTasksForUserByType`。
|
|||
|
|
- EasyCode 开发服务:`http://localhost:5174` 返回 HTTP 200。
|
|||
|
|
- 单独运行管理端测试前发现本地 Maven 仓库仍是旧 `ruoyi-generator` 包;安装当前模块产物后,同一全量命令通过。该问题未通过业务代码绕过。
|