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

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

 

Java生鲜电商中在做拆单的需求,细思极恐,思考越深入,就会发现里面涉及的东西越来越多,要想做好订单拆单的功能,还是相当有难度,

因此总结了一下拆单功能细节,分享出来。

订单拆单

拆单也有两个层次,第一次是在提交订单后支付之前拆单,这次是拆分的订单,一次是在下单之后,发货之前,去拆分发货单(SKU层面)。

两次拆单的原则不同,第一次拆单是为了区分平台商家、方便财务结算,第二次拆单是为了按照最后的发货包裹进行拆单,如不同仓库、不同运输要求的SKU、包裹重量体积限制等因素(第二次拆单的有些步骤可以放在第一步)。

需要注意的是,若是跨境商品平台,则需要在支付前完成所有拆单步骤,因为报关需要三单对碰,订单、支付单、运单统一。

1. 为什么要拆单

拆单,顾名思义就是客户在下单之后,为了发货和结算方便,需要对订单进行拆分。
影响拆单的因素主要有以下几点:

  • 店铺商家。由于商品归属权不同,涉及到财务结算和发货的问题,店铺商家不同,需要拆分订单。例如京东自营和平台商家的商品在下单时会拆分成不同的子订单,售后入口不同。或者不同淘宝店同时下单会按照店铺进行拆单。

  • 仓库。由于发货仓库不同,按照商品归属的仓库进行拆单,若有多仓有货,还应按照地域时效选择仓库进行拆单。

  • 品类。由于商品属性和价值得不同,同样会产生拆单需求。例如易碎品需要特殊包装,超大物品(儿童座椅、轮胎)需要单独包装。甚至有些品类不同的商品不能放在一起,都需要来定义拆单规则。

  • 物流因素。不同物流公司对单个包裹的重量或体积都有特殊要求,需要根据sku的毛重和体积计算包裹总重量和体积,超出物流公司限制的也需要拆单。

  • 商品价值。这块的拆单主要是跨境海淘商品,国家政策规定:跨境电子商务零售进口商品的单次交易限值为人民币2000元,个人年度交易限值为人民币2万元。当单次购买超过2000元(单仓)之后,就需要对订单拆单。(总不能告诉用户少买点,不要超过两千吧!)

2. 拆单流程

根据拆单的一些影响因素,需要对订单进行拆分。由于跨境电商和国内电商的区别点:
1.跨境电商一般是单品单仓,同一个SKU只在一个仓库有,而国内电商一般有多个区域仓,从时效最高的仓库发货;
2.跨境电商需要报关,必须三单统一,所以拆单只能发生在下单后、支付前,而国内电商除了平台商家不同需要在下单时就拆单,其他的拆单步骤可在下单之后再拆发货单;
3.报关限额,只有跨境电商需要考虑。

下图简单解析一下拆单的流程:

拆单流程

3. 拆单之后的前端显示

在提交订单之后、支付之前的拆单订单,需要即时显示给用户,若用户中断支付,再回到支付环节,就需要分开支付。用户就能知道,是不同的包裹发过来的,分属不同的子订单。

订单拆分

在支付之后,系统根据一些影响因素进行拆单,同一个子订单可能会对应多个物流单,在订单显示页面查看物流时,需要展示多个物流信息。但是现在多个平台只能一个订单对应一个物流单。有些订单无法通过一个包裹就能发货,在信息反馈给客户上就会有些瑕疵。

关于支付单,虽然基本所有平台都会通过合并支付的方式简化支付环节,但是不同的子订单都是可以拿到不同的支付单号的,这样就有利于售后和财务管理,对于跨境商品,还有报关的作用。

小结

拆单的系统比较复杂,要做的完全彻底,对大部分电商公司有很大的困难,这需要打通从订单系统到WMS系统的许多环节,所以需要在产品设计上进行取舍,根据平台的具体需求来确定拆单需求的优先级。

 

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

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

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

相关文章

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;而思维模式的研究则是从深层次研究事…

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

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

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

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

常用的激活函数

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

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

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

今天刚查到的宏,学习

PVP常用的宏&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&…

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

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

Apache ServiceComb

Apache ServiceComb 开源&#xff0c;全栈微服务解决方案。开箱即用&#xff0c;高性能&#xff0c;兼容流行的生态&#xff0c;多语言支持 ServiceComb是一个微服务框架&#xff0c;提供服务注册&#xff0c;发现&#xff0c;配置和管理实用程序。 下载 &#xff1a;http://se…

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

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

多线程的创建方式---继承Thread和实现Runnable

继承Thread类创建多线程 1 package cn.ftf.thread;2 /**3 * 多线程实现方式一 继承Thread实现多线程&#xff0c;继承Thread&#xff0c;重写run方法4 * author 房廷飞5 *6 */7 public class StartThread extends Thread{ //对象继承Thread8 public static void mai…