写点什么

订单系统的设计(20/100)

作者:hackstoic
  • 2022 年 3 月 13 日
  • 本文字数:2205 字

    阅读完需:约 7 分钟

本文主要讲订单系统的设计,包括业务架构,部署架构,表结构,流程设计等。 主要内容参考自网络的技术博文,有整理和删改,建议根据文末的参考文献去看原文。

业务架构

整个订单业务架构分为三个部分: 订单服务,订单逻辑和底层的服务支撑。

(1)订单服务该模块的主要功能是用户日常使用的服务和页面,主要有订单列表、订单详情、在线下单等,还包括为公共业务模块提供的多维度订单数据服务。(2)订单逻辑订单系统的核心,起着至关重要的作用,在订单系统负责管理订单创建、订单支付、订单生产、订单确认、订单完成、取消订单等订单流程。还涉及到复杂的订单状态规则、订单金额计算规则以及增减库存规则等。在 4 节核心功能设计中会重点来说。(3)底层服务信息化建设达到一定程度的企业,一般会将公司公共服务模块化,比如:产品,会构建对应的产品系统,代码、数据库,接口等相对独立。但是,这也带来了一个问题,比如:订单创建的场景下需要获取的信息分散在各个系统。

参考资料:

  • 还不知道,如何设计订单系统?来看这篇文章,很不错![1]

表的设计

订单的基本信息有五个:用户信息(who,谁下的单), 商品信息(what, 买了什么), 订单信息(when,什么时候买的),支付信息(cost, 花了多少钱),优惠信息(discount, 是否参与了优惠活动)

特别的,对于实物电商,还会有物流信息和收货信息;而虚拟商品/数字商品,则可以没有这两块的信息。

特别的,对于 SAAS 平台,还会有结算信息,以记录商品利润分成情况。

  • 用户信息:用户账号、等级信息;

  • 商品信息:规格、商品数量、商品价格、商品图片、商品链接;

  • 订单信息:订单编号、订单状态、订单时间;

  • 支付信息:支付方式、支付时间、支付状态、支付单号、商品总金额、商品实付金额、运费、抵扣、促销优惠金额、总优惠金额;

  • 结算信息:成本价,结算价格等;

  • 优惠信息:关联的优惠券、促销活动;

  • 物流信息:物流单号、物流公司、物流状态;

  • 收货信息:收货姓名、地址、电话;

参考资料:

  • 订单系统的表设计探讨[2]

  • 还不知道,如何设计订单系统?来看这篇文章,很不错![3]

流程设计

一套订单流程里会包含正向流程和逆向流程。

正向流程即正常的顺利和流畅的下单流程.

逆向流程即修改订单, 取消订单,退款,退货引发的流程。

订单的状态机设计(注: 状态机是对现实世界的抽象,它描述了一个事物的状态转换流程)

参考资料:

  • 还不知道,如何设计订单系统?来看这篇文章,很不错![4]

  • 电商核心订单系统的一些设计思考[5]

正向流程

以一个通用 B2C 商城的订单系统为例,根据其实际业务场景,其订单流程可抽象为 5 大步骤:订单创建>订单支付>订单生产>订单确认>订单完成。

  • 订单创建: 用户下单后,系统需要创建订单,创建订单前需要先获取商品信息,和优惠信息(有优惠的情况下获取); 下单如果涉及到库存扣减,还要考虑库存管理问题。具体请参考商品库存管理和秒杀系统设计[6]

  • 订单支付:用户支付完订单后,需要获取订单的支付信息,包括支付流水号、支付时间等

  • 订单生产:订单生产,是指产品从企业到用户这一流程的概述。如电商平台中,商家发货过程已有一个标准化的流程,订单内容会发送到仓库,仓库对商品进行打单、拣货、包装、交接快递进行配送。对数字商品而言,这块流程就是从供应商或者自建供应链取货。

  • 订单确认:收到货后,订单系统需要在快递被签收后提醒用户对商品做评价。这里要注意,确认收到货不代表交易成功,相反是售后服务的开始。对数字商品而言,正常推送数字权益给用户后,可以完成自动确认,无需用户确认流程。

  • 订单完成:订单完成是指在收到货 X 天的状态,此时订单不在售后的支持时间范围内。到此,一个订单的正向流程就算走完了。对数字商品而言,正常推送数字权益给用户后,可以完成自动完成订单。

逆向流程

逆向流程是各种修改订单、取消订单、退款、退货等操作,需要梳理清楚这些流程与正向流程的关系,才能理清订单系统完整的订单流程。

  • 订单的修改: 要明确可以修改的字段范围;

  • 订单的取消: 用户没有付款,被取消订单,需要退回库存,优惠券,相应权益等;

  • 订单退款: 需要和支付系统,促销系统交互,退回相关资金和优惠券,同时修改订单状态。

  • 订单退货: 与退款类似,但是需补回库存,具体的要结合退货场景。

特别的,对于订单的取消的设计,可以采用 RocketMQ 延迟队列方式来实现。 具体的可以参考领导:谁再用定时任务实现关闭订单,立马滚蛋![7]

部署架构

主要包含两部分,订单网关和订单服务。

订单网关负责做订单数据的聚合;

订单服务负责订单的创建和状态转换,以及发布相关消息到 MQ,方便其它服务订阅。

参考资料:

  • 电商核心订单系统的一些设计思考[8]

参考资料

[1]

还不知道,如何设计订单系统?来看这篇文章,很不错!: https://juejin.cn/post/6901950646417620999

[2]

订单系统的表设计探讨: https://juejin.cn/post/7029300867949920286

[3]

还不知道,如何设计订单系统?来看这篇文章,很不错!: https://juejin.cn/post/6901950646417620999

[4]

还不知道,如何设计订单系统?来看这篇文章,很不错!: https://juejin.cn/post/6901950646417620999

[5]

电商核心订单系统的一些设计思考: https://juejin.cn/post/6847902218620764174

[6]

商品库存管理和秒杀系统设计: https://xie.infoq.cn/article/d70abaebdc1db54681a741729

[7]

领导:谁再用定时任务实现关闭订单,立马滚蛋!: https://juejin.cn/post/6987233263660040206

[8]

电商核心订单系统的一些设计思考: https://juejin.cn/post/6847902218620764174

发布于: 2022 年 03 月 13 日阅读数: 99
用户头像

hackstoic

关注

还未添加个人签名 2017.11.24 加入

TGO深圳会员,某创业公司技术负责人, 专注领域:架构设计/技术管理/区块链/投资

评论

发布
暂无评论
订单系统的设计(20/100)_技术架构_hackstoic_InfoQ写作平台