目录
gitee源码地址
github源码地址
一、项目描述
-
在线教育系统,系统分为前台用户系统和后台管理系统两部分。B2C模式。
-
前台用户系统包括:首页、课程、名师、问答、文章。
-
后台管理系统包括:讲师管理、课程分类管理、课程管理、统计分析、Banner管理、订单管理、权限管理等功能。
后端的主要技术架构是:SpringBoot + SpringCloud + MyBatis-Plus + HttpClient + MySQL + Maven+EasyExcel+ nginx
前端的架构是:Node.js + Vue.js +element-ui+NUXT+ECharts
其他涉及到的中间件包括Redis、阿里云OSS、阿里云视频点播
业务中使用了ECharts做图表展示,使用EasyExcel完成分类批量添加、注册分布式单点登录使用了JWT
项目前后端分离开发,后端采用SpringCloud微服务架构,持久层用的是MyBatis-Plus,使用Swagger生成接口文档,接入了阿里云视频点播、阿里云OSS。
二、系统中的角色
前台:会员(学员)、游客
后台:系统管理员、运营人员
三、后台管理系统功能描述
1、权限管理模块
- 菜单管理:CRUD
- 角色管理:CRUD、批量删除、为角色分配菜单
- 用户管理:CRUD、为用户分配角色
- 表和表的关系:使用五张表【用户表、角色表、菜单表、用户角色中间表、角色菜单中间表】
2、讲师管理模块
- 多条件分页查询、CRUD
3、课程分类模块
- 添加课程分类
读取Excel里的课程数据,添加到数据库中,通过easyExcel
- 课程分类列表
使用树形结构显示课程分类列表
4、课程管理模块
- 课程列表功能
- 添加课程
- 添加小节时,可以上传课程视频
- 课程发布的流程:填写课程基本信息、添加课程大纲(章节和小节)、课程信息确认、最终发布
课程如何判断是否已经发布?
通过给数据库设置字段status来判断他现在的状态
课程添加过程中,中途把课程停止添加,重新去添加新的课程,如何找到之前没有发布完成的课程,继续发布呢?
到课程列表中选择未发布的课程状态,来查询,里面会有编辑看课程信息,然后去继续编辑发 布完成
四、视频点播实现
直接接入了阿里云的云视频点播。云平台上的功能包括视频上传、转码、加密、智能审核、监控统计等。
还包括视频播放功能,阿里云还提供了一个视频播放器。
五、前后端联调注意点
1、请求方式post、get
2、json、x-wwww-form-urlencoded混乱的错误
3、后台必要的参数,前端省略了
4、数据类型不匹配
5、空指针异常
6、分布式系统中分布式id生成器生成的id 长度过大(19个字符长度的整数),js无法解析(js智能解析16个长度:2的53次幂)
id策略改成 ID_WORKER_STR
六、需要注意的问题
6.1、主键问题
-
分布式id生成器在前端无法处理,总是在后三位进行四舍五入。
-
分布式id生成器生成的id是19个字符的长度,前端javascript脚本对整数的处理能力只有2的53次方,也就是最多只能处理16个字符
- 解决的方案是把id在程序中设置成了字符串的性质
6.2、cookie问题
项目迁移到Spring-Cloud的时候,经过网关时,前端传递的cookie后端一只获取不了,看了cloud中zuul的源码,发现向下游传递数据的时候,zull默认过滤了敏感信息,将cookie过滤掉了
- 解决的方案是在配置文件中将请求头的过滤清除掉,使cookie可以向下游传递
6.3、分布式系统的id生成策略
https://www.cnblogs.com/haoxinyue/p/5208136.html
6.4、前端渲染和后端渲染的区别
前端渲染是返回json给前端,通过javascript将数据绑定到页面上
后端渲染是在服务器端将页面生成直接发送给服务器,有利于SEO的优化
6.5、跨域问题
- 访问协议+ip地址+端口号,三者有任何一个不一样,就会产生跨域问题
- 解决方案:
- 在controller添加注解@CrossOrigin
- 通过Gateway网关解决,写一个配置类
- 上面只能使用一个,不然会失效
6.6、413问题
- 上传视频时,nginx有上传视频大小限制,如果超过,就会出现413错误
- 413描述:请求体过大
- 解决方案:在Nginx里配置客户端提交文件大小
- 响应状态码:413、跨域403、重定向302
6.7、Maven加载问题
- Maven加载项目时,不会加载src-java文件夹里面的xml类型文件
解决方案:
- 1、复制xml文件到target目录
- 2、在maven中配置,与properties配置文件中指定xml文件夹