基于SpringBoot+Vue前后端分离的在线教育平台项目

赠给有缘人,希望能帮助到你!也请不要吝惜你的大拇指,你的Star、点赞将是对我最大的鼓励与支持!

开源传送门:

演示DEMO传送门:

前言

本项目是笔者毕设作品,肝了一周多时间赶出来的,后台写得比较垃圾,前端界面自我感觉还行,但笔者前端只是打辅助的。总的参考价值因人而言。

  • 随心所欲,只为功能实现,没有规范,没有优化,不谈安全
  • Service层没有接口,实现直接返回Controller结果,因而造成代码大量耦合,拓展性极差;
  • MyBatis-Plus直接面向对象Dao操作,没有写SQL语句,业务逻辑全部使用JAVA代码完成;
  • 仍存在较多缺陷,但显示到的菜单功能基本都是完整的,除了支付功能。

关于项目演示:出于多种考虑,演示DEMO中关于修改的操作全部禁用。如果需要了解完整的项目演示效果,请本地测试运行项目,自行在配置文件配置阿里云OSS和VoD相关选项。

鸣谢:部分界面设计元素参考腾讯课堂与龙果学院。

项目介绍

基于SpringBoot+Vue前后端分离的在线教育平台项目,单体应用服务架构。

系统共设计三种角色:管理员、讲师和学员,三个角色分别对应一个操作端。也就是本系统1个后台项目,三个前端项目。管理员端没有引入角色和权限管理,只有一个角色。

已实现的功能列表展示:

管理员端:

  • 数据统计
  • 轮播图管理
  • 课程管理
    • 课程列表
    • 课程审核
    • 分类管理
  • 讲师管理
    • 讲师列表
    • 讲师审核
  • 学员管理
  • 用户管理
  • 订单管理

讲师端:

  • 发布课程
  • 课程管理
  • 评论管理
  • 消息接收

学员端(网站首页):

  • 登录注册

  • 分类与轮播图展示

  • 课程列表展示

  • 课程搜索(关键词、分类、讲师)

  • 课程详情(播放器、课程介绍、评论、讲师简介、订阅)

  • 订阅订单

  • 讲师入驻

技术选型

开发环境

  • 工具:IntelliJ IDEA
  • JDK 1.8
  • 数据库:MySQL 8.0.15
  • 项目构建:后端Maven、前端 webpack

后端

  • Web框架:Spring Boot
  • 字段校验:Spring Validation
  • 持久层:MyBatis-Plus
  • 接口文档:Swagger2
  • Lombok:请确保您的 IDE 安装了此插件
  • 缓存:Redis
  • 工具:Hutool
  • 资源存储:阿里云对象存储OSS
  • 课程视频点播:阿里云视频点播VoD

前端

数据库设计

ER图

数据库: online_edu,统一编码:utf8mb4

表格: acl_permission

索引:

名称类型属性备注
主索引idunique

字段:

名称类型默认值属性备注
idint(11) unsigned<auto_increment>菜单权限表
pidint(11) unsigned父级id
typetinyint(4) unsigned1菜单类型,0顶部菜单、1聚合菜单、2页面菜单、3接口
namevarchar(255)路由名称或接口名称
pathvarchar(255)菜单路径(以http开头时,视为打开外部链接) 或 请求接口的地址
componentvarchar(255)菜单组件,只有叶子菜单才可配置
metavarchar(1023)<空>菜单的route.meta配置项,json格式
admintinyint(1) unsigned00默认,1只有超级管理员才能使用
enabletinyint(1) unsigned1是否启用,0否1是
update_timedatetime<INSERT-TimeStamp>更新时间
create_timedatetime<INSERT-TimeStamp>创建时间

表格: acl_role

备注: 角色

索引:

名称类型属性备注
主索引idunique

字段:

名称类型默认值属性备注
idint(11) unsigned<auto_increment>角色id
namevarchar(31)角色名称
permission_idvarchar(2048)角色具有的权限ID串
enabletinyint(1)1是否启用,0否1是
update_timedatetime<INSERT-TimeStamp>更新时间
create_timedatetime<INSERT-TimeStamp>创建时间

表格: acl_user

备注: 管理员用户表

索引:

名称类型属性备注
主索引idunique
uk_usernameusernameunique

字段:

名称类型默认值属性备注
idint(11) unsigned<auto_increment>用户id
usernamevarchar(31)用户名
passwordvarchar(255)密码
nicknamevarchar(31)昵称
avatarvarchar(1023)用户头像
markvarchar(255)备注
signvarchar(255)用户签名
roleIdint(11) unsigned角色id
enabletinyint(1) unsigned1是否启用,0否1是
update_timedatetime<INSERT-TimeStamp>更新时间
create_timedatetime<INSERT-TimeStamp>创建时间

表格: edu_chapter

备注: 课程章节表

索引:

名称类型属性备注
主索引idunique

字段:

名称类型默认值属性备注
idint(11) unsigned<auto_increment>章节ID
course_idint(11) unsigned课程ID
titlevarchar(63)章节名称
sortint(11)0显示排序
update_timedatetime<INSERT-TimeStamp>更新时间
create_timedatetime<INSERT-TimeStamp>创建时间

表格: edu_chapter_tmp

备注: 课程章节临时表(用于存放二次修改的数据)

索引:

名称类型属性备注
主索引idunique
idx_idoid

字段:

名称类型默认值属性备注
idbigint(20) unsigned0主键
oidint(11) unsigned0原章节ID
course_idint(11) unsigned课程ID
titlevarchar(63)章节名称
sortint(11)0显示排序
update_timedatetime<INSERT-TimeStamp>更新时间
create_timedatetime<INSERT-TimeStamp>创建时间

表格: edu_comment

备注: 课程评论表

索引:

名称类型属性备注
主索引idunique
idx_course_idcourse_id
idx_member_idmember_id
idx_member_id_course_idmember_id, course_id
idx_teacher_idteacher_id

字段:

名称类型默认值属性备注
idint(11) unsigned<auto_increment>评论ID
course_idint(11) unsigned课程id
teacher_idint(11) unsigned讲师id
member_idint(11) unsigned会员id
contentvarchar(1023)评论内容
markdouble unsigned5评分(满分5.00)
statustinyint(1) unsigned<空>评论状态 0审核中 1通过
update_timedatetime<INSERT-TimeStamp>更新时间
create_timedatetime<INSERT-TimeStamp>创建时间

表格: edu_course

备注: 课程表

索引:

名称类型属性备注
主索引idunique

字段:

名称类型默认值属性备注
idint(11) unsigned<auto_increment>课程ID
teacher_idint(11) unsigned课程讲师ID
subject_idint(11) unsigned课程科目分类ID
titlevarchar(63)课程标题
pricedouble(10,2) unsigned0.00课程销售价格,设置为0则可免费观看
lesson_numint(11) unsigned0总课时
covervarchar(1023)utf8, utf8_general_ci课程封面图片路径
descriptiontext课程描述
buy_countint(11) unsigned0销售数量
view_countint(11) unsigned0浏览数量
sortint(11)0显示排序
enabletinyint(1)1上架下架,0下架 1上架
statustinyint(4)0课程状态,草稿 审核 发表
remarksvarchar(511)<空>备注
update_timedatetime<INSERT-TimeStamp>更新时间
create_timedatetime<INSERT-TimeStamp>创建时间

表格: edu_subject

备注: 课程科目分类表

索引:

名称类型属性备注
主索引idunique
idx_parent_idparent_id

字段:

名称类型默认值属性备注
idint(11) unsigned<auto_increment>课程类别ID
titlevarchar(15)类别名称
parent_idint(11) unsigned0父ID
sortint(11) unsigned0排序字段
enabletinyint(1) unsigned1是否启用,0否1是
update_timedatetime<INSERT-TimeStamp>更新时间
create_timedatetime<INSERT-TimeStamp>创建时间

表格: edu_teacher

备注: 讲师表

索引:

名称类型属性备注
主索引idunique
uk_mobilemobileunique
uk_namenameunique

字段:

名称类型默认值属性备注
idint(11) unsigned<auto_increment>讲师ID
mobilechar(11)手机号
emailvarchar(127)邮箱地址
passwordvarchar(255)密码
namevarchar(63)讲师姓名
introvarchar(1023)讲师简介
avatarvarchar(1023)讲师头像
resumevarchar(1023)讲师简历链接
divisiontinyint(4)80分成比例,0-100
sortint(11)0排序
enabletinyint(1) unsigned1是否启用,0否1是
statustinyint(4)0讲师状态:审核通过;审核不通过;待审核
update_timedatetime<INSERT-TimeStamp>更新时间
create_timedatetime<INSERT-TimeStamp>创建时间

表格: edu_video

备注: 课程视频

索引:

名称类型属性备注
主索引idunique
idx_chapter_idchapter_id
idx_course_idcourse_id

字段:

名称类型默认值属性备注
idint(11) unsigned<auto_increment>视频ID
course_idint(11) unsigned课程ID
chapter_idint(11) unsigned章节ID
titlevarchar(63)视频显示名称
video_idvarchar(63)云端视频资源
sortint(11)0排序字段
play_countint(11) unsigned0播放次数
freetinyint(1) unsigned1是否可以试听:0免费 1收费
durationvarchar(15)0视频时长(秒)
sizebigint(20) unsigned0视频源文件大小(字节)
update_timedatetime<INSERT-TimeStamp>更新时间
create_timedatetime<INSERT-TimeStamp>创建时间

表格: edu_video_tmp

备注: 课程视频表(用于存放二次修改的数据)

索引:

名称类型属性备注
主索引idunique
idx_chapter_idchapter_id
idx_course_idcourse_id
idx_idoid

字段:

名称类型默认值属性备注
idbigint(20) unsigned0主键(视频ID)
oidint(11) unsigned0原视频ID
course_idint(11) unsigned课程ID
chapter_idbigint(20) unsigned章节ID
titlevarchar(63)视频显示名称
video_idvarchar(63)云端视频资源
sortint(11)0排序字段
play_countint(11) unsigned0播放次数
freetinyint(1) unsigned1是否可以试听:0免费 1收费
durationvarchar(15)0视频时长(秒)
sizebigint(20) unsigned0视频源文件大小(字节)
update_timedatetime<INSERT-TimeStamp>更新时间
create_timedatetime<INSERT-TimeStamp>创建时间

表格: hm_banner

备注: 首页banner表

索引:

名称类型属性备注
主索引idunique

字段:

名称类型默认值属性备注
idint(11) unsigned<auto_increment>ID
titlevarchar(63)标题
image_urlvarchar(1023)图片地址
link_urlvarchar(1023)链接地址
sortint(11) unsigned0排序
enabletinyint(1) unsigned1是否启用,0否1是
update_timedatetime<INSERT-TimeStamp>更新时间
create_timedatetime<INSERT-TimeStamp>创建时间

表格: rel_course_member

备注: 课程订阅-学员关系表

索引:

名称类型属性备注
主索引idunique
idx_course_idcourse_idunique
idx_member_coursemember_id, course_id联合索引(member_id, course_id)
idx_member_idmember_idunique

字段:

名称类型默认值属性备注
idint(10) unsigned<auto_increment>主键
course_idint(10) unsigned0课程Id
member_idint(10) unsigned0学员Id
update_timedatetime<INSERT-TimeStamp>更新时间
create_timedatetime<INSERT-TimeStamp>创建时间

表格: stat_daily

备注: 网站统计日数据

索引:

名称类型属性备注
主索引idunique
statistics_daydate

字段:

名称类型默认值属性备注
idint(11) unsigned<auto_increment>主键
datedatetime统计日期
visit_countint(11) unsigned0访客数量
register_countint(11) unsigned0注册人数
login_countint(11) unsigned0活跃人数
video_view_countint(11) unsigned0视频播放数
course_buy_countint(11) unsigned0购买数量
update_timedatetime<INSERT-TimeStamp>更新时间
create_timedatetime<INSERT-TimeStamp>创建时间

表格: sys_message

备注: 消息表

索引:

名称类型属性备注
主索引idunique
idx_to_idto_id

字段:

名称类型默认值属性备注
idint(11) unsigned<auto_increment>消息id
from_idint(11) unsigned0发送者Id
from_roletinyint(4)0发送者角色(管理员、讲师…)
to_idint(11) unsigned0接受者id
to_roletinyint(4) unsigned0接受者角色(教师、学员…)
titlevarchar(127)消息标题
contentvarchar(511)消息内容
has_readtinyint(1) unsigned0是否已读(0未读 1已读)
update_timedatetime<INSERT-TimeStamp>更新时间
create_timedatetime<INSERT-TimeStamp>创建时间

表格: t_order

备注: 订单表

索引:

名称类型属性备注
主索引idunique
idx_course_idcourse_id
idx_member_idmember_id
idx_member_id_course_idmember_id, course_id
ux_order_noorder_nounique

字段:

名称类型默认值属性备注
idint(11) unsigned<auto_increment>
order_novarchar(18)订单号(datetime+unsigned int)
course_idint(11) unsigned课程id
member_idint(11) unsigned会员id
total_feedouble(10,2)0.01订单金额(分)
pay_typetinyint(4) unsigned0支付类型(0 未支付 1:微信 2:支付宝)
transaction_numvarchar(31)交易流水号
pay_timedatetime<空>支付完成时间
update_timedatetime<INSERT-TimeStamp>更新时间
create_timedatetime<INSERT-TimeStamp>创建时间

表格: uctr_member

备注: 会员表

索引:

名称类型属性备注
主索引idunique
uk_mobilemobileunique
uk_nicknamenicknameunique

字段:

名称类型默认值属性备注
idint(11) unsigned<auto_increment>会员id
mobilechar(11)手机号
emailvarchar(127)邮箱地址
passwordvarchar(255)密码
nicknamevarchar(31)昵称
sextinyint(4) unsigned0性别 1 女,2 男
agetinyint(3) unsigned0年龄
avatarvarchar(1023)用户头像
signvarchar(127)用户签名
enabletinyint(1)1是否启用,0否1是
update_timedatetime<INSERT-TimeStamp>更新时间
create_timedatetime<INSERT-TimeStamp>创建时间

实现效果

更多实现效果图请看附件README.assets

管理员端:

在这里插入图片描述

讲师端:

在这里插入图片描述

学员端:

在这里插入图片描述

总结与展望

事实说明,毕设工作量完全超出了答辩的正常范围,这点我是没想到的,因为只演示了系统一小部分功能就拿了答辩优秀。最后也是希望本项目可以给到有需要的人一些帮助。谢谢大家。

展望:

  • 代码重构,解决前言中的问题。
  • 功能完善,完善支付模块、权限管理等功能。
  • 架构升级,微服务拆分,引入前沿技术。

当然,这一切的前提是我心情不错且拥有足够的空闲时间。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐