feat: add spreadsheet async imports

This commit is contained in:
Codex
2026-06-29 08:00:17 +08:00
parent 78a26d1df2
commit eee21f6eed
27 changed files with 2972 additions and 267 deletions

View File

@@ -50,6 +50,59 @@ GET /api/tenant-content/imports/issues
- `content_import_issues`
- `audit_logs`
## 格式支持
当前题目、单词、知识手册、分数线和视频导入均支持:
- `sourceFormat=json`:直接提交规范 JSON 或兼容旧模板。
- `sourceFormat=csv`:提交 `csvText``fileContent``payload``fileBase64`,后端按表头归一化。
- `sourceFormat=excel`:提交 `.xlsx``fileBase64`,可选 `sheetName``sheetIndex`;多 Sheet 会被解析进同一个 `content_import_jobs`
- 同步导入默认在 API 请求内完成;大批量导入可在确认导入时传 `executionMode=async`API 会把 job 置为 `pending`,由 imports worker 后台消费。
表格导入安全边界:
- 单文件最大 8MB。
- 单次最多解析 5000 行、160 列。
- 单个单元格最多保留 100000 字符。
- 后端只保存解析后的原始行和规范化 payload不把 `fileBase64` 长期写入数据库。
- 任务列表会返回 `sourceFormat``executionMode``parserMetadata`前端可展示解析器、Sheet、行数等信息。
异步导入调用方式:
```json
{
"previewJobId": "uuid",
"executionMode": "async",
"allowPartial": false
}
```
异步导入状态流:
```text
preview -> pending -> importing -> completed
preview -> pending -> importing -> completed_with_errors
preview -> pending -> failed
```
worker 命令:
```bash
npm --workspace @tiku-saas/worker run imports:once
```
前端提交异步导入后不要重复同步执行同一 job只需要轮询 `GET /api/tenant-content/imports` 并用 `GET /api/tenant-content/imports/issues` 展示问题行。worker 会按 `attempt_count/max_attempts` 记录重试,失败时写入 `errorMessage` 和审计日志。
推荐 CSV/Excel 表头:
| 类型 | 常用表头 |
| --- | --- |
| 题目 | `legacyId``题型/type``题干/content``选项A`-`选项H``答案``解析``难度``标签` |
| 单词 | `unitLegacyId``unitName``wordLegacyId``word``phonetic``meaning``example``difficulty``tags` |
| 知识手册 | `subjectLegacyId``subjectName``chapterLegacyId``chapterName``sectionName``entryLegacyId``title``content``summary``tags` |
| 分数线 | 多 Sheet 推荐 `fields``schools``majors``records`;记录 Sheet 可包含任意动态字段列 |
| 视频 | `legacyId``title``videoUrl``thumbnailUrl``durationSeconds``subjectId``questionId``legacyQuestionId``accessMode` |
## 单词导入
推荐新格式:
@@ -262,5 +315,5 @@ GET /api/tenant-content/imports/issues
## 下一步
- 增加 Excel/CSV 解析入口,但解析后仍进入同一套 preview/import 管线
- 增加异步 worker处理大批量导入、重试和导入后校验
- 增加导入后校验/复检,确认导入行数、目标表记录、题目集合绑定和视频绑定一致
- 增加导入模板下载接口和后台可视化字段映射器