Java生鲜电商平台-订单架构实战
Java生鲜电商平台-订单架构实战
生鲜电商中订单中心是一个电商后台系统的枢纽,在这订单这一环节上需要读取多个模块的数据和信息进行加工处理,并流向下一环节;因此订单模块对一电商系统来说,重要性不言而喻。
同时,订单是一个公司生存甚至盈利的核心,而电商系统中的订单系统则是支撑订单处理的载体,因此订单系统的设计则十分重要。

一、订单架构
要了解订单系统,首先我们要从订单系统的信息架构上去认识订单系统,从而对订单系统建立整体认知;

二、订单状态
定义:为适应组织分工的需求和提升效率,系统将整个交易业务流程拆分成若干个可控的环节。
1. 订单正向状态
待付款:用户提交订单后,尚未付款,等待用户支付,由于待付款订单会锁定库存,所以会设置超时自动取消功能。
待发货:用户付款之后等待商家发货。
待收货:商家以发货,等待用户收货。
已完成:用户确认收货后,订单交易完成。
已取消:付款之前取消订单。超时未付款或用户取消订单都会产生这种订单状态。
售后中:用户在付款后发货前申请退款,或商家发货后用户申请退,换货。
2. 订单售后状态
待审核:用户提交退换货申请后,等待审核的状态,在用户已付款待发货的状态下,订单尚未推送至仓库或在仓库拦截发货成功,系统可直接审核通过。当审核不通过时,回转至正常流程中。
待退货入库:退货申请审核通过之后,等待用户退货入库。
待退款:退货入库成功后,等待退款给用户。
待换货入库:换货申请审核通过,等待用户换货入库。
换货出库中: 换货入库之后,生成换货出库单,订单出库。
售后成功:当退货,退款成功之后,流转至售后成功状态,退货,退款的售后成功在主流程下属于交易关闭。
3. 订单下单流程图

1.在订单过程中进行安全校验,主要是为了检测用户是否在黑名单上,用户购买行为是否正常等,当检测到不正常时终止下单;
2.从商品中心获取商品信息(SKU,规格,价格等)
3.从营销中心获取商品,订单促销信息(优惠券,促销活动),判断是否满足优惠条件,计算出优惠金额。
4.在会员中心获取会员权益,例如平台抵扣积分,优惠券折扣条件等。
5.在调度中心检验销售层库存,按照调度规则锁定区域库存。
6.根据拆单规则(商家,仓库,订单类型等)将订单拆分成若干个子订单,根据运费模板计算运费,根据商品金额,运费,优惠金额计算应付金额(实付款)。
三、优惠分摊
定义:是指在实际销售中将订单的优惠去分摊到每一件SKU中去结算。
订单实付金额=商品金额(SKU金额总计)+运费-总优惠金额
总优惠金额=促销活动优惠金额+优惠券优惠金额+虚拟币抵扣金额
按照商品比例分摊。
案例:
订单中有甲乙两店的商品A、B、C、D、E 包邮。商品A,D参加跨店满200减40的活动(活动1),商品B,C参加满100减10的活动(活动2)另外用户还使用了100元现金券。
订单优惠金额=40+10+100=150元.
依据优惠分摊原则:则各项的优惠金额为:

四、订单拆分
定义:为了方便订单的发货与结算,系统依据一定的规则(物流、仓库等因素)将用户订单拆分成若干个发货单。

不同店铺:在电商平台类架构下,由于商品归属权不同,涉及财务结算和物流发货的问题,需要根据店铺归属问题对订单进行拆单。例如淘宝,天猫的商品在下单时会将订单根据不同店铺进行拆分成若干个子订单。
不同仓库:若同一订单分散在不同仓库,则应按照仓库归属进行拆分订单。当一件商品在多个仓库有货时,应根据物流的区域的时效选择仓库进行拆单。
不同品类:由于商品的属性不同一样会产生拆单需求,例如易碎品需要特殊包装,超大物品(钢琴,座椅)需要单独包装。有些商品不能放在一起,同样需要拆单。
物流因素:不同物流公司对单个包裹的重量或体积都有特殊要求,需要根据SKU的毛重和体积来计算包裹的总重量和体积,超出物流公司限制的也需要拆单。
商品价值:根据商品价值需要拆单的主要涉及海淘和跨境的商品;国家对每笔跨境订单有单次限额,对年度跨境商品订单总金额也有限制,当单次购买金额超过限制金额时,也需要对订单进行拆单。

Java生鲜电商平台-订单架构实战的更多相关文章
- Java生鲜电商平台-缓存架构实战
Java生鲜电商平台-缓存架构实战 说明:在Java生鲜电商中,缓存起到了非常重要的作用,目前整个项目中才用的是redis做分布式缓存. 缓存集群 缓存集群存在的问题 1.热key 缓存集群中的某个k ...
- Java生鲜电商平台-促销架构以及秒杀解决方案实战
Java生鲜电商平台-促销架构以及秒杀解决方案实战 背景:随着这几年的电商的大热,我们经常看到一些商家为了促销和快速收益,纷纷推出了秒杀活动.不管是日常的超市里面的促销,明星演唱会门票售卖,还是春节订 ...
- Java生鲜电商平台-订单中心服务架构与异常订单逻辑
Java生鲜电商平台-订单中心服务架构与异常订单逻辑 订单架构实战中阐述了订单系统的重要性,并从订单系统的信息架构和流程上对订单系统有了总体认知,同时还穿插着一些常见的订单业务规则和逻辑.上文写到订单 ...
- Java生鲜电商平台-订单模块状态机架构设计
Java生鲜电商平台-订单模块状态机架构设计 说明:在Java生鲜电商平台中订单的状态流转业务 我们知道 一个订单会有很多种状态:临时单.已下单.待支付.待收货.待评价.已完成,退货中等 ...
- Java生鲜电商平台-订单配送模块的架构与设计
Java生鲜电商平台-订单配送模块的架构与设计 生鲜电商系统最终的目的还是用户下单支付购买, 所以订单管理系统是电商系统中最为复杂的系统,其作为中枢决定着整个商城的运转, 本文将对于生鲜类电商平台的订 ...
- Java开源生鲜电商平台-订单抽成模块的设计与架构(源码可下载)
Java开源生鲜电商平台-订单抽成模块的设计与架构(源码可下载) 说明:订单抽成指的是向卖家收取相应的信息服务费.(目前市场上有两种抽成方式,一种是按照总额的抽成比率,另外一种是按照订单明细的抽成比率 ...
- Java生鲜电商平台-App系统架构开发与设计
Java生鲜电商平台-App系统架构开发与设计 说明:阅读此文,你可以学习到以下的技术分享 1.Java生鲜电商平台-App架构设计经验谈:接口的设计2.Java生鲜电商平台-App架构设计经验谈:技 ...
- Java生鲜电商平台-深入订单拆单架构与实战
Java生鲜电商平台-深入订单拆单架构与实战 Java生鲜电商中在做拆单的需求,细思极恐,思考越深入,就会发现里面涉及的东西越来越多,要想做好订单拆单的功能,还是相当有难度, 因此总结了一下拆单功能细 ...
- Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战
Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战 说明: Java生鲜系统中微服务的拆分应该如何架构设计与分析呢?以下是我的实战中的设计与经验分析. 目录 1. 微服务简介2. 当前现状3. ...
随机推荐
- Windows下使用virtualenv创建虚拟环境
操作系统 : windowns10_x64Python版本:3.6.8virtualenv版本:16.7.7virtualenvwrapper版本:1.2.5 方式一:直接使用virtualenv 1 ...
- React 从入门到进阶之路(二)
在之前的文章中我们介绍了 React 开发的环境搭建及目录介绍和整理,本篇文章将介绍 React 创建组件.JSX 语法.绑定数据和绑定对象. 之前我们已经将项目运行了起来,我们再来看一下目录结构: ...
- ASP.NET MVC教程四:ASP.NET MVC中页面传值的几种方式
准备 在Models文件夹里面新添加Student实体类,用来模拟从Controller向View传递数据,Student类定义如下: using System; using System.Colle ...
- Excel导入导出DataGridView
/// <summary> /// excel表保存到dataTable中 /// </summary> /// <param name="path" ...
- python django-admin.py startproject xxx 错误:from django.core import management
1. Python安装路径以及Python安装路径\Script文件夹,已经添加到PATH环境变量中. 2. 查看django 版本正常: import django print(django.__v ...
- JS 错误
JS 错误 try 语句测试代码块的错误. catch 语句处理错误. throw 语句创建自定义错误. 错误一定会发生 当 JavaScript 引擎执行 JavaScript 代码时,会发生各种错 ...
- python中基本数据类型以及运算符
python中基本数据类型以及运算符的知识 一.与用户的交互以及python2与python的区别 1.1什么是与用户交互 用户交互就是人往计算机中input(输入数据),计算机print(输出结果) ...
- python配置yaml
我们在做自动化的过程中无论是接口自动化还是UI自动化都会存在很多数据,我们对于自动化中如何存放这些数据也是很重要一点,如果写在代码里的话,每次更换数据就有点繁琐,我们可以通过一个文件存放这些数据,然后 ...
- 2015 经典的ImageCaptioning论文
1.Show and Tell: A Neural Image Caption Generator Google团队的成果 整体处理流程: 1)通过CNN提取到图片的特征,简称feature. 2)而 ...
- <Math> 29 365
29. Divide Two Integers class Solution { public int divide(int dividend, int divisor) { if(dividend ...