如果要问WMS 最核心的模块是哪个,那一定是库存中心, 库存中心的结构直接影响到其他模块的设计。
本人设计库存中心时,考虑业务场景如下:
1. 订单进入之后,可以同步验证批次库存是否够。
为什么要到批次库存呢?像2C 电商平台,基本都是验证到货量是否足够,不验证批次。但是如果只验证到货量,那么在当库存中有残品,过期的,那么就会造成后面的无库存可出库, 所以这里会验证到批次是否足够。
2. 要能支持多批次属性管理。
根据商品的属性,考虑管理到何种批次的颗粒度,比如生鲜的商品要管理到生产日期,药品的管理到批次号等。
3. 可以追溯到产品的入库源头,库内所有的变化,出库方向。 就是说当消费者投诉到这个商品有问题时,不仅能查到库内的转移轨迹,也要能管理到这个货是经过哪个入库单入库的,根据入库单号跟踪到上游的轨迹,这个食品追溯中尤为重要,因为现在还没有做到每个商品都有唯一流通的条码进行全供应链管理。
满足上述的要求转换设计思路如下
1. 可以进行预分配,在订单进入之后就可以预分配库存,分配到库存的批次级别。
2. 在入库时根据批次不同生成唯一的批次ID,这个批次ID 跟随库存变化全过程。
3. 可扩展的库存批次管理。
4.参考预分配结果进行分配到库位库存
问题:为什么不直接分配到库位上,这样不是更简单?
答:因为2C 订单是陆陆续续进入到系统的,如果每个订单进来就分配,会造成分配的库存位置不集中,在波次拣货的时候浪费拣货路径。2,有的仓库使用存拣分离,订单进入的时候库存还没有补货完成,也不能占用到存储位置上,那就没有办法占用了。结合上面两个情况所以占用批次级别比较合适。
库存相关的表设计
库存批次表
作为库存的主表,记录库存的批次ID 和占用情况。
库存库位表
记录物理位置的库存表,使用批次ID 作为外键链接库存批次表
库存批次表
作为库存批次表, 记录库存不同库存批次的情况,结合上面两个表就可以查看每个预占或者占用的库存对应的批次情况,查看库位上库存的批次情况。
库存表设计后,还要有对应的分配表
这里的为了区分不同场景下的分配,定义只占用批次的时候要预占,分配到库位上库存时叫做分配。
库存预占表
库存分配表
分配逻辑说明
预分配
在库存分配时如果需要预分配,先进行预分配,分配结果记录到库存表和预分配表中,前者记录库存的变化,防止超量预占(本设计不考虑超量分配的场景),后者记录预分配的结果和订单的关系。
分配
分配数量参考订单的预分配结果,按照预分配分配的批次ID 到库存中找到对应的批次ID.分配的数量记录到分配字段中。
如图
库存批次ID 变化
总结:增加了预分配的概念,同时通过批次ID 记录库存变化过程。这样就不仅仅可以在库存分配的验证库存,也可以事后追踪库存。