Files
yidaima/RuoYi-Vue/docs/superpowers/specs/2026-06-27-one-click-project-generation-design.md
2026-06-27 22:31:48 +08:00

280 lines
11 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.

# 一键完整项目生成设计
## 目标
把 EasyCode 的默认体验拉回最初的产品初心:用户输入项目名称,点击一次“生成完整项目”,系统自动生成后端、用户前台、后台管理端和 SQL并启动在线运行预览。
第一版成功标准不是“源码结构生成完成”,而是生成项目的在线运行预览达到可访问状态。生成完成页应优先展示用户前台地址、后台管理端地址、源码下载和生成报告。
## 背景
当前项目已经具备不少底层能力:
- 系统蓝图生成:角色、前台菜单、后台菜单、页面清单。
- 数据库生成与保存AI 生成表结构、字段、SQL并持久化到前台项目草稿。
- 业务流程生成:基于安全 DSL 生成状态流转、数量变化、插入、更新等业务动作。
- 页面设计器:支持前台和后台页面初始化、页面设计和业务块配置。
- 结构预览与下载:可生成 backend、frontend、admin_frontend、sql 四类源码结构。
- 在线运行预览:可解压生成源码,初始化预览数据库,启动后端和前端进程。
问题不是能力缺失,而是默认链路变成了“多个设计器和多个按钮的低代码工作台”。普通用户需要理解系统蓝图、数据库结构、业务动作、页面设计等中间概念,体验上偏离了“输入项目名,自动得到完整项目”。
## 已确认决策
- 第一版目标选 B生成后能在线运行预览。
- 输入边界:项目名称必填,需求描述可选。只填“图书借阅系统”也应能生成默认可运行项目。
- 默认生成范围:后端、用户前台、后台管理端和 SQL。高级设置允许关闭用户前台。
- 流程策略:默认一键到底,不在中间强制用户确认;专家模式允许逐步查看和修正。
- 项目类型范围:带常见业务闭环的项目,不止 CRUD。第一版支持状态流转、提交、审核、取消、借还、归还、完成、库存或数量变化等安全 DSL 可覆盖的动作。
- 实现路线:以“后端新增一键生成编排任务”为主;模板项目库作为后续增强。
## 非目标
第一版不追求任意复杂业务逻辑,不允许 AI 生成任意 Java 或 SQL 片段,不建设完整行业模板市场,不做多人协作编辑,不做生产级部署发布。
模板优先生成是后续增强:未来可以先匹配模板或行业包,再由 AI 补齐字段、页面和业务动作;第一版先把通用一键生成编排器做稳。
## 用户体验
`GenerateView` 默认改成一键生成入口:
- 项目名称输入框。
- 可选需求描述输入框。
- 折叠的高级设置:是否生成用户前台、行业模板、后台模块选择。
- 主按钮:“生成完整项目”。
- 任务进度区。
- 生成结果区。
生成中页面展示阶段进度:
1. 规划项目。
2. 生成数据。
3. 生成业务。
4. 生成页面。
5. 生成源码。
6. 运行预览。
生成成功后,页面优先展示成果:
- 打开用户前台。
- 打开后台管理端。
- 进入完整预览页。
- 下载完整源码。
- 查看生成报告。
现有设计器不删除,改为专家模式入口。用户生成后不满意时,可以进入“调整项目 / 专家模式”修改系统蓝图、数据库结构、业务流程或页面设计,然后重新生成完整项目或重建预览。
## 后端架构
新增一键生成任务类型,例如 `one_click_project`。该任务复用现有 `front_ai_generation_task` 任务中心,不另建任务系统,以继续使用现有队列、重试、额度、生成记录和轮询接口。
任务由 `AiGenerationTaskWorker` 识别 `one_click_project` 后交给新的编排服务执行,例如 `OneClickProjectGenerationService`。编排服务只负责串联现有能力,不重新实现底层生成器。
建议依赖:
- `IAiGenerateService`:生成系统蓝图、数据库和业务动作。
- `IFrontProjectService`:保存或读取项目草稿和数据库。
- `FrontendPageDesignService`:初始化前台和后台页面设计。
- `IFrontProjectPreviewService`:校验源码结构、标记预览可用、下载源码。
- `IFrontProjectRunPreviewService`:启动并查询在线运行预览。
## 编排阶段
一键任务按固定阶段执行,并在每个阶段开始和结束时更新 `progress``currentStep` 和阶段信息。
### 1. 准备项目
确保项目归属正确,保存项目名称、需求描述、行业模板、是否生成用户前台等配置。默认启用用户前台。
### 2. 生成系统蓝图
调用 `generateAppBlueprint`,生成角色、前台菜单、后台菜单和前台页面清单。
验收标准:
- 角色列表不为空。
- 前台菜单或前台页面清单不为空,除非用户关闭用户前台。
- 后台菜单不为空。
- 前台页面包含可初始化页面所需的 `pageCode``pageType` 和业务表引用信息。
### 3. 生成数据库
调用 `generateDatabase`,根据项目名称、需求描述和确认后的系统蓝图生成表结构并持久化。
验收标准:
- 表数量大于 0。
- 每张表至少有主键和有效字段。
- 字段名、表名、类型通过现有安全校验。
- SQL 能被结构预览阶段使用。
### 4. 生成业务动作
调用 `generateBusinessBlueprint`,生成安全 DSL 业务动作。
验收标准:
- 业务动作可以为空,但如果项目名称明显包含流程型业务,应尽量生成至少一个业务动作。
- 所有 `ownerTable`、规则字段和影响字段必须存在于保存后的表结构。
- 只允许安全 DSL 支持的动作类型,如状态流转、插入、更新、数量增加或减少。
### 5. 初始化页面设计
调用 `FrontendPageDesignService.initializePageDesigns(userId, projectId, "frontend")``"admin"`
验收标准:
- 用户前台启用时,前台至少有首页和业务页面。
- 后台至少有首页和业务管理页面。
- 初始化不会覆盖用户已经保存的同 `pageCode` 设计。
### 6. 生成源码结构
调用现有预览结构能力,确保 `backend``admin_frontend``sql` 可渲染;用户前台启用时还要校验 `frontend`
验收标准:
- 四类结构中启用的部分都能返回文件树。
- 下载完整源码包可用。
- `previewStatus` 标记为可预览。
### 7. 启动在线运行预览
调用 `IFrontProjectRunPreviewService.start` 启动预览,然后轮询 `status`,直到状态为 `RUNNING` 或超时失败。
验收标准:
- 用户前台启用时,`frontendUrl` 可访问。
- 后台管理端 `adminFrontendUrl` 可访问。
- 后端地址、端口、工作区路径和日志可返回给前端。
## 任务结果
一键任务成功后,`resultPayload` 返回结构化结果:
```json
{
"projectId": 1001,
"stage": "RUN_PREVIEW",
"downloadReady": true,
"backendUrl": "http://127.0.0.1:9001",
"frontendUrl": "http://127.0.0.1:9002",
"adminFrontendUrl": "http://127.0.0.1:9003",
"previewStatus": "RUNNING",
"report": {
"tables": 6,
"businessActions": 4,
"frontendPages": 5,
"adminPages": 6
}
}
```
失败时也返回阶段化信息:
```json
{
"projectId": 1001,
"stage": "RUN_PREVIEW",
"downloadReady": true,
"failedStage": "RUN_PREVIEW",
"errorMessage": "后台前端进程已退出",
"suggestedActions": ["RETRY_RUN_PREVIEW", "OPEN_LOGS", "DOWNLOAD_SOURCE", "OPEN_EXPERT_MODE"]
}
```
## 失败恢复
一键生成失败不等于所有成果作废。系统应保留已完成阶段的产物,并在报告里明确可用内容。
- AI 调用失败:沿用现有任务重试策略。
- 蓝图或数据库校验失败:展示校验原因,引导用户补充需求或进入专家模式。
- 页面初始化失败:允许进入专家模式修正系统蓝图或数据库。
- 源码结构失败:展示模板和文件类型相关错误。
- 运行预览失败:保留源码下载、结构预览和日志入口。
第一版可以先支持“重新运行一键生成”和“重试运行预览”。更细粒度的“从失败阶段继续”作为后续增强,但数据结构中应保留 `stage``failedStage` 字段。
## 前端改造
`GenerateView` 的默认职责变为:
- 创建或更新项目。
- 创建 `one_click_project` 任务。
- 轮询任务状态。
- 展示阶段进度。
- 展示成功结果或失败报告。
- 提供专家模式入口。
现有面板迁移到专家模式:
- `AppBlueprintPanel`:系统蓝图调整。
- `DatabaseDesigner` 和 ER 图:数据库结构调整。
- `BusinessBlueprintPanel`:业务动作调整。
- 页面设计入口:继续跳转到独立 `PageDesignerView`
- `PreviewView`:继续负责完整源码结构、运行 iframe、日志和下载。
路由可以先保持 `/generate?projectId=...`,通过页面内模式切换实现普通模式和专家模式。后续如果需要更清晰的信息架构,再补 `/project/:projectId/workspace`
## 测试策略
后端单测:
- `one_click_project` 任务类型可通过校验。
- 编排服务按顺序调用系统蓝图、数据库、业务动作、页面初始化、结构预览和运行预览。
- 每个阶段失败时,任务记录正确的 `currentStep`、失败阶段和错误信息。
- 运行预览达到 `RUNNING` 时才返回成功。
- 运行预览失败但源码已生成时,`downloadReady` 仍为 true。
后端集成测试:
- 使用固定项目名称“图书借阅系统”的假数据或 mock AI 响应,验证 `backend``frontend``admin_frontend``sql` 结构都能渲染。
- 验证业务动作 DSL 能进入生成模板上下文。
- 验证页面初始化后能生成前台和后台页面设计记录。
前端测试:
- `GenerateView` 默认展示一键入口,而不是默认展开数据库和业务流程设计器。
- 点击“生成完整项目”后创建 `one_click_project` 任务并轮询。
- 成功后展示用户前台、后台管理端、下载和预览入口。
- 失败后展示失败阶段、错误信息、日志或专家模式入口。
- 专家模式能展示现有蓝图、数据库、业务动作和页面设计入口。
人工验收:
1. 登录前台。
2. 进入生成页。
3. 输入“图书借阅系统”。
4. 不填写需求描述。
5. 点击“生成完整项目”。
6. 等待任务进入运行预览完成状态。
7. 打开用户前台,能看到图书或借阅相关页面。
8. 打开后台管理端,能看到对应管理菜单。
9. 下载源码包,确认包含后端、用户前台、后台管理端和 SQL。
10. 如果运行预览失败,页面能展示失败阶段、日志和源码下载入口。
## 分期
第一阶段:
- 新增 `one_click_project` 任务类型和后端编排服务。
- 复用现有任务轮询接口。
- 简化 `GenerateView` 默认界面。
- 生成成功后展示运行预览和下载入口。
- 保留专家模式入口。
第二阶段:
- 支持从失败阶段继续。
- 优化生成报告。
- 增加模板项目库匹配能力。
- 根据模板或行业包提升默认生成质量。
## 自检
- 范围聚焦在一键生成完整项目,不扩展到模板市场或生产部署。
- 后端采用编排现有能力的方式,不重写生成器。
- 成功标准明确为在线运行预览可访问。
- 设计器能力保留为专家模式,不再作为普通用户主路径。
- 失败处理保留阶段成果,避免运行预览失败导致全部成果不可用。