在线教育项目总结(五)-统一返回结果、分页条件查询、订单操作和定时任务
1、统一返回格式
在前后端接口交互中,前端按照约定请求URL路径,并传入相关参数,后端服务器接收请求,进行业务处理,返回数据给前端。在前后端分离的项目中,我们往往会将后端的结果封装为JSON数据返回,统一的数据格式会使前端对数据的操作更一致、轻松。
一般情况下,统一返回数据格式没有固定的格式,只要能描述清楚返回的数据状态以及要返回的具体数据就可以。但是一般会包含状态码、返回消息、数据这几部分内容
例如,我们的系统要求返回的基本数据格式如下:
- 列表:
1 | { |
- 分页:
1 | { |
- 没有返回数据:
1 | { |
- 失败:
1 | { |
我们定义统一返回格式为:
1 | { |
2、定义统一返回结果
2.1、创建返回码定义枚举类
状态码定义枚举类对于特殊响应情况做了定义。
1 |
|
2.2、创建结果类
对于返回数据有两种赋值方法,一是传入一个Map对象,二是传入一个Key和一个Value。
1 |
|
3、分页条件查询
3.1、需求说明
在讲师分页列表中,我们需要根据讲师名进行模糊查询,根据讲师头衔、讲师入驻时间进行查询。
3.2、创建查询对象
创建讲师条件查询类TeacherQueryVo,该类定义了3.1中的四个条件属性。
1 |
|
3.3、在TeacherController中编写一个分页条件查询接口
1 | /*** |
3.4、在Service层实现selectPage方法
这个方法接收传入的分页对象和条件查询对象,首先对传入的条件对象进行判断,如果条件对象为空,那么直接进行一次普通的分页查询;
如果条件对象不为空,那么分别取出其中的四个属性,根据属性类型使用QueryWrapper拼接不为空的条件属性。
1 |
|
3.5、测试
打开swagger,进行测试
结果
4、订单操作
由于只有登录后的用户才可以下订单,而且订单除了必需的商品号外,还必须有用户号,在合法用户登录后,我们会下发给用户一个token,在之后的订单操作中,用户需要在发起请求的时候在请求头中带上这个token,服务器解析请求头中的token后即可获取用户id。
4.1、创建JWTUtils
这个工具类封装了一系列有关token的方法,包括根据密钥生成token,鉴定token是否合法,从请求中的token解析出用户信息等。
1 | public class JwtUtils { |
4.2、新增订单–Controller层
这个方法除了接收课程Id外,还需要接收一个HttpServletRequest对象,我们需要从这个request对象中获取用户信息(用户id)
1 |
|
4.3、新增订单–Service层
Service层中新增订单的流程如下:
- 根据传入的memberId和courseId作为条件,使用QueryWrapper查询该用户是否已经存在当前课程的订单
- 如果已存在,直接返回已存在的订单号即可
- 查询课程信息和用户信息是否存在
- 创建订单,使用一个工具类生成订单号,然后将上面根据课程号查询到的课程信息,根据用户id查询到的用户信息填入订单对象中。
- 向数据库中插入该对象,根据Mybatis-Plus的id自动回填功能将订单对象Id返回。
1 |
|
5、定时任务
5.1、定时任务实现方式
Timer
使用jdk的Timer和TimerTask可以实现简单的间隔执行任务,无法实现按日历去调度执行任务
ScheduledThreadPool线程池
创建可以延迟或定时执行任务的线程,无法实现按日历去调度执行任务
quartz
使用Quartz实现 Quartz 是一个异步任务调度框架,功能丰富,可以实现按日历调度
Spring Task
Spring 3.0后提供Spring Task实现任务调度,支持按日历调度,相比Quartz功能稍简单,但是开发基本够用,支持注解编程方式
5.2、集成Spring Task
在启动类中添加注解@EnableScheduling
1 |
|
5.3、创建定时任务类
1 |
|
5.4、测试
查看控制台,可以发现控制台定时输出日志
5.5、在线生成cron表达式
参考教程如下:
- [1] 尚硅谷在线教育项目