4 Star 113 Fork 13

Myles Yang / OnlineEdu

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

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

总结与展望

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

展望:

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

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

MIT License Copyright (c) 2022 Myles Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

基于SpringBoot+Vue前后端分离的在线教育平台项目 展开 收起
Java
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/snwjas/online-edu.git
git@gitee.com:snwjas/online-edu.git
snwjas
online-edu
OnlineEdu
master

搜索帮助