什么是SKU
SKU=Stock Keeping Unit(库存量单位)同一型号的商品,或者说是同一个产品项目(商品条形码是针对企业的产品项目来进行定义的),因为产品与产品之间有某些属性不同,用以区别开这些不同商品的属性即商品变异属性,又称作SKU属性,因为它决定了SKU的绝对数量。
从货品角度看,SKU是指单独一种商品,其货品属性已经被确定。
只要货品属性有所不同,那么就是不同的SKU。属性包括很多,一般的理解货品属性包括:品牌、型号、配置、等级、花色、成分、用途等。
从业务管理的角度看,SKU还含有货品包装单位的信息。
例如:SKU#123是指330ml瓶装黑啤(以瓶为单位);SKU#456是指330ml瓶装黑啤(以提为单位,6瓶为1提);SKU#789是指330ml瓶装黑啤(以箱为单位,24瓶为1箱)。由于计量单位(包装单位)不同,为业务管理需要,应划归于不同的SKU,当然可以有单位转换的算法协助转换SKU。
从信息系统和货物编码角度看,SKU只是一个编码。
不同的一种商品(商品名称)就有不同的编码(SKU#)。而这个编码与被定义的商品做了一一对应的关联,这样我们才可以依照不同SKU的数据来记录和分析库存和销售情况。当你使用WMS或者ERP系统的时候,你会发现每一个SKU编码是有精确的商品信息含义。
SKU算法
我们以手机为例,手机的产品数据如下:
尺寸:5.0寸、4.5寸
型号:土豪金、红、黑
内存:128G、64G
但是后台可选的规格只有三种:
4.5寸,红,64G
4.5寸,土豪金,128G
5.0寸,黑,128G
现在这几种类型一共有2 * 3 * 2 = 12种排列组合,然而只有3种组合是正确的(其中还要排除库存为0的情况)一开始先保存好每一个按钮和每一列的位置进入一个List<list> 的数组中,TagEnable记录着每一个按钮的状态(0代表者正常,1代表选中,2代表不可选(库存为0||无规格));然后当用户点击的时候,用Map<integer,string> 记录选中的按钮和文字;并把每一个按钮先设置为不可点击,之后根据文字去对按钮进行设置状态。</integer,string></list
这种算法是比较直接的一种实现,但是很繁琐,循环嵌套循环,可以简单分析下算法复杂度,如果sku属性组合元素的总和数用m来表示,可选的数据的长度是n的话,那么算法的步骤大概是m*n,这看起来好像不怎么复杂;不过每次判断一个sku组合是否和result中的 组合匹配,却不是一个简单的过程,实际上这可以看做是一个字符串匹配的一个算法了, 最简单的还是使用正则匹配,m * n次正则匹配,这样就不怎么快了吧。正则表达式很不稳定,万一sku组合中有一些特殊字符,就可能导致一个正则匹配没能匹配到我们想要的表达式。
当用户全部选中的时候,根据这种算法,只会出现一种情况,就是未选中的全部都变成不可选(即变成灰色),这大大影响了用户的体验。
sku算法是利用数学的集合思想来写的。即先把可能的排列组合列出来,即取出集合中的所有子集,数学上叫做幂集。
就是如果第一条数据[5.0寸, 黑, 128G]可选,
那么以下的组合肯定存在:
5.0寸
黑
128G
5.0寸、黑
5.0寸、128G
黑、128G
5.0寸、黑、128G
我们可以利用sku算法取出所有的组合,再根据这些组合的集合,记为U,去判断用户点击按钮时,去设置其他按钮的状态。
例如:当用户进行如下的选择:5.0寸、128G
那么如何判断 4.5寸这个按钮的状态呢?只需判断4.5寸、128G是否可选(集合U是否存在(4.5寸-128G)这个组合并且库存不为0),以此类推。
以上就是关于sku及其算法的内容。