Java生鲜电商平台-订单配送模块的架构与设计
Java生鲜电商平台-订单配送模块的架构与设计
生鲜电商系统最终的目的还是用户下单支付购买,
所以订单管理系统是电商系统中最为复杂的系统,其作为中枢决定着整个商城的运转,
本文将对于生鲜类电商平台的订单设计做一个完整的分析,也对前阶段工作做一个复盘总结
订单系统设计的好坏,决定了平台的可用性、后期的功能拓展和商城价值;订单系统贯穿于整个商城系统,其他各个系统的设计也是为订单系统提供数据支撑。从用户提交订单的那一刻到订单完成,到售后,都需要订单管理系统来管理。
订单管理系统从流程生成过程,大致分为三部分:
1.阶段一、订单生成过程:用户通过平台选择商品,选择添加至购物车(某些平台下单过程无加入购物车流程),生成订单价格,提交订单,后台根据优惠信息、活动信息、会员价等生成订单金额,一般具体到每个商品订单实付金额。
2.阶段二、订单配送过程:用户支付完成,从仓储发货、配送、用户收货后订单完成,如无提起售后流程,一般订单到此就算完成,正常的订单到阶段二流程即结束了。
3.阶段三、订单异常、售后流程:用户在前两个阶段过程中发起支付取消、提起商品售后流程,一般在订单商品配送过程中是不允许用户发起退款,等用户收到货物后才可发起售后,对于生鲜类平台,可能不会做退货的功能。
一、订单生成过程
首先,是用户在商城内选购商品,这个阶段可以叫做用户购物行为。
然后,是系统调取各个系统的数据,计算订单的最终价格,这个阶段可以叫做数据处理过程。
最后,是将订单价格在用户端显示,这个阶段叫做表现层显示。
1、订单提交生成过程
用户下单后系统需要生成订单,生成订单过程需获取商品信息,商品是否涉及相关优惠活动;获取用户会员信息(由于小程序做了付费会员,付费会员与普通会员购物部分商品有不同优惠力度和商品价格差异)。
用户提交商品订单时需要考虑商品库存问题:1.用户提交订单时锁定商品库存,即下单减库存。2.用户付款后锁定商品库存。何时锁定商品库存得看具体情况,个人感觉下单锁库存在商品库存不多,商品畅销情况下用户体验更好,避免在用户支付完成后商家无库存发货。由于社区生鲜类商品,货损较严重,所以设计为用户付款后锁定库存。
2、支付订单后是否需要拆单/合单
订单拆单:客户同时在多家店铺下单,不同的店铺的商品在正常情况下是要拆开的;自营平台商品的订单是否需要拆单根据发货仓是否相同,发货仓不同,也是需要根据商品发货单进行拆单。总之同一个订单,会有多个包裹多个运单发货,就需要将订单查看。
订单合单:同一个用户不同订单需要考虑是否合单发货,需根据实际情况而定,订单合单后,多个订单生成一个发货单发货。
3、订单商品优惠分摊
1. 为什么要对订单金额进行分摊?
首要因素是退款,在订单付款成功之后,如果不针对单个商品进行金额分摊,那么如果用户需要退订单中的部分商品,没法计算需要退的金额。同样如果只是单一商品品类券,则根据符合优惠券使用条件的商品进行分摊,其他商品按照商品售卖价格。
财务对账:将优惠金额分摊到每个商品上,能核算统一订单下的每个商品分别分摊的优惠金额,比如:平台券,一个使用平台券的订单最终需要计算每个商品分摊的优惠金额,以确定每个商品的实际付款金额和享受平台优惠的金额。
核算成本:通过把优惠金额分摊到每个商品上去,运营,财务或采购人员可以评估营销活动的成本。
2. 优惠金额分摊逻辑
按照最小维度进行分摊:即优惠金额需要分摊到每个商品,且同一个商品采购数量大于1时,该商品最终只能有一个分摊后的价格
优惠分摊比例:按照商品金额分摊对应比例的优惠,保证不同商品享受优惠的公平性,否则会出现商品应分摊的优惠大于商品的销售价或影响用户体验。
误差处理:减小误差主要途径是在算法层面上进行优化,同时也无法避免误差,多余的误差需要按照不同的优惠活动分别存储起来,在财务对账和退款的时候需要用到。
这里必须提一下,这里订单商品优惠分摊的前提是订单中商品符合优惠条件,订单中不符合优惠条件的商品不参与优惠分摊。
二、订单配送过程
用户在下单完成后,限制了用户退款订单状态,只允许用户在订单状态为:待发货和配送完成状态下才可以申请退款。支付完成后订单发货状态共分为:待发货、分拣中、配送中、商品到达代收点、配送完成、用户已取货这几个状态。
1、针对有缺货/无货情况
避免生鲜水果类商品的货损过大问题,仓储一般备货较少,有时需及时从生产商拿货,就可能会出现商品不足、无货的情况,如发生缺货、无货的情况,是否补单发货,还是直接退款给用户
生成补货单发货或者退款:在仓储发货分拣发现缺货、无货情况时可发起异常配送流程,针对缺货、无货的商品按照订单生成时间判断影响了具体哪些用户订单,在缺货、无货商品订单中操作想应的补货或者退款操作
这里需要说明一点,我们强调的是客服主动跟受影响的用户进行沟通,而非系统自动发起补货或退款。
2、用户同一天下单多次的订单是否需要合单发货
针对同一用户同一天内的订单是否需要合成一个发货单发货,需要根据具体场景具体考虑,如果做了合成一个发货单,几单包裹在一起是否一个包裹能装下,如果是需要两三个包裹装的话,只有一个发货单如何处理,都是需要考虑解决方案。
三、订单异常、售后流程
订单售后一般包括未支付订单取消、下单完成后未配送前发起退款申请,配送完成后的订单申请售后过程,未支付订单的取消和下单完成后未配送前发起的退款申请,系统在接收到退款申请时会自动给用户订单退款;配送完成后的订单由于商品性质的原因,限定了不支持无理由退货退款,并且没有做退货流程的处理,主要考虑到商品退回至仓库已无价值。
订单系统逆流程的分支很多,需要兼顾业务场景,一般在从0到1的过程中,售后流程会先通过线下的方式解决,以便能把资源集中在更核心的部分。
Java生鲜电商平台-订单配送模块的架构与设计的更多相关文章
- Java生鲜电商平台-订单模块状态机架构设计
Java生鲜电商平台-订单模块状态机架构设计 说明:在Java生鲜电商平台中订单的状态流转业务 我们知道 一个订单会有很多种状态:临时单.已下单.待支付.待收货.待评价.已完成,退货中等 ...
- Java生鲜电商平台-订单中心服务架构与异常订单逻辑
Java生鲜电商平台-订单中心服务架构与异常订单逻辑 订单架构实战中阐述了订单系统的重要性,并从订单系统的信息架构和流程上对订单系统有了总体认知,同时还穿插着一些常见的订单业务规则和逻辑.上文写到订单 ...
- Java生鲜电商平台-订单架构实战
Java生鲜电商平台-订单架构实战 生鲜电商中订单中心是一个电商后台系统的枢纽,在这订单这一环节上需要读取多个模块的数据和信息进行加工处理,并流向下一环节:因此订单模块对一电商系统来说,重要性不言而喻 ...
- Java生鲜电商平台-物流配送的设计与架构
Java生鲜电商平台-物流配送的设计与架构 说明:由于Java开源生鲜电商平台是属于自建物流系统,也就是买家下的单,需要公司派物流团队进行派送. 业务需求中买家的下单时间控制在: ...
- Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战
Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战 Java生鲜电商平台- 什么是秒杀 通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动 比如说京东秒杀,就是一种定时定量秒杀,在规定 ...
- Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战
Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战 说明:Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战,优惠券是一种常见的促销方式,在规定的周期内购买对应商品类型和额度的商品 ...
- Java生鲜电商平台-服务化后的互联网架构实战(针对生鲜电商小程序或者APP)
Java生鲜电商平台-服务化后的互联网架构实战(针对生鲜电商小程序或者APP) “微服务架构”的话题非常之火,很多朋友都在小窗我,说怎么做服务化?解答“怎么做”之前,先得了解“为什么做”. 画外音:做 ...
- Java生鲜电商平台-高可用微服务系统如何设计?
Java生鲜电商平台-高可用微服务系统如何设计? 说明:Java生鲜电商平台高可用架构往往有以下的要求: 高可用.这类的系统往往需要保持一定的 SLA,7*24 时不间断运行不代表完全不挂,而是有一定 ...
- Java生鲜电商平台-redis缓存在商品中的设计与架构
Java生鲜电商平台-redis缓存在商品中的设计与架构 说明:Java开源生鲜电商平台-redis缓存在商品中的设计与架构. 1. 各种计数,商品维度计数和用户维度计数 说起电商,肯定离不开商品,而 ...
随机推荐
- C sharp #002# 结构化编程基础
饮水思源:金老师的自学网站.C# Guide 索引 变量与数据类型 C#中For each的写法 C#控制台程序编程技巧 简易图片浏览器 BigInteger以及浮点数的比较 一.变量与数据类型 us ...
- Java题库——Chapter3 操作符、选择
1)The "less than or equal to" comparison operator in Java is ________. A)<< B) != C) ...
- Web前端基础(13):JavaScript(七)
1. BOM JavaScript基础分为三部分: ECMAScript:JavaScript的语法标准.包括变量.表达式.运算符.函数.if语句.for语句等. DOM:文档对象模型,操作网页上的元 ...
- echarts 柱状图
效果: 图一:Y轴显示百分比 柱状图定点显示数量个数 图二:x轴 相同日期对应的每个柱子显示不同类型的数量 代码: 容器: <div id="badQuaAnalyze" ...
- linux下挂载iso镜像文件
linux挂载iso镜像可以分为两种,直接挂载镜像和上传镜像文件至服务器进行挂载 一.虚拟机镜像挂载 测试时使用虚拟机,此时可以直接在虚拟机的设置中将镜像文件直接选择并进行挂载,无需上传至虚拟机服务器 ...
- 工作日志,证书无效 unable to find valid certification path to requested target
工作日志,证书无效 unable to find valid certification path to requested target 最近被这个问题弄得头大.导致所有用到 se.transmod ...
- Python—导入自定义的模块和包(指定路径下的模块和包)
模块路径如下图: import sys sys.path.append(r"E:\project\path") print "===>", sys.arg ...
- VIJOS-P1013 强墙
JDOJ 1198: VIJOS-P1013 强墙 JDOJ传送门 Description 在一个长宽均为10,入口出口分别为(0,5).(10,5)的房间里,有几堵墙,每堵墙上有两个缺口,求入口 ...
- mybatis foreach方法遍历对象
<delete id="deleteAppUserByIds"> delete from app_userinfo where <foreach i ...
- 【洛谷5335】[THUSC2016] 补退选(指针实现Trie)
点此看题面 大致题意: 三种操作:加入一个字符串,删除一个字符串,求最早什么时候以某个字符串为前缀的字符串个数超过给定值. \(Trie\) 这道题显然是\(Trie\)的暴力裸题. 考虑我们对于\( ...