苍穹外卖day09

查看历史订单(本质还是分页查询)

首先理清关系,传过来的是每页和总共页数

交给PageHelper去查询返回的是

其次需要去查的是历史的订单

传入Mapper的参数应该是pageQueryDTO

所以把参数都set好传给DTO

查到的是我们的page
Page page = userMapper.pageQuery(ordersPageQueryDTO);
其他的Employee可以查的很完整所以可以直接返回EmployeeVO这里不可以所以需要完善信息

当然信息不够完整,因为Orders没有包含Detaill的信息

所以我们还需要去查Order_Detaill 的表去完善这个返回的参数OrderVO

最后返回new PageResult(totalNumber,List)给Controller的pageResult
然后由Controller返回Result.success(pageResult)

这个和Dish的分页查询 dish_flavor很像,都是查不明白,需要再去查另外一个表补全信息,然后返回

 public PageResult pageQueryUser(int pageNum, int pageSize, Integer status){


        PageHelper.startPage(pageNum,pageSize);


        OrdersPageQueryDTO ordersPageQueryDTO = new OrdersPageQueryDTO();
        ordersPageQueryDTO.setPage(pageNum);
        ordersPageQueryDTO.setPageSize(pageSize);
        ordersPageQueryDTO.setStatus(status);
        ordersPageQueryDTO.setUserId(BaseContext.getCurrentId());

        Page<Orders> page = userMapper.pageQuery(ordersPageQueryDTO);


        List<OrderVO> list = new ArrayList<>();

        if(page != null && page.size()>0){

            for(Orders orders:page){

                Long id = orders.getId();
                List<OrderDetail> orderDetail = orderDetailMapper.getById(id);

                OrderVO orderVO = new OrderVO();
                orderVO.setOrderDetailList(orderDetail);
                BeanUtils.copyProperties(orders,orderVO);
                list.add(orderVO);
            }
        }

        long total = page.getTotal();
        //List<Orders> result = pageRes.getResult();



        return new PageResult(total,list);


    }
 <select id="pageQuery" resultType="com.sky.entity.Orders">
        select * from orders
        <where>
            <if test="number != null and number!=''">
                and number like concat('%',#{number},'%')
            </if>
            <if test="phone != null and phone!=''">
                and phone like concat('%',#{phone},'%')
            </if>
            <if test="userId != null">
                and user_id = #{userId}
            </if>
            <if test="status != null">
                and status = #{status}
            </if>
            <if test="beginTime != null">
                and order_time >= #{beginTime}
            </if>


        </where>

    </select>

查看订单详细

太简单了不写了,和上面的查询页面一样返回VO的时候需要set Detail的部分

再来一单(传入的直接是orderid)

直接去查OrderDetail就好了
然后把OrderDetail的值赋给shoppingcart然后批量插入就行了
秒了!
记得把shoppingcart的值set完整对着entity看一下哪里没有插入就可以了

public void repetitionById(long id){

        //id是订单id Order的ID 可以去查detail然后再插入到shoppingcart
        Orders orders = orderMapper.getById(id);
        List<OrderDetail> orderDetailList = orderDetailMapper.getById(orders.getId());

        List<ShoppingCart> shoppingCartList = new ArrayList<>();

        for(OrderDetail orderDetail : orderDetailList){
            ShoppingCart shoppingCart = new ShoppingCart();
            BeanUtils.copyProperties(orderDetail,shoppingCart);
            shoppingCart.setCreateTime(LocalDateTime.now());
            shoppingCart.setUserId(BaseContext.getCurrentId());
            shoppingCartList.add(shoppingCart);
        }
        shoppingCartMapper.insertBatch(shoppingCartList);

    }
 <insert id="insertBatch" parameterType="list">
        insert into shopping_cart
        (name, image, user_id, dish_id, setmeal_id, dish_flavor, number, amount, create_time)
        values
        <foreach collection="shoppingCartList"  item="sc" separator=",">
            (#{sc.name},#{sc.image},#{sc.userId},#{sc.dishId},#{sc.setmealId},#{sc.dishFlavor},#{sc.number},#{sc.amount},#{sc.createTime})
        </foreach>
    </insert>

取消订单(有一个退款操作需要调用Utils 其他记得抛异常就行)

	/**
     * 用户取消订单
     *
     * @param id
     */
    public void userCancelById(Long id) throws Exception {
        // 根据id查询订单
        Orders ordersDB = orderMapper.getById(id);

        // 校验订单是否存在
        if (ordersDB == null) {
            throw new OrderBusinessException(MessageConstant.ORDER_NOT_FOUND);
        }

        //订单状态 1待付款 2待接单 3已接单 4派送中 5已完成 6已取消
        if (ordersDB.getStatus() > 2) {
            throw new OrderBusinessException(MessageConstant.ORDER_STATUS_ERROR);
        }

        Orders orders = new Orders();
        orders.setId(ordersDB.getId());

        // 订单处于待接单状态下取消,需要进行退款
        if (ordersDB.getStatus().equals(Orders.TO_BE_CONFIRMED)) {
            //调用微信支付退款接口
            weChatPayUtil.refund(
                    ordersDB.getNumber(), //商户订单号
                    ordersDB.getNumber(), //商户退款单号
                    new BigDecimal(0.01),//退款金额,单位 元
                    new BigDecimal(0.01));//原订单金额

            //支付状态修改为 退款
            orders.setPayStatus(Orders.REFUND);
        }

        // 更新订单状态、取消原因、取消时间
        orders.setStatus(Orders.CANCELLED);
        orders.setCancelReason("用户取消");
        orders.setCancelTime(LocalDateTime.now());
        orderMapper.update(orders);
    }

管理端查看订单(分页查询)

再强调一遍,controller返回的是PageResult
new pageResult(totalNumber,list<>)

所以Service需要去查List<。。。VO>返回给Controller

 @GetMapping("/conditionSearch")
    @ApiOperation("管理端订单搜索")
    public Result<PageResult> conditionSearch(OrdersPageQueryDTO ordersPageQueryDTO){

        PageResult pageResult = orderService.conditionSearch(ordersPageQueryDTO);

        return Result.success(pageResult);
    }

查询用DTO去查询
然后在补全查不到的在别的表的数据,返回list<。。VO>给Controller

public PageResult conditionSearch(OrdersPageQueryDTO ordersPageQueryDTO){

        PageHelper.startPage(ordersPageQueryDTO.getPage(),ordersPageQueryDTO.getPageSize());
        Page<Orders> page = userMapper.pageQuery(ordersPageQueryDTO);

        List<OrderVO> list =  new ArrayList<>();
        for(Orders orders:page){
            List<OrderDetail> orderDetailList = orderDetailMapper.getById(orders.getId());
            OrderVO orderVO = new OrderVO();
            orderVO.setOrderDetailList(orderDetailList);
            list.add(orderVO);
        }
        return new PageResult(page.getTotal(),list);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值