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…

fastclick库的介绍和使用

移动端点击延迟事件 1. 移动端浏览器在派发点击事件的时候,通常会出现300ms左右的延迟 2. 原因: 移动端的双击会缩放导致click判断延迟 fastclick 是具有消除移动端浏览器上的点击事件的 300ms 的延迟的作用。 注意几点 1、PC端无效 2、Android 上的 Chrome …

toString()和String.valueOf()的区别(转)

惯例广告一发,对于初学真,真的很有用www.java1234.com,去试试吧! 有的朋友在用这两个的时候感觉差不多 其实,很多时候效果是差不多的 但是,有的时候用.toString()会报错,而用String.valueOf()就…

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…

VS2005无法启动解决方法(转)

一直有一个问题困扰,VS2005用得好好滴,突然有一天开始就进不去了,启动了以后,没有任何界面的出现,但是打开任务管理器,却能够看到进程的存在,真是奇怪了,我试图卸载并且重新安装&…

kylinH5框架之项目组件理解

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

Markdown 语法简介

这是标题一 标题二 标题三 print(hello) 这是一个python 第一点 thiw dhaishd 第二点 转载于:https://www.cnblogs.com/BlogOfEr/p/11229682.html

kylinH5框架之项目开发调试

进行开发调试,需要完成以下步骤: 安装依赖开发调试构建生产 点击 代码示例,获取 Kylin Demo,并完成以下操作。 安装依赖 进入项目根目录,使用 cnpm 安装 npm 依赖: # 安装npm依赖 cnpm install 开发调试…

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…

kylinH5框架之项目脚手架

页面介绍 Page 是一个 Webview 的逻辑抽象层,同时也是组件挂载的根节点。 代码引入 import { Page } from ali/kylin-framework; 页面声明结构 一个Page包含的接口在页面接口中声明,提供了对 Vue 实例的完整控制能力,简易的 Page 使用如…

博弈论学习笔记

决定近段时间复习一下博弈论顺便写点笔记。 大佬博客:几种常见博弈模型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…

Promise链式调用和解决回调地狱的ES7终极解决方法async,await

promise链式调用 **then 是成功回调&#xff0c;只要在then后边return一个promise就可以继续then**<script type"text/javascript">let p1new Promise(function(resolve,reject){setTimeout(function(){resolve()//成功回调// reject()//失败回调},2000)//2秒…

1.MySQL目录结构

分为两个目录&#xff1a; 1.安装目录&#xff1a; 2.数据目录&#xff1a; 在Linux下 yum安装mysql后使用 find / -name my.cnf 找到mysql数据文件的位置 转载于:https://www.cnblogs.com/sdrbg/p/11237231.html

对promise.all底层的实现的研究

1.Promise.all(iterable)返回一个新的Promise实例,此实例在iterable参数内素有的Promise都fulfilled或者参数中不包含Promise时&#xff0c;状态变成fulfilled。 如果参数中Promise有一个失败rejected &#xff0c;此实例回调失败&#xff0c;失败原因的是第一个失败Promise的返…

vue-provide/inject轻松实现跨级访问祖先组件

provide&#xff1a;Object | () > Object inject&#xff1a;Array<string> | { [key: string]: string | Symbol | Object } provide 和 inject 主要为高阶插件/组件库提供用例。并不推荐直接用于应用程序代码中。是2.2.0版本 新增的。 这对选项需要一起使用&#x…

python 操作redis,存取为字节格式,避免转码加

这种情况连接数据库&#xff0c;对数据的存取都是字节类型&#xff0c;存取时还得转码一下 from redis import Redis# 实例化redis对象rdb Redis(hostlocalhost, port6379, db0,passwordaaa123) rdb.set(name, root) name rdb.get(name) print(name)为了避免上述情况&#x…

element ui table scrollTop 滚动到行头或行尾

1.设置table的ref为tableList2.设置滚动至顶部this.$refs.tableList.bodyWrapper.scrollTop 0;3.设置滚动至底部this.$refs.tableList.bodyWrapper.scrollTop this.$refs.tableList.bodyWrapper.scrollHeight;//如果请求完更新数据&#xff0c;需要使用$nextTick this.$nextTic…

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

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

Java生鲜电商平台-B2B生鲜的互联网思维

Java生鲜电商平台-B2B生鲜的互联网思维 在互联网高速发展的今天&#xff0c;为我们的生活带来了众多便利。然而互联网从早期的萌芽状态到现在妇孺皆知&#xff0c;它的崛起速度远远超乎世人的想象。人们开始关注互联网并且研究它&#xff0c;而思维模式的研究则是从深层次研究事…