上篇我们写了第一个功能,创建订单,接下来我们来实现剩下的功能。
1.先把OrderService接口再展示出来。
public interface OrderService {
//接口只是搭建一个架子,主要还是怎么去实现
//创建订单
OrderDTO create(OrderDTO orderMaster);//创建一个订单,就要返回订单表,这个方法就是传入OrderDTO这个类,
// 一顿操作之后就返回创建的这个订单了,而且还包含多个。
//查询单个订单
OrderDTO findOne(String orderId);
//查询订单列表
Page<OrderDTO> findList(String buyerOpenid, Pageable pageable);//买家端是查某一个人的,
//取消订单
OrderDTO cancel(OrderDTO orderDTO);
//完结订单
OrderDTO finish(OrderDTO orderDTO);
//支付订单
OrderDTO paid(OrderDTO orderDTO);
//买家端和卖家端分隔符
//查询订单列表
Page<OrderDTO> findList( Pageable pageable);
}
2.接下来继续在OrderServiceImpl中实现这些方法。
2.1订单查询
根据orderId进行查询订单,从数据库中查询,使用orderMasterRepository.findById这个方法查询,得到这个订单,如果查不到就抛出异常。
如果查到了就根据这个orderId使用orderDetailRepository.findByOrderId这个方法查询到订单详情列表,如果查到的订单详情列表是空的,就再抛出一个异常。
如果都存在,那么我们就建一个OrderDto对象,把OrderMaster的属性赋值给这个对象,就差一个订单详情列表,再设置一下,就把这个对象填充完毕了。
// An highlighted block
@Override
public OrderDTO findOne(String orderId) {
OrderMaster orderMaster = orderMasterRepository.findById(orderId).orElse(null);
if (orderMaster == null) {
throw new SellException(ResultEnum.ORDER_NOT_EXIST);
}
List<OrderDetail> orderDetailList = orderDetailRepository.findByOrderId(orderId);
if (CollectionUtils.isEmpty(orderDetailList)) {
throw new SellException(ResultEnum.ORDERDETAIL_NOT_EXIST);
}
OrderDTO orderDTO = new OrderDTO();
BeanUtils.copyProperties(orderMaster, orderDTO);
orderDTO.setOrderDetailList(orderDetailList);
return orderDTO;
}
2.2根据买家的openid分页查询出所有的订单主表
由于我们查询的是Page,但是方法返回的是Page,所有还要再进行类型的转换,为了不每次都执行这样的操作,我们建一个类专门用来进行这样的操作。
// An highlighted block
public class OrderMaster20rderDTOConverter {
//建立这个的目的就是为了把两个类的属性方便放到一起,把前者属性对应的值给后者、
public static OrderDTO convert(OrderMaster orderMaster) {
OrderDTO orderDTO = new OrderDTO();
BeanUtils.copyProperties(orderMaster, orderDTO);
return orderDTO;
}
public static List<OrderDTO> convert(List<OrderMaster> orderMasterList) {
return orderMasterList.stream().map