初始化项目代码
This commit is contained in:
542
文件/出题做题生成流程示意图.md
Normal file
542
文件/出题做题生成流程示意图.md
Normal file
@@ -0,0 +1,542 @@
|
||||
# 知识库管理系统 - 出题做题生成流程
|
||||
|
||||
## 文档信息
|
||||
|
||||
| 项目 | 内容 |
|
||||
| -------- | ----------- |
|
||||
| **文档名称** | 出题做题生成流程示意图 |
|
||||
| **版本号** | V1.0.0 |
|
||||
| **发布日期** | 2026-05-10 |
|
||||
|
||||
***
|
||||
|
||||
## 一、整体流程概述
|
||||
|
||||
本系统的出题做题流程主要包含两大核心环节:
|
||||
|
||||
1. **题目生成流程**:从文档中自动/手动生成题目,经过审核后进入题库
|
||||
2. **答题考试流程**:用户获取试卷、答题、提交、获得成绩
|
||||
|
||||
***
|
||||
|
||||
## 二、题目生成流程
|
||||
|
||||
### 2.1 流程图
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────────┐
|
||||
│ 题目生成流程 │
|
||||
├─────────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||||
│ │ 上传文档 │───▶│ 文件向量化 │───▶│ 题目生成 │ │
|
||||
│ │ (FileUpload) │ │ (Vectorize) │ │ (Generate) │ │
|
||||
│ └──────────────┘ └──────────────┘ └───────┬──────┘ │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ ┌──────────────┐ │
|
||||
│ │ 题目审核 │ │
|
||||
│ │ (Review) │ │
|
||||
│ └───────┬──────┘ │
|
||||
│ ┌─┴─┐ │
|
||||
│ ▼ ▼ │
|
||||
│ ┌──────────┐ ┌──────────┐ │
|
||||
│ │ 审核通过 │ │ 审核拒绝 │ │
|
||||
│ │ Approved │ │ Rejected │ │
|
||||
│ └────┬─────┘ └────┬─────┘ │
|
||||
│ │ │ │
|
||||
│ ▼ ▼ │
|
||||
│ ┌──────────────┐ ┌──────────────┐ │
|
||||
│ │ 进入题库 │ │ 返回修改 │ │
|
||||
│ │ (Question │ │ (Modify) │ │
|
||||
│ │ Bank) │ └──────────────┘ │
|
||||
│ └──────┬───────┘ │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ ┌──────────────┐ │
|
||||
│ │ 试卷生成 │ │
|
||||
│ │ (Paper │ │
|
||||
│ │ Generate) │ │
|
||||
│ └──────────────┘ │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 2.2 详细流程说明
|
||||
|
||||
| 步骤 | 阶段 | 接口 | 说明 |
|
||||
| -- | ----- | ---------------------------------------- | ------------- |
|
||||
| 1 | 文档上传 | `POST /api/file/upload` | 用户上传文档,保存到服务器 |
|
||||
| 2 | 文件向量化 | `POST /api/collections/{name}/vectorize` | 将文档内容转换为向量存储 |
|
||||
| 3 | 题目生成 | `POST /api/exam/generate` | 根据文档内容自动生成题目 |
|
||||
| 4 | 题目审核 | `PUT /api/question/review/{questionId}` | 人工审核生成的题目 |
|
||||
| 5 | 进入题库 | 自动 | 审核通过的题目进入题库 |
|
||||
| 6 | 试卷生成 | `POST /api/exam/paper/generate` | 根据配置从题库生成试卷 |
|
||||
|
||||
### 2.3 题目类型
|
||||
|
||||
| 类型 | 英文标识 | 说明 |
|
||||
| --- | ---------------- | ------------ |
|
||||
| 单选题 | single\_choice | 从选项中选择一个正确答案 |
|
||||
| 多选题 | multiple\_choice | 从选项中选择多个正确答案 |
|
||||
| 判断题 | true\_false | 判断陈述是否正确 |
|
||||
| 填空题 | fill\_blank | 填写正确答案 |
|
||||
| 简答题 | subjective | 主观题,需要文字回答 |
|
||||
|
||||
***
|
||||
|
||||
## 三、答题考试流程
|
||||
|
||||
### 3.1 流程图
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────────┐
|
||||
│ 答题考试流程 │
|
||||
├─────────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||||
│ │ 获取试卷列表 │───▶│ 选择试卷 │───▶│ 开始答题 │ │
|
||||
│ │ (My Papers) │ │ (Select) │ │ (Start) │ │
|
||||
│ └──────────────┘ └──────────────┘ └───────┬──────┘ │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ ┌──────────────────────┐ │
|
||||
│ │ 答题界面 │ │
|
||||
│ │ (Answer) │ │
|
||||
│ └──────────┬─────────┘ │
|
||||
│ │ │
|
||||
│ ┌──────────┴─────────┐ │
|
||||
│ ▼ ▼ │
|
||||
│ ┌──────────────┐ ┌──────────────┐ │
|
||||
│ │ 保存答案 │ │ 提交试卷 │ │
|
||||
│ │ (Save) │ │ (Submit) │ │
|
||||
│ └──────────────┘ └───────┬──────┘ │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ ┌──────────────┐ │
|
||||
│ │ AI批改答案 │ │
|
||||
│ │ (Grade) │ │
|
||||
│ └───────┬──────┘ │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ ┌──────────────┐ │
|
||||
│ │ 显示成绩 │ │
|
||||
│ │ (Result) │ │
|
||||
│ └───────┬──────┘ │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ ┌──────────────┐ │
|
||||
│ │ 错题收集 │ │
|
||||
│ │ (Wrong Q) │ │
|
||||
│ └──────────────┘ │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 3.2 详细流程说明
|
||||
|
||||
| 步骤 | 阶段 | 接口 | 说明 |
|
||||
| -- | ------ | ----------------------------------------- | ---------- |
|
||||
| 1 | 获取试卷列表 | `GET /api/exam/my/papers` | 获取用户有权限的试卷 |
|
||||
| 2 | 获取试卷详情 | `GET /api/exam/paper/{paperId}` | 获取试卷内容 |
|
||||
| 3 | 开始答题 | `POST /api/exam/record/{recordId}/start` | 标记开始考试 |
|
||||
| 4 | 保存答案 | `PUT /api/exam/record/{recordId}/save` | 保存单题答案 |
|
||||
| 5 | 提交试卷 | `POST /api/exam/record/{recordId}/submit` | 提交全部答案 |
|
||||
| 6 | AI批改 | 后台自动 | AI自动批改答案 |
|
||||
| 7 | 获取结果 | `GET /api/exam/record/{recordId}/result` | 获取考试成绩 |
|
||||
| 8 | 错题收集 | 自动 | 自动将错题加入错题本 |
|
||||
|
||||
***
|
||||
|
||||
## 四、数据流向图
|
||||
|
||||
### 4.1 题目生成数据流向
|
||||
|
||||
```
|
||||
用户上传 ──▶ File表 ──▶ 向量库 ──▶ 题目生成 ──▶ Question表(待审核)
|
||||
│
|
||||
▼
|
||||
┌─────────────────┐
|
||||
│ 审核流程 │
|
||||
└────────┬────────┘
|
||||
│
|
||||
┌──────────────┴──────────────┐
|
||||
▼ ▼
|
||||
Question表(已通过) Question表(已拒绝)
|
||||
│
|
||||
▼
|
||||
ExamPaper表(试卷)
|
||||
```
|
||||
|
||||
### 4.2 答题数据流向
|
||||
|
||||
```
|
||||
ExamPaper表 ──▶ 用户答题 ──▶ UserAnswer表 ──▶ AI批改 ──▶ ExamRecord表
|
||||
│
|
||||
▼
|
||||
WrongQuestion表
|
||||
```
|
||||
|
||||
***
|
||||
|
||||
## 五、状态流转
|
||||
|
||||
### 5.1 题目状态
|
||||
|
||||
```
|
||||
pending(待审核)
|
||||
│
|
||||
├─▶ approved(已通过) ──▶ 进入题库
|
||||
│
|
||||
└─▶ rejected(已拒绝) ──▶ 可重新编辑
|
||||
```
|
||||
|
||||
### 5.2 考试记录状态
|
||||
|
||||
```
|
||||
created(已创建)
|
||||
│
|
||||
▼
|
||||
started(进行中)
|
||||
│
|
||||
├─▶ submitted(已提交)
|
||||
│ │
|
||||
│ ▼
|
||||
│ graded(已批改)
|
||||
│
|
||||
└─▶ expired(已过期)
|
||||
```
|
||||
|
||||
***
|
||||
|
||||
## 六、核心数据库表关系
|
||||
|
||||
```
|
||||
┌──────────┐ ┌───────────┐ ┌────────────┐
|
||||
│ File │ │ Question │ │ ExamPaper │
|
||||
├──────────┤ ├───────────┤ ├────────────┤
|
||||
│ id │ │ id │ │ id │
|
||||
│ fileName │◀──────│ fileId │◀───────│ questions │
|
||||
│ filePath │ │ content │ │ title │
|
||||
│ status │ │ status │ │ status │
|
||||
│ examStatus│ │ difficulty│ └────────────┘
|
||||
└──────────┘ └─────┬─────┘
|
||||
│
|
||||
▼
|
||||
┌──────────────┐ ┌────────────────┐
|
||||
│ UserAnswer │ │ ExamRecord │
|
||||
├──────────────┤ ├────────────────┤
|
||||
│ questionId │◀───────│ id │
|
||||
│ answer │ │ paperId │
|
||||
│ isCorrect │ │ userId │
|
||||
│ score │ │ totalScore │
|
||||
└──────────────┘ └────────────────┘
|
||||
```
|
||||
|
||||
***
|
||||
|
||||
## 七、流程时序图
|
||||
|
||||
### 7.1 题目生成时序
|
||||
|
||||
```
|
||||
用户 FileController FileServiceImpl CollectionController
|
||||
│ │ │ │
|
||||
│ 上传文件 │ │ │
|
||||
├─────────────▶│ │ │
|
||||
│ │ 保存文件 │ │
|
||||
│ ├─────────────────▶│ │
|
||||
│ │ │ │
|
||||
│ 向量化 │ │ │
|
||||
├─────────────▶│ │ 调用向量化接口 │
|
||||
│ │ ├───────────────────▶│
|
||||
│ │ │ │
|
||||
│ 生成题目 │ │ │
|
||||
├─────────────▶│ │ 调用AI生成题目 │
|
||||
│ │ ├───────────────────▶│
|
||||
│ │ │ │
|
||||
│ 审核题目 │ │ │
|
||||
├─────────────▶│ │ │
|
||||
│ │ 更新题目状态 │ │
|
||||
│ ├─────────────────▶│ │
|
||||
│ │ │ │
|
||||
│ ▼ ▼ ▼
|
||||
```
|
||||
|
||||
### 7.2 答题考试时序
|
||||
|
||||
```
|
||||
用户 UserExamController ExamServiceImpl QuestionMapper
|
||||
│ │ │ │
|
||||
│ 获取试卷列表 │ │ │
|
||||
├─────────────────▶│ │ │
|
||||
│ │ 查询数据库 │ │
|
||||
│ │ ├─────────────────▶│
|
||||
│ │ │ │
|
||||
│ │ 返回试卷列表 │ │
|
||||
│◀─────────────────┤ │ │
|
||||
│ │ │ │
|
||||
│ 开始答题 │ │ │
|
||||
├─────────────────▶│ │ 创建考试记录 │
|
||||
│ │ ├─────────────────▶│
|
||||
│ │ │ │
|
||||
│ 保存答案 │ │ │
|
||||
├─────────────────▶│ │ 保存答题记录 │
|
||||
│ │ ├─────────────────▶│
|
||||
│ │ │ │
|
||||
│ 提交试卷 │ │ │
|
||||
├─────────────────▶│ │ AI批改答案 │
|
||||
│ │ ├─────────────────▶│
|
||||
│ │ │ │
|
||||
│ │ 返回考试结果 │ │
|
||||
│◀─────────────────┤ │ │
|
||||
│ │ │ │
|
||||
│ ▼ ▼ ▼
|
||||
```
|
||||
|
||||
***
|
||||
|
||||
## 八、关键业务规则
|
||||
|
||||
### 8.1 题目生成规则
|
||||
|
||||
| 规则 | 说明 |
|
||||
| ------ | ------------------------------ |
|
||||
| 文件状态检查 | 只有审核通过(auditStatus=1)的文件才能生成题目 |
|
||||
| 难度等级 | 支持1-5级难度,1最简单,5最难 |
|
||||
| 题目数量限制 | 每次生成最多100道题目 |
|
||||
| 去重机制 | 相同内容的题目会被自动去重 |
|
||||
|
||||
### 8.2 试卷生成规则
|
||||
|
||||
| 规则 | 说明 |
|
||||
| ---- | ------------------- |
|
||||
| 权限范围 | 只能选择用户有权限访问的知识库中的题目 |
|
||||
| 题型配比 | 根据配置的题型数量分配题目 |
|
||||
| 难度均衡 | 尽量均衡分布不同难度的题目 |
|
||||
| 随机抽取 | 从题库中随机抽取题目组成试卷 |
|
||||
|
||||
### 8.3 答题规则
|
||||
|
||||
| 规则 | 说明 |
|
||||
| ---- | ------------ |
|
||||
| 答题时间 | 每道题默认答题时间不限制 |
|
||||
| 答案保存 | 支持自动保存和手动保存 |
|
||||
| 提交限制 | 提交后不可修改答案 |
|
||||
| 错题收集 | 自动收集错题到错题本 |
|
||||
|
||||
***
|
||||
|
||||
**文档结束**
|
||||
|
||||
<br />
|
||||
|
||||
让我先查看考试相关的实体类和数据库表结构:
|
||||
|
||||
toolName: view\_files
|
||||
|
||||
status: success
|
||||
|
||||
filePath: d:\Users\19211\Desktop\demo\demo\src\main\java\top\tqx\demo\_1\entity\ExamPaper.java
|
||||
|
||||
toolName: view\_files
|
||||
|
||||
status: success
|
||||
|
||||
filePath: d:\Users\19211\Desktop\demo\demo\src\main\java\top\tqx\demo\_1\entity\ExamRecord.java
|
||||
|
||||
toolName: view\_files
|
||||
|
||||
status: success
|
||||
|
||||
filePath: d:\Users\19211\Desktop\demo\demo\src\main\java\top\tqx\demo\_1\entity\ExamAssignment.java
|
||||
|
||||
让我查看考试相关的Controller来了解完整流程:
|
||||
|
||||
toolName: search\_by\_regex
|
||||
|
||||
status: success
|
||||
|
||||
query: AdminExamController
|
||||
|
||||
toolName: view\_files
|
||||
|
||||
status: success
|
||||
|
||||
filePath: d:\Users\19211\Desktop\demo\demo\src\main\java\top\tqx\demo\_1\controller\AdminExamController.java
|
||||
|
||||
让我查看ExamPaperService的实现来了解完整流程:
|
||||
|
||||
toolName: view\_files
|
||||
|
||||
status: success
|
||||
|
||||
filePath: d:\Users\19211\Desktop\demo\demo\src\main\java\top\tqx\demo\_1\service\impl\ExamPaperServiceImpl.java
|
||||
|
||||
让我查看用户考试相关的Controller和Service:
|
||||
|
||||
toolName: view\_files
|
||||
|
||||
status: success
|
||||
|
||||
filePath: d:\Users\19211\Desktop\demo\demo\src\main\java\top\tqx\demo\_1\controller\UserExamController.java
|
||||
|
||||
toolName: view\_files
|
||||
|
||||
status: success
|
||||
|
||||
filePath: d:\Users\19211\Desktop\demo\demo\src\main\java\top\tqx\demo\_1\service\impl\ExamRecordServiceImpl.java
|
||||
|
||||
## 三张考试表的完整流程说明
|
||||
|
||||
### 一、表结构关系
|
||||
|
||||
| 表名 | 中文名称 | 核心作用 |
|
||||
| :---------------- | :---- | :--------------------- |
|
||||
| `exam_paper` | 试卷表 | 存储试卷的基本信息(标题、描述、题目列表等) |
|
||||
| `exam_assignment` | 试卷分配表 | 记录试卷发布的范围(部门、用户) |
|
||||
| `exam_record` | 考试记录表 | 记录每个用户的考试状态和答题情况 |
|
||||
|
||||
### 二、完整业务流程
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||||
│ 管理员端流程 │
|
||||
├─────────────────────────────────────────────────────────────────────────────┤
|
||||
│ 1. 预览试卷 → 2. 保存试卷 → 3. 发布试卷 │
|
||||
│ ↓ ↓ ↓ │
|
||||
│ 生成试卷内容 创建ExamPaper 更新状态为published │
|
||||
│ (不保存) status=draft 创建ExamAssignment │
|
||||
│ 创建ExamRecord(每个用户一条) │
|
||||
└─────────────────────────────────────────────────────────────────────────────┘
|
||||
↓
|
||||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||||
│ 用户端流程 │
|
||||
├─────────────────────────────────────────────────────────────────────────────┤
|
||||
│ 4. 查看试卷列表 → 5. 查看试卷内容 → 6. 开始考试 → 7. 保存答案 │
|
||||
│ ↓ ↓ ↓ ↓ │
|
||||
│ 查询ExamRecord 查询ExamPaper 更新status= 更新answers字段 │
|
||||
│ (属于自己的) 获取题目内容 in_progress 记录答题进度 │
|
||||
│ ↓ │
|
||||
│ 8. 提交试卷 → 9. 查看成绩 │
|
||||
│ ↓ ↓ │
|
||||
│ 调用AI批阅 查询ExamRecord │
|
||||
│ 保存到UserAnswer 和UserAnswer │
|
||||
│ 更新status= │
|
||||
│ submitted │
|
||||
└─────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 三、各步骤详解
|
||||
|
||||
#### 阶段一:管理员预览试卷
|
||||
|
||||
- **接口**:`POST /admin/exam/paper/preview`
|
||||
- **操作**:根据条件动态生成试卷内容,**不保存到数据库**
|
||||
- **目的**:让管理员在保存前预览试卷效果
|
||||
|
||||
#### 阶段二:管理员保存试卷
|
||||
|
||||
- **接口**:`POST /admin/exam/paper/save`
|
||||
- **数据流向**:
|
||||
```
|
||||
ExamPaper (status=draft)
|
||||
↓
|
||||
exam_paper表
|
||||
```
|
||||
- **关键字段**:
|
||||
- `paper_id`:UUID唯一标识
|
||||
- `question_ids`:题目ID列表(JSON格式)
|
||||
- `status`:`draft`
|
||||
|
||||
#### 阶段三:管理员发布试卷
|
||||
|
||||
- **接口**:`POST /admin/exam/paper/{paperId}/publish`
|
||||
- **数据流向**:
|
||||
```
|
||||
1. 更新ExamPaper
|
||||
status → published
|
||||
publish_time → 当前时间
|
||||
deadline → 截止时间
|
||||
|
||||
2. 创建ExamAssignment
|
||||
paper_id → 试卷ID
|
||||
dept_id / user_ids → 发布范围
|
||||
status → active
|
||||
|
||||
3. 创建ExamRecord(每个目标用户一条)
|
||||
paper_id → 试卷ID
|
||||
user_id → 用户ID
|
||||
status → not_started
|
||||
```
|
||||
|
||||
#### 阶段四:用户查看试卷列表
|
||||
|
||||
- **接口**:`GET /exam/my/papers`
|
||||
- **查询条件**:`user_id = 当前用户 AND status != revoked`
|
||||
|
||||
#### 阶段五:用户查看试卷内容
|
||||
|
||||
- **接口**:`GET /exam/paper/{paperId}`
|
||||
- **验证**:确保用户有该试卷的答题权限(检查ExamRecord存在)
|
||||
|
||||
#### 阶段六:用户开始考试
|
||||
|
||||
- **接口**:`POST /exam/record/{recordId}/start`
|
||||
- **状态变更**:`not_started` → `in_progress`
|
||||
- **记录**:`start_time`、`last_active_time`
|
||||
|
||||
#### 阶段七:用户保存答案
|
||||
|
||||
- **接口**:`PUT /exam/record/{recordId}/save`
|
||||
- **操作**:将答案JSON序列化后存入`answers`字段
|
||||
|
||||
#### 阶段八:用户提交试卷
|
||||
|
||||
- **接口**:`POST /exam/record/{recordId}/submit`
|
||||
- **数据流向**:
|
||||
```
|
||||
1. 解析用户答案 → 调用AI批阅接口
|
||||
|
||||
2. 保存到UserAnswer表(每题一条记录)
|
||||
user_id, paper_id, question_id, score, is_correct, feedback
|
||||
|
||||
3. 更新ExamRecord
|
||||
status → submitted
|
||||
total_score → AI返回的总分
|
||||
submit_time / graded_time → 当前时间
|
||||
time_spent → 答题耗时(秒)
|
||||
```
|
||||
|
||||
#### 阶段九:用户查看成绩
|
||||
|
||||
- **接口**:`GET /exam/record/{recordId}/result`
|
||||
- **数据来源**:ExamRecord(总分、状态)+ UserAnswer(每题详情)
|
||||
|
||||
### 四、表关系图
|
||||
|
||||
```
|
||||
exam_paper (试卷表)
|
||||
│
|
||||
├── 1 : 1 → exam_assignment (分配表)
|
||||
│ │
|
||||
│ └── 1 : N → exam_record (记录表)
|
||||
│ │
|
||||
│ └── 1 : N → user_answer (答题记录表)
|
||||
│
|
||||
└── 1 : N → question (题目表) via question_ids
|
||||
```
|
||||
|
||||
### 五、状态流转
|
||||
|
||||
| 表 | 状态字段 | 状态值 | 说明 |
|
||||
| :--------------- | :----- | :----------- | :--- |
|
||||
| exam\_paper | status | draft | 草稿状态 |
|
||||
| <br /> | <br /> | published | 已发布 |
|
||||
| exam\_assignment | status | active | 有效分配 |
|
||||
| <br /> | <br /> | revoked | 已撤销 |
|
||||
| exam\_record | status | not\_started | 未开始 |
|
||||
| <br /> | <br /> | in\_progress | 进行中 |
|
||||
| <br /> | <br /> | submitted | 已提交 |
|
||||
| <br /> | <br /> | revoked | 已撤销 |
|
||||
|
||||
Reference in New Issue
Block a user