天天看点

电商(一) 创建订单业务流程一、背景二、流程三、其它相关

一、背景

商品需要调用供应商的接口来实现订单的创建

在项目就存在两个订单,一个是供应商的订单、一个是项目自身的订单,实际就是一个订单

二、流程

https://www.processon.com/embed/611ca4261e0853164d2e3d02

 在从用户点击购买到用户点击支付 ,最后成功返回订单号接着支付流程,失败则回滚操作

电商(一) 创建订单业务流程一、背景二、流程三、其它相关

1、首先在商品页的时候点击购买,就需要开始校验库存、金额、邮费、收货地址等信息。

2、没有收货地址的,则要重新选择,且选择收货地址后,还需要调用类似刚才第一个的接口,根据选择的地址,再次计算邮费、金额。

3、在确定订单页面,用户点击购买则进入到创建订单接口中

在分布式系统中处理订单事务,采用Seata-tcc来进行一个事务二段式的提交\回滚

创建项目订单成功,则二段式提交修改订单状态,失败则回滚删除订单

创建供应商订单成功,则二段式提交修改订单状态,失败则回滚删除订单+取消供应商订单

创建订单明细成功,则继续下一步,失败则回滚删除订单+取消供应商订单+回滚订单明细数据

4、订单创建成功了,则返回订单号,且该订单号放入消息队列,若干时间没支付后,则调用取消订单的接口

三、其它相关

取消订单:订单状态修改、取消供应商订单,执行前注意检查状态,防止二次取消操作。消息队列在执行消费时,也是调回取消订单的接口。

订单支付:订单在支付成功后,则需要对库存、商家余额、用户资金等进行扣除。最后成功修改订单状态

订单发货:发货的接口通常给到供应商进行调用,接口做好幂等性处理,防止脏数据

订单收货:收货通常分成自动收货、和用户手动收货。像15天自动确认收货的逻辑,这边的处理方式是,定时任务1小时,查出一批距离收货时间少于1小时的订单,发到消息队列中,使用延迟消息的方式,在1小时内消费订单。这样操作减少了 消息队列的压力,1个小时查询一次对数据的压力也不会太大的压力