# 知识库管理系统 - 出题做题生成流程 ## 文档信息 | 项目 | 内容 | | -------- | ----------- | | **文档名称** | 出题做题生成流程示意图 | | **版本号** | 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 答题规则 | 规则 | 说明 | | ---- | ------------ | | 答题时间 | 每道题默认答题时间不限制 | | 答案保存 | 支持自动保存和手动保存 | | 提交限制 | 提交后不可修改答案 | | 错题收集 | 自动收集错题到错题本 | *** **文档结束**
让我先查看考试相关的实体类和数据库表结构: 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 | 草稿状态 | |
|
| published | 已发布 | | exam\_assignment | status | active | 有效分配 | |
|
| revoked | 已撤销 | | exam\_record | status | not\_started | 未开始 | |
|
| in\_progress | 进行中 | |
|
| submitted | 已提交 | |
|
| revoked | 已撤销 |