续开发查询订单的功能
开发查询订单业务逻辑层
OmsOrderServiceImpl实现类添加实现方法
// 分页查询当前登录用户,指定时间范围内的所有订单
// 默认查询最近一个月内的订单,查询返回值OrderListVO,是包含订单信息和订单中商品信息的对象
// 持久层已经编写好OrderListVO类和order和order_item表的映射关系(xml文件中关联查询)
@Override
public JsonPage<OrderListVO> listOrdersBetweenTimes(OrderListTimeDTO orderListTimeDTO) {
// 业务逻辑层要判断用户指定的时间信息,必须保证它们合理才能进行后面的操作
// 编写一个方法,来判断时间的可用
validateTimeAndLoadTimes(orderListTimeDTO);
// 获得用户Id
Long userId=getUserId();
// 将用户Id赋值到参数中
orderListTimeDTO.setUserId(userId);
// 设置分页条件
PageHelper.startPage(orderListTimeDTO.getPage(),
orderListTimeDTO.getPageSize());
// 调用mapper编写的关联查询方法
List<OrderListVO> list=omsOrderMapper.
selectOrdersBetweenTimes(orderListTimeDTO);
// 别忘了返回!!!
return JsonPage.restPage(new PageInfo<>(list));
}
private void validateTimeAndLoadTimes(OrderListTimeDTO orderListTimeDTO) {
// 获取参数中的开始和结束时间
LocalDateTime start=orderListTimeDTO.getStartTime();
LocalDateTime end=orderListTimeDTO.getEndTime();
// 为了不在增加业务的复杂度,我们设计当start和end中有一个为null时就查询最近一个月的订单
if(start==null || end ==null){
// 设置开始时间为当前时间的前一个月
start=LocalDateTime.now().minusMonths(1);
end=LocalDateTime.now();
// 赋值到参数中
orderListTimeDTO.setStartTime(start);
orderListTimeDTO.setEndTime(end);
}else{
// 如果start和end都非空
// 要判断start是否小于end,如果end小于start要抛异常
// 如果编写支持国际不同时区的时间判断,在比较时要添加时区的修正
if(end.toInstant(ZoneOffset.of("+8")).toEpochMilli()<
start.toInstant(ZoneOffset.of("+8")).toEpochMilli()){
// 如果判断结果表示结束时间小于开始时间,抛出异常,终止方法
throw new CoolSharkServiceException(ResponseCode.BAD_REQUEST,
"结束时间应大于起始时间");
}
}
}
开发查询订单的控制层代码
OmsOrderController
@GetMapping("/list")
@ApiOperation("分页查询当前用户指定时间的订单")
@PreAuthorize("hasRole('user')")
public JsonResult<JsonPage<OrderListVO>> listUserOrders(
OrderListTimeDTO orderListTimeDTO){
JsonPage<OrderListVO> jsonPage=
omsOrderService.listOrdersBetweenTimes(orderListTimeDTO);
return JsonResult.ok(jsonPage);
}
启动Nacos\Seata
如果没有登录的话启动sso做jwt复制
如果有可用的jwt
直接启动order即可
订单的新增和订单的查询一定要多练习几次
面试时一定要会讲述业务流程
开发更新订单状态的功能
订单的状态码
我们电商上面订单的状态修改是非常普通的业务
随着商品的购买流程,订单的状态有
状态:
0=未支付
1=已关闭(超时未支付)
2=已取消
3=已支付
4=已签收
5=已拒收
6=退款处理中
7=已退款
开发更新订单状态的持久层
修改订单状态就是根据订单id修改订单的state
我们随着业务的发展,订单可能需要更多修改的需求
订单的列(字段)比较多,如果每个字段修改,都需要编写一个方法的话,那么方法的数量会非常多
如果我们编写一个方法,能够接收订单对象的实体类参数(OmsOrder)
我们要实现可以根据OmsOrder对象的实际数据来实现动态的修改要修改的字段
Mybatis中可以通过编写动态修改sql语句完成这个需求
OmsOrderMapper接口添加方法
// 动态修改订单,参数是omsOrder对象
// 参数对象中必须有id,id不可修改,其他属性不为空就修改为当前属性值
int updateOrderById(OmsOrder order);
OmsOrderMapper.xml编写sql
<!--
动态修改订单,参数是omsOrder对象
参数对象中必须有id,id不可修改,其他属性不为空就修改为当前属性值
-->
<!--
OmsOrder对象动态修改数据库中数据的sql语句
Mybatis框架动态生成修改sql语句需要设置一个<set>标签
1.在<set>标签的位置生成一个set关键字
2.在<set></set>标签之间的范围内,动态生成sql语句,如果生成的内容最后是","就将它删除
-->
<update id="updateOrderById">
update oms_order