学习【瑞吉外卖⑧】SpringBoot单体项目_订单业务管理功能



  • 本文章发布在CSDN上,一是方便博主自己线上阅览,二是巩固自己所学知识。
  • 博客内容主要参考上述视频和资料,视频中出现的 PPT 内容大体也为本文所录。
  • 对于视频中要求自行开发的功能,本博客也补充了。



上一篇学习瑞吉外卖⑦SpringBoot单体项目https://blog.csdn.net/yanzhaohanwei/article/details/125245214


0.总目录



1.订单展示


1.1.前端分析


http://localhost:8080/backend/index.html

在这里插入图片描述

请求网址http://localhost:8080/order/page?page=1&pageSize=10

请求方式GET

字符串参数page=1&pageSize=10


但是前面我们已经有 public R<Page> page(int page, int pageSize); 这个方法了,所以很明显参数不只这俩。

这个时候我们需要查看 resources 下的 backend/index.html 中的部分代码

{
    id: '6',
    name: '订单明细',
    url: 'page/order/list.html',
    icon: 'icon-order'
}

接着查看 resources 目录下的 backend/page/order/list.html

methods: {
async init() {
    getOrderDetailPage({
        page: this.page,
        pageSize: this.pageSize,
        number: this.input || undefined,
        beginTime: this.beginTime || undefined,
        endTime: this.endTime || undefined
    }).then(res => {
        if (String(res.code) === '1') {
            this.tableData = res.data.records || []
            this.counts = res.data.total
        }
    }).catch(err => {
        this.$message.error('请求出错了:' + err)
    })
},

显然,有五个参数:pagepageSizenumberbeginTimeendTime


1.2.梳理交互过程


  • 在开发代码之前,需要梳理一下整个程序的执行过程
    • 页面发送 ajax 请求,将分页查询参数(pagepageSizenumberbeginTimeendTime)提交到服务端
    • 服务端 Controller 接收页面提交的数据并调用 Service 查询数据
    • Service 调用 Mapper 操作数据库,查询分页数据
    • Controller 将查询到的分页数据响应给页面
    • 页面接收到分页数据并通过 ElementUITable 组件展示到页面上

1.3.代码开发


很明显这里涉及到了两张表的字段,所以我们这里要用到 Dto 类。

此处代码源自博客 Java项目实战 | 瑞吉外卖Day06 | 功能补充https://www.cnblogs.com/KizunaAI/p/16281559.html#管理端订单明细

com/itheima/reggie/controller/OrderController.java

/**
 * 订单的分页查询
 *
 * @param page
 * @param pageSize
 * @param number
 * @param beginTime
 * @param endTime
 * @return
 */
@GetMapping("/page")
public R<Page> page(int page, int pageSize, String number, String beginTime, String endTime) {
    //构造分页构造器
    Page<Orders> ordersPageInfo = new Page<>(page, pageSize);
    Page<OrdersDto> ordersDtoPageInfo = new Page<>();

    //构造条件构造器
    LambdaQueryWrapper<Orders> queryWrapper = new LambdaQueryWrapper<>();
    //根据 number 进行模糊查询
    queryWrapper.like(!StringUtils.isEmpty(number), Orders::getNumber, number);
    //根据 Datetime 进行时间范围查询
    if (beginTime != null && endTime != null) {
        queryWrapper.ge(Orders::getOrderTime, beginTime);//ge :大于等于 >=
        queryWrapper.le(Orders::getOrderTime, endTime);//le :小于等于 <=
    }

    //添加排序条件
    queryWrapper.orderByDesc(Orders::getOrderTime);

    //进行分页查询
    orderService.page(ordersPageInfo, queryWrapper);

    //对象拷贝
    BeanUtils.copyProperties(ordersPageInfo, ordersDtoPageInfo, "records");

    List<Orders> records = ordersPageInfo.getRecords();

    List<OrdersDto> list = records.stream().map((item) -> {
        OrdersDto ordersDto = new OrdersDto();
        BeanUtils.copyProperties(item, ordersDto);
        
        //此处相当于是给 userName 赋值 consignee_userId
        String consignee = item.getConsignee();
        String name = consignee + "_" + item.getUserId();
        ordersDto.setUserName(name);
        
        return ordersDto;
    }).collect(Collectors.toList());

    ordersDtoPageInfo.setRecords(list);
    return R.success(ordersDtoPageInfo);
}

1.4.效果展示


  • resources 目录下 的 backend/page/order/list.html 的部分代码为
    • <el-table-column prop="userName" label="用户"></el-table-column>
  • 可知此处的用户是指 “userName”
  • user 表中的 name 字段都是空的,所以这里做了一下处理
    • 使得 “userName” 变为 consignee_userId 这两个字段的连接

在这里插入图片描述


2.修改订单状态


2.1.前端分析


点击界面的 “派送” 按钮后,出现下面的情况。

http://localhost:8080/backend/index.html

在这里插入图片描述

请求网址http://localhost:8080/order

请求方式PUT

请求内容{"status":3,"id":"1538460744050278402"}


2.2.梳理交互过程


在开发代码之前,需要梳理一下整个程序的执行过程

  1. 页面发送 ajax 请求,将参数(idstatus)提交到服务端
  2. 服务端 Controller 接收页面提交的数据并调用 Service 更新数据
  3. Service 调用 Mapper 操作数据库

2.3.代码开发


com/itheima/reggie/controller/OrderController.java

/**
 * 后台修改订单状态
 *
 * @param orders
 * @return
 */
@PutMapping
public R<String> status(@RequestBody Orders orders) {
    Long orderId = orders.getId();
    Integer status = orders.getStatus();

    if(orderId == null || status==null){
        return R.error("传入信息不合法");
    }

    LambdaQueryWrapper<Orders> queryWrapper = new LambdaQueryWrapper<>();
    queryWrapper.eq(Orders::getId, orderId);
    Orders one = orderService.getOne(queryWrapper);
    one.setStatus(status);
    
    orderService.updateById(one);
    return R.success("派送成功");
}

2.4.效果展示


status1.待付款,2.待派送,3.已派送,4.已完成,5.已取消

在这里插入图片描述

数据库中的表:orders

在这里插入图片描述


【瑞吉外卖 | SpringBoot 项目】的初步开发至此结束。


  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值