前言

SKU百度百科为 库存保有单位 (Stock keeping Unit 或者SKU)是对每一个产品和服务的唯一标示符。 也就是说sku 为商品对应的很多种类规格情况下的 库存,价格 各有不同。需要通过sku 这样一种组合结构存储这些计量值。
在移动电商时代,网购已然成为潮流。更是全民参与。每一年都有购物节 : 京东618 , 淘宝天猫双11, 双12 。 一个淘宝店家月销售额30万背后 ,他的商品sku有上千种。 一个卖橱柜的,小到抽屉,拉篮,五金 ,把手,螺丝钉 都可以细分成很小的SKU。移动电商商品背后的SKU种类的复杂性。可正是因为商品SKU的多样化,才能商家带来巨量的销售额。

从详情页认识SKU

C端sku选择

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
这个商品包含的SKU信息:{
规格类型:[{
尺寸:[XS, S, M, L,XL, XXL]
},{
颜色: [白色,珊瑚粉,草木绿]
}],
规格明细组合描述: {
XS-白色:{
图片: 图片url,
价格: ¥328,
库存: 188件,
扩展..字段: 值
},
其他规格组合:{
图片: 图片url,
价格: 价格..,
库存: 库存数量..,
扩展..字段: 值
}
}
}

SKU功能操作流程图

图片1
说明

新增商品SKU

1) 从规格容器中选择需要的规格。已选择的规格类型也可移除。
2) 在已选规格类型下 可新增规格属性。已新增的规格属性可选中或取消。
3) 规格属性的选择或取消 触发自有组合排列。生成规格明细的表单。
4) 填写规格明细

  • 单项填写: 挨个填写,过滤条件填写。
  • 批量填写。
    5) 提交sku明细项数据。

修改商品SKU

1) 加载已选择的规格类型属性;

注意:根据业务控制已选规格类型 是否可新增 ,是否可删除的条件,因为直接涉及到规格明细的排列组合结构。 当商品库的某商品已经在店铺上线了,如果再新增规格类型的话,排列组合将改变,之前设置的价格和库存都会跟着改变。所以不可以再新增或删减规格类型。

2) 自由排列组合 ,把各项值 赋值到规格明细表中。
3) 修改数据后,重新提交SKU 的明细表单。

修改SKU的场景
1) 以衣服为例:白色 + M 卖完的时候,在规格sku 修改的时候,可以把已选的颜色为白色去掉。
2) 以手机 为例:由于热销,厂家又上了 升级版本玫瑰金色。可新增一个玫瑰金色再设置相应的价格。

1、技术讲解

1.1 服务器下发的Json数据结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//注释: 服务器返回的商品规格类型属性。用于页面头部显示已选的规格类型,和其属性。
{
type : 101, //规格类型id值。
name : 颜色,
types : [
{
propertyId : 123255, //属性值唯一Id值
propertyCatId : 101,
state : 1, //记录是否被选中该颜色
name : 绿色
},
{
propertyId : 123254,
propertyCatId : 101,
state : 1,
name : 白色
}]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

//规格明细描述 结构,用于SKU 编辑的时候,把规格明细各项组合数据 填充到表单。

skuDesc : [
{
skuId : 167977, //sku项 id
productId : 166224, //商品id
price : 334, //普通售价
groupPrice :300, //拼团售价
image : https://cdn.gaogao.com/image/e0ecd00c2sw2f23f29df6d504987d60d.png, //图片
properties : 101:123253-102:123257 //规格属性 自由组合排列值
},
{
skuId : 167971,
productId : 166224,
price : 200,
groupPrice : 188,
image : https://cdn.gaogao.com/image/e0ecd00c2d5f442c49df6d504987d60d.png,
properties : 101:123253-102:123258
}]
1
2
3
4
5
6
7
8
9

//向服务器提交某商品的SKU 规格明细数据:

product_id : 176294; //商品id
properties : [ //规格属性排列组合项
{"price":100,"groupPrice":88,"properties":"11:167918-101:123253-102:123259"},
{"price":100,"groupPrice":88,"properties":"11:172957-101:123253-102:123259"},
{"price":100,"groupPrice":88,"properties":"11:167918-101:123253-102:123258"}
];

说明:
先根据已选的 规格大类型propertyCatId 值排序。 这样做的原因是:无论 A+B+C ,B+A+C 或 C+A+B 都是表示同一种SKU组合。以 “11:167918-101:123253-102:123259” 为列,根据规格大类型id值排序。 最终都以 A:aa+B:bb+C:cc 组合提交给服务器, 以此来维护该组合对应的价格和库存;

2、页面组成

  • 2.1 页面全局变量
  • 2.2 构建一个树结构
  • 2.3 根据已选的规格类型 自由排列组合 出明细列表各项组合数据
  • 2.4 自由排列组合 ,把各项值 赋值到规格明细表中
  • 2.5 properties的自由组合id值拼接
  • 2.6 列表的UI显示: tableView相关委托
  • 2.7 修改规格明细 的表单值
  • 2.8 提交的表单条件判断
    文章代码片段较多,但也都是技术核心部分。里面逻辑性较强,需要慢慢理解透彻。
    详细见sku业务代码片段

3、业务:店铺商品和产品库关系图

B端店铺商品和素材库

说明

产品库:只负责管理产品的价格:无论拼团价 还 是秒杀价,活动价 或普通价 都可统一在库中管理该规格明细信息。 这样做的目的是提供商品信息的复用。当在店铺上架一个商品时,不用每次都去创建一个全新的商品,可通过产品库进行选择添加。
从商户角色进行区分:

  • 个人开淘宝店模式:店铺需单独管理商品的库存, 运费的设置 是否包邮等信息。
  • 厂家和连锁店模式:连锁店去库存只负责代销,无需管理库存和发货。当用户下单,统一指向厂家来发货。 厂家统计设置产品信息 , 价格, 库存。
  • 联盟的概念: 联盟设置好了商品。已加入联盟的商家可直接代销联盟总店的商品进行售卖,取得分佣。类似多多进宝,可售卖平台已存在的可分成的商品。

4、 技术总结

  1. 所有的重点在于建立树层级结构,根据已选的规格大类型循环其已选择的规格属性数组。通过ConditionFilter实体的属性statusItem 可以取到子节点ConditionFilter 的数组。
  2. 从最后一个层级一次往上一层级的节点赋值子节点数组statusItem。为防止对数据来源的污染,一定要使用深拷贝。深拷贝model 要实现NSCopying,NSMutableCopying 相关协议方法。
  3. 从向服务器提交每一项规格明细的组合项来看,我们对ConditionFilter 的属性parent 进行遍历,依次取得上一节点的相关属性,直到最上一级节点的parent 属性为null 的时候便停止拼接。properties的拼接就完成了。
  4. 在表单填写的时候,采取对存储的模型skuModel属性作更改。而每一项skuModel 所存储的map 字典的key 是由排列组合得到的UI显示的拼接字符窜。如商品手机: 64G+黑色+标准版。 方便在cell显示的时候直接读取。
  5. UI交互上提供批量和条件过滤快速筛选 进行填写每一项明细的表单值。有利于商户高效填写设置sku 组合。

以下几个UI页面,仅供参考

图片
图片
图片

评论