赠给有缘人,希望能帮助到你!也请不要吝惜你的大拇指,你的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 后端 前端 数据库设计数据库: 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 管理员端: 讲师端: 学员端: 事实说明,毕设工作量完全超出了答辩的正常范围,这点我是没想到的,因为只演示了系统一小部分功能就拿了答辩优秀。最后也是希望本项目可以给到有需要的人一些帮助。谢谢大家。 展望: 代码重构,解决前言中的问题。 功能完善,完善支付模块、权限管理等功能。 架构升级,微服务拆分,引入前沿技术。 当然,这一切的前提是我心情不错且拥有足够的空闲时间。
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. (责任编辑:) |