课程思政管理系统
创建于 2025 年 4 月 11 日
项目介绍
课程思政管理系统是基于若依 RuoYi-Vue 3.8.9 脚手架二次开发的思政教育管理平台,目标是让教师能维护思政课程与多媒体资源、组织考试与问卷,让学生能在线看课、记笔记、参加测验。项目分为 20250411-课程思政管理系统-api(后端,端口 8084)与 20250411-课程思政管理系统-web(前端)两个工程,配一份完整的 MySQL 8.0 数据库脚本 20250411-kecheng.sql,含 15 张业务表与全套若依基础表。
系统在若依标准菜单之外新增”课程思政”一级目录,下设学生菜单(课程列表、考试、问卷答题)与教师功能(课程信息、课程章节、考试题目、问卷管理、课程分类、学习进度列表)两组业务菜单,由 sys_role 中的 teacher(teacher01)与 student 角色区分权限。业务表统一以 sz_ 前缀命名:sz_courses、sz_courses_chapter、sz_courses_resources、sz_exams、sz_exam_questions、sz_exam_options、sz_exam_student_answers、sz_surveys、sz_survey_questions、sz_survey_answers、sz_learning_progress、sz_student_notes、sz_download_record、sz_ai_log,加上课程分类表,覆盖”资源建设—在线学习—测评反馈”的完整闭环。
项目架构
后端在若依标准分层基础上,业务模块直接以 Easy Query 2.5.17(com.easy-query:sql-api-proxy)的 EasyEntityQuery 代理查询代替传统 Service 层:每个 Controller 内部通过 buildQuery() 拼接动态条件,配合 leftJoin + Select.of 一次性投影关联字段。例如 SzCoursesController 查询课程列表时同时关联 SysUser 取教师昵称、关联 SzCourseCategories 取分类名,SzLearningProgressController 则关联章节表带出 videoDuration 用于前端计算完成率。所有列表接口沿用若依 startPage() 分页与 TableDataInfo 响应结构,@PreAuthorize("@ss.hasPermi('app:xxx:list')") 做权限控制,@Log 记录操作日志;批量删除统一 disableLogicDelete().allowDeleteStatement(true) 走物理删除。
比较有辨识度的技术点是视频时长解析:SzCoursesChapterController 新增/修改章节时,若填写了 videoPath,会用 ws.schild.jave.MultimediaObject 读取服务器本地视频文件的元数据(media.getInfo().getDuration()/1000)自动写入 videoDuration 字段——学生端据此展示”3:24”式时长并计算观看完成度。前端是标准若依 Vue 2 结构(vue-cli 4.4.6 + Element UI 2.15.14),/api 前缀经 devServer 代理转发至 8084,课程详情页使用原生 <video> 标签播放,笔记编辑复用 Quill 富文本 Editor 组件,另带 ECharts 5.4 的 dashboard 图表示例。
核心功能
- 课程与思政资源管理:教师维护课程分类(
teacher/categories)、课程信息(teacher/courses,支持按教师、年级、分类筛选,课程名带唯一索引),并进入coursesChapter.vue按pid维护树形章节;章节可关联视频路径,上传后自动解析时长,学生每次下载视频都会通过SzDownloadRecordController记录下载行为并累加章节downloadCount。思政资源表sz_courses_resources以枚举区分text/image/video/audio四种类型并支持私有可见性,配套完整的 CRUD 与 Excel 导出。 - 在线学习与进度追踪:学生端
student/courses/index.vue以卡片网格展示课程,进入detail.vue后左侧视频播放、右侧章节树(含下载次数与时长)。播放器内置两条防作弊逻辑:handleSeeking检测到快进超过已播放位置 5 秒会强制回退;startHeartbeat每 30 秒上报一次updateProgress接口,后端只在观看时长单调递增时更新sz_learning_progress。课程进度由progress/{courseId}接口计算——已看时长总和除以全部章节视频时长总和得出百分比,低于 30% 时弹窗提醒并自动调用若依公告接口发布”课程学习提醒”。 - 在线考试与自动判分:教师端
exams/index.vue以”考试 → 题目 → 选项”三级级联编辑组卷,题目支持单选(single_choice)、多选(multiple_choice)、判断(judgment)三种题型,每题设分值并保存successOption正确答案;学生端kaoshi/index.vue按题型渲染单选/复选/判断控件,提交后SzExamsController.submit()先清理旧答卷再写入sz_exam_student_answers,随后一条leftJoin让successOption与selectedOption相等匹配,sumOrNull(score)即时返回得分——从操作日志可见该接口经过了”字段缺失、主键无默认值”等多次 SQL 报错迭代后才跑通。 - 问卷测试中心:教师端
surveys/index.vue创建问卷(如”性格测试”),问题以 JSON 字符串内嵌选项,getInfoForStudent供学生端按人拉取历史作答;学生端wenjuan/index.vue提供问卷卡片列表与el-steps分步答题交互,带进度条与”全部答完才可提交”校验,提交后答案落库。后端注释表明问卷结果将作为个性化学习路径规划(外向/内向、视觉/听觉型)的输入参数。 - 学习笔记与智能评估:学生在章节上写富文本笔记(
SzStudentNotesController按resourceId + studentId唯一化,支持公开/私有切换);xuexi/index.vue学习进度页在表格之上提供”总学习资源数、总学习时长、平均完成率”三张统计卡片;SzEvaluateController.learnInfo聚合当前学生的观看总时长、下载次数与各场考试成绩,构成”智能评估与反馈”模块的数据出口。此外KimiUtil+SzStudentController.ai封装了调用 kimi.moonshot.cn 流式对话接口的能力,问答记录写入sz_ai_log并在前端预留了getAIResponseAPI 与日志查询接口。
功能截图
暂无运行截图。
快速上手
项目按若依标准三件套部署:数据库使用 MySQL 8,新建库后导入 20250411-kecheng.sql(库名建议保持 20250411-kecheng,application-druid.yml 默认 root/123456);后端以 Maven 导入 20250411-课程思政管理系统-api,确认 application.yml(端口 8084、Redis 6379)与数据源配置后运行 RuoYiApplication;前端进入 20250411-课程思政管理系统-web 执行 npm install 与 npm run serve,devServer 已将 /api 代理到 8084。系统内置超级管理员 admin(若依默认密码),并预置 teacher(老师)与 student(学生)两个业务角色及对应账号,可直接体验教师组卷发课、学生看课考试的完整流程。
总结
项目把”思政资源建设 → 学生在线学习 → 考试问卷测评 → 学习数据评估”整条业务链落到了若依脚手架之上,最大的亮点在于两处:一是用 Easy Query 的代理式链式查询替代传统 Service 层样板代码,leftJoin 投影关联字段、聚合判分等操作都收敛在 Controller 内,代码量显著减少;二是学习行为数据的闭环设计——防快进、心跳上报、时长单调更新、进度百分比计算层层配合,配合下载计数与笔记公开/私有策略,让”学没学、学了多少”有据可查。同时也要看到项目的实验性质:AI 对话的 token 硬编码在源码中、部分页面仍保留代码生成器产出的原始列注释、评估接口尚未对接前端页面,属于”核心流程可用、智能模块待续”的典型课程设计完成度,其 ORM 选型与学习进度追踪思路值得参考。