多租户部署架构
领域模型
核心模型
详细模型
架构设计
系统架构图
逻辑分层
强弱依赖
系统流程图
状态机
系统交互图
@startuml
actor "消费者" as user
participant "交易" as buy
participant "履约" as fullfillment
participant "菜鸟" as cainiao
participant "支付" as pay
participant "ipay" as ipay
participant "结算" as jiesuan
activate user
activate buy
user -> buy: 1:购物车进入下单页
note left of user:订单包含商品ABC,物理包裹:\n包裹1:A、B\n包裹1:C
user -> buy: 2:提交订单
buy -> buy: 2.1 创建交易单
buy -> pay: 2.2 创建支付收单
activate pay
pay -> pay: 2.2.1 创建支付单
pay -> ipay: 2.2.2 支付下单
activate ipay
ipay -> ipay: 2.2.3 创单
ipay -> pay:2.2.4: 返回支付成功
pay -> buy: 2.2.5: 返回支付成功并推进状态至“已付款”
buy -> fullfillment: 2.3 通知履约创建履约单
activate fullfillment
fullfillment -> fullfillment: 2.3.1 履约开始
fullfillment -> fullfillment: 2.3.2 履约出货
fullfillment -> cainiao: 2.3.3 通知菜鸟发货
activate cainiao
cainiao -> cainiao: 3 包裹1发货
cainiao -> fullfillment: 3.1 同步包裹1发货状态至履约
fullfillment -> buy: 3.2 同步包裹1发货状态至交易
buy -> buy: 3.3 交易更新A、B商品子单状态为已发货
cainiao -> cainiao: 4 包裹1签收
cainiao -> fullfillment: 4.1 同步包裹1已签收状态至履约
fullfillment -> buy: 4.2 同步包裹1已签收状态至交易
buy -> buy: 4.3 交易更新A、B商品子单状态为已发货
user -> buy: 5 包裹1确认收货
buy -> buy: 5.1 消费者主动确认收货或超时自动确认收货
buy -> jiesuan: 5.2 通知结算A、B商品子单已确认收货
activate jiesuan
jiesuan -> jiesuan: 5.3 开始结算A、B商品子订单对应的款项 和 主单的运费款项
note right of jiesuan: 运费在主单维度\n主单下任一子单确认收货,开始结算主单运费\n需幂等避免重复结算
@enduml
核心流程
订单渲染
订单创建
外部系统交互
订单支付
订单发货
订单确认收货
超时未支付
- 下单后30分钟未支付,释放库存
- 下单后24小时未支付,关闭交易单
超时确认收货
逆向影响确认收货的状态
- REQUEST_INITIATE –暂停超时
- REQUEST_CANCEL – 恢复超时(终态)
- REFUND_REJECT – 恢复超时(终态)
- REFUND_SUCCESS – 恢复超时(终态)
妥投前发生逆向
交易收到妥投消息后,插入确认收货超时。异步接交易自身的妥投消息,check逆向状态,如果包裹中有任何一笔逆向中的子单,则暂停确认收货超时。
妥投后发生逆向
交易监听逆向的REQUEST_INITIATE、REQUEST_CANCEL、REFUND_REJECT、REFUND_SUCCESS消息,考虑到消息乱序的场景(如CANCEL早于INITIATE先到),交易收到逆向消息后,查询发生了逆向的子单所在包裹下全部子单的逆向状态,如果任何一笔处于逆向中,则暂停超时,否则恢复超时。(超时中心的暂停、恢复操作会幂等掉,重复暂停或者恢复不会报错)