我是如何一步步编码完成万仓网ERP系统的(十二)库存 1.概述

  https://www.cnblogs.com/smh188/p/11533668.html(我是如何一步步编码完成万仓网ERP系统的(一)系统架构)

  https://www.cnblogs.com/smh188/p/11534451.html(我是如何一步步编码完成万仓网ERP系统的(二)前端框架)

  https://www.cnblogs.com/smh188/p/11535449.html(我是如何一步步编码完成万仓网ERP系统的(三)登录)

  https://www.cnblogs.com/smh188/p/11541033.html(我是如何一步步编码完成万仓网ERP系统的(四)登录的具体实现)

  https://www.cnblogs.com/smh188/p/11542310.html(我是如何一步步编码完成万仓网ERP系统的(五)产品库设计 1.产品类别)

  https://www.cnblogs.com/smh188/p/11546917.html(我是如何一步步编码完成万仓网ERP系统的(六)产品库设计 2.百度Ueditor编辑器)

  https://www.cnblogs.com/smh188/p/11572668.html(我是如何一步步编码完成万仓网ERP系统的(七)产品库设计 3.品牌图片跨域上传)

  https://www.cnblogs.com/smh188/p/11576543.html(我是如何一步步编码完成万仓网ERP系统的(八)产品库设计 4.品牌类别)

  https://www.cnblogs.com/smh188/p/11578185.html(我是如何一步步编码完成万仓网ERP系统的(九)产品库设计 5.产品属性项) 

  https://www.cnblogs.com/smh188/p/11589264.html(我是如何一步步编码完成万仓网ERP系统的(十)产品库设计 6.属性项和类别关联) 

  https://www.cnblogs.com/smh188/p/11596459.html(我是如何一步步编码完成万仓网ERP系统的(十一)产品库设计 7.发布商品) 

  https://www.cnblogs.com/smh188/p/11610960.html(我是如何一步步编码完成万仓网ERP系统的(十二)库存 1.概述) 

  https://www.cnblogs.com/smh188/p/11669871.html(我是如何一步步编码完成万仓网ERP系统的(十三)库存 2.加权平均价) 

  https://www.cnblogs.com/smh188/p/11763319.html(我是如何一步步编码完成万仓网ERP系统的(十四)库存 3.库存日志) 

  万仓网ERP系统不开源,准备做一个系列,讲一讲主要的技术点,这些技术点会有源代码。如果想看所有源代码,可以打道回府了,没必要再阅读下去了,浪费您宝贵的时间。 

  接下来的几篇开始说说库存,如何设计一个高效NB的电商库存系统呢?好的电商库存系统有哪些要点呢?

  对于用户来说,当然是操作方便;库存账目清晰准确;双11、618大促时能够减少超卖;能够根据现有库存销售数据,预测将来的销售,掌控供应链,提高库存周转率和资金的使用率等。

  对于开发设计来说,怎么做才能满足用户的要求?当然是直接借鉴一个成熟的大流量的电商库存系统,那就是亚马逊的Bin系统,网上有很多亚马逊bin系统的介绍,可以搜索关键字进行查询,这里就不过多的介绍了,直接上正文吧。

  1. 采用双重的库存架构,第一层是以仓库和SKU为维度的库存结构,主要字段有仓库编码,SKU编码,可订量和库存量等(可以在此基础上进行扩展比如残品可订量,残品库存,锁定可订量(大促前锁定的库存),这里不过多介绍扩展字段,只介绍正品可订量和正品库存)。

  库存表 

   可订量就是可供订单(包括调拨单、领用单和采购退货单等)下单的数量,订单进入到ERP系统确认审核后,根据订单明细扣减可订量,这时库存量不变。这样设计能保证大促销时,减少超卖现象,系统可以根据可订量来判断能不能下单,盘亏时可订量可能为负。

   库存量就是仓库内实际的商品库存,库存量不能为负。

  2. 第二层以货位和SKU为维度的Bin货位库存结构,库房有货架,货架上每个货格称为 “Bin” 货位,这就对库房的工作人员多了一些工作量,需要事先设定好货位,更细致的可以设定货位的长宽高,商品入库时可以根据商品的体积来推荐上架货位。

  货位 

   货位号需要保持全系统唯一,这样能够方便定位检索。

   货位类型可以根据存货商品类型和使用方式分为三种:正品货位(细分为正品存货位和正品拣货位)、残品货位和移动货位。正品货位只能存储正品库存,残品货位只能存储残品库存。移动货位作为一种特殊的货位,比如当采购单入库后,采购的货品按照库房的作业应该是先放到托盘上,这时这个托盘就是移动货位,库管拉着托盘去正品货位或残品货位进行上架,这样货位就和SKU进行绑定,接下来就引申出来BinItem(货位库存)。

 

  货位库存

   可以看一下BinItem的表架构,一个货位可以放置多种SKU,这样设计就避免一种SKU占用一个货位,当SKU种类过多时,货位就不够用了,能够合理的使用货位。

   可用量就是可以分拣的数量,拿订单来说,订单在占用Storage表可订量时,就需要分拣具体的货位了,根据单据的正残,来分拣正品货位或残品货位。分拣货位时,BinItem表ForUsage就直接扣减(需要记录日志,拣货时按照指定货位拣货),但是货位库存量不变。

   拿采购单来说,单据从源头上就要区分是正品还是残品,当然采购单肯定是正品了(一些二手商家会采购一些残品),采购单入库时,Storage库存表可订量和库存量要一同增加,用户在购物网站就可以下单了。同时移动货位的BinItem货位库存表货位库存量要增加,移动货位的可用量不用增加,WHY?因为系统设定,单据拣货时不能分拣到移动货位(单据拣货时从正品货位下架到移动货位,这时单据又分拣到移动货位,造成死循环),那可用量在什么时候增加呢?在库存上架的时候,货位库存从移动货位移动到正品(残品)货位时,正品(残品)货位可用量和货位库存量同时增加,扣减移动货位的库存量,Storage表不进行任何操作。

  可以看出Storage库存表的可订量和BinItem货位库存表的可用量并不是实时一致的,订单占用可订量,还没分拣时可用量并没占用。但库存表和货位库存表的库存量是一致的。

  两者的库存量在入库或者出库时必须同时增减,对系统的一致性要求极高,可以合理的使用事务来确保两表操作的一致性。

  这样设计出来的库存系统可以实现精细化管理,某个商品在哪个货位,库存量、可订量和货位可用量可以方便的查询,由于BinItem表结构设计,当SKU或者货位比较多时,一个SKU可以放置在多个货位,有很频繁的货位移动,数据量会比较大,需要合理的设置索引键,同时对数据库的读写压力也比较大。当然好处也非常多,库房可以上一些现代化的PDA,实现无纸化操作,库房拣货、上架和盘点都可以同时操作。

  唠唠叨叨,先说这么多。

   

PS:客官有时间光临我的小站 万仓网 。  

posted @ 2019-10-14 14:44  万仓网  阅读(656)  评论(0编辑  收藏  举报