Java生鲜电商平台-订单配送模块的架构与设计

生鲜电商系统最终的目的还是用户下单支付购买,

所以订单管理系统是电商系统中最为复杂的系统,其作为中枢决定着整个商城的运转,

本文将对于生鲜类电商平台的订单设计做一个完整的分析,也对前阶段工作做一个复盘总结

 
 

订单系统设计的好坏,决定了平台的可用性、后期的功能拓展和商城价值;订单系统贯穿于整个商城系统,其他各个系统的设计也是为订单系统提供数据支撑。从用户提交订单的那一刻到订单完成,到售后,都需要订单管理系统来管理。

订单管理系统从流程生成过程,大致分为三部分:

1.阶段一、订单生成过程:用户通过平台选择商品,选择添加至购物车(某些平台下单过程无加入购物车流程),生成订单价格,提交订单,后台根据优惠信息、活动信息、会员价等生成订单金额,一般具体到每个商品订单实付金额。

2.阶段二、订单配送过程:用户支付完成,从仓储发货、配送、用户收货后订单完成,如无提起售后流程,一般订单到此就算完成,正常的订单到阶段二流程即结束了。

3.阶段三、订单异常、售后流程:用户在前两个阶段过程中发起支付取消、提起商品售后流程,一般在订单商品配送过程中是不允许用户发起退款,等用户收到货物后才可发起售后,对于生鲜类平台,可能不会做退货的功能。

一、订单生成过程

首先,是用户在商城内选购商品,这个阶段可以叫做用户购物行为。

然后,是系统调取各个系统的数据,计算订单的最终价格,这个阶段可以叫做数据处理过程。

最后,是将订单价格在用户端显示,这个阶段叫做表现层显示。

 
订单数据流程

1、订单提交生成过程

用户下单后系统需要生成订单,生成订单过程需获取商品信息,商品是否涉及相关优惠活动;获取用户会员信息(由于小程序做了付费会员,付费会员与普通会员购物部分商品有不同优惠力度和商品价格差异)。

用户提交商品订单时需要考虑商品库存问题:1.用户提交订单时锁定商品库存,即下单减库存。2.用户付款后锁定商品库存。何时锁定商品库存得看具体情况,个人感觉下单锁库存在商品库存不多,商品畅销情况下用户体验更好,避免在用户支付完成后商家无库存发货。由于社区生鲜类商品,货损较严重,所以设计为用户付款后锁定库存。

2、支付订单后是否需要拆单/合单

订单拆单:客户同时在多家店铺下单,不同的店铺的商品在正常情况下是要拆开的;自营平台商品的订单是否需要拆单根据发货仓是否相同,发货仓不同,也是需要根据商品发货单进行拆单。总之同一个订单,会有多个包裹多个运单发货,就需要将订单查看。

订单合单:同一个用户不同订单需要考虑是否合单发货,需根据实际情况而定,订单合单后,多个订单生成一个发货单发货。

3、订单商品优惠分摊

1. 为什么要对订单金额进行分摊?

首要因素是退款,在订单付款成功之后,如果不针对单个商品进行金额分摊,那么如果用户需要退订单中的部分商品,没法计算需要退的金额。同样如果只是单一商品品类券,则根据符合优惠券使用条件的商品进行分摊,其他商品按照商品售卖价格。

财务对账:将优惠金额分摊到每个商品上,能核算统一订单下的每个商品分别分摊的优惠金额,比如:平台券,一个使用平台券的订单最终需要计算每个商品分摊的优惠金额,以确定每个商品的实际付款金额和享受平台优惠的金额。

核算成本:通过把优惠金额分摊到每个商品上去,运营,财务或采购人员可以评估营销活动的成本。

2. 优惠金额分摊逻辑

按照最小维度进行分摊:即优惠金额需要分摊到每个商品,且同一个商品采购数量大于1时,该商品最终只能有一个分摊后的价格

优惠分摊比例:按照商品金额分摊对应比例的优惠,保证不同商品享受优惠的公平性,否则会出现商品应分摊的优惠大于商品的销售价或影响用户体验。

误差处理:减小误差主要途径是在算法层面上进行优化,同时也无法避免误差,多余的误差需要按照不同的优惠活动分别存储起来,在财务对账和退款的时候需要用到。

这里必须提一下,这里订单商品优惠分摊的前提是订单中商品符合优惠条件,订单中不符合优惠条件的商品不参与优惠分摊。

二、订单配送过程

用户在下单完成后,限制了用户退款订单状态,只允许用户在订单状态为:待发货和配送完成状态下才可以申请退款。支付完成后订单发货状态共分为:待发货、分拣中、配送中、商品到达代收点、配送完成、用户已取货这几个状态。

 
订单生成配送过程

1、针对有缺货/无货情况

避免生鲜水果类商品的货损过大问题,仓储一般备货较少,有时需及时从生产商拿货,就可能会出现商品不足、无货的情况,如发生缺货、无货的情况,是否补单发货,还是直接退款给用户

生成补货单发货或者退款:在仓储发货分拣发现缺货、无货情况时可发起异常配送流程,针对缺货、无货的商品按照订单生成时间判断影响了具体哪些用户订单,在缺货、无货商品订单中操作想应的补货或者退款操作

这里需要说明一点,我们强调的是客服主动跟受影响的用户进行沟通,而非系统自动发起补货或退款。

2、用户同一天下单多次的订单是否需要合单发货

针对同一用户同一天内的订单是否需要合成一个发货单发货,需要根据具体场景具体考虑,如果做了合成一个发货单,几单包裹在一起是否一个包裹能装下,如果是需要两三个包裹装的话,只有一个发货单如何处理,都是需要考虑解决方案。

三、订单异常、售后流程

订单售后一般包括未支付订单取消、下单完成后未配送前发起退款申请,配送完成后的订单申请售后过程,未支付订单的取消和下单完成后未配送前发起的退款申请,系统在接收到退款申请时会自动给用户订单退款;配送完成后的订单由于商品性质的原因,限定了不支持无理由退货退款,并且没有做退货流程的处理,主要考虑到商品退回至仓库已无价值。

订单系统逆流程的分支很多,需要兼顾业务场景,一般在从0到1的过程中,售后流程会先通过线下的方式解决,以便能把资源集中在更核心的部分。

Java生鲜电商平台-订单配送模块的架构与设计的更多相关文章

  1. Java生鲜电商平台-订单模块状态机架构设计

    Java生鲜电商平台-订单模块状态机架构设计 说明:在Java生鲜电商平台中订单的状态流转业务        我们知道 一个订单会有很多种状态:临时单.已下单.待支付.待收货.待评价.已完成,退货中等 ...

  2. Java生鲜电商平台-订单中心服务架构与异常订单逻辑

    Java生鲜电商平台-订单中心服务架构与异常订单逻辑 订单架构实战中阐述了订单系统的重要性,并从订单系统的信息架构和流程上对订单系统有了总体认知,同时还穿插着一些常见的订单业务规则和逻辑.上文写到订单 ...

  3. Java生鲜电商平台-订单架构实战

    Java生鲜电商平台-订单架构实战 生鲜电商中订单中心是一个电商后台系统的枢纽,在这订单这一环节上需要读取多个模块的数据和信息进行加工处理,并流向下一环节:因此订单模块对一电商系统来说,重要性不言而喻 ...

  4. Java生鲜电商平台-物流配送的设计与架构

    Java生鲜电商平台-物流配送的设计与架构 说明:由于Java开源生鲜电商平台是属于自建物流系统,也就是买家下的单,需要公司派物流团队进行派送.            业务需求中买家的下单时间控制在: ...

  5. Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战

    Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战 Java生鲜电商平台-  什么是秒杀 通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动 比如说京东秒杀,就是一种定时定量秒杀,在规定 ...

  6. Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战

    Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战 说明:Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战,优惠券是一种常见的促销方式,在规定的周期内购买对应商品类型和额度的商品 ...

  7. Java生鲜电商平台-服务化后的互联网架构实战(针对生鲜电商小程序或者APP)

    Java生鲜电商平台-服务化后的互联网架构实战(针对生鲜电商小程序或者APP) “微服务架构”的话题非常之火,很多朋友都在小窗我,说怎么做服务化?解答“怎么做”之前,先得了解“为什么做”. 画外音:做 ...

  8. Java生鲜电商平台-高可用微服务系统如何设计?

    Java生鲜电商平台-高可用微服务系统如何设计? 说明:Java生鲜电商平台高可用架构往往有以下的要求: 高可用.这类的系统往往需要保持一定的 SLA,7*24 时不间断运行不代表完全不挂,而是有一定 ...

  9. Java生鲜电商平台-redis缓存在商品中的设计与架构

    Java生鲜电商平台-redis缓存在商品中的设计与架构 说明:Java开源生鲜电商平台-redis缓存在商品中的设计与架构. 1. 各种计数,商品维度计数和用户维度计数 说起电商,肯定离不开商品,而 ...

随机推荐

  1. ETCD:多机上的集群

    原文地址:cluster on multiple machines 总览 启动一个集群静态的要求是每一个集群中的成员需要知道其他成员的位置.在许多情况下,集群成员的IP可能无法提前知道.在这种情况下, ...

  2. 【朝花夕拾】Android自定义View篇之(七)Android事件分发机制(下)滑动冲突解决方案总结

    前言 转载请声明,转自[https://www.cnblogs.com/andy-songwei/p/11072989.html],谢谢! 前面两篇文章,花了很大篇幅讲解了Android的事件分发机制 ...

  3. 如何设计APP版本号?

    示例: 2.14.21 (主版本号.次版本号.补丁号) 我们可以这样设计,软件包的版本号以英文句号分隔的三个数字来定义,分别代表主版本号.次版本号和补丁号.如果只是修复了错误,没有添加任何功能,也不会 ...

  4. Concepts & Implementation of PLs

    http://perugini.cps.udayton.edu/teaching/courses/Spring2015/cps352/index.html#lecturenotes Programmi ...

  5. 04-JVM垃圾收集器详解

    1.垃圾收集器的种类 垃圾收集算法是内存回收的方法论,垃圾收集器是内存回收的具体实现工具.目前没有万能的垃圾收集器,需要根据具体的应用场景选择合适的垃圾收集器. 1.1Serial收集器(-XX:+U ...

  6. MySql入门知识(一)

    概述 MySQL是一个真正多用户,多线程结构化查询语言数据库服务器.MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司.MySQL的SQL语言是用于访问数据 ...

  7. PHP bcpow BC数学函数

    定义和用法 bcpow - 任意精度数字的乘方 版本支持 PHP4 PHP5 PHP7 支持 支持 支持 语法 bcpow( string $left_operand , string $right_ ...

  8. Locust压测结果准确性验证

    最近闲着没事做,就重新研究了一下基于python语言的Locust性能测试框架 发现在压测的过程中,虽然设置了100并发,但是通过实际监控,完全看不到100并发压测的效果 通过代码AOP日志监控接口的 ...

  9. [转]JS将图片转为base64编码

    本文转自:https://blog.csdn.net/DeMonliuhui/article/details/79731359 1.根据img标签获取base64编码/** * * @param im ...

  10. echarts玩转图表之矩形树图

    前言 这是第一次用makedown编辑器写文章,感觉像一件利器,排版美观而且效率飙升.进入正题 Echart官网文档地址 针对于矩形树图api配置项链接 1. 完全从数据定义图形 $.get( &qu ...