电商订单生成方法

主流电商平台主要包括几大业务模块:即商品、交易、订单、支付、优惠卷、运费模板、促销、购物车、积分、开票、仓库、物流。本文主要讲述的是简易版的订单生成过程姑且叫基于数据库的消息队列,该方式适用于业务量不是很大时候使用,即网站开发初期。业务量大的话还是建议使用成熟的消息队列,比如rabbitMQ或者rocketMQ等。下面先简单的介绍下交易、订单部分。

一、交易

交易系统就是在提交订单的时候或通过http或者rpc调用补全订单信息,比如调用会员中心接口获取收货地址信息和此用户可能用到的支付方式和配送方式、通过商品skuid或者skucode及购买数量获取商品详细信息,调用优惠卷接口获取优惠劵信息,调用运费模板获取运费,生成订单移除购物车商品等。

二、订单

订单部分主要是从交易系统获取数据生成订单并完成订单状态的流转,包括正向和逆向两方面。正向包括从订单代付款一直到订单成功和交易完成,逆向主要包括拒收、退货和维修。

订单生成过程主要是交易部分保存订单信息,订单部分负责拉取。完成订单生成的过程。其业务流程如下:

交易系统在订单生成成功后会向交易的消息队列表(trade_order_quene)里面插入一条数据,此表包含了以下业务字段

1、event_id:事件表id。自增主键。自增起始值可以设置的大一点,避免处理事件的一方插入处理表时主键插入冲突

2、event_type:事件类型,标识消息的类型

3、event_data:事件核心数据,只存最核心的数据。此项目保存订单id

4、event_time:事件生成时间。

订单系统会启动一个定时任务(order_pull_from_trade),这个任务负责拉取数据,其主要作用是从交易系统的事件表定时抓取event_type为订单生成的事件类型的事件到订单的事件处理表里(order_event_handler),并将交易的消息队列表event_id的最大值存到本地的文件里,这样每次抓取的event_id就会是最大的,这样就能实现每次拉取到最新的要消费的事件数据。order_event_handler表包含了以下业务字段:

1、event_id:事件表id。自增主键。拉取过来的id

2、event_status:0:未处理1:已处理2:处理失败3:处理中等等

3、event_type:事件类型,拉取过来的事件类型

4、event_time:拉取过来的时间。

5、event_data:拉取的事件的数据。

将数据拉取过来后,初始状态的event_status置为0=未处理。然后开始执行拉单作业(order-job),这是第二个定时任务,此任务的作用是取出事件处理表的核心数据(event_data),比如订单号,来生成订单信息。具体过程如下:

1、查询order_event_handler中event_status=0&&event_type=生成订单  的待处理事件

2、取出event_data(一般是业务单id比如订单id),将此数据作为入参,通过http或者rpc接口调用交易系统,然后交易系统会把自己存储的订单数据通过此接口返回给订单系统,订单系统就会取到这些数据然后存入到订单的数据表里面。

3、成功后修改事件处理表的event_status为1=已处理,如果生成过程中订单生成失败就把事件表的状态改成2=处理失败,等数据修复好后就可以将此状态置为0,此任务就可以重新开始。

这样订单就从交易系统生成到订单系统了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值