Files
my-springboot-project/文件/出题做题生成流程示意图.md
2026-06-03 12:43:48 +08:00

28 KiB
Raw Blame History

知识库管理系统 - 出题做题生成流程

文档信息

项目 内容
文档名称 出题做题生成流程示意图
版本号 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_idUUID唯一标识
    • question_ids题目ID列表JSON格式
    • statusdraft

阶段三:管理员发布试卷

  • 接口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_startedin_progress
  • 记录start_timelast_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 已撤销