这是图片

项目名称

基于 Spring Boot + Vue 3 的校园考试与权限管理系统


一、项目概述

本系统面向学校/教育机构,提供完整的用户与权限管理、学生信息管理、题库管理、练习/模拟/正式考试流程、成绩统计与导出、教师阅卷、以及利用本地大模型(本地部署的 LLM)进行单选题与填空题自动批阅的能力。系统目标是易用、安全、可扩展,便于日常教学考试管理与成绩分析。


二、主要功能模块(高层)

  1. 身份与权限管理(RBAC)

    • 角色:学生、教师、管理员、领导/部门
    • 权限管理:细粒度权限点管理(增删改查、批量导入、阅卷、发布考试等)
  2. 用户与学生管理

    • 学生信息增删改查、按班级/年级/学号/姓名查询
    • 批量上传(CSV/Excel)并校验(重复/缺失/数据格式)
  3. 考试与题库管理

    • 题型支持:单选、多选、判断、填空(可扩展:主观题)
    • 题库批量导入(CSV/Excel/JSON)并校验
    • 题目标签、科目、难度、分数配置
  4. 刷题/模拟/考试功能

    • 刷题(针对题库练习)与模拟(随机试卷/组卷规则)
    • 正式考试(在线计时、题目随机化、试卷发布/下发)
  5. 阅卷与批改

    • 自动批改:单选/多选/判断题 + 基于本地大模型的填空题(可配置阈值与人工复核)
    • 教师手动批阅主观题并留评语
  6. 成绩与分析

    • 单人成绩查看、班级/年级排名、分数分布、错题统计
    • 支持按班级/年级快速导出 Excel/CSV(可自定义字段)
  7. 日志/审计与安全

    • 操作日志、考试完整性(防作弊基本措施)
  8. 管理后台与接口文档(Swagger)


三、技术栈推荐

后端

  • Java 17+
  • Spring Boot 3.x
  • Spring Security(JWT 或 OAuth2 资源服务器)用于认证/授权
  • Spring Data JPA(或 MyBatis-Plus)用于 ORM
  • 数据库:PostgreSQL(推荐),可选 MySQL
  • 文件存储:本地文件系统或对象存储(MinIO)用于保存上传文件/试卷答题日志
  • 缓存:Redis(会话、频率限制、考试临时状态)
  • 异步任务:Spring Task / RabbitMQ(用于批量导入、成绩批量统计、LLM 批阅队列)
  • 文档:Springdoc OpenAPI(自动生成 Swagger)

前端

  • Vue 3 + Vite
  • TypeScript
  • Pinia(状态管理)
  • Vue Router
  • Element Plus(或 Ant Design Vue)作为 UI 组件库
  • Axios(HTTP 客户端)
  • xlsx / sheetjs(Excel 导入导出)

本地大模型集成(快速批阅)

  • 本地推理服务(例如:Llama.cpp, Ollama 本地服务,或其他兼容的本地推理服务)
  • 后端通过 gRPC/HTTP 调用本地模型推理服务
  • 使用微调或 prompt-engineering 来控制评分规则与相似度阈值

辅助/DevOps

  • Docker / Docker Compose(容器化)
  • CI:GitHub Actions / GitLab CI
  • 日志:ELK 或 Loki + Grafana(可选)
  • 监控:Prometheus & Grafana(可选)

四、数据库设计(核心表,含字段及说明)

以下为主要表的建议字段(已省略常见的 create_time/update_time、deleted_flag 等审计字段,请按需添加)

1. users(系统用户)

  • id (bigint, PK)
  • username (varchar, 唯一)
  • password_hash (varchar)
  • real_name (varchar)
  • email (varchar)
  • mobile (varchar)
  • role_id (bigint) — 默认角色或主角色
  • status (int) — 状态:正常/禁用
  • last_login (timestamp)

2. roles(角色)

  • id (bigint, PK)
  • name (varchar)
  • code (varchar) — 如 ROLE_ADMIN/ROLE_TEACHER
  • description (text)

3. permissions(权限点)

  • id (bigint, PK)
  • name (varchar)
  • code (varchar) — 如 student:import, exam:publish
  • description (text)

4. role_permission(角色-权限关联)

  • id
  • role_id
  • permission_id

5. user_role(用户-角色多对多,可选)

  • id
  • user_id
  • role_id

6. students(学生信息)

  • id
  • student_no (varchar, 唯一)
  • name
  • gender
  • birthday (date)
  • class_id (FK)
  • grade (int)
  • address
  • contact_parent
  • admission_year (int)

7. classes(班级)

  • id
  • name
  • grade (int)
  • major (varchar)

8. teachers(教师信息,可合并 users 表并加 role)

  • id
  • teacher_no
  • name
  • department_id

9. departments(组织/领导部门)

  • id
  • name
  • parent_id

10. subjects(科目)

  • id
  • name
  • code

11. question_bank(题库主表/题目表)

  • id
  • title (text)
  • type (enum: SINGLE,MULTI,TRUE_FALSE,BLANK,ESSAY)
  • options (json) — 对单选/多选保存选项
  • answer (text/json) — 标准答案
  • score (decimal)
  • difficulty (int)
  • subject_id
  • tags (json)
  • created_by (user_id)

12. question_import_job(题库导入任务)

  • id
  • file_path
  • status (PENDING/PROCESSING/FAILED/SUCCESS)
  • total_count
  • success_count
  • fail_count
  • error_log (text)

13. exam_paper(试卷模板/考次)

  • id
  • name
  • description
  • start_time
  • end_time
  • duration_minutes
  • total_score
  • shuffle_questions (bool)
  • publish_status (DRAFT/PUBLISHED/ENDED)
  • grade_scope (班级/年级/指定学生)

14. exam_paper_question(试卷-题目关联)

  • id
  • exam_paper_id
  • question_id
  • seq_no
  • score

15. exam_session(学生参加的考试记录/答卷实例)

  • id
  • exam_paper_id
  • user_id (student)
  • start_time
  • end_time
  • status (IN_PROGRESS/SUBMITTED/GRADED)
  • total_score
  • metadata (json) — 如 IP、设备、试题顺序等

16. student_answer(学生答案)

  • id
  • exam_session_id
  • question_id
  • answer (text/json)
  • score_awarded (decimal, nullable)
  • is_auto_graded (bool)
  • grader_id (teacher_id nullable)
  • graded_at (timestamp)
  • remark (text)

17. grading_job(异步批阅任务)

  • id
  • exam_session_id
  • status (QUEUED/PROCESSING/COMPLETED/FAILED)
  • engine (AUTO/LLM/HUMAN)
  • result_summary (json)

18. score_snapshot(用于快速统计的成绩快照表,按班/年级)

  • id
  • exam_session_id
  • student_id
  • class_id
  • grade
  • total_score
  • rank_in_class
  • rank_in_grade

19. upload_jobs(通用批量上传任务表)

  • id
  • type (STUDENT/QUESTION)
  • file_path
  • status
  • errors (text)

五、API 接口列表(按模块列出主要接口,示例请求/响应要点)

所有接口建议统一前缀 /api/v1,并使用标准的 HTTP 状态码与错误格式。

鉴权与用户

  • POST /api/v1/auth/login — 登录(返回 JWT token、refresh token)

    • body: { username, password }
    • resp: { accessToken, refreshToken, user: {id, username, roles}}
  • POST /api/v1/auth/refresh — 刷新 token

  • GET /api/v1/users/me — 获取当前用户信息

  • POST /api/v1/users — 新建用户(管理员)

  • GET /api/v1/users — 用户列表(分页+筛选)

  • PUT /api/v1/users/{id} — 更新用户

  • DELETE /api/v1/users/{id} — 删除/禁用

角色与权限

  • GET /api/v1/roles — 列表
  • POST /api/v1/roles — 新建角色
  • PUT /api/v1/roles/{id} — 更新(含权限)
  • GET /api/v1/permissions — 列出所有权限点

学生与班级管理

  • POST /api/v1/students — 新增学生

  • POST /api/v1/students/import — 批量导入学生(multipart file)

    • 返回导入任务 id
  • GET /api/v1/students — 列表(支持按班级、年级、学号、姓名过滤)

  • GET /api/v1/students/{id}

  • PUT /api/v1/students/{id}

  • DELETE /api/v1/students/{id}

  • GET /api/v1/classes — 班级列表

  • POST /api/v1/classes、PUT /api/v1/classes/{id}、DELETE /api/v1/classes/{id}

题库管理

  • POST /api/v1/questions — 新建题目

  • POST /api/v1/questions/import — 批量导入题目(multipart file),返回 job id

  • GET /api/v1/questions — 题目分页查询(按科目、标签、难度)

  • GET /api/v1/questions/{id}

  • PUT /api/v1/questions/{id}

  • DELETE /api/v1/questions/{id}

  • POST /api/v1/questions/{id}/preview — 试题预览/渲染(用于前端)

组卷与考试发布

  • POST /api/v1/exams — 创建试卷/考试(含题目列表或组卷规则)
  • PUT /api/v1/exams/{id} — 编辑
  • POST /api/v1/exams/{id}/publish — 发布(学生可见)
  • POST /api/v1/exams/{id}/unpublish — 下线
  • GET /api/v1/exams — 列表
  • GET /api/v1/exams/{id} — 详情(含题目顺序)

学生考试流程

  • POST /api/v1/exams/{id}/start — 学生开始考试(创建 exam_session)
  • POST /api/v1/exams/{id}/submit — 学生交卷(提交 answers)
  • GET /api/v1/sessions/{sessionId} — 获取答卷状态/题目/剩余时间

答案与阅卷

  • POST /api/v1/sessions/{sessionId}/answers — 保存临时答案(自动保存)
  • POST /api/v1/sessions/{sessionId}/submit — 学生提交(重复说明)
  • GET /api/v1/sessions/{sessionId}/answers — 获取学生答案
  • POST /api/v1/grading/{sessionId}/queue — 发起自动/LLM 批阅(异步)
  • GET /api/v1/grading/{jobId} — 批阅任务状态与结果
  • POST /api/v1/grading/{sessionId}/manual — 教师提交人工阅卷分数与评语

成绩与统计

  • GET /api/v1/exams/{id}/results — 本次考试成绩列表(分页、可导出)
  • GET /api/v1/exams/{id}/results/export?scope=class|grade|all&classId=xxx — 导出 Excel
  • GET /api/v1/students/{studentId}/scores — 学生成绩历史
  • GET /api/v1/exams/{id}/analysis — 分数分布、易错题、题目命中率

文件/上传任务

  • GET /api/v1/imports/{jobId}/status — 查询导入任务状态
  • GET /api/v1/files/{fileId} — 下载/查看上传文件

六、关键设计/实现细节与建议

  1. 鉴权设计:采用 JWT 做前后端分离鉴权;后端接口统一校验 token 与权限点(注解 + 方法拦截)。管理员可在后台分配权限点到角色。

  2. 批量导入实现

    • 前端上传文件 -> 后端保存到临时存储 -> 入库由异步任务消费(RabbitMQ 或 Spring Async)
    • 导入过程中记录校验错误并生成错误报告供管理员下载
    • 对大文件支持分片上传(若需要)
  3. 考试实时性与防作弊

    • 考试期间采用 WebSocket/Server-Sent Events 保持客户端与服务端心跳,用于检测断线、同步倒计时
    • 保存客户端答题快照(防止断线丢失)
    • 可选:限制 IP、禁止复制粘贴、截图检测(浏览器插件限制)、监考端记录异常行为
  4. 自动批阅(本地大模型)

    • 仅用于客观题与较短的填空题。流程示例:

      1. 后端将待批问题与标准答案、评分规则拼装为 prompt。
      2. 将 student answer 发送给本地 LLM 推理服务,模型返回打分与置信度说明。
      3. 若置信度 >= 阈值(可配置),自动采用模型分数;否则标记为人工复核。
    • 对填空题,先做 tokenizer/简单归一化(大小写/全半角/数字格式),再送模型判断相似度。可使用向量相似度(Faiss)提高判断准确性。

    • 结果应该保存为 grading_jobstudent_answer 的 score_awarded 字段,并保留模型返回的 result_summary

  5. 并发与扩展性

    • 使用 Redis 做分布式锁和缓存考试临时状态
    • 批阅任务与数据统计做异步队列,避免写堵塞主请求线程
  6. 导出表格

    • 后端生成 Excel(使用 Apache POI 或 easyexcel),支持导出字段模板选择、按班级/年级聚合
    • 若数据量大,可先生成异步导出任务并返回下载链接
  7. 数据权限

    • 角色细化:例如教师只能查看自己任课班级的学生成绩;领导可查看所在部门/年级范围
    • SQL 层/服务层加入数据权限过滤
  8. 日志审计:记录关键操作:试卷发布、分数变更、导入任务、登录异常等


七、开发里程碑(建议的迭代顺序)

  1. 项目初始化:代码仓库、基本框架、用户鉴权、数据库连接、基本 CRUD 框架
  2. 用户/角色/权限模块 + 管理后台基础页面
  3. 学生/班级管理 + 批量学生导入
  4. 题库基本 CRUD + 题目导入/校验
  5. 组卷、考试流程(发布/考试/提交/保存答题快照)
  6. 基本自动评分(客观题)与成绩保存
  7. 教师阅卷界面(主观题人工评阅)
  8. LLM 批阅集成(本地推理服务) + 异常复核流程
  9. 成绩统计/导出/排名/分析功能
  10. 日志/监控/性能优化/安全审计

八、测试策略

  • 单元测试:Service 层、工具类、校验逻辑
  • 集成测试:Controller -> Service -> DB 流程(可用 Testcontainers)
  • E2E 测试:使用 Playwright 或 Cypress 测试关键用户流程(学生考试、教师阅卷)
  • 压力测试:模拟并发考试场景(大量学生同时提交)

九、可选增强项(未来迭代)

  • 题目智能解析:OCR 识别试题导入纸质题
  • 更复杂的防作弊(视频监考、行为分析)
  • AI 生成试题/组卷(基于 LLM 自动出题)
  • 移动端原生 App 或 PWA 支持

十、交付物(建议)

  • 源代码仓库(后端、前端、部署脚本)
  • 数据库建表 SQL 脚本与 ER 图
  • API 文档(OpenAPI/Swagger)
  • 部署文档(Docker Compose / Kubernetes YAML)
  • 测试报告与导出示例数据