继续上一节的内容,本节是作业课,要求独立完成:用户端历史订单模块、商家端订单管理模块相关业务新功能开发和已有功能优化。
目录
作业要求
1.用户端历史订单模块:
- 查询历史订单
- 查询订单详情
- 取消订单
- 再来一单
商家端订单管理模块:
- 订单搜索
- 各个状态的订单数量统计
- 查询订单详情
- 接单
- 拒单
- 取消订单
- 派送订单
- 完成订单
2.已有功能优化
优化用户下单功能,加入校验逻辑,如果用户的收货地址距离商家门店超出配送范围(配送范围为5公里内),则下单失败。
提示:
1. 基于百度地图开放平台实现
2. 注册账号—>创建应用获取AK(服务端应用)—>调用接口
3.相关接口1,相关接口2
4.商家门店地址可以配置在配置文件中,例如:
sky:
shop:
address: 北京市海淀区上地十街10号
实战要求:
根据产品原型进行需求分析和接口设计
根据接口设计进行代码实现
分别通过swagger接口文档和前后端联调进行功能测试
用户端历史订单模块
查询历史订单
user/OrderController
/**
* 查询历史订单
*
* @param page
* @param pageSize
* @param status 订单状态 1待付款 2待接单 3已接单 4派送中 5已完成 6已取消
* @return
*/
@GetMapping("/historyOrders")
@ApiOperation("用户查询历史订单")
public Result<PageResult> page(int page, int pageSize, Integer status) {
// status可缺省 使用包装类
log.info("用户历史订单分页查询,page:{},pageSize:{},status:{}", page, pageSize, status);
PageResult pageResult = orderService.pageQuery(page, pageSize, status);
return Result.success(pageResult);
}
OrderServiceImpl
/**
* 查询历史订单
*
* @param page
* @param pageSize
* @param status 订单状态 1待付款 2待接单 3已接单 4派送中 5已完成 6已取消
* @return
*/
public PageResult pageQuery(int page, int pageSize, Integer status) {
PageHelper.startPage(page,pageSize);
Long userId = BaseContext.getCurrentId();
OrdersPageQueryDTO ordersPageQueryDTO = new OrdersPageQueryDTO();
ordersPageQueryDTO.setStatus(status);
ordersPageQueryDTO.setUserId(userId);
Page<Orders> pageResult = orderMapper.pagerQuery(ordersPageQueryDTO);
// 查找出所有的order之后 还需要根据order的id去order_detail表中查找出相应的订单菜品
List<OrderVO> records = new ArrayList<>();
if(pageResult!=null && pageResult.size()>0){
for (Orders order : pageResult) {
Long orderId = order.getId();
// 查询订单明细
List<OrderDetail> orderDetailList = orderDetailMapper.getByOrderId(orderId);
OrderVO orderVO = new OrderVO();
BeanUtils.copyProperties(order,orderVO);
orderVO.setOrderDetailList(orderDetailList);
records.add(orderVO);
}
}
return new PageResult(pageResult.getTotal(),records);
}
OrderMapper
/**
* 分页条件查询并按下单时间排序
* @param ordersPageQueryDTO
*/
Page<Orders> pageQuery(OrdersPageQueryDTO ordersPageQueryDTO);
OrderMapper.xml
<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>
OrderDetailMapper
/**
* 根据订单id查询订单明细
* @param orderId
* @return
*/
@Select("select * from order_detail where order_id = #{orderId}")
List<OrderDetail> getByOrderId(Long orderId);
测试:
查询订单详情
user/OrderController
/**
* 查询订单详情
*
* @param id 订单id
* @return
*/
@GetMapping("/orderDetail/{id}")
@ApiOperation("用户查询订单详情")
public Result<OrderVO> details(@PathVariable Long id) {
log.info("用户查询订单详情,订单id:{}", id);
OrderVO orderVO = orderService.details(id);
return Result.success(orderVO);
}
OrderServiceImpl
/**
* 查询订单详情
*
* @param id 订单id
* @return
*/
public OrderVO details(Long id) {
Orders orders = orderMapper.getById(id); // 根据订单id查询订单
OrderVO orderVO = new OrderVO();
BeanUtils.copyProperties(orders,orderVO);
// 查询该订单对应的菜品/套餐明细
List<OrderDetail> orderDetailList = orderDetailMapper.getByOrderId(id);
orderVO.setOrderDetailList(orderDetailList);
return orderVO;
}