【微服务】Day12(搜索功能、Quartz)

续开发查询订单的功能

开发查询订单业务逻辑层

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
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值