订单.md 8.2 KB

1. 界面

  1. 运营后台-订单管理-所有订单img
  2. 运营后台-订单管理-订单详情img

2. 数据库实体

整体实体类关系如下图:

img

  • OrderSettlement:一个订单会有一个结算信息,结算信息记录着用户的支付方式,支付金额等。
  • Order:一个订单的订单信息,记录着订单的订单状态、运费、备注等信息。
  • OrderItem:一个订单有多个订单项,每个订单项记录着每件商品的订单信息。
  • UserAddrOrder:订单地址信息,每个订单会有收货地址。

2.1 Order

Order,订单。一次下单,生成一条订单记录,即使多种商品。

字段较多,我们进行简单的切块。

2.1.1 基础字段

    /**
     * 订单ID
     */
    @TableId
    private Long orderId;

    /**
     * 店铺id
     */
    private Long shopId;
    
    /**
     * 订购流水号
     */
    private String orderNumber;

    /**
     * 订单状态 1:待付款 2:待发货 3:待收货 4:待评价 5:成功 6 交易失败
     */
    private Integer status;
    
    /**
     * 订购时间
     */
    private Date createTime;

    /**
     * 订单更新时间
     */
    private Date updateTime;

    /**
     * 付款时间
     */
    private Date payTime;

    /**
     * 发货时间
     */
    private Date dvyTime;

    /**
     * 完成时间
     */
    private Date finallyTime;

    /**
     * 取消时间
     */
    private Date cancelTime;
  • orderId :订单id,自增,没啥用。

  • orderNumber:订单编号例如:1060804015757070336 。通过雪花算法生成id。

  • shopId :店铺编号。

  • status:订单状态,交易主状态。交易会有较多分支状态,例如退款状态、物流状态等等状态。不同于分支状态,主状态控制整个订单的生命周期。

状态流转如下图:img

2.1.2 商品信息

    /**
     * 产品名称,多个产品将会以逗号隔开
     */
    private String prodName;
    
    /**
     * 总值
     */
    private Double total;

    /**
     * 实际总值
     */
    private Double actualTotal;
    
    /**
     * 订单商品总数
     */
    private Integer productNums;
    
    /**
     * 优惠总额
     */
    private Double reduceAmount;
  • 我们可以看到,该快字段主要冗余了多个商品的名称到交易记录中。

2.1.3 买家信息

    /**
     * 订购用户ID
     */
    private String userId;

    /**
     * 订单备注
     */
    private String remarks;
  • userId ,买家用户编号。

  • remarks ,买家购买备注。

img

2.1.4 价格信息

    /**
     * 总值
     */
    private Double total;

    /**
     * 实际总值
     */
    private Double actualTotal;
    
    /**
     * 订单运费
     */
    private Double freightAmount;
    
    /**
     * 优惠总额
     */
    private Double reduceAmount;

  • total :商品总价。该字段通过 OrderItem的 price 求和计算。

  • freightAmount :运费总价。该字段通过 OrderItem的商品的运费价格求和计算。

  • reduceAmount:交易优惠金额。注意,Order 的

    • 购买的商品参加

    折扣活动,原价 100 元,折扣价 10 元。那么数据如下(我们会看到折扣活动跟着 商品走):

    • total = 100reduceAmount = 10actualTotal = 90

    • 购买的商品使用优惠劵,在上面例子的基础上,优惠劵打 2 折。那么数据如下(我们会看到优惠劵跟着 Trade 走):

    • total = 100reduceAmount = 82actualTotal = 18

  • actualTotalactualTotal = total + freightAmount - reduceAmount

2.1.5 物流

    /**
     * 配送类型
     */
    private String dvyType;

    /**
     * 配送方式ID
     */
    private Long dvyId;

    /**
     * 物流单号
     */
    private String dvyFlowId;

通过物流的id获取物流方式,提供给前端显示

2.2 收货人信息UserAddrOrder

public class UserAddrOrder implements Serializable {
    /**
     * ID
     */
    @TableId
    private Long addrOrderId;

    /**
     * 地址ID
     */
    private Long addrId;

    /**
     * 用户ID
     */
    private String userId;

    /**
     * 收货人
     */
    private String receiver;

    /**
     * 省
     */
    private String province;
    
    /**
     * 城市
     */
    private String city;
    
    /**
     * 区
     */
    private String area;

    /**
     * 地址
     */
    private String addr;

    /**
     * 邮编
     */
    private String postCode;

    /**
     * 省ID
     */
    private Long provinceId;
    
    /**
     * 城市ID
     */
    private Long cityId;
    
    /**
     * 区域ID
     */
    private Long areaId;

    /**
     * 手机
     */
    private String mobile;

    /**
     * 建立时间
     */
    private Date createTime;

    /**
     * 版本号
     */
    private Integer version;

}
  • addrOrderId ,收货人的地址编号。
  • receiver 等等冗余交易的收货地址信息,避免买家修改收货人地址编号对应的地址信息。

2.3 结算信息OrderSettlement


public class OrderSettlement implements Serializable {
    /**
     * 支付结算单据ID
     */
    @TableId

    private Long settlementId;

    /**
     * 用户系统内部的订单号
     */
    private String payNo;

    /**
     * 外部订单流水号
     */
    private String bizPayNo;
    
    /**
     * 订单号
     */
    private String orderNumber;
    
    /**
     * 支付方式 0 手动代付 1 微信支付 2 支付宝
     */

    private Integer payType;

    /**
     * 支付金额
     */
    private Double payAmount;

    /**
     * 用户ID
     */

    private String userId;

    /**
     * 是否清算 0:否 1:是
     */

    private Integer isClearing;

    /**
     * 创建时间
     */

    private Date createTime;

    /**
     * 清算时间
     */

    private Date clearingTime;

    /**
     * 支付状态
     */
    private Integer payStatus;
    
    /**
     * 版本号
     */
    private Integer version;

    /**
     * 支付方式名称
     */
    private String payTypeName;

}
  • orderNumber :关联订单的订单号
  • payNo: 支付时的支付订单号,根据雪花算法生成
  • payAmount:实付金额。
  • bizPayNo:外部交易编号。比如,如果支付方式是微信支付,就是财付通的交易单号。

2.4 订单项 OrderItem

每个订单都会有多个商品,每个商品就是一个订单项。

    /**
     * 订单项ID
     */
    @TableId(type = IdType.AUTO)
    private Long orderItemId;


    private Long shopId;

    /**
     * 订单orderNumber
     */
    private String orderNumber;

    /**
     * 产品ID
     */

    private Long prodId;

    /**
     * 产品SkuID
     */
    private Long skuId;

    /**
     * 购物车产品个数
     */
    private Integer prodCount;

    /**
     * 产品名称
     */
    private String prodName;

    /**
     * sku名称
     */
    private String skuName;

    /**
     * 产品主图片路径
     */
    private String pic;

    /**
     * 产品价格
     */
    private Double price;

    /**
     * 用户Id
     */

    private String userId;

    /**
     * 商品总金额
     */
    private Double productTotalAmount;

    /**
     * 购物时间
     */

    private Date recTime;

    /**
     * 评论状态: 0 未评价  1 已评价
     */
    private Integer commSts;

    /**
     * 推广员使用的推销卡号
     */
    private String distributionCardNo;

    /**
     * 加入购物车的时间
     */
    private Date basketDate;
  • orderNumber :订单编号,指向 Order.orderNumber
  • prodId:商品id
  • 冗余商品字段:
    • prodName ,商品标题。
    • pic ,商品主图片地址。
  • skuId ,商品 SKU 编号,指向 ItemSku.id
  • 冗余商品 SKU 字段:
    • skuName ,SKU的值,即:商品的规格。如:机身颜色:黑色;手机套餐:官方标配。
  • num ,购买数量。