forked from wangziqi/gongxue-base
feat: add spreadsheet async imports
This commit is contained in:
@@ -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,处理大批量导入、重试和导入后校验。
|
||||
- 增加导入后校验/复检,确认导入行数、目标表记录、题目集合绑定和视频绑定一致。
|
||||
- 增加导入模板下载接口和后台可视化字段映射器。
|
||||
|
||||
Reference in New Issue
Block a user