扯扯单据的事情

本文主要是初步记录一下关于单据零散的想法。

单据实体

单据这个实体,其实从抽象的层面来说,它其实描述了一次行为:

谁,在什么时间点,用了什么样的成本,对什么目标产生了一次什么样的行为

如果让我们来对上面这句话进行解析,其实可以发现它可以拆分为下面几块:

  • 时间信息
  • 成本
  • 行为描述
  • 行为目标

下面我们来一次分析这个问题。

一般订单的发起者其实都是【用户】,当然这个用户并不一定是C端用户。而用户的信息如何描述呢?一般的公司都会有【用户中心】,或者【供应商管理系统】等等的来描述【用户】的信息。做的好的公司也会有【用户画像】

时间信息

时间信息一般分为2类:

  • 行为动作的产生时间
    • 比如用户的下单时间
  • 行为动作所带来的影响发生的时间
    • 用户购买的商品的出库时间
    • 用户购买的商品的送货时间
    • 用户购买的商品的预计收货时间
    • 前者是用户主动产生的,后者其实对用户来说是被动的。

成本信息

用户在下订单的时候往往都会消耗一定的成本,这个成本并不一定是金钱。可能是:

  • 金钱
  • 积分
  • 优惠券
  • 等等

行为描述

行为描述主要是用来解释行为,比如:

  • 购买行为
  • 退货行为

不同的行为会有不同的属性信息,比如购买行为会有购买的数量,购买服务的持续时间等。

行为目标

行为的目标可以是物理实体,比如商品(一瓶可乐),也可以是虚拟实体,比如一次服务。

  • 商品
  • 服务
  • 流量
  • 等等
    而具体的目标也会有一大套自己的模型和属性。比如商品的sku就是一套很经典的模型。

单据本身的信息

单据本身也需要一些自己的属性信息:

  • 单号
  • 单据类型
  • 状态机

关于单据号的设计可以很有讲究,一般会有如下的考虑:

  • 单据号的形式,长度
  • 是否有业务含义
  • 业务含义的具体信息
  • 业务含义占单据号的长度
  • 是否连续(可遍历)
  • 单据创建时间
  • 单据生成的serverIP
  • 路由信息
    • 分库分表的依据
    • 其他路由形式
  • 单据数量增长对单据号的影响
  • 单据号长度的划分
  • 每秒最大单据数量预估

关于路由信息也有一个需要注意的点,就是要尽量做到数据分布平衡。

单据流程

单据的流程一般有正向流程和逆向流程。考虑到解耦和业务复杂度不可控导致的变数,一般情况下建议正向和逆向分开设计和实现。然后通过单号等信息进行关联。

正向流程

订单正常生产到配送的过程

逆向流程

逆向流程则指订单发生取消、退货等情况时引发的订单流程过程。

本文版权归作者所有,禁止一切形式的转载,复制等操作
赞赏

微信赞赏支付宝赞赏

发表评论

电子邮件地址不会被公开。 必填项已用*标注