status: apply created: 2026-05-26 拆分顺序:数据模型 → 接口协议 → 底层分页能力 → 异步编排 → 前端入口 → 验证
AiCrudPage 存在通用导出入口。/ai/crud/{configKey}/export。sys_config 已存在。/api/file/download/{fileId} 下载链路。| Task | 名称 | 状态 | 优先级 |
|---|---|---|---|
| Task 1 | 数据库迁移与任务模型 | completed | P0 |
| Task 2 | 动态查询分页与数据权限上下文 | completed | P0 |
| Task 3 | 智能导出与异步 worker | completed | P0 |
| Task 4 | 文件中心流式上传能力 | completed | P0 |
| Task 5 | 前端 AiCrudPage 异步任务 UX | completed | P0 |
| Task 6 | 验证与文档回填 | completed | P1 |
目标: 创建异步导出任务持久化表和系统参数初始化。
涉及文件:
forge/db/migration/V1.0.23__add_common_crud_async_export.sql — 新增任务表和 sys_config 默认参数。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/domain/entity/AiCrudExportTask.java — 新增任务实体。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/mapper/AiCrudExportTaskMapper.java — 新增 Mapper。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/resources/mapper/AiCrudExportTaskMapper.xml — 新增任务分页和详情查询 SQL。关键签名:
Page<AiCrudExportTask> selectTaskPage(Page<AiCrudExportTask> page,
Long tenantId,
Long createBy,
String configKey);
AiCrudExportTask selectTaskById(Long tenantId, Long createBy, Long id);
验收标准:
sys_config 初始化使用 tenant_id=1,并做 NOT EXISTS 防重复。完成状态: completed
目标: 为异步导出提供总数统计、无重复 count 的分页数据读取,以及提交人数据权限上下文复用。
涉及文件:
DynamicCrudRepository.java — 新增导出 count、分页 records 查询方法。DynamicCrudService.java — 新增 countExportRows、selectExportPageRows。DynamicDataScopeService.java — 新增显式 DataScopeContext 入参重载。关键签名:
public long countExportRows(String configKey, DynamicCrudQuery query, DataScopeContext dataScopeContext);
public List<Map<String, Object>> selectExportPageRows(String configKey,
DynamicCrudQuery query,
Integer pageNum,
Integer pageSize,
DataScopeContext dataScopeContext);
验收标准:
完成状态: completed
目标: 将 /ai/crud/{configKey}/export 改为同步/异步自动决策,并实现后台导出。
涉及文件:
DynamicCrudController.java — 导出接口返回同步文件或异步任务 JSON,新增任务查询接口。DynamicCrudExcelService.java — 读取系统参数、提交任务、同步导出和任务查询。DynamicCrudAsyncExportWorker.java — 新增异步 worker,分页写 Excel、更新进度、上传文件服务。DynamicCrudExportResult.java — 新增导出提交响应。关键签名:
public DynamicCrudExportResult exportExcel(String configKey, DynamicCrudQuery query, HttpServletResponse response);
@Async
public void executeAsync(Long taskId, String configKey, DynamicCrudQuery query, ExportExecutionContext context);
验收标准:
async=true 和 taskId。fileId/fileName/fileSize。完成状态: completed
目标: 支持后台生成文件通过流上传到默认文件存储。
涉及文件:
FileManager.java — 新增 InputStream 上传重载。forge-plugin-generator/pom.xml — 增加 forge-starter-file 依赖。关键签名:
public FileMetadata upload(InputStream inputStream,
String fileName,
String contentType,
String businessType,
String businessId,
String storageType,
Boolean isPrivate);
验收标准:
fileId。fileSize,RustFS/COS 不为导出文件整文件 readAllBytes()。完成状态: completed
目标: 在通用 CRUD 页面提供异步导出反馈、进度查询和下载入口。
涉及文件:
forge-admin-ui/src/components/ai-form/AiCrudPage.vue — 识别异步导出 JSON、任务抽屉、轮询、下载按钮。forge-admin-ui/src/components/ai-form/AiCrudPageProps.js — 新增可选异步导出开关/配置键解析属性。关键签名:
async function handleExport()
async function loadExportTasks()
async function pollExportTask(taskId)
async function handleDownloadExportTask(row)
验收标准:
responseType=blob 下的异步 JSON 响应可被识别,不会误下载为 Excel。完成状态: completed
目标: 完成针对性编译、前端校验并回填执行日志。
验证命令:
mvn -pl forge-admin-server -am compile -DskipTests
source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm build
验收标准:
forge-plugin-generator 依赖链与 forge-admin-server 依赖链均已通过。AiCrudPage.vue / AiCrudPageProps.js ESLint 通过。NODE_OPTIONS=--max-old-space-size=8192 pnpm build 构建成功。// 注释警告和 chunk size 警告,不阻断本次变更。完成状态: completed