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

电商系统中商品系统最重要的功能就是SKU的创建以及维护,所以一旦出错就会影响电商后面的流程。

设计

业务流程,如图通过设置销售属性值销售属性组来实现组合skus的实现电商平台基于销售属性生成SKU的设计_第1张图片
业务总体设计
电商平台基于销售属性生成SKU的设计_第2张图片
电商平台基于销售属性生成SKU的设计_第3张图片

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的设计_第4张图片
1、记录上一次的销售属性值,上一次销售属性(笛卡尔积)组合之后的属性值唯一标识attrValId组合

2、上一次的skus,上一次的sku列表map结构生成

3、map.keys()与销售属性全排列组合对比,对比差异(全等)取差集

4、当前的销售属性进行笛卡尔积,遍历

5、差集不生成sku

3. 取消勾选的属性值不能够被重新生成出来

判断是不是取消勾选操作,取消勾选之后再次勾选

取消勾选:cancelSkusMap添加当前map键为id,值为上一次的skusMap包含当前id的skus信息数组

取消勾选之后再次勾选:cancelSkusMap中是否有数据,并且当前不是只有一条数据被checked(最后一条数据不能用取消勾选的数据,要保留skuId原则)

电商平台基于销售属性生成SKU的设计_第5张图片

你可能感兴趣的:(javascript前端)