一、订单明细后台显示功能补全
需求分析
当小程序点击支付订单后,管理端中订单明细模块可以显示出支付后的订单。
交互过程
通过浏览器进行订单明细的查询,当我们点击订单明细后,可以看到也是分页查询的基本操作
代码实现
订单明细其实也是一个分页查询的功能实现,使用了MyBatis-Plus的QueryWrapper
类来构建数据库查询条件。构建查询条件的一部分,
-
queryWrapper.like(number!=null, Orders::getNumber, number);
: 这行代码检查变量number
是否不为null
。如果number
不为空,则添加一个条件,使得查询结果中Orders
表的number
字段包含number
变量的值。 -
queryWrapper.gt(StringUtils.isNotBlank(beginTime), Orders::getOrderTime, beginTime);
: 这行代码首先使用StringUtils.isNotBlank
方法检查beginTime
变量是否不为空且不只包含空白字符。如果beginTime
不为空,那么添加一个条件,使得查询结果中Orders
表的orderTime
字段的值大于beginTime
。 -
queryWrapper.lt(StringUtils.isNotBlank(endTime), Orders::getOrderTime, endTime);
: 这行代码与上一行类似,但是它检查的是endTime
。如果endTime
不为空,那么添加一个条件,使得查询结果中Orders
表的orderTime
字段的值小于endTime
。
Orders::getNumber
和 Orders::getOrderTime
是方法引用,它们分别引用了Orders
实体类中获取number
和orderTime
字段值的方法。
QueryWrapper
是一个动态SQL生成器,它允许你以一种声明式的方式构建复杂的查询条件,而不需要手动编写SQL语句。这种方式可以提高代码的可读性和可维护性。
分页查询基本步骤离不开这几个操作:
1、构造分页构造器
Page<A> pageInfo = new Page<>(page,pageSize)
2、构造条件构造器
LambdaQueryWrapper<A> queryWrapper = new LambdaQueryWrapper<>();
3、添加过滤条件
4、添加排序条件
queryWrapper.XX(A::XX);
5、执行分页查询
.page(pageInfo,queryWrapper)
二、订单明细修改功能补全
需求分析
当订单派送完成后,点击派送按钮修改订单状态
交互过程
代码实现
-
public R<String> orderStatusChange(@RequestBody Map<String,String> map)
:定义了一个名为orderStatusChange
的处理方法,它接受一个Map<String, String>
类型的请求体参数,并且返回一个R<String>
类型的对象。R
可能是一个自定义的响应实体类,用于封装响应的数据和状态信息。 -
String id = map.get("id");
:从请求体的Map中获取键为"id"的值,并将其赋值给变量id
。 -
Long orderId = Long.parseLong(id);
:将获取到的id
字符串转换为Long
类型,并赋值给变量orderId
。这里假设id
是订单的唯一标识符。 -
Integer status = Integer.parseInt(map.get("status"));
:从请求体的Map中获取键为"status"的值,并将其转换为Integer
类型,赋值给变量status
。这里假设status
是要修改的订单状态。 -
if(orderId == null || status == null){
:检查orderId
和status
是否为null
。如果任何一个为null
,则返回一个错误响应。 -
return R.error("该用户无订单");
:如果orderId
或status
为null
,则返回一个包含错误信息的R
对象。 -
Orders orders = ordersService.getById(orderId);
:调用ordersService
的getById
方法,根据orderId
查询订单数据。 -
orders.setStatus(status);
:将查询到的订单对象的status
属性设置为从请求体中获取的新状态。 -
ordersService.updateById(orders);
:调用ordersService
的updateById
方法,更新数据库中的订单状态。 -
return R.success("订单状态修改成功");
:如果订单状态修改成功,则返回一个包含成功信息的R
对象。
三、用户端订单查看功能补全
需求分析
当用户支付订单成功后,点击订单按钮可以查看订单明细
交互过程
代码实现
这段代码是一个Spring框架中的RESTful API端点的实现,使用了@GetMapping
注解来定义一个GET请求的处理器。代码实现了用户订单的分页查询功能,并且将查询结果封装到一个分页对象中返回。
首先将HTTP GET请求映射到下面的处理方法。定义了一个名为page
的处理方法,它接受两个整数参数page
和pageSize
,分别代表请求的页码和每页的记录数,返回一个R<Page>
类型的对象。R
可能是一个自定义的响应实体类,Page
是MyBatis-Plus的分页结果类。创建一个Orders
类型对象的分页对象pageInfo
,初始化页码和每页大小。OrdersDto
类型对象的分页对象pageDto
,用于存储转换后的分页数据。
然后创建一个条件查询对象queryWrapper
,用于构建查询条件。添加一个查询条件,筛选出用户ID等于当前登录用户ID的订单。添加一个排序条件,根据订单的更新时间降序排列。调用ordersService
的page
方法,传入分页对象和查询条件,执行分页查询。获取分页查询结果中的记录列表。使用Java 8的流(Stream)对查询结果进行处理,将每个Orders
对象转换为OrdersDto
对象,并为OrdersDto
对象的orderDetails
属性赋值。使用Apache Commons BeanUtils库的copyProperties
方法,将Orders
对象的属性复制到OrdersDto
对象。为OrdersDto
对象的orderDetails
属性赋值,即设置订单明细列表。将pageInfo
的属性复制到pageDto
,除了records
属性。设置pageDto
的records
属性为转换后的订单明细DTO列表。
最后返回一个包含分页数据的R
对象,表示操作成功。
这段代码实现了分页查询用户订单的功能,并且对查询结果进行了转换和封装,最终返回给客户端。代码中使用了MyBatis-Plus的分页功能和Lambda表达式来构建查询条件,以及Java 8的流操作来处理集合数据。此外,还使用了Apache Commons BeanUtils库来简化对象属性的复制过程。
四、用户端再来一单功能补全
需求分析
当用户支付完成订单后想再来一单时,可以在订单查看那点击再来一单。