背景

上篇说过订单基础设计,介绍了订单中心应该有哪些能力,大概有哪些字段,还有容量上的处理。上篇有点像在讲订单的数据模型,这篇来看看订单的业务模型。

价格模型

订单的价格怎么计算得来?普通电商平台用户  实付 = 商品原价 * 商品数量 - 优惠 - 抵扣 + 运费。

抵扣是啥?抵扣其实就是一种平台给予用户的等价物,类似于只能在特定平台使用的钱。例如:淘宝(淘金币)、京东(京豆)

抵扣为啥不和优惠合并?在业务初期其实抵扣和优惠并无区别,但当具有一定规模时,抵扣可以作为一种单独的业务域独立的发展运行,相对于优惠仅限商品购买,抵扣可能会有更多的独立的玩法,因此参考与业界的作法将其脱离优惠,单独计算。

优惠具体有啥?优惠其实到了促销域,订单需要感受一些促销相关的概念,作为资深的电商购物者,大家平时淘宝、京东下单时,也能发现优惠的许多种类,整理一下可得大致的优惠类别:

属于电商平台级别优惠:

  • 平台优惠(满n件打折、满n元/件立减、跨店满减)
  • 平台优惠券(全场可用、指定商家满n元/件可用、打折、立减)
  • 会员优惠(88vip、京东plus)

属于店铺级别优惠:

  • 店铺优惠(满n件打折、满n元/件立减)
  • 店铺优惠券(立减,打折)

属于商品级别优惠:

  • 商品优惠(打折、立减、一口价)

是不是对应的订单三级模型?所以你对整体业务了解的越多,那么你的设计一定是越合理的。

每个级别的订单存储对应级别的优惠,这里还会涉及优惠的分摊,分摊在文章末尾会附加说明。

一次交易行为到底有多少个价格呢?简单列一下

  • 订单原价(商品原价 * 购买数量)
  • 用户实付(商品原价 * 购买数量 - 优惠 - 抵扣 + 运费)
  • 卖家实收(商品原价 * 购买数量  - 店铺出资优惠 + 运费)
  • 平台实收 (卖家实收 * 服务费比例)

针对这么多种价格,订单模型绝不是存储每种价格的结果就行了,之后业务若还有其他需求,那不是岂要新加字段?
其实分析下来影响价格的因子就这些:商品原价 、 商品数量 、 优惠 、 抵扣 、 运费。
只要有基础的因子,其他的价格也就是在此基础上进行组合。

延伸:分摊

如果你买了A(10元)1件,B(8元)1件,C(3元)1件,三个商品,用了一张满全平台通用满10-5的优惠券。
A、B、C三个商品均在不同的店铺,那么在一起支付完之后,平台会按照店铺的维度进行拆单,用户将看到三笔订单。
那么就涉及到分摊了,分摊即将上级优惠、抵扣、费用,进行价格权重分到下一级中。此处我们的都是基于订单,因此平台级别分摊到店铺级,店铺级别分摊到商品级。

分摊方案1:对每个订单进行价格权重计算,结果四舍五入。

A商品级订单分摊到的优惠就是 10/(10+8+3) * 5 ≈ 2.38
B商品级订单分摊到的优惠就是 8/(10+8+3)  * 5 ≈ 1.90
C商品级订单分摊到的优惠就是 3/(10+8+3)  * 5 ≈ 0.71

因为平台支持的金额精度是到分,因此四舍五入到分,如果每位都如此计算,那么分摊总数相加很有可能不等于被分摊数。
上例最终 2.38 + 1.90 + 0.71 = 4.99 < 5

分摊方案2:对商品级订单排序,价格低的优先分摊,还是使用价格权重计算,最后一笔订单使用总金额 - 已分摊数,进行补齐。

C商品级订单分摊到的优惠就是 3/(10+8+3)  * 5 ≈ 0.71
B商品级订单分摊到的优惠就是 8/(10+8+3)  * 5 ≈ 1.90
A商品级订单分摊到的优惠就是 5-(0.71 + 1.90) = 2.39

这样下的分摊结果几乎就不会产生问题了。

电商交易之订单中心设计(二)相关推荐

  1. 电商交易之订单中心设计(一)

    背景 在电商交易中台团队工作了一段时间,越发觉自己需要学习的东西还有很多,因此想要定期整理.反思一下所见.所想,因此先从接触的订单中心开始. 订单是什么,我所理解,订单就是交易行为的记录.是用户某一刻 ...

  2. vue+elemenUI项目,仿照京东商城,完成电商网站的订单中心

    效果展示: 页面布局 <el-tabs class="orders"><el-menu default-active="1" class=&q ...

  3. 电商系统:订单实体设计、数据库表设计

    UserOrder(客户订单表): 参数 参数注释 类型 是否非空 示例 说明 oder_code 订单号 string Y 12022110102481315119 order_username 所 ...

  4. 架构设计 | 基于电商交易流程,图解TCC事务分段提交

    本文源码:GitHub·点这里 || GitEE·点这里 一.场景案例简介 1.场景描述 分布式事务在业务系统中是十分常见的,最经典的场景就是电商架构中的交易业务,如图: 客户端通过请求订单服务,执行 ...

  5. Axure电商后台业务管理系统原型模板/通用版电商后台管理系统/订单管理/营销管理/运营管理/财务管理/统计分析/库存管理/流量统计/运营管理/用户管理/秒杀促销/交易统计/活动管理/广告管理

    Axure电商后台业务管理系统原型模板/通用版电商后台管理系统/订单管理/营销管理/运营管理/财务管理/统计分析/库存管理/流量统计/运营管理/用户管理/秒杀促销/交易统计/活动管理/广告管理 作品名 ...

  6. 一线电商公司的订单系统是如何进行数据库设计的?

    一般互联网公司的订单系统是如何做分库分表的,既然要聊订单系统的分库分表,那么就得先说说为什么订单需要分库分表,其实最关键的一点就是要分析一下订单系统的数据量,那么订单系统的数据量有多大?这个就得看具体 ...

  7. (九十八)大白话一线电商公司的订单系统是如何进行数据库设计的?

    今天我们来给大家讲讲第二个案例拓展,也就是一般互联网公司的订单系统是如何做分库分表的,既然要聊订单系统的分库分表,那么就得先说说为什么订单需要分库分表,其实最关键的一点就是要分析一下订单系统的数据量, ...

  8. 电商平台的订单设计流程

    一.主流电商产品的订单状态 淘宝的订单状态主要有待付款.待发货.待收货.待评价.已关闭.以及退款中. 京东的订单状态主要有待付款.待收货.已完成.已取消等. 有赞的订单状态主要有待付款.待接单.待发货 ...

  9. 依赖治理、灰度发布、故障演练,阿里电商故障演练系统的设计与实战经验

    2019独角兽企业重金招聘Python工程师标准>>> 2016 年,阿里巴巴研发了故障演练系统,把故障以场景化的方式沉淀到系统中,在线上主动回放故障,验证监控报警.限流降级.故障迁 ...

最新文章

  1. xenserver 管理口显示重复IP的处理方法
  2. 魔改ResNet反超Transformer再掀架构之争!作者说“没一处是创新”,这些优化trick值得学...
  3. LeetCode Count and Say
  4. 官宣!中央广播电视总台《2021年春节联欢晚会》总导演组公布
  5. 网上选课系统的php代码,网上选课系统(论文+程序)
  6. Python编程系列---使用字典实现路由静态路由
  7. 美团点评CTO罗道锋确认离职,新东家是快手?
  8. 更新丨.NET 7 预览版2 中的 ASP.NET Core
  9. [PAT乙级]1032 挖掘机技术哪家强
  10. 不信不能雷倒你!超牛高考作文
  11. Leetcode 杂题
  12. JDK 中Future模式使用
  13. 判断客户端是否安装FlashPlayer及版本
  14. Introduction to Cryptography
  15. 实习成长之路:设计模式一:为什么你明明使用面向对象设计语言总写面向过程的程序?
  16. 啊哈C语言 第七章 【代码】【习题答案】
  17. 查看linux内存和硬盘
  18. 使用husky + lint-staged助力团队编码规范
  19. 远程登陆没有固定ip的服务器
  20. mysql动力节点老杜_动力节点老杜 day02课堂笔记

热门文章

  1. 海康威视 2020届实习+秋招面试 分享
  2. codevs 2832 6个朋友 并查集 解题报告
  3. 来自国外高级Java架构师的采访总结
  4. webpack : 无法加载文件 C:\Users\zgl\AppData\Roaming\npm\webpack.ps1,因为在此系统上禁止运行脚本 。
  5. 【OpenGL 学习笔记03】点画多边形
  6. [视觉SLAM十四讲]学习笔记2-关于欧拉角和万向锁
  7. Vue Language Features (Volar) 会引起ts报错
  8. 《联邦学习》——个人笔记(四)
  9. sql——如何将html代码存入数据库中
  10. 整理的一些代码优化细节