B2C自营商城的订单设计方案
B2C自营商城的订单设计方案
去年我们的美妆社区APP,上线了自有商城。之后经过多次版本迭代,商城系统的模块已经基本健全,值此时间分享一些经验出来,希望可以共同交流。
有了商品之后才有可能产生交易。所以先讲了《B2C自营商城的商品设计方案》,这篇讲解我们的订单模块怎么设计。
一、订单是什么
订单的本意是指你购买商品之后生成的单据凭证,只是在电商中,它是虚拟的。
主流的下单方式
整个电商体系中常见的下单方式有2种,购物车下单和直接下单。
淘宝称之为购物车结算和立即购买,正常情况下你可以任选一种去购物。但是在秒杀之类的特殊场景中,只支持直接下单。
京东也称之为购物车结算和立即购买,不同的是,正常情况下你必须通过购物车去结算,秒杀情况下你可以选择立即购买和购物车结算。
订单的类型
由于不同的下单方式,其实导致订单的类型有2种。
简单来说购物车结算的订单肯定包含了基于sku不同的多个子订单,而每个子订单包含n件同一sku。而立即购买的订单是包含n件同一sku。
然后淘宝的PM因为后续增加了购物车结算这一下单方式,而不得不想出一套规则,那就是父订单和子订单。当然还有很多其他原因。
此次购物,整体称之为交易,生成了一个父订单号。如果它是购物车结算,那么有N个子订单。如果他是立即购买,那么只有1个子订单。
从技术角度来定义,那就是trade称为父订单,order称为子订单,或者说trade是一笔交易单,子订单是每笔交易中的商品明细单,trade与order可以是一对多的关系,trade是由使用购物车生成。
当一笔交易只有一个子订单,那么tid=oid,这个时候主要看trade结构体里面的内容,当一笔交易有多笔子订单(类似于购物车购买方式),那么tid=oid,这个时候主要看order结构体里面的内容。
二、订单的逻辑拆分
根据以上的规则,订单逻辑上面应该按照这样的方式来拆分。

基于这样的设计方式,才可以去支持退款退货,以及设计活动、优惠券等营销功能。
三、订单的金额拆分
进而得到订单的金额是如何拆分的,其中营销得来的优惠拆分到每一个子订单,以及每一个sku的实际支付单价。

四、订单状态机
订单的状态是一个很复杂的事情,决定着用户,商家的每一个操作。
不含退款退货
如果你们的商城比较特殊,无需提供退款退货功能,那么订单状态机比较简单。

包含退款退货
那么比较复杂,相当于多了一层状态机。具体可以查看我的另外一篇文章《如何绘画状态机来描述业务变化》。

五、总结
订单模块的架构设计,以上基本上把主要的内容讲了一遍。按照这样的方式去设计,至少可以兼顾大部分商城的订单需求。
以上内容可以点击我的订单模块原型来详细查看。
至于订单模块和商品模块,和营销模块的耦合,后续的文章会再讲讲。
相关阅读
B2C自营商城的订单设计方案的更多相关文章
- PHP搭建B2C分销商城系统需要考虑哪些因素?(一)
在网购日渐繁盛的今天,传统线下门店和代理分销越发显示出其弊端.此种情况下,进入互联网市场是最好的选择.入驻第三方平台成本太高,无法掌握自己的流量,所以搭建自己的分销平台成为众多企业的首选.搭建B2C分 ...
- 无意中发现destoon5商城处理订单时的一些bug
最新的destoon5在商城的商品中加入了商品属性的功能,可以使用三个商品属性 而在代码中用如“49-3-0-0”来标记所选择的的商品及属性,其中第一个数字是商品的id,后三个表示的是商品对应的属性值 ...
- 原生tab切换(适用于购物商城中订单管理模块,例如:待付款/待发货/待收货等订单状态)
<!-- 头部tab栏切换 html部分--> <ul class="title-bar"> <li @click="changeStatu ...
- 解析汽车B2C商城网站四种盈利模式
汽车已成为家庭的日常用品,汽车的配套设施也成为销售的热点,汽车B2C电子商城为行业营销的新平台,汽车B2C电子商务网站盈利的模式是怎样的?创新的盈利模式才能在行业竞争中生存. 资讯产品一体模式 网站的 ...
- PHP开发b2c商城价格
电商的快速发展不断地挤压传统企业的生存空间,渠道越来越窄,所以现在很多企业开始往线上发展,搭建自己的B2C商城,直接面向消费者进行销售.那开发b2c商城价格怎么样?很多企业都是比较关心到商城价格这个问 ...
- e3mall商城总结13之订单确认(有BUG)
说在前面的话 上一节说了购物车的生成,本节主要说了在购物车的列表上去结算,从而生成一个未支付的订单,生成的订单默认状态为1, 题目说的BUG是因为所有数据都是通过前端向后端生成的,包括订单的金额.因此 ...
- 《SSH网上商城》-视频目录--代码可以跑起来
本课程是2015年2月份的,就是14年底的. 课程第一天的代码-添加 jsp-api.jar servlet-api.jar就可以跑起来,环境 JDK1.7 和tomcat8, SSH网上商城\S ...
- 沐雪多用户微信公众平台开发源码,商城小程序源码(2018年最新的asp.net C# 微信源码,小程序源码)
现售价5400元,就可以搭建自己的微信平台啦 购买地址:https://item.taobao.com/item.htm?id=539102325336 该系统是由[上海沐雪网络]独家授权销售,其他地 ...
- 【SSH网上商城项目实战25】使用java email给用户发送邮件
转自: https://blog.csdn.net/eson_15/article/details/51475046 当用户购买完商品后,我们应该向用户发送一封邮件,告诉他订单已生成之类的信息, ...
随机推荐
- CRTMPServer 在CentOS 64-bit下的编译(转)
CRTMPServer 在CentOS 64-bit下的编译 http://blog.csdn.net/qiuchangyong/article/details/52848942 ========== ...
- ajax传递json参数
var pros = []; for(var i = 1; i <= 2; i++) { var obj = {}; obj.id = i; obj.age = i*20; pros = pro ...
- fedora23安装php,mysql
httpd: 他的服务器根: ServerRoot, 是在/etc/httpd. 因为httpd所有的配置文件, 运行文件等都在这里.所以这是他的根. httpd的配置文件: httpd.conf恰好 ...
- Sails.js中文文档,Sails中文文档
Sails.js中文文档 http://sailsdoc.swift.ren/ Sails.js是一个Web框架,可以于轻松构建自定义,企业级Node.js Apps.它在设计上类似于像Ruby ...
- 在sql中使用函数,遇到net.sf.jsqlparser.parser.ParseException异常
异常详情如下 Caused by: net.sf.jsqlparser.parser.ParseException: Encountered " "->" &quo ...
- AWK之随心所欲-基础篇
一.简介 awk 是一个处理文本的编程语言工具,能用简短的程序处理标准输入或文件.数据排序.计算以及 生成报表等等. 在 Linux 系统下默认 awk 是 gawk,它是 awk 的 GNU 版本. ...
- c# Thread——1.为什么Abort中断线程是不可靠的
Thread.Abort 方法在c#中用作强制中断线程的执行,大多用于线程内部满足某个特定条件而自己调用关闭自身,比如下面的代码在i自增到3的时候就会停止打印. class Program { sta ...
- Fiddler代理抓取的接口的服务器返回出现"Response body is encoded. Click to decode. "
参考与:https://blog.csdn.net/wsbl52006/article/details/53256705 解决办法: Rules > Remove All Encodings 勾 ...
- Python文件读写基本操作
https://www.jianshu.com/p/eab35af27e1c 1.打开文件操作 方法一: f = open('/mypy/test.txt') print f # 输出:<ope ...
- HIbernate入门3
HIbernate的一对多操作: 1. 创建实体类:一个Customer类(客户类)和一个LinkMan类(联系人),两者的关系为:一个客户中可能有多个联系人(关于一对多的实体类之间的关联,不做详细介 ...