(八)微信点餐项目-买家订单Service层的开发与测试(上)

本文介绍了微信点餐项目的订单Service层开发,包括创建OrderDTO类来辅助查询,定义OrderService接口及其实现。详细阐述了创建订单的步骤,如检查商品存在、计算总价、保存订单详情和主表、更新库存等。同时提到了测试类OrderServiceImplTest的创建。
摘要由CSDN通过智能技术生成

1.在创建Service层之前,我们先创建一个OrderDTO类,这个类的作用是辅助查询,数据传输的作用。因为订单主表中没有order_detail这个属性,但是我们想从OrderMaster类中查出所有的OrderDetail,所有就使用OrderDTO这个类去建立一个桥梁,把我们想实现的功能加进去,在原来的OrderMaster基础上再添加一个属性OrderDetailList属性。

// An highlighted block
@Data
//@JsonInclude(JsonInclude.Include.NON_NULL)//加这个就可以使返回为null的属性不显示
public class OrderDTO {
   //这个包就是用来数据传输用的,用于各个层中传输用的

   /**
     * 订单id.
     */
    private String orderId;

    /**
     * 买家名字.
     */
    private String buyerName;

    /**
     * 买家手机号.
     */
    private String buyerPhone;

    /**
     * 买家地址.
     */
    private String buyerAddress;

    /**
     * 买家微信Openid.
     */
    private String buyerOpenid;

    /**
     * 订单总金额.
     */
    private BigDecimal orderAmount;

    /**
     * 订单状态, 默认为0新下单.
     */
    private Integer orderStatus;//对于状态的定义,不要搞什么0.1什么的。弄一个枚举来表示

    /**
     * 支付状态, 默认为0未支付.
     */
    private Integer payStatus;//这种枚举的方法,就是直接是枚举类名.里面定义的方法.getCode()。

    /**
     * 创建时间.
     */
    @JsonSerialize(using = Date2LongSerializer.class)
    private Date createTime;//到时候我们的订单列表中进行一个排序,肯定要按照时间来排。
    @JsonSerialize(using = Date2LongSerializer.class)
    /** 更新时间. */
    private Date updateTime;

    //这就是为了解决,一个订单里含有多个商品的时候的情况
    private List<OrderDetail> orderDetailList;

    @JsonIgnore
    public OrderStatusEnum getOrderStatusEnum() {
   
        return EnumUtil.getByCode(orderStatus, OrderStatusEnum.class);
    }

    @JsonIgnore
    public PayStatusEnum getPayStatusEnum() {
   
        return EnumUtil.getByCode(payStatus, PayStatusEnum.class);
    }
}

2.接下来就实现OrderService层的功能,首先先建立一个接口,把要实现的功能列出来,对于订单服务这个类来说,实现的功能有:
根据OrderDTO创建一个订单。
根据订单号orderId查询一个订单。
根据买家的微信号Openid,查询订单列表。
根据OrderDTO取消这个订单。
根据OrderDTO完结这个订单。
根据OrderDTO支付这个订单。

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);
}

3.根据这个接口去实现它的功能。先实现第一个功能,创建订单,需要考虑五个问题:
第一,先从数据库中查询要下单的商品是否存在。
第二,计算这个订单中的所有商品总价是多少。
第三,把创建好的订单详情保存到数据库中,最终保存的还是订单详情表中。
第四,把订单详情保存完之后,就把订单主表的信息也保存到数据库中的订单表中。
第五,因为已经创建了订单,所有需要把下单的商品需要从数据库中的商品表中给去除相应的库存。

// An highlighted block
@Service
@Slf4j
public class OrderServiceImpl implements 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值