https://www.cnblogs.com/smh188/p/11533668.html(我是如何一步步编码完成万仓网ERP系统的(一)系统架构)html
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的电商库存系统呢?好的电商库存系统有哪些要点呢?
对于用户来讲,固然是操做方便;库存帐目清晰准确;双十一、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:客官有时间光临个人小站 万仓网 。