• 【微服务】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,
                        "结束时间应大于起始时间");
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    开发查询订单的控制层代码

    OmsOrderController

    @GetMapping("/list")
    @ApiOperation("分页查询当前用户指定时间的订单")
    @PreAuthorize("hasRole('user')")
    public JsonResult<JsonPage<OrderListVO>> listUserOrders(
            OrderListTimeDTO orderListTimeDTO){
       
        JsonPage<OrderListVO> jsonPage=
                omsOrderService.listOrdersBetweenTimes(orderListTimeDTO);
        return JsonResult.ok(jsonPage);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    启动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);
    
    • 1
    • 2
    • 3

    OmsOrderMapper.xml编写sql

    
    
    <update id="updateOrderById">
        update oms_order
        
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    ECMAScript6 解构赋值
    微服务集成Spring Cloud Zipkin实现链路追踪并集成Dubbo
    【java】Lambda表达式
    自动控制原理8.4---描述函数法
    C#界面里的winform AutoValidate和CausesValidation属性
    【数据结构】树与二叉树(十八):树的存储结构——Father链接结构、儿子链表链接结构
    机器学习/深度学习模型的8个测试属性
    安卓10添加修改serial串口的服务
    EA&UML日拱一卒 用例包含关系
    8-2插入排序-折半插入排序
  • 原文地址:https://blog.csdn.net/shortcutsuccess/article/details/127429739