电商平台基于销售属性生成SKU的设计

电商系统中商品系统最重要的功能就是SKU的创建以及维护,所以一旦出错就会影响电商后面的流程。
设计 业务流程,如图通过设置销售属性值销售属性组来实现组合skus的实现电商平台基于销售属性生成SKU的设计
文章图片

业务总体设计
电商平台基于销售属性生成SKU的设计
文章图片

电商平台基于销售属性生成SKU的设计
文章图片

SKU创建

  • 新增、删除、修改属性值
  • 删掉的销售属性不能够被重新生成出来
  • 勾选属性值、取消勾选属性值
1. 销售属性组合
笛卡尔积组合
calcDescartes(array) { return [].reduce.call(array, function (col, set) { let res = []; col.forEach(function (colItem) { set.forEach(function (setItem) { let newArr = [].concat(Array.isArray(colItem) ? colItem : [colItem]); newArr.push(setItem); res.push(newArr); }); }); return res; }); }

改成以属性组名称和属性值作为判断,通过map结构存储,键值为属性组名称和属性名称组合成为唯一attrValId
全排列组合,每一个组合与sku map结构对比,包含(新增维度)被包含(删除维度,删除属性值)命中(新增属性,编辑属性值)
生成一个唯一标识的attrValId
同一维度属性值不能重复
属性组名称不能重复
2. 被删除的skus不能够被重新生成出来
电商平台基于销售属性生成SKU的设计
文章图片

1、记录上一次的销售属性值,上一次销售属性(笛卡尔积)组合之后的属性值唯一标识attrValId组合
2、上一次的skus,上一次的sku列表map结构生成
3、map.keys()与销售属性全排列组合对比,对比差异(全等)取差集
4、当前的销售属性进行笛卡尔积,遍历
5、差集不生成sku
3. 取消勾选的属性值不能够被重新生成出来
【电商平台基于销售属性生成SKU的设计】判断是不是取消勾选操作,取消勾选之后再次勾选
取消勾选:cancelSkusMap添加当前map键为id,值为上一次的skusMap包含当前id的skus信息数组
取消勾选之后再次勾选:cancelSkusMap中是否有数据,并且当前不是只有一条数据被checked(最后一条数据不能用取消勾选的数据,要保留skuId原则)
电商平台基于销售属性生成SKU的设计
文章图片

    推荐阅读