SaaS架构:中央库存系统架构设计

news2025/1/15 8:37:43

大家好,我是汤师爷~

近年来,越来越多的零售企业大力发展全渠道业务。在销售额增长上,通过线上的小程序、直播、平台渠道等方式,拓展流量变现渠道。在会员增长方面,通过多样的互动方式,全渠道触达消费者,扩大会员规模。而全渠道的库存管理,逐渐变成零售商在渠道运营方面的核心活动,也是提高库存周转率,保证利润的关键所在。

在全渠道模式下,各渠道必须有足量的商品来满足客户需求,同时需有效管理总库存,平衡各渠道库存,以减少缺货或者滞销的情况发生。

全渠道模式下,库存管理面临的挑战

在线上线下渠道融合的大背景下,零售企业如果没有管理好全渠道库存,会带来诸多问题:

  • 各渠道库存割裂,进行线上线下促销活动时,商品超卖,引起客诉。
  • 各渠道库存分配不合理,要么缺货,要么库存积压。
  • 各渠道库存数据更新不及时,有货却不能下单,销售机会大量流失。
  • 各地库存数据分散在各系统中,数据不通,无法知晓库存分布情况,无法统一采购/调拨。
  • 无法根据用户的下单信息,进行智能分仓、就近发货。

中央库存系统的定位

向下对接各地仓库/门店库存,将各地库存放在“一盘货”里,进行管理、统一调配。

向上打通所有销售渠道平台,实现全渠道库存共享、自动化运营。

中央库存系统的关键概念

中央库存整体业务框架

中央库存体系将库存管理分为三层,销售层、调度层、仓库层,实现库存利用最大化,支持多仓多渠道模式下的各种业务场景。

仓库层

仓库层的定位是管理仓库库存,一般使用仓库WMS、门店系统或ERP系统来管理仓库的进销存,通过出入库单据变更仓库库存数量。

仓库库存的关键属性包括:货主、仓库/门店、SKU、批号、生产日期、库存状态、库位等。

  • 货主:货物所有权的拥有者。
  • 仓库/门店:存储货物的逻辑单元,这里需要与物理世界的仓库区分开,可能一个物理仓库包含多个逻辑仓库单元。
  • 批号:用于区分每一批投料生产出来的产品,为了事后能追踪这批产品的责任,每一批产品都有相应的批号。
  • 生产日期:生产线包装出可销售的成品的日期与时间。
  • 库存状态:描述库存在不同业务场景下的不同状态,例如,可用、冻结、在途、不良品、废品等。
  • 库位:一般是指在工厂仓库中实际存在的库位,比如一个个的货架。同时也是SKU库存的最小粒度。
调度层

调度层的定位是汇总各仓库/门店的所有库存状态的库存总量,但不同于仓库库存,调度层的实物库存无需管理批号、库位等细粒度的库存维度,只需要管理每个库存状态下的实物库存总数即可,这是一种解耦的设计方式。

实物库存的关键属性包括:仓库/门店、SKU、库存状态等。关键概念包括:

  • 在途库存:指供应商发货但还未入库的库存,有时为了扩大销售机会,在途库存也会用于扩大销售库存数量。
  • 可用实物库存:仓库实际可用于销售的库存。
  • 不可用实物库存:即对应仓库中的不可用库存。
  • 销售预占库存:订单提交并分仓成功后,会预占对应仓库的库存,订单取消或发货后,会扣减预占库存。
  • 销售可用库存:销售可用库存=可用实物库存-销售预占库存。
销售层

销售层的定位是管理各个销售渠道的渠道库存,为销售平台提供库存计算与库存同步的服务,并通过各种渠道库存分配策略进行库存分配,防止超卖,保障利润最优。

销售库存的关键属性包括:

  • 销售渠道:包括自营的网店、门店线下渠道,天猫,京东,美团,饿了么等三方平台等。
  • 销售店铺:销售的店铺或门店。
  • 发货方式:快递、同城配送、自提。
  • 配送区域:由于各个仓库覆盖的配送区域不一样,所以SKU能支持的配送范围也不同。

销售库存的关键概念:

  • 销售可用库存:按照仓库/门店的供货关系、渠道库存分配策略进行计算汇总的可销售的库存数量。订单提交成功扣减销售可用库存,当调度层的实物库存更新,需要触发销售层重新计算销售可用库存。
  • 预售库存:如果商品未到货,可以开启预售模式,提前售卖。实物库存与预售库存是隔离开的,当实物到货后,预售库存统一推到实物库存进行履约。
  • 预占库存: 订单已提交但未支付之前,为给顾客预留商品,会先预占商品库存,待支付以后再删除预占库存、扣减可销售库存。若长时间未支付,则会取消订单,释放预占库存。
  • 活动库存:针对某些SKU做促销活动时,例如特价、秒杀活动,需要设置活动库存,可以从正常库存中预留部分库存,活动开始后释放预留库存。如果活动商品的下单数量等于活动计划的库存总数量,则活动终止。活动订单与普通订单,在库存处理逻辑上是一模一样的。如果没有特殊要求,没必要单独把活动库存单独分出来,作为独立的业务处理,这样会多出两套库存逻辑,三层库存架构需要都独立分开处理,极大地增加了复杂度。
  • 预留库存:若需要提前为某些促销活动预留库存,以免活动开始以后库存不足,可设置预留库存。
  • 可售库存 = 预售库存+销售可用库存 – 预占库存 - 预留库存。
销售渠道层

销售渠道层代表各个销售渠道平台,包括自营的网店、门店渠道,天猫,京东,美团,饿了么等三方平台等。

逻辑模型设计

库存的核心场景

调度层同步逻辑

调度层的实物库存来自各个仓库的库存,一般有两种同步模式:

  • 流水同步模式:适用于内部系统打通,能够获取仓库/门店的库存流水,通过回传流水,变更调度层的实物库存数量。这样做的好处是,有很清晰的实物库存流水变更记录,便于追查到每次库存变化的明细,需要注意做好幂等处理,避免重复同步导致库存数量变更出错。
  • 数量同步模式:适用于外部系统对接,一般获取不到详细的库存流水,通过商家后台或系统对接的方式同步库存实时数量。

销售库存计算逻辑

在新零售的多仓多渠道模式下,为了实现全渠道库存共享,库存汇总为“一盘货”管理,要充分考虑各个仓库/门店的特性,包括支持的发货方式,配送范围等,为了合理分配库存,需要考虑各个销售店铺的库存占比。下面针对几种常见的场景,说明销售库存的计算逻辑。

多仓供货场景

门店A、门店B为两个线下门店,门店A有100件iphone14,门店B有50件iphone14。

假设商家有1个天猫旗舰店,门店A、门店B均给天猫店供货。

天猫旗舰店仅支持快递发货方式,为了防止超卖,设置快递的最大分配比例为80%。

如图例所示,最终天猫渠道的iphone14的库存数量为120,并定期将数量同步到天猫平台。

单仓给多店供货场景

商家有1个电商仓,为商家的各个电商平台店铺提供仓储服务与发货服务,电商仓有100件iphone14。

电商仓同时为京东旗舰店、天猫旗舰店供货,两个店铺仅支持快递发货方式,最大分配比例分别为40%、60%。

如图例所示,最终京东渠道的iphone14的库存数量为40,天猫渠道的iphone14的库存数量为60。

门店全渠道库存共享场景

随着新零售线上线下渠道加速融合,门店线上线下全渠道销售,已经成为大部分零售商家的标配。

受益于微信生态和小程序电商的高速发展,越来越多的门店开启了云店模式,云店实际上就是门店的线上化交易渠道,或者称为门店的“线上货架”。

连锁企业把线下门店嫁接到微信生态中,将门店所有商品上架到云店小程序。借助云店,消费者无需到店,即可享受到门店的服务,同时,门店的导购可以向自己的会员推荐所有云店商品。

如图例所示,门店A有100份的草莓蛋糕,门店A为自己供货,并共享草莓蛋糕的库存到多个销售渠道(美团外卖、云店、门店线下渠道),实现门店“一盘货”全渠道销售。

渠道库存同步

销售库存计算完后,需要将渠道库存同步到各个平台渠道,这样,消费者才能完成交易流程。根据渠道类型不同,渠道库存同步有两种处理逻辑:

  • 自营系统:如果自营渠道与库存系统是一体的,即一套系统,那么不需要过于复杂的库存同步逻辑,自营渠道直接读取中央库存系统的渠道库存即可。
  • 三方平台系统:像天猫,京东,美团,饿了么等,这些三方平台系统属于外部系统,商家自身无法管控,就需要通过开发API,向三方平台同步渠道库存。一般而言不会实时同步渠道库存,即只要有库存变动,就计算渠道库存,同步至三方平台。这种方式对系统压力较大,而且三方平台的API大多会按调用量收费,因此,会设定好时间间隔,定期同步渠道库存,例如5分钟一次。

组合商品库存计算

组合商品一般指人为将几个单独售卖的商品组合在一起,进行合并售卖的商品,例如:下午茶套餐、七夕美妆组合等。

组合商品会先在调度层,根据组合比例计算好虚拟库存,不影响子商品的供货逻辑,下单时,会根据组合商品标识,进行子商品的实物库存预占、扣减。

如图所示,电商仓中,商品A有150件,商品B有200件,根据组合关系,可以算出组合商品C有100件。当下一单商品C时,会预占1件商品A+2件商品B的实物库存。

中央库存系统的应用架构设计

小结

本文介绍了在全渠道模式下,库存管理面临的挑战。

针对挑战,详细介绍了中央库存系统的整体业务框架,涉及的关键概念,以及库存核心业务场景的处理逻辑,最后简单介绍了中央库存系统的应用架构设计。

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

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

相关文章

大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

TensorRT-LLM七日谈 Day4

在Day2 中,我们梳理了trt-llm对于TinyLLama的调用,在Day3,我们也熟悉了一下Trt-llm常规的三步流程。 这里其实有个问题,在针对tiny-llama的部署中,其实没有显式的进行模型转换,那麽其推理接口中到底包含了什么&#x…

stack - queue - priority_queue

1.stack和queue的使用 2.底层逻辑 2.1 stack和queue都是容器适配器,是用其他容器适配形成的 stack的逻辑是后进先出的逻辑,意味着会发生尾差和尾删,其容器就可以选择是vector和list queue的逻辑是先进先出,意味着会发生头删和…

Codigger Keyboard Look应用说明

Keyboard Look是一项专为Desktop设计的功能模式,旨在通过全面启用键盘操作,减少对鼠标依赖,从而提升用户的工作效率和操作体验。尤其对于频繁使用键盘的用户,如开发者,此模式可显著加速日常操作,优化工作流…

[NewStar 2024] week2

Crypto 第2周的密码依然都是签到题 这是几次方? 疑惑! 给了个提示:hint p^e 10086 这里边不要当成乘幂,而且加法的优先级高于异或,所以phint ^ (e10086)得到p就能正常解RSA了 Since you konw something 给的c是…

HTML5实现古典音乐网站源码模板2

文章目录 1.设计来源1.1 主界面1.2 古典音乐界面1.3 著名人物界面1.4 古典乐器界面1.5 历史起源界面1.6 联系我们界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作者:xcLeigh 文章地址&a…

PostGIS:公交站点覆盖率分析

现有公共交通规划中常以“公交站点覆盖率”来评价公共交通服务覆盖情况,该指标通常用来评估公共交通服务的普及程度和便利性。以下,我们将基于PostGIS实现公交站点覆盖率分析。 1.公交站点覆盖率 公交站点覆盖率,也称公交站点服务面积率,是公交站点服务面积占城市用地总面…

gaussdb 主备 8 数据库安全学习

1 用户及权限 1.1 默认权限机制-未开启三权分立 1.1.1 数据库系统管理员具有与对象所有者相同的权限。也就是说对象创建后,默认只有对象所有者或者系统管理员可以查询、修改和销毁对象,以及通过GRANT将对象的权限授予其他用户。 1.1.2 GaussDB支持以下的…

DS1302时钟芯片+esp8266 / spi 学习 arduino

DS1302时钟芯片esp8266 这个芯片往上能找到很多资料,这里主要记录我手里的模块, 看了下芯片资料,说是当vcc 供电小于备用时用备用电源 这里直接没有接vcc 遇到的问题 1.esp8266复位短路导致串口断开: 当只接scl sda rst 三个引脚的时候 esp8266复位会 导致短路,也有可能…

★ C++进阶篇 ★ AVL树实现

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将继续和大家一起学习C进阶篇第五章----AVL树实现 ~ ❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️澄岚主页&#xff1a;椎名澄嵐-CSDN博客C专栏&#xff1a;★ C进阶篇 ★_椎名澄嵐的博客-CSDN博客 ❄️…

QT工程概述

在Qt中&#xff0c;创建 "MainWindow" 与 "Widget" 项目的主要区别在于他们的用途和功能范围&#xff1a; MainWindow&#xff1a;这是一个包含完整菜单栏、工具栏和状态栏的主窗口应用程序框架。它适合于更复 杂的应用程序&#xff0c;需要这些额外的用户…

Java | Leetcode Java题解之第479题最大回文数乘积

题目&#xff1a; 题解&#xff1a; class Solution {public int largestPalindrome(int n) {if (n 1) {return 9;}int upper (int) Math.pow(10, n) - 1;int ans 0;for (int left upper; ans 0; --left) { // 枚举回文数的左半部分long p left;for (int x left; x >…

uni-app关闭底部系统导航栏的控制按钮BUG

描述 plus.navigator.hideSystemNavigation(); 在uni-app中使用 plus.navigator.hideSystemNavigation(); 关闭导航栏时会出bug会留下一个黑框。这个bug基于手机&#xff1b; 平板的性能来决定出bug频率原因是&#xff1a;过早启用霸屏导致的&#xff08;过早使用plus.navig…

执行vue create XXX报错The operation was rejected by your operating system

创建项目&#xff1a; vue create my-project 报错&#xff1a; npm ERR! code EPERM npm ERR! syscall open npm ERR! path D:\Program Files\nodejs\node_cache\_cacache\tmp\5d2a6f8e npm ERR! errno -4048 npm ERR! Error: EPERM: operation not permitted, open D:\Pro…

18933 括号匹配问题

### 思路 1. **输入处理**&#xff1a;读取输入的字符串。 2. **匹配括号**&#xff1a;使用栈来匹配括号&#xff0c;记录无法匹配的左括号和右括号的位置。 3. **标注输出**&#xff1a;根据记录的位置&#xff0c;生成标注字符串&#xff0c;输出原始字符串和标注字符串。 …

车辆损伤评估数据集(提供分割和检测两种标注方式)6类4000张高分辨率图共9000余标注,6GB数据量

车辆损伤评估数据集&#xff08;提供分割和检测两种标注方式&#xff09; 标注类型包括 dent: 凹痕 scratch: 划痕 crack: 裂缝 glass shatter: 玻璃破碎 tire flat: 轮胎扁平 lamp broken: 车灯损坏 4000张高分辨率图共9000余标注&#xff0c;6GB数据量 车辆损伤评估数据集介…

复合泊松过程

复合泊松过程的均值、方差与特征函数 复合泊松过程的定义 复合泊松过程 ( Y(t) ) 是一种常见的随机过程&#xff0c;通常定义为&#xff1a; Y ( t ) ∑ k 1 N ( t ) X k Y(t) \sum_{k1}^{N(t)} X_k Y(t)k1∑N(t)​Xk​ 其中&#xff1a; ( N(t) ) 是一个强度为 ( \lambd…

IP地址与CDN提升网络速度

视频流媒体、在线游戏、或是电商购物&#xff0c;互联网在我们的工作生活中愈加不可或缺&#xff0c;人们对于网络的加载速度要求也越来越严苛。而IP地址与CDN的协同工作&#xff0c;对于互联网速度增加与稳定起这重大的作用。 一、CDN的工作原理 CDN是由分布在全球各地的服务…

P1439 【模板】最长公共子序列 Python 题解

【模板】最长公共子序列 题目描述 给出 1 , 2 , … , n 1,2,\ldots,n 1,2,…,n 的两个排列 P 1 P_1 P1​ 和 P 2 P_2 P2​ &#xff0c;求它们的最长公共子序列。 输入格式 第一行是一个数 n n n。 接下来两行&#xff0c;每行为 n n n 个数&#xff0c;为自然数 1 …

Shell脚本:分发文件到各个集群节点

找一个全局目录/root/bin 写脚本 touch xsync chmod 777 xsync #!/bin/bash#作者&#xff1a;ldj #时间&#xff1a;2024-10-15 #描述&#xff1a;拷贝文件#1. 判断参数个数 if [ $# -lt 1 ]thenecho "Error: Not Enough Argument!"exit fi#2.遍历集群所有机器 spac…