论文管理系统
创建于 2025 年 6 月 6 日
项目介绍
论文管理系统是基于若依 RuoYi 3.8.7 后台管理框架二次开发的毕业论文选题与评审系统,业务代码集中在 ruoyi-admin 的 com.ruoyi.paper 包下,前端沿用若依标准 ruoyi-ui(Vue 2 + Element UI)并新增 views/paper 业务页面。系统覆盖论文工作的完整生命周期:管理员配置师生名单 → 学生填报导师志愿 → 志愿达成自动匹配师生 → 学生提交论文 → 教师评审给出结论。前端管理页顶部甚至直接以提示标签写明了使用流程:“1.设置人员 2.学生志愿,数量达成后 3.提交论文 4.审批!”。
系统围绕三种角色展开:学生(roleKey student)、教师(teacher)与教研室管理员(school_admin),外加若依超级管理员 admin。数据库侧新增五张 paper_ 业务表:paper_school(学校信息)、paper_student(学生档案)、paper_teacher(教师档案与名额)、paper_student_wish(学生志愿)、paper_student_paper(学生论文与评审记录)。种子数据预置 student01、student02 与 teacher01 等账号,导入 SQL 后即可完整走通”选题—提交—评审”流程。
项目架构
项目为若依标准多模块 Maven 工程(ruoyi-admin / ruoyi-common / ruoyi-framework / ruoyi-system / ruoyi-generator / ruoyi-quartz),后端 Spring Boot + Java 8,持久层使用 MyBatis-Plus(mybatis-plus-boot-starter,代码中大量使用 LambdaQueryWrapper / LambdaUpdateWrapper 链式查询),叠加若依自带 Spring Security + JWT 认证与 Redis 缓存。业务代码由若依代码生成器生成 CRUD 骨架后手工改造:实体以 Lombok @Data 注解简化,Mapper 接口继承 BaseMapper,Mapper XML 仅保留空壳,查询条件全部在 Service 层用 LambdaQueryWrapper 动态拼装(如 PaperStudentPaperServiceImpl.buildQueryWrapper 对学生账号、教师账号、论文内容做模糊与等值过滤)。
数据库脚本 sql/20250606-ry-vue.sql 同时包含若依基础库、gen_table 生成配置与五张业务表定义。业务表设计克制而契合场景:paper_teacher 用 wish_count(默认 2)表达教师可带学生的名额上限;paper_student_wish 用 is_ok(‘0’/‘1’)标记志愿是否达成;paper_student_paper 除学生、教师账号外,还承载 paper_content(论文内容)、audit_message(审核意见)、is_pass(是否通过)与 audit_time(审核时间)四个评审字段。前端在 views/paper 下对应六个页面:meta(人员配置)、school(学校信息)、student(学生管理)、teacher(教师管理)、wish(学生志愿)、studentPaper(论文提交与审核)。
核心功能
- 人员配置(
PaperMetaController+views/paper/meta/index.vue):studentOption/teacherOption按角色 id 100(学生)、101(教师)从sys_user中筛选系统用户;“设置老师和学生”对话框多选后调用/paper/meta/save全量重建——先删除paper_student、paper_teacher、paper_student_wish、paper_student_paper四表旧数据,再重新插入名单。管理页同时提供”手动指定老师”:/paper/meta/set为学生直接绑定教师,若该学生已有指导教师则抛出”该学生已有指导老师了,不能重复设置!”。 - 导师志愿双选(
PaperStudentWishController+views/paper/wish/index.vue):学生点击”设置”多选教师志愿并调用/paper/studentWish/save。保存逻辑是一段真实业务闭环:先校验学生是否已有导师(有则拒绝”你已经有辅导老师了,不能再选了!”),然后清空该学生旧志愿并逐条插入;插入后实时统计该教师的志愿总数,一旦达到其wish_count名额,就把志愿过该教师的所有学生批量写入paper_student_paper(论文表),并把该教师的全部志愿更新为”达成”(is_ok='1')。教师列表接口teacherOption只返回”未满员”教师(wishCount > currentCount),currentCount由PaperTeacherServiceImpl通过统计paper_student_wish数量动态填充。 - 论文提交与评审(
PaperStudentPaperController+views/paper/studentPaper/index.vue):学生端在列表中点击”提交论文”,弹出对话框使用富文本编辑器(若依Editor组件)填写论文内容后保存到paper_content;教师端点击”审核”,对话框以只读富文本展示论文原文,教师通过下拉选择”通过/拒绝”(is_pass为 ‘1’/‘0’)并填写审核意见(audit_message),提交时由PaperStudentPaperServiceImpl.updatePaperStudentPaper在is_pass非空时自动记录audit_time审核时间。列表页用标签(el-tag)将is_pass渲染为绿色”通过”或红色”未通过”,并展示审核时间与意见;按钮则通过v-has-role指令按角色显隐——教师只见”审核”、学生只见”提交论文”。 - 角色数据隔离:每个列表接口(
/paper/studentWish/list、/paper/studentPaper/list)都内建数据过滤——非管理员、非教研室管理员时,教师自动追加teacherUserName=当前用户条件、学生自动追加studentUserName=当前用户条件,保证各角色只能看到与自己相关的记录。 - 学校信息管理(
PaperSchoolController):学校名称、地点、电话的增删改查,getOneSchool取第一条记录用于页面展示,配套若依 Excel 导入导出(ExcelUtil+@Excel注解)。
功能截图
暂无运行截图。
快速上手
项目为若依标准多模块 Maven 工程。后端:修改 ruoyi-admin/src/main/resources/application-druid.yml 的 MySQL 连接,依次执行 sql/ry_20240529.sql(若依基础库)与 sql/20250606-ry-vue.sql(业务表与种子数据),启动 RuoYiApplication 即可。前端:进入 ruoyi-ui 执行 npm install 与 npm run dev,通过代理访问后端 8080 端口;使用 admin/admin123 登录后,以管理员在”人员配置”页选中学生与教师并保存,随后切换学生账号(如 student01)填报志愿、教师账号(如 teacher01)审核论文,即可体验完整流程。
总结
这个项目是”若依框架快速落地业务流程”的典型示范,最有学习价值的是志愿达成驱动的自动匹配:它没有引入复杂的工作流引擎,仅靠 wish_count 名额字段、一次志愿数统计与批量插入,就在 PaperStudentWishController.save 的几十行代码里完成了”学生选导师—名额满自动匹配—志愿标记达成”的完整业务闭环,配合 teacherOption 的满员过滤,天然规避了超额分配问题。评审模块同样简洁——富文本提交 + 通过/拒绝 + 意见与时间戳,辅以列表接口内嵌的角色数据隔离,把一个多角色协作场景收敛为两张表、两个页面的清晰实现。整体分层规范、注释齐全,适合作为若依二次开发入门与毕业论文管理类课程设计的参考范本。