snwjas / OnlineEdu

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

Home Page:https://oeapp.refrain.xyz

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool


基于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

索引:

名称 类型 属性 备注
主索引 id unique

字段:

名称 类型 默认值 属性 备注
id int(11) unsigned <auto_increment> 菜单权限表
pid int(11) unsigned 父级id
type tinyint(4) unsigned 1 菜单类型,0顶部菜单、1聚合菜单、2页面菜单、3接口
name varchar(255) 路由名称或接口名称
path varchar(255) 菜单路径(以http开头时,视为打开外部链接) 或 请求接口的地址
component varchar(255) 菜单组件,只有叶子菜单才可配置
meta varchar(1023) <空> 菜单的route.meta配置项,json格式
admin tinyint(1) unsigned 0 0默认,1只有超级管理员才能使用
enable tinyint(1) unsigned 1 是否启用,0否1是
update_time datetime <INSERT-TimeStamp> 更新时间
create_time datetime <INSERT-TimeStamp> 创建时间

表格: acl_role

备注: 角色

索引:

名称 类型 属性 备注
主索引 id unique

字段:

名称 类型 默认值 属性 备注
id int(11) unsigned <auto_increment> 角色id
name varchar(31) 角色名称
permission_id varchar(2048) 角色具有的权限ID串
enable tinyint(1) 1 是否启用,0否1是
update_time datetime <INSERT-TimeStamp> 更新时间
create_time datetime <INSERT-TimeStamp> 创建时间

表格: acl_user

备注: 管理员用户表

索引:

名称 类型 属性 备注
主索引 id unique
uk_username username unique

字段:

名称 类型 默认值 属性 备注
id int(11) unsigned <auto_increment> 用户id
username varchar(31) 用户名
password varchar(255) 密码
nickname varchar(31) 昵称
avatar varchar(1023) 用户头像
mark varchar(255) 备注
sign varchar(255) 用户签名
roleId int(11) unsigned 角色id
enable tinyint(1) unsigned 1 是否启用,0否1是
update_time datetime <INSERT-TimeStamp> 更新时间
create_time datetime <INSERT-TimeStamp> 创建时间

表格: edu_chapter

备注: 课程章节表

索引:

名称 类型 属性 备注
主索引 id unique

字段:

名称 类型 默认值 属性 备注
id int(11) unsigned <auto_increment> 章节ID
course_id int(11) unsigned 课程ID
title varchar(63) 章节名称
sort int(11) 0 显示排序
update_time datetime <INSERT-TimeStamp> 更新时间
create_time datetime <INSERT-TimeStamp> 创建时间

表格: edu_chapter_tmp

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

索引:

名称 类型 属性 备注
主索引 id unique
idx_id oid

字段:

名称 类型 默认值 属性 备注
id bigint(20) unsigned 0 主键
oid int(11) unsigned 0 原章节ID
course_id int(11) unsigned 课程ID
title varchar(63) 章节名称
sort int(11) 0 显示排序
update_time datetime <INSERT-TimeStamp> 更新时间
create_time datetime <INSERT-TimeStamp> 创建时间

表格: edu_comment

备注: 课程评论表

索引:

名称 类型 属性 备注
主索引 id unique
idx_course_id course_id
idx_member_id member_id
idx_member_id_course_id member_id, course_id
idx_teacher_id teacher_id

字段:

名称 类型 默认值 属性 备注
id int(11) unsigned <auto_increment> 评论ID
course_id int(11) unsigned 课程id
teacher_id int(11) unsigned 讲师id
member_id int(11) unsigned 会员id
content varchar(1023) 评论内容
mark double unsigned 5 评分(满分5.00)
status tinyint(1) unsigned <空> 评论状态 0审核中 1通过
update_time datetime <INSERT-TimeStamp> 更新时间
create_time datetime <INSERT-TimeStamp> 创建时间

表格: edu_course

备注: 课程表

索引:

名称 类型 属性 备注
主索引 id unique

字段:

名称 类型 默认值 属性 备注
id int(11) unsigned <auto_increment> 课程ID
teacher_id int(11) unsigned 课程讲师ID
subject_id int(11) unsigned 课程科目分类ID
title varchar(63) 课程标题
price double(10,2) unsigned 0.00 课程销售价格,设置为0则可免费观看
lesson_num int(11) unsigned 0 总课时
cover varchar(1023) utf8, utf8_general_ci 课程封面图片路径
description text 课程描述
buy_count int(11) unsigned 0 销售数量
view_count int(11) unsigned 0 浏览数量
sort int(11) 0 显示排序
enable tinyint(1) 1 上架下架,0下架 1上架
status tinyint(4) 0 课程状态,草稿 审核 发表
remarks varchar(511) <空> 备注
update_time datetime <INSERT-TimeStamp> 更新时间
create_time datetime <INSERT-TimeStamp> 创建时间

表格: edu_subject

备注: 课程科目分类表

索引:

名称 类型 属性 备注
主索引 id unique
idx_parent_id parent_id

字段:

名称 类型 默认值 属性 备注
id int(11) unsigned <auto_increment> 课程类别ID
title varchar(15) 类别名称
parent_id int(11) unsigned 0 父ID
sort int(11) unsigned 0 排序字段
enable tinyint(1) unsigned 1 是否启用,0否1是
update_time datetime <INSERT-TimeStamp> 更新时间
create_time datetime <INSERT-TimeStamp> 创建时间

表格: edu_teacher

备注: 讲师表

索引:

名称 类型 属性 备注
主索引 id unique
uk_mobile mobile unique
uk_name name unique

字段:

名称 类型 默认值 属性 备注
id int(11) unsigned <auto_increment> 讲师ID
mobile char(11) 手机号
email varchar(127) 邮箱地址
password varchar(255) 密码
name varchar(63) 讲师姓名
intro varchar(1023) 讲师简介
avatar varchar(1023) 讲师头像
resume varchar(1023) 讲师简历链接
division tinyint(4) 80 分成比例,0-100
sort int(11) 0 排序
enable tinyint(1) unsigned 1 是否启用,0否1是
status tinyint(4) 0 讲师状态:审核通过;审核不通过;待审核
update_time datetime <INSERT-TimeStamp> 更新时间
create_time datetime <INSERT-TimeStamp> 创建时间

表格: edu_video

备注: 课程视频

索引:

名称 类型 属性 备注
主索引 id unique
idx_chapter_id chapter_id
idx_course_id course_id

字段:

名称 类型 默认值 属性 备注
id int(11) unsigned <auto_increment> 视频ID
course_id int(11) unsigned 课程ID
chapter_id int(11) unsigned 章节ID
title varchar(63) 视频显示名称
video_id varchar(63) 云端视频资源
sort int(11) 0 排序字段
play_count int(11) unsigned 0 播放次数
free tinyint(1) unsigned 1 是否可以试听:0免费 1收费
duration varchar(15) 0 视频时长(秒)
size bigint(20) unsigned 0 视频源文件大小(字节)
update_time datetime <INSERT-TimeStamp> 更新时间
create_time datetime <INSERT-TimeStamp> 创建时间

表格: edu_video_tmp

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

索引:

名称 类型 属性 备注
主索引 id unique
idx_chapter_id chapter_id
idx_course_id course_id
idx_id oid

字段:

名称 类型 默认值 属性 备注
id bigint(20) unsigned 0 主键(视频ID)
oid int(11) unsigned 0 原视频ID
course_id int(11) unsigned 课程ID
chapter_id bigint(20) unsigned 章节ID
title varchar(63) 视频显示名称
video_id varchar(63) 云端视频资源
sort int(11) 0 排序字段
play_count int(11) unsigned 0 播放次数
free tinyint(1) unsigned 1 是否可以试听:0免费 1收费
duration varchar(15) 0 视频时长(秒)
size bigint(20) unsigned 0 视频源文件大小(字节)
update_time datetime <INSERT-TimeStamp> 更新时间
create_time datetime <INSERT-TimeStamp> 创建时间

表格: hm_banner

备注: 首页banner表

索引:

名称 类型 属性 备注
主索引 id unique

字段:

名称 类型 默认值 属性 备注
id int(11) unsigned <auto_increment> ID
title varchar(63) 标题
image_url varchar(1023) 图片地址
link_url varchar(1023) 链接地址
sort int(11) unsigned 0 排序
enable tinyint(1) unsigned 1 是否启用,0否1是
update_time datetime <INSERT-TimeStamp> 更新时间
create_time datetime <INSERT-TimeStamp> 创建时间

表格: rel_course_member

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

索引:

名称 类型 属性 备注
主索引 id unique
idx_course_id course_id unique
idx_member_course member_id, course_id 联合索引(member_id, course_id)
idx_member_id member_id unique

字段:

名称 类型 默认值 属性 备注
id int(10) unsigned <auto_increment> 主键
course_id int(10) unsigned 0 课程Id
member_id int(10) unsigned 0 学员Id
update_time datetime <INSERT-TimeStamp> 更新时间
create_time datetime <INSERT-TimeStamp> 创建时间

表格: stat_daily

备注: 网站统计日数据

索引:

名称 类型 属性 备注
主索引 id unique
statistics_day date

字段:

名称 类型 默认值 属性 备注
id int(11) unsigned <auto_increment> 主键
date datetime 统计日期
visit_count int(11) unsigned 0 访客数量
register_count int(11) unsigned 0 注册人数
login_count int(11) unsigned 0 活跃人数
video_view_count int(11) unsigned 0 视频播放数
course_buy_count int(11) unsigned 0 购买数量
update_time datetime <INSERT-TimeStamp> 更新时间
create_time datetime <INSERT-TimeStamp> 创建时间

表格: sys_message

备注: 消息表

索引:

名称 类型 属性 备注
主索引 id unique
idx_to_id to_id

字段:

名称 类型 默认值 属性 备注
id int(11) unsigned <auto_increment> 消息id
from_id int(11) unsigned 0 发送者Id
from_role tinyint(4) 0 发送者角色(管理员、讲师...)
to_id int(11) unsigned 0 接受者id
to_role tinyint(4) unsigned 0 接受者角色(教师、学员...)
title varchar(127) 消息标题
content varchar(511) 消息内容
has_read tinyint(1) unsigned 0 是否已读(0未读 1已读)
update_time datetime <INSERT-TimeStamp> 更新时间
create_time datetime <INSERT-TimeStamp> 创建时间

表格: t_order

备注: 订单表

索引:

名称 类型 属性 备注
主索引 id unique
idx_course_id course_id
idx_member_id member_id
idx_member_id_course_id member_id, course_id
ux_order_no order_no unique

字段:

名称 类型 默认值 属性 备注
id int(11) unsigned <auto_increment>
order_no varchar(18) 订单号(datetime+unsigned int)
course_id int(11) unsigned 课程id
member_id int(11) unsigned 会员id
total_fee double(10,2) 0.01 订单金额(分)
pay_type tinyint(4) unsigned 0 支付类型(0 未支付 1:微信 2:支付宝)
transaction_num varchar(31) 交易流水号
pay_time datetime <空> 支付完成时间
update_time datetime <INSERT-TimeStamp> 更新时间
create_time datetime <INSERT-TimeStamp> 创建时间

表格: uctr_member

备注: 会员表

索引:

名称 类型 属性 备注
主索引 id unique
uk_mobile mobile unique
uk_nickname nickname unique

字段:

名称 类型 默认值 属性 备注
id int(11) unsigned <auto_increment> 会员id
mobile char(11) 手机号
email varchar(127) 邮箱地址
password varchar(255) 密码
nickname varchar(31) 昵称
sex tinyint(4) unsigned 0 性别 1 女,2 男
age tinyint(3) unsigned 0 年龄
avatar varchar(1023) 用户头像
sign varchar(127) 用户签名
enable tinyint(1) 1 是否启用,0否1是
update_time datetime <INSERT-TimeStamp> 更新时间
create_time datetime <INSERT-TimeStamp> 创建时间

实现效果

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

管理员端:

admin

讲师端:

teacher

学员端:

app

总结与展望

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

展望:

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

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

About

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

https://oeapp.refrain.xyz

License:MIT License


Languages

Language:Java 100.0%