苍穹外卖 管理端订单分页查询
OrderController
/**
* 订单分页查询
*
* @param ordersPageQueryDTO
* @return
*/
@GetMapping("/conditionSearch")
@ApiOperation("订单分页查询")
public Result<PageResult> conditionSearch(OrdersPageQueryDTO ordersPageQueryDTO) {
PageResult pageResult = orderService.conditionSearch(ordersPageQueryDTO);
// 封装PageResult响应
return Result.success(pageResult);
}
OrderService
/**
* 订单分页查询
*
* @param ordersPageQueryDTO
* @return
*/
@Override
public PageResult conditionSearch(OrdersPageQueryDTO ordersPageQueryDTO) {
// 使用PageHelper分页插件辅助分页
PageHelper.startPage(ordersPageQueryDTO.getPage(), ordersPageQueryDTO.getPageSize());
Page<Orders> page = orderMapper.pageQuery(ordersPageQueryDTO);
// 部分订单状态,需要额外返回订单菜品信息,所以说将Orders对象转化为OrderVO
List<OrderVO> orderVOList = getOrderVOList(page);
return new PageResult(page.getTotal(), orderVOList);
}
private List<OrderVO> getOrderVOList(Page<Orders> page) {
// 需要返回订单菜品信息,自定义OrderVO响应结果
List<OrderVO> orderVOList = new ArrayList<>();
// 这是分页查询出来的所有的Orders订单信息,
List<Orders> ordersList = page.getResult();
// 先确保分页查询有结果
if (!CollectionUtils.isEmpty(ordersList)) {
for (Orders orders : ordersList) {
// 将Orders对象封装为对应的OrderVO对象
// 将Orders中和OrderVO相同的字段复制到OrderVO中
OrderVO orderVO = new OrderVO();
BeanUtils.copyProperties(orders, orderVO);
// 将菜品详细信息封装为一个字符串
String orderDishes = getOrderDishesStr(orders);
// 将订单菜品信息封装到orderVO中,并添加到orderVOList返回
orderVO.setOrderDishes(orderDishes);
orderVOList.add(orderVO);
}
}
return orderVOList;
}
/**
* 根据订单id获取菜品信息字符串
*
* @param orders
* @return
*/
private String getOrderDishesStr(Orders orders) {
// 查询菜品的详情信息(订单中的菜品和数量)
List<OrderDetail> orderDetailList = orderDetailMapper.getByOrderId(orders.getId());
// 将每一条订单菜品信息拼接为字符串(如:宫保鸡丁 * 3)
List<String> orderDishList = orderDetailList.stream().map(x -> {
String orderDish = x.getName() + " * " + x.getNumber() + ";";
return orderDish;
}).collect(Collectors.toList());
// 将该订单对应的所有菜品信息拼接在一起返回
// 将orderDishList中的元素以空字符串("")作为连接符连接成一个字符串。
return String.join("", orderDishList);
}
OrderMapper
<select id="pageQuery" resultType="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>
<if test="endTime != null">
and order_time <= #{endTime}
</if>
</where>
order by order_time desc
</select>