Java生鲜电商平台-深刻理解电商的库存架构与解决方案
Java生鲜电商平台-深刻理解电商的库存架构与解决方案
说明:一般电商的库存都是跟SKU相关联的,那么怎么样才能进行SKU的库存管理呢?有以下几种方式与方法:
一、七大库存分类
首先得学习什么是库存,库存的分类吧,OK,Let'go。
库存,从字面上的理解,是指库房中的存货,也就是库房中的货品总和。
但库房中的库存却不能一概而论。即便是一个SKU,也会分属不同的状态。举一个简单的例子,在实物的流转过程中,难免会发生磕碰、损伤,这些发生损伤的产品也就不能正常销售了,在系统管理时,也必须加以区分。电子商务操作中,由于购买和发货在时间、空间上都是异步进行的,客户下订单到发货的过程中,也存在着时间间隔,也因此必须将库存结构区分开来。
为了适应这种异步销售过程,电子商务企业的库存,在系统结构中,一般会分为如下几个部分:
1、可销售库存(S)
可销售库存(sellable inventory)是即网站前台显示的库存,也是库存的最大组成部分。
当“可销售库存>0”时,这一商品可供购买,前台网站则会显示产品可销售;而一旦“可销售库存<0”时,前台网站则会显示商品缺货。一般所说的缺货并不等于库房中没有库存了,而只是没有可销售库存(例如存在订单占用库存)。
大部分的公司只会在前台显示是否有库存,但这实际上可以做到更细致。
在卓越亚马逊的系统中,当可用库存数量很少时,会在前台提示客户数量很少,请客户加紧购买,提高转化率。
顾客选购完商品,确认订单时,前台网站会首先向后台系统发出要求,检查订单产品数量与当前可销售库存数量。若可销售库存数量>订单产品数量,则通知前台网站成功,否则会通知前台库存不足,提醒客户。
生成一张新的订单后,该客户购买的库存则会被预留下来,用于后续的发货,系统中可用库存数量减少,而减少的可用库存到哪里去了呢?这就变成了下一部分。
2、订单占用库存(O)
当生成订单时,可用库存数量减少,订单占用库存(Order Occupied Inventory)数量增多,变化的数量即订单中的产品数量,这个很容易理解。
设立订单占用库存的原因在于:订单的生成和库房的发货在时间上是异步的。这样做的优点在于:保证已经生成订单的库存,这部分客户可以顺利收货;而且客户在下订单时,能够保证有产品发货。若不设立订单占用库存,则会产生客户下订单后,库存发现无货可发的尴尬情况。
而处理订单时,针对的只是已经被订单所占用的库存,与前台的销售无关。订单出库后,系统中扣减的也只是订单所占用库存。
3、不可销售库存(U)
前面举的例子当中,产品由于破损无法销售,在系统中也必须有相应的状态。实际操作中,无法作正常销售的原因很多,例如包装破损、性能故障、型号标错等等。为了理论符合实际,在系统中也会定义出这一部分的库存为不可销售状态(Unsellable Inventory)。
不可销售库存在系统中的标注方法有两类。一类是使用不同的SKU代号来区别,例如某一正常商品的SKU编码是351038,它所对应的不可销售库存的SKU编码则是351038U;另外一种方式是使用同一种SKU,但是专门开辟一个不可销售库存区,所有不可销售的库存统一管理。
4、锁定库存(L)
电商经常要降价促销参加平台方举行的活动,在一些情况下,销售方并不希望这么快就将所有的库存都售出。有的时候是因为所有库存全部作降价促销的成本很高,有的时候是防止竞争对手的恶意采购,更多的情况下,则是希望将这一产品的降价作为引子,带动网站的流量和整体销售,这就需要将促销分批次进行。(并不想真的降价卖,只是想以这个为噱头吸引用户)
为达到以上的目的,会采用锁定库存(Locked Inventory)的方式。库存被锁定后,无法直接销售。促销进行一段时间后,可用库存为0,无法继续销售,必须在解除锁定后才能转化为可销售库存,继续进行销售。
为达到以上的目的,会采用锁定库存(Locked Inventory)的方式。库存被锁定后,无法直接销售。促销进行一段时间后,可用库存为0,无法继续销售,必须在解除锁定后才能转化为可销售库存,继续进行销售。
计算公式
5、虚库存(V)
以上所说的,都是指在实物在库房中的库存。但库房的总容积量是一定的,不可能无限制的扩展。而依据长尾理论,电子商务的最大优势则是几乎无限的商品展示和销售能力。如何将有限的库房处理能力和无限的可销售商品联系赶来呢?方法早就有了,虚库存(Virtual Inventory)。
有一些产品,虽然库房中并没有,或者并没有很多,但是供应渠道非常通畅,可以在很短的时间内送到库房中,变为库存;另外一些产品,销售量少,库存的管理难度大,只有当产生订单后,才向供应商采购。这部分不在实际的库存中,但是可以很快采购到的货品就叫做虚库存。
虚库存的存在,是为了使前台网站的可销售数量大于实际可销售数量。当存在虚库存时,电商库存公式会变成:
S=I-O-U-L+V
(S-可销售库存 I-总库存 O-订单占用库存 U-不可销售库存 L-锁定库存 V-虚库存)
6、调拨占用库存(T)
很多B2C企业有着超过一个以上的库房。多个库房的设置,各个库房之间,必然存在着库存的分派和调拨(帮助非洲黑人兄弟)。当产生调拨计划后,调出地库房的某一部分库存就会被占用,这部分库存被称为调拨占用库存(Transport Inventory)。调拨占用库存和订单占用库存的性质相似。当存在调拨占用库存后,电商库存公式变成:
S=I-O-U-L+V-T
(S-可销售库存 I-总库存 O-订单占用库存 U-不可销售库存 L-锁定库存 V-虚库存 T-调拨占用库存)
7、调拨中用库存(A)
库存的调拨,必然会存在一段时间,库存既不存在于调拨出库房,也不存在于调拨入库房,这一部分库存就像漂在空中一样,称为调拨中库存(Air Inventory)。
假设1号库房为调拨出库房,2号库房为调拨出库房,在调拨发货前,这两个库房的库存结构为:
I1=S1+O1+U1+L1-V1+T1
I2=S2+O2+U2+L2-V2+T2
I=S+O+U+L-V+T
(S-可销售库存 I-总库存 O-订单占用库存 U-不可销售库存 L-锁定库存 V-虚库存 T-调拨占用库存)
若从1号库房调拨出量为A的库存到B库房,在1号库房调拨发出后,2号库房收到调拨前,两库房的库存结构为:
I1=S1+O1+U1+L1-V1+T1-A
I2=S2+O2+U2+L2-V2+T2
I=S+O+U+L-V+T-A
(S-可销售库存 I-总库存 O-订单占用库存 U-不可销售库存 L-锁定库存 V-虚库存 T-调拨占用库存 A-调拨中库存)
可以看到,两个库房的总库存减少了,调拨中库存在路上,只能计在财务库存中,而并不能计入实物库存。只有当调拨完成后,库存进入2号库房,总库存才会恢复。
I1=S1+O1+U1+L1-V1+T1-A
I2=S2+O2+U2+L2-V2+T2+A
I=S+O+U+L-V+T
(S-可销售库存 I-总库存 O-订单占用库存 U-不可销售库存 L-锁定库存 V-虚库存 T-调拨占用库存 A-调拨中库存)
只要记住调拨中的库存,不计入实物库存,即不属于A也不属于B,只计入财务库存,像没爹的孩子一样。
Java生鲜电商平台-深刻理解电商的库存架构与解决方案的更多相关文章
- Java生鲜电商平台-深入理解微服务SpringCloud各个组件的关联与架构
Java生鲜电商平台-深入理解微服务SpringCloud各个组件的关联与架构 概述 毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术.不过大多数讲解还停留 ...
- Java开源生鲜电商平台-财务系统模块的设计与架构(源码可下载)
Java开源生鲜电商平台-财务系统模块的设计与架构(源码可下载) 前言:任何一个平台也好,系统也好,挣钱养活团队这个是无可厚非的,那么对于一个生鲜B2B平台盈利模式( 查看:http://www.cn ...
- Java生鲜电商平台-高并发核心技术订单与库存实战
Java生鲜电商平台-高并发核心技术订单与库存实战 一. 问题 一件商品只有100个库存,现在有1000或者更多的用户来购买,每个用户计划同时购买1个到几个不等商品. 如何保证库存在高并发的场景下是安 ...
- Java生鲜电商平台-会员积分系统的设计与架构
Java生鲜电商平台-会员积分系统的设计与架构 说明:互联网平台积分体系主要用于激励和回馈用户在平台的消费行为和活动行为,一个良好的积分体系可以很好的提升用户的粘性及活跃度. 一.互联网平台积分体系设 ...
- Java生鲜电商平台-定时器,定时任务quartz的设计与架构
Java生鲜电商平台-定时器,定时任务quartz的设计与架构 说明:任何业务有时候需要系统在某个定点的时刻执行某些任务,比如:凌晨2点统计昨天的报表,早上6点抽取用户下单的佣金. 对于Java开源生 ...
- Java生鲜电商平台-RBAC系统权限的设计与架构
Java生鲜电商平台-RBAC系统权限的设计与架构 说明:根据上面的需求描述以及对需求的分析,我们得知通常的一个中小型系统对于权限系统所需实现的功能以及非功能性的需求,在下面我们将根据需求从技术角度上 ...
- 33、生鲜电商平台-定时器,定时任务quartz的设计与架构
说明:任何业务有时候需要系统在某个定点的时刻执行某些任务,比如:凌晨2点统计昨天的报表,早上6点抽取用户下单的佣金. 对于Java开源生鲜电商平台而言,有定时推送客户备货,定时计算卖家今日的收益,定时 ...
- 26、生鲜电商平台-RBAC系统权限的设计与架构
说明:根据上面的需求描述以及对需求的分析,我们得知通常的一个中小型系统对于权限系统所需实现的功能以及非功能性的需求,在下面我们将根据需求从技术角度上分析实现的策略以及基于目前两种比较流行的权限设计思想 ...
- 2017.12.25 Java中面向对象思想的深刻理解
今日内容介绍 1.面向对象思想 2.类与对象的关系 3.局部变量和成员变量的关系 4.封装思想 5.private,this关键字 6.随机点名器 01面向对象和面向过程的思想 * A: 面向过程与面 ...
随机推荐
- JavaScript定时器方法
一.setTimeout() 延迟性操作 window.setTimeout(function(){ console.log('派大星');//延迟了4秒 },4000); console.log(' ...
- Linux中长时间运行程序的方法
一.场景: 如果临时有一个命令需要长时间运行,比如 python hello.py ,什么方法能最简便的保证它在后台稳定运行呢?解决方法: 当用户注销(logout)或者网络断开时,终端会收 ...
- Python 爬虫从入门到进阶之路(一)
通用爬虫和聚焦爬虫 根据使用场景,网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种. 通用爬虫 通用网络爬虫 是 捜索引擎抓取系统(Baidu.Google.Yahoo等)的重要组成部分.主要目的是将互联 ...
- GO语言介绍以及开发环境配置
一.介绍 GO语言是静态强类型语言 静态也就是编译型语言 二.安装 1.下载地址 下载地址 https://golang.google.cn/dl/ 2.安装 Linux安装 1.下载二进制包:go1 ...
- electron打包出现有文件下载不全的情况
1.根据提示下载相应的东西 https://blog.csdn.net/az44yao/article/details/85242442 具体可以看这个链接 2.有个小坑,如果到了按照链接1的过程,遇 ...
- js 记一次带时间的表单提交报400错误
写一个功能的时候,表单里不填时间提交的时候,数据就正常传到后台了,一填上时间就报400错误,看了后台时间的处理也没问题,看了前端时间控件返回的格式也对,但是就是一直报错, 把提交的数据打印出来也没发现 ...
- idea代码模板配置
1. 在settings中配置 配置快捷键和模板内容 输入syso然后按enter键就会自动生成代码
- property用法,使Python中的get方法和set方法使用更简单
方法一: class a: def __init__(self): self.__num = 1 #定义一个私有变量(以双下划线开头的是私有变量) def getNum(se ...
- js正则高级函数(replace,matchAll用法),实现正则替换(实测很有效)
有这么一个文档,这是在PC端显示的效果,如果放在移动端,会发现字体大小是非常大的,那么现在想让这个字体在移动端能按照某个比例缩小,后台返回的数据格式是: <html> <head&g ...
- github 码云 chrome文件树形插件
偶然间看到github有一个树形插件,对于代码层级较多的项目来说体验提升了很多 github的chrome插件 chrome商店: https://chrome.google.com/webstore ...