第二课堂管理系统
创建于 2025 年 3 月 19 日
项目介绍
第二课堂管理系统是基于若依 RuoYi 后台管理框架二次开发的课外活动管理平台,业务代码集中在 com.ruoyi.app 包下,前端为若依标准 ruoyi-ui(Vue 2 + Element UI)并新增 views/app 业务页面。系统以”活动—报名—学分”为主线:教师发布课外活动,管理员审核活动,学生在”活动广场”浏览并报名,管理员审核报名记录,报名通过后按活动关联的学分规则自动累计学分,最终由”我的学分”页面汇总展示并可导出成绩单。数据层面由 app_activity(活动)、app_activity_reg(报名)、app_credit_rules(学分规则)、app_credits(学分)、app_student(学生)、app_teacher(教师)六张业务表支撑,学生与教师通过 user_id 挂接若依 sys_user 系统用户表。
项目在标准 CRUD 之外实现了几处扎实的业务逻辑:报名接口 submitAppActivityReg 对活动人数上限与重复报名做了显式校验;学分不落中间账本,而是通过 MyBatis-Plus-Join 三表联查(报名 → 活动 → 规则)动态聚合 points 得出,天然与报名审核状态保持一致;首页统计大屏(BigScreenController)则提供学生/教师/活动/总学分计数、活动分类分布与近 12 个月活动、报名、学分趋势共五组统计接口。
项目架构
项目采用若依经典的前后端分离单体结构:
- 后端
20250319-第二课堂管理系统-api:Spring Boot 2.5.15 + Java 1.8,持久层使用 MyBatis-Plus 3.5.4 并在其基础上引入 mybatis-plus-join,通过MPJLambdaWrapper完成多表联查(学生列表联查sys_user、学分聚合联查活动与规则);安全框架为 Spring Security + JWT,配以 Druid 连接池、PageHelper 分页、POI Excel 导出与 Quartz 定时任务,代码生成器生成的 CRUD 之上手写了报名、审核与大屏统计等业务逻辑。 - 前端
20250319-第二课堂管理系统-web:Vue 2.6.12 + Element UI 2.15.14 + ECharts 5.4.0,src/api/app下按模块封装activity.js、reg.js、student.js、teacher.js、rules.js、credits.js、bigScreen.js接口;业务页面按”业务中心”(活动信息、报名管理、学分规则、学分管理)与面向学生的”我的活动 / 活动广场 / 我的学分”顶层菜单组织。 - 数据库
20250319.sql:内置完整建表语句、菜单权限(sys_menu2000 段)与”活动分类”字典(日常活动 / 周末活动),导入即可运行。
核心业务流为:教师/管理员发布活动 → 管理员审核活动(status 0/1/2)→ 学生在活动广场报名(校验名额与重复)→ 管理员审核报名 → 按活动关联的规则 points 累计学分 → 大屏统计展示。
核心功能
1. 学生与教师管理
app_student / app_teacher 通过 user_id 关联若依系统用户。新增学生时(AppStudentServiceImpl.insertAppStudent)会同步创建 sys_user 账号、加密密码、绑定角色(roleId=100)并记录身份证号 id_card,列表通过 MPJLambdaWrapper 联查 sys_user 展示用户名、昵称、邮箱、手机号等信息,实现业务档案与登录账号的一体化管理。
2. 活动发布与审核
活动表 app_activity 维护标题、描述、分类(字典 app_activity_category)、起止时间、地点、最大人数 max_count 与学分规则 rule_id,状态 0 待审核 / 1 通过 / 2 拒绝。AppActivityController 提供标准增删改查与导出,audit 接口支持管理员对活动进行审核流转。
3. 活动广场与报名
activity/center.vue 以卡片流展示已审核通过的活动:实时报名人数(currCount)驱动进度条与”已满/可报名”状态角标,满员时按钮自动变为”名额已满”。报名核心逻辑在 submitAppActivityReg:先校验通过人数是否达到 max_count(“已经满了,不能报名了!”),再校验当前用户是否存在待审核或已通过的报名(“不能重复报名,等待审核!”),通过后以当前登录用户写入一条待审核报名记录。
4. 报名审核与学分累计
reg.vue 为管理员提供报名记录审核(通过/拒绝),me.vue 为学生展示本人报名记录。学分不单独记账:totalForStudent 与 listForStudent 通过 MPJLambdaWrapper 将报名表左联活动表、再左联学分规则表,仅统计状态为”通过”的报名,reduce(BigDecimal::add) 聚合 points 得到学生总学分;score/me.vue 展示”我的学分”明细(活动、规则名称、规则学分、状态),并支持导出 Excel 成绩单。学分规则由 app_credit_rules 维护(规则名称、描述、学分值),活动发布时选择关联规则,学分值调整即可影响后续累计。
5. 数据统计大屏
BigScreenController(/system/big-screen/*)提供五组统计:总览计数(学生、教师、活动数及按报名聚合的总学分)、活动分类分布(遍历字典统计各类活动数)、近 12 个月活动创建趋势、报名趋势与学分累计趋势(DATE_FORMAT(create_time, '%Y-%m') 按月分组)。前端 views/index.vue 使用 ECharts 渲染活动类型环形图与三组渐变柱状/折线图,实现首页数据看板。
功能截图
暂无运行截图。
快速上手
- 新建 MySQL 数据库并导入
20250319.sql(含全部业务表、菜单权限与活动分类字典,已带演示数据); - 后端:调整
application.yml数据库连接与 Redis 配置,执行ry.sh(Linux/Mac)或ry.bat(Windows)启动,默认端口 8080; - 前端:
cd 20250319-第二课堂管理系统-web后执行npm install与npm run dev,默认代理至后端 8080 端口; - 使用系统内置 admin 账号登录:admin 拥有全部权限,可在”业务中心”维护活动、审核报名、配置学分规则;学生/教师账号由人员管理创建后,可体验活动广场报名、“我的活动”与”我的学分”流程;
- 登录后首页即为统计大屏,可查看总览计数、活动分类分布与近 12 个月活动/报名/学分趋势。
总结
作为若依框架的典型业务改造项目,第二课堂管理系统的价值在于把”课外活动 + 学分”这条业务主线落得完整而克制:没有为学分单独维护冗余账本,而是利用 mybatis-plus-join 的联查能力从报名审核状态实时推导学分,数据一致性天然保证;报名接口对名额上限与重复报名的显式校验、活动广场的实时进度展示,都是贴近真实校园场景的细节。对于希望学习若依 CRUD 之外如何组织多表业务、审核流与统计大屏的开发者,这份代码是一个相当清爽的参考样本。