当前位置: 首页 > article >正文

苍穹外卖学习笔记(二十二)

文章目录

  • 商家端订单管理模块:
    • 订单搜索
      • OrderController
      • OrderService
      • OrderServiceImpl
    • 各个状态的订单数量统计
      • OrderController
      • OrderService
      • OrderServiceImpl
      • orderMapper
    • 查询订单详情
      • OrderController
    • 接单
      • OrderController
      • OrderServiceImpl

商家端订单管理模块:

订单搜索

OrderController

/**
     * 订单搜索
     */
    @GetMapping("/conditionSearch")
    @ApiOperation(value = "订单搜索")
    public Result<PageResult> conditionSearch(OrdersPageQueryDTO ordersPageQueryDTO) {
        PageResult pageResult = orderService.conditionSearch(ordersPageQueryDTO);
        return Result.success(pageResult);
    }

OrderService

    /**
     * 订单搜索
     */
    PageResult conditionSearch(OrdersPageQueryDTO ordersPageQueryDTO);

OrderServiceImpl

    /**
     * 订单搜索
     */
    @Override
    public PageResult conditionSearch(OrdersPageQueryDTO ordersPageQueryDTO) {
        Page<Orders> page = new Page<>(ordersPageQueryDTO.getPage(), ordersPageQueryDTO.getPageSize());
        LambdaQueryWrapper<Orders> queryWrapper = new LambdaQueryWrapper<>();
        if (ordersPageQueryDTO.getStatus() != null) {
            queryWrapper.eq(Orders::getStatus, ordersPageQueryDTO.getStatus());
        }
        if (ordersPageQueryDTO.getNumber() != null && !ordersPageQueryDTO.getNumber().isEmpty()) {
            queryWrapper.like(Orders::getNumber, ordersPageQueryDTO.getNumber());
        }
        if (ordersPageQueryDTO.getPhone() != null && !ordersPageQueryDTO.getPhone().isEmpty()) {
            queryWrapper.like(Orders::getPhone, ordersPageQueryDTO.getPhone());
        }
        if (ordersPageQueryDTO.getBeginTime() != null) {
            queryWrapper.ge(Orders::getOrderTime, ordersPageQueryDTO.getBeginTime());
        }
        if (ordersPageQueryDTO.getEndTime() != null) {
            queryWrapper.le(Orders::getOrderTime, ordersPageQueryDTO.getEndTime());
        }
        Page<Orders> ordersPage = orderMapper.selectPage(page, queryWrapper);
        // 部分订单状态,需要额外返回订单菜品信息,将Orders转化为OrderVO
        List<OrderVO> orderVOList = getOrderVOList(ordersPage);
        return new PageResult(page.getTotal(), orderVOList);
    }
    /**
     * 将Orders转化为OrderVO
     */
    private List<OrderVO> getOrderVOList(Page<Orders> page) {
        // 需要返回订单菜品信息,自定义OrderVO响应结果
        List<OrderVO> orderVOList = new ArrayList<>();

        List<Orders> ordersList = page.getRecords();
        if (!CollectionUtils.isEmpty(ordersList)) {
            for (Orders orders : ordersList) {
                // 将共同字段复制到OrderVO
                OrderVO orderVO = new OrderVO();
                BeanUtils.copyProperties(orders, orderVO);
                String orderDishes = getOrderDishesStr(orders);
                // 将订单菜品信息封装到orderVO中,并添加到orderVOList
                orderVO.setOrderDishes(orderDishes);
                orderVOList.add(orderVO);
            }
        }
        return orderVOList;
    }

    /**
     * 根据订单id获取菜品信息字符串
     */
    private String getOrderDishesStr(Orders orders) {
        // 查询订单菜品详情信息(订单中的菜品和数量)
        LambdaQueryWrapper<OrderDetail> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(OrderDetail::getOrderId, orders.getId());
        List<OrderDetail> orderDetailList = orderDetailMapper.selectList(queryWrapper);

        // 将每一条订单菜品信息拼接为字符串(格式:宫保鸡丁*3;)
        List<String> orderDishList = orderDetailList.stream().map(x -> {
            String orderDish = x.getName() + "*" + x.getNumber() + ";";
            return orderDish;
        }).toList();
        // 将该订单对应的所有菜品信息拼接在一起
        return String.join("", orderDishList);
    }

各个状态的订单数量统计

OrderController

    /**
     * 各个状态的订单数量统计
     */
    @GetMapping("/statistics")
    @ApiOperation("各个状态的订单数量统计")
    public Result<OrderStatisticsVO> statistics() {
        OrderStatisticsVO orderStatisticsVO = orderService.statistics();
        return Result.success(orderStatisticsVO);
    }

OrderService

    /**
     * 各个状态的订单数量统计
     */
    OrderStatisticsVO statistics();

OrderServiceImpl

    /**
     * 各个状态的订单数量统计
     */
    @Override
    public OrderStatisticsVO statistics() {
        // 根据状态,分别查询出待接单、待派送、派送中的订单数量
        Integer toBeConfirmed = orderMapper.countStatus(Orders.TO_BE_CONFIRMED);
        Integer confirmed = orderMapper.countStatus(Orders.CONFIRMED);
        Integer deliveryInProgress = orderMapper.countStatus(Orders.DELIVERY_IN_PROGRESS);

        // 将查询出的数据封装到orderStatisticsVO中响应
        OrderStatisticsVO orderStatisticsVO = new OrderStatisticsVO();
        orderStatisticsVO.setToBeConfirmed(toBeConfirmed);
        orderStatisticsVO.setConfirmed(confirmed);
        orderStatisticsVO.setDeliveryInProgress(deliveryInProgress);
        return orderStatisticsVO;
    }

orderMapper

    /**
     * 统计订单状态
     */
    @Select("select count(id) from orders where status = #{status}")
    Integer countStatus(Integer toBeConfirmed);

查询订单详情

OrderController

    /**
     * 订单详情
     */
    @GetMapping("/details/{id}")
    @ApiOperation("订单详情")
    public Result<OrderVO> details(@PathVariable Long id) {
        OrderVO orderVO = orderService.details(id);
        return Result.success(orderVO);
    }

接单

OrderController

 /**
     * 接单
     */
    @PutMapping("/confirm")
    @ApiOperation("接单")
    public Result confirm(@RequestBody OrdersConfirmDTO ordersConfirmDTO) {
        orderService.confirm(ordersConfirmDTO);
        return Result.success();
    }
### OrderService
```java
    /**
     * 接单
     */
    void confirm(OrdersConfirmDTO ordersConfirmDTO);

OrderServiceImpl

     /**
     * 接单
     */
    @Override
    public void confirm(OrdersConfirmDTO ordersConfirmDTO) {
        Orders orders = Orders.builder()
                .id(ordersConfirmDTO.getId())
                .status(Orders.CONFIRMED)
                .build();
        orderMapper.updateById(orders);
    }

http://www.kler.cn/a/350039.html

相关文章:

  • 简识JVM栈帧中的操作数栈
  • STM32 ST7735 128*160
  • HTTP 配置与应用(局域网)
  • Linux中关于glibc包编译升级导致服务器死机或者linux命令无法使用的情况
  • 第11篇:vue3 中 props 的使用
  • GD32L233RB 驱动数码管
  • 集成mqtt协议 并以线程池来读取请求
  • springboot医院预约挂号系统
  • Paramiko的keepalive机制
  • ubuntu安装docker及docker compose
  • 创建包含可导入浏览器信任的SSL自签名证书
  • jeecg3版本的vue,离线启动
  • Python中asyncio的多种用法:异步同步
  • 解决php连接本地mysql连接错误的问题
  • MySQL改密码后不生效问题
  • Flutter-发现局域网中的设备
  • 使用Qwen千问大模型和LangChain打造RAG应用
  • QObject: Cannot create children for a parent that is in a different thread
  • mysql 慢查询记录
  • docker网络管理详解 一
  • 各种软件学习版本Mark 长更
  • springBoot 实现 cas身份认证登录
  • 【计算机网络】详解IP协议网段划分路由转发子网掩码网络号
  • 78天闭门深造1258页SpringCloud学习进阶笔记,再战蚂蚁金服
  • C++中的引用详解
  • SpringCloud学习:Maven父工程创建、微服务工程化编写步骤(约定 > 配置 > 编码)