- 项目名称:师生问答管理平台
- 项目职务:组长
- 技术栈:Spring、SpringBoot、Vue、MybatisPlus、Element UI、微服务、SpringCloud
- 开发环境:JDK1.8、Maven、Git、Mysql8.0.19
- 开发工具:Idea、HBuilderX
- 项目描述:
该项目主要是提供了一个学生向讲师提问的平台,学生登录系统可以提问或搜索问题,讲师登录系统给学生回答问题,学生还可以对讲师的回答进行评论或追问,如果满意学生可以采纳这个回答,同时对问答记录进行管理。
项目采用前后端分离模式
功能包括:
1.用户管理模块
(1)登录及权限:用户账号密码使用PasswordEncoder进行加密,使用security对登录用户的权限进行配置,使用UserDetailsService提供认证数据,在用户登录时使用连接查询从数据库中查询出用户的权限,再通过SpringSecurity配置类进行控制授权范围和自定义登录页面。
(2)注册:确定邀请码,用户填写表单异步提交,编写ServiceException自定义异常类,用于表示我们开发的项目中发生的异常现象,使用Spring验证框架:SpringValidation反馈错误信息。
2.首页模块
(1)标签筛选导航:声明一个集合(CopyOnWriteArrayList 是线程安全的ArrayList对象)保存数据库中所有的标签,当做缓存,提高代码运行效率,前端使用Vue和Html绑定显示所有标签。
(2)当前登录用户及问题列表展示:从springSecurity中获取用户Id,再进行查询获取当前用户对象,同时判断登录状态,编写获取用户问题、问题所有标签、时间等方法,其中标签需要进行String[]转化才可以实现样式,列表展示问题。
(3)分页:使用pageHeper组件规定下一次查询只查询指定页码的数据。
3.学员问题管理模块
(1)编辑问题:前端使用summernote富文本编辑器编辑问题,使用v-select插件来实现标签和老师的复选效果,在select内实现动态加载老师列表效果。
(2)问题发布:新建一个QuestionVo来接收表单提交的信息并进行SpringValidation验证,分析数据库后对老师进行缓存,搭建静态资源服务器来保存用户上传的图片资源,借助summernote富文本编辑器给我们提供的特殊方法onImageUpload来上传用户选中的图片。
(3)信息显示:问题状态显示、用户信息面板显示(进行复用)。
4.老师回复功能模块
(1)老师页面:根据用户角色区分开老师和学生登录后的首页,复用标签导航列表和用户信息面板,显示讲师问题列表。
(2)问题详情页面:显示当前问题的所有回答,对updateDuration方法进行重构,避免代码冗余,老师新增的回答直接显示在回答列表中,开发对回答的评论功能,在回答的实体类中添加评论的集合,根据用户身份信息开发删除和编辑评论。
5.问题采纳模块
(1)问题页分离:由于学生和老师在问题详情页面上些许不同的功能对页面进行分离,重构控制器,根据不同身份跳转不同页面。
(2)问题采纳:在Question实体类中添加三个常量增加可读性,AnswerController重构调用业务逻辑层方法。
6.微服务与SpringCloud
(1)创建Eureka注册中心,Eureka客户端,Zuul网关。
(2)单体应用到微服务架构:将UI界面迁移至网关,网关微服务项目设置路由,创建通用模块项目,迁移数据访问层、业务逻辑层、控制层,javafaq-eureka:注册中心,javafaq-gateway:网关,javafaq-sys:用户管理模块,javafaq-faq:问答管理模块,javafaq-search:搜索模块,javafaq-resource:静态资源服务器。
(3)Ribbon负载均衡于用户登录,迁移登录功能,使用Elasticsearch搜索,使用SpringData实现分页。