拆分顺序:协议适配 → 后端服务 → 前端入口 → 菜单迁移 → 兼容验证 每个任务应可独立提交;本文件为实施计划,不包含业务代码实现
spec.md 第 15 节 HARD-GATE 问题。generator/table、ai/crud-config、ai/crud-generator 只做接口/路由兼容,不再扩展新流程。DRAFT,PUBLISHED/VERSION 作为可选项。GenTable 选择。test-spec.md,覆盖 AI 生成、模型导入、代码预览/下载、旧接口兼容。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/dto/lowcode/LowcodeAiAppGenerateRequest.java — 新增 AI 应用生成请求。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/dto/lowcode/LowcodeAiAppGenerateResult.java — 新增 AI 应用生成结果。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/dto/lowcode/LowcodeCodegenRequest.java — 新增代码预览/下载参数。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/vo/lowcode/LowcodeCodePreviewVO.java — 新增代码预览结果。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/dto/lowcode/LowcodeModelImportRequest.java — 新增数据源表结构导入请求。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/dto/lowcode/LowcodeDomainSchema.java — 增加 codegen 领域默认配置。public class LowcodeCodegenRequest {
private String sourceType; // DRAFT | PUBLISHED | VERSION
private Long versionId;
private Long domainId;
private String groupId; // defaults from business domain config
private String domainPackage; // Java base package, defaults from business domain config
private String moduleName;
private String author;
private Boolean includeSql;
private Boolean includeMenuSql;
private Boolean includeDictSql;
}
public class LowcodeDomainSchema {
private Codegen codegen;
public static class Codegen {
private String groupId;
private String domainPackage;
private String moduleName;
private String frontendBasePath;
}
}
- **验证**:
- DTO 字段命名符合前端 camelCase、后端 Java bean 约定。
- 不引入数据库字段,仅作为接口协议。
## Task 2: 建立低代码模型导入适配服务
- **目标**:把数据源数据库表结构转换为 `LowcodeModelSchema`,使模型设计成为唯一模型资产;旧 `GenTable/GenTableColumn` 不进入新导入流程。
- **涉及文件**:
- `LowcodeModelController.java` — 新增导入/预览接口。
- `LowcodeDataModelService.java` — 增加保存导入模型的服务方法。
- `LowcodeModelImportService.java` — 新增转换服务。
- `GenDatasourceServiceImpl.java` / `IGenDatasourceService.java` — 复用数据源表结构查询。
- **关键签名**:
```java
public LowcodeModelSchema previewDbTableModel(LowcodeModelImportRequest request);
public Long importDbTableModel(LowcodeModelImportRequest request);
LambdaQueryWrapper 拼查询类 SQL。id, tenant_id, create_by, create_time, create_dept, update_by, update_time。/ai/lowcode/model/{id} 查到模型详情。GenTable 数据。LowcodeAppController.java — 新增 /code/preview、/code/download、/code/options。LowcodeCodegenService.java — 新增应用级代码生成服务。LowcodeCodegenContextBuilder.java — 新增低代码协议到模板上下文转换。AiCrudCodegenService.java — 改为底层委托或保留兼容入口。VelocityCodegenStrategy.java — 支持应用级上下文或新的上下文对象。AiCrudConfigService.java — 按 appId/configKey/版本加载配置。public byte[] downloadCode(Long appId, LowcodeCodegenRequest request);
public byte[] downloadByConfigKey(String configKey);
- **规则**:
- `sourceType` 为空时默认使用已保存草稿 `DRAFT`。
- 代码生成 groupId、Java 基础包名和代码模块名优先使用请求参数,其次使用业务领域 `domainSchema.codegen`。
- 最终 Java 包路径为 `domainPackage + "." + moduleName`;若 `domainPackage` 已经以 `moduleName` 结尾,生成前自动剥离重复段。
- 默认不写入本地文件,只返回预览内容或 ZIP 字节。
- 代码生成失败不能影响应用草稿和发布版本。
- 旧 `/ai/crud-config/codegen/download/{configKey}` 继续可用。
- **验证**:
- 应用草稿能预览文件树。
- 已发布应用能下载 ZIP。
- 旧 configKey 下载入口返回相同 ZIP 文件名格式。
## Task 4: 迁移 AI 表单生成到 AI 应用生成
- **目标**:把旧 AI JSON 生成能力改造成“生成模型 + 应用草稿”的闭环。
- **涉及文件**:
- `LowcodeAppController.java` — 新增 `/ai/stream-generate`、`/{id}/ai/refine`。
- `LowcodeAiGenerateService.java` — 新增 AI 应用生成编排服务。
- `CrudGeneratorStreamService.java` — 抽取/复用 SSE chunk 处理和 Prompt 构建能力。
- `AiCrudConfigGenerateService.java` — 复用低代码协议解析和规则降级能力。
- `LowcodeRuntimeConfigBuilder.java` — 继续从 `modelSchema/pageSchema` 生成运行时配置。
- `LowcodeSchemaValidator.java` — 校验 AI 输出模型和页面协议。
- **关键签名**:
```java
public Flux<ServerSentEvent<String>> streamGenerateApp(LowcodeAiAppGenerateRequest request);
public LowcodeAiAppGenerateResult buildDraftFromAiResult(LowcodeAiAppGenerateResult result);
steps[] 和 decisions[],前端展示决策摘要而不是内部推理链。forge-admin-ui/src/views/ai/lowcode-apps.vue — 新增 AI 创建应用、代码预览、下载、模型选择/关联入口。forge-admin-ui/src/views/ai/lowcode-builder.vue — 增加代码输出面板。forge-admin-ui/src/api/lowcode-crud.js — 新增 AI、代码生成、模型导入 API。forge-admin-ui/src/components/lowcode-builder/code/LowcodeCodePreviewModal.vue — 新增或从旧 CodePreviewModal.vue 抽取。forge-admin-ui/src/components/lowcode-builder/ai/LowcodeAiGenerateDrawer.vue — 新增 AI 生成抽屉。pnpm exec eslint --fix 指定改动文件。pnpm build 通过。forge-admin-ui/src/views/ai/lowcode-models.vue — 新增导入表、AI 生成模型入口。LowcodeModelDesigner.vue — 支持导入后的字段确认。ModelFieldTable.vue / ModelFieldPropertyPanel.vue — 保留字段配置能力。ImportTableModal.vue — 抽取为低代码模型导入弹窗或新增 LowcodeModelImportModal.vue。AiSchemaModal.vue — 迁移为低代码模型 AI 生成入口。GenTable 选择。GenTable 选择导入的入口。forge/db/migration/Vx.x.x__unify_lowcode_app_codegen_menus.sql — 新增 Flyway 脚本。forge-admin-ui/src/router/index.js — 保留隐藏路由或重定向。sys_resource 脚本必须 NOT EXISTS 防重复。tenant_id 必须为 1。ai/lowcode-apps 和 ai/lowcode-models。generator/table、ai/crud-config、ai/crud-generator。code-copilot/changes/unified-lowcode-app-codegen/test-spec.md — 补充测试说明。bash
cd forge && JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home \
mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator,forge-admin-server -am compile -DskipTests
bash
cd forge-admin-ui && source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm build
/ai/crud-page/{configKey} 访问。/ai/crud-config/codegen/download/{configKey} 能下载。/generator/download/{tableName} 能下载。/ai/lowcode/app/{id}/code/download 能下载。implementation-summary.md。deprecation-plan.md。code-copilot/memory/decisions.md 或 code-copilot/memory/pitfalls.md。