电商业务简单下单逻辑参考

买了东西,提交订单,订单确认的过程,减库存,减优惠券,减余额,在操作失败时,需要回退等

用户->订单系统

|–商品服务

|–优惠券服务

|–用户服务

确认订单逻辑

  1. 校验合法性

  2. 保存订单,用户不可见

  3. 减库存,件优惠券,减于额

  4. 确认订单

|-- 确认成功

|-- 确认失败

|–发送失败消息到MQ

|–库存服务监听,回退

|–优惠券服务监听,回退

|-- 用户服务监听,回退

数据库表

用户表: id,姓名,密码,手机号,积分,注册时间,余额

余额日志表:id,订单id,类型(付款还是退款),发生金额,创建时间,校验的时候需要使用,避免重复,或重试

优惠券 ,ID,price,userId,orderId,isUsed,createTime

商品:ID,name,goodsNumber,price,goodsDesc,createTime

订单:orderId,userId,status(未确认,已确认,已取消,无效,退款等),payStatus(未支付,支付中,已支付),shippingStatus(发货状态),address,收货人,商品Id,数量,价格,总价格,运费,订单价格,优惠券Id,   优惠券支付金额,已付金额,支付金额,创建时间

订单商品操作日志(一定要记录,备查,校验使用):商品Id,订单Id,购买数量,创建时间

订单支付表:支付编号,订单号,支付金额,是否支付

消息队列生成记录(接收到的mq消息):id,groupName,topic,tag,key,body,status(是否处理),创建时间

消息队列消费:ID,groupName,topic,tag,key,body,status(处理中,成功,失败),处理次数(总失败放弃),时间

订单校验

  1. 检查定时是否存在,校验不过抛异常

  2. 检查商品是否存在:通过订单中的商品id,调用商品服务查找商品

3.检查用户是否存在:通过订单中的用户id,查询用户服务

  1. 简单订单金额是是否合法:是否和商品服务中查询的价格一样

5 数量是否合法,是否大于库存等

保存订单

  1. 设置订单id,随机不重复的id,需要返回

  2. 核算运费,按自己规则

  3. 总金额是否合法 ,通过订单的单价和数量再计算一下价格,检查是否和订单传过来的总价格一致

  4. 是否使用余额,如果使用,查看是否合法,和db中保存的余额比较,如果没有使用设置为0,方便计算

5.是否使用优惠券

6.计算应该支付的金额

7.创建时间

8.保存到db

扣减库存

  1. 商品表减库存 ,这里的参数可以是日志记录表的pojo对象,实现类校验参数(订单id,商品id,数量合法等),校验是否库存不足等

  2. 记录日志,可以类似记账的方式,减库存记录负数,加库存记录正数

扣减余额

  1. 用户余额,可能是支付,可能是退款。这里需要通过日志表防止多次付款或者多次退款,需要通过余额扣减日志判断,如果订单有日志,不需要再支持,如果订单有日志,才可以退款等

  2. 记录日志

回退库存

  1. 通过MQ groupName,tags,keys(订单id)到MQ消费记录表查找记录,如果消费过判断消费状态(成功,处理中,失败)

  2. 通过存在MQ日志记录的情况,处理成功:返回,正在处理:返回:

处理失败的情况,把状态修改为正在处理,保存(加锁更新)

  1. 不存在日志记录的情况,直接insert消息到日志表,tag,key,状态,body,msgId等 ,状态为正在处理

  2. 回退库存

  3. 记录库存操作日志

  4. 更改MQ消费记录的状态为处理成功

  5. 如果发生异常,需要修改状态为处理失败,或者设置最大处理次数

待续。。。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值