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

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

 

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

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

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

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

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

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

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

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

一、订单生成过程

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

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

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

订单数据流程

1、订单提交生成过程

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

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

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

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

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

3、订单商品优惠分摊

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

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

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

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

2. 优惠金额分摊逻辑

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

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

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

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

二、订单配送过程

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

订单生成配送过程

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

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

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

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

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

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

三、订单异常、售后流程

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

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

转载于:https://www.cnblogs.com/jurendage/p/11227425.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/247392.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue项目,webpack中配置src路径别名及使用

默认会有‘’别名,指向src目录,还可以添加自定义别名等等。 使用方法 使用别名一般就三种情况:在js中用,在css中用,在html文档内用 js中用,最简单: import {getName} from /util/namecss中使用&#xff0…

kylin框架中使用postcss-px2rem

1.kylin框架的使用不做介绍 2.页面中 html模板页面中已经使用clientWidth/375*100px,已经赋值了html的fontsize随页面宽度而变化。 比如宽度375的屏 html的fontsize为100px kylin加载postcss-px2rem cnpm i --save-dev postcss-px2rem 在根目录下的plugin.js中 var px2rem…

kylinH5框架之项目组件理解

目录 组件介绍 组件声明结构 组件接口 script dependency template style 状态注入 接口声明 组件介绍 Component 扩充自 Vue 的组件, 提供了 Vue 组件对等的输入参数能力。在代码书写时提供类 class 的装饰器 Decorator 风格。 import { Component, Watch } from al…

Java生鲜电商平台-深入订单拆单架构与实战

Java生鲜电商平台-深入订单拆单架构与实战 Java生鲜电商中在做拆单的需求,细思极恐,思考越深入,就会发现里面涉及的东西越来越多,要想做好订单拆单的功能,还是相当有难度, 因此总结了一下拆单功能细节&…

python3中Requests将verify设置为False后,取消警告的方式

import requests resp requests.get(https://www.***.com, verifyFalse)调用成功但是会有如下警告信息: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedo…

博弈论学习笔记

决定近段时间复习一下博弈论顺便写点笔记。 大佬博客:几种常见博弈模型https://blog.csdn.net/wr132/article/details/51213331 SG函数与SG定理https://www.cnblogs.com/ECJTUACM-873284962/p/6921829.html 无敌的博弈总结https://blog.csdn.net/acm_cxlove/article…

Element-UI中Drawer抽屉去除标题自带蓝色框

当点击事件drawertrue时,抽匣回打开 这时抽匣的标题会出现一个难看的蓝色边框,一会就会消失,但是好丑,所以要去掉它 解决方法 /deep/ :focus {outline: 0;} vue组件中,在style设置为scoped的时候,里面在…

Java生鲜电商平台-高并发核心技术订单与库存实战

Java生鲜电商平台-高并发核心技术订单与库存实战 一、 问题 一件商品只有100个库存,现在有1000或者更多的用户来购买,每个用户计划同时购买1个到几个不等商品。 如何保证库存在高并发的场景下是安全的? (1)不多发 &…

Vue2 MVVM 双向绑定(数据劫持+发布者-订阅者模式)

参考文献:https://www.cnblogs.com/libin-1/p/6893712.html https://juejin.im/post/5b2f0769e51d45589f46949e MVVM拆开来即为Model-View-ViewModel,有View,ViewModel,Model三部分组成。View层代表的是视图、模版,负…

常用的激活函数

1.阶跃函数 ,值域{0,1} 1 def step_function(x): 2 return np.array(x>0,dtypenp.int) 2.sigmoid函数 ,值域(0,1) 1 def sigmoid(x): 2 return 1/(1np.exp(-x)) 3.relu函数 ,值域[0,∞) 1 def relu(x): 2 …

前端优化-vue-cli4安装webpack-bundle-analyzer分析包文件

使用vue-cli3创建了一个工程目录,技术栈为vue-cli3vue-routervuexelement-uiv-chartsaxios。但是等到项目开发完后,发现生成的app.js特别大,接近10M。为了优化项目性能,需要使用webpack-bundle-analyzer分析包文件,找出…

不要再问我三次握手和四次挥手

三次握手和四次挥手是各个公司常见的考点,也具有一定的水平区分度,也被一些面试官作为热身题。很多小伙伴说这个问题刚开始回答的挺好,但是后面越回答越冒冷汗,最后就歇菜了。 见过比较典型的面试场景是这样的: 面试官&#xff1…

VScode PowerShell运行脚本报错禁止运行脚本解决方式图文

今天在新Windows电脑上用VScode的终端PowerShell运行一个脚本的时候, 错误 在vscode终端运行vue -V查看版本失败 PS C:\Users\11388> vue -V vue : 无法加载文件 E:\NodeJs\node_global\vue.ps1,因为在此系统上禁止运行脚本。有关详细信息&#xf…

添加右键用Sublime Text3 打开文件和文件夹

最近重新装了一下系统,右键没有用Sublime Text 3打开的选项了,于是查了一下解决方案 1、环境 Win10和Win7都可以Sublime Text 3最新版本以下为Win10系统下截图 2、添加右键打开文件 Win R,输入regedit,打开注册表 找到HKEY_CLASSESS_ROOT…

Windows Mobile Widget Emulator

今天Vimpyboy 在codeplex发布了Windows Mobile Widget Emulator。这是一个用来调试Windows Mobile 6.5 Widget的工具,我在做Windows Mobile 6.5 新功能widget开发 的时候就发现调试Widget很麻烦。也有想法做一个Emulator,其实这个Emulator目标很明显&…

AttributeError: Can only use .str accessor with string values, which use np.object_ dtype in pandas

忘记网址了…… 问题: 分析思路与解决方法: 转载于:https://www.cnblogs.com/bravesunforever/p/11247988.html

Java生鲜电商平台-促销架构以及秒杀解决方案实战

Java生鲜电商平台-促销架构以及秒杀解决方案实战 背景:随着这几年的电商的大热,我们经常看到一些商家为了促销和快速收益,纷纷推出了秒杀活动.不管是日常的超市里面的促销,明星演唱会门票售卖,还是春节订阅火车票,等等我们都能看到秒杀活动的影子. 1. 构建秒杀活动架构 1.1 说明…

PHP Cookie处理

Cookie 是什么? cookie是保存在客户端的信息包(一个文件) cookie 常用于识别用户。 cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。通过 PHP,您能…

PHP-连接数据库

1.2 连接数据库 通过PHP做MySQL的客户端 1.2.1 开启mysqli扩展 在php.ini中开启mysqli扩展 extensionphp_mysqli.dll开启扩展后重启服务器,就可以使用mysqli_函数了,1.2.2 连接数据库 创建news数据库 -- 创建表 drop table if exists news; create …

python模块初始与time、datetime及random

模块初始与time、datetime及random 模块初始 模块的概念(本质为一个py文件) python模块可以将代码量较大的程序分割成多个有组织的、彼此独立但又能互相交互的代码片段,这些自我包含的有组织 的代码段就是模块,模块在物理形式上表…