“我正在参与「启航方案」”
引言
最小库存办理单元(Stock Keeping Unit, SKU)是一个会计学名词,界说为库存办理中的最小可用单元。 关于一种产品而言,当他的品牌、型号、配置、花色、容量、生产日期、保质期、用途、价格、产地等特点与其他产品存在不同时,便是一个不同的最小存货单元。
SKU 便是产品在标准上的一种组合,比如油焖大虾有微辣小份
, 也有不辣中份
,不同的组合便是不同的SKU,把一组满意条件的特点叫做条件式 。
产品标准
款式 : F M
色彩 : R G B
尺寸 : L X S
SKU
M,G,X - 36元,20件
F,G,S - 38元,22件
F,R,X - 39元,35件
I SKU产品标准组合算法
SKU 组合算法:对产品标准组合的挑选过滤。依据已选中的一个或多个特点过滤出剩下特点的可选性,以及选完一切特点之后对应的结果信息(库存、价格等)
- 依据已选中的一个或多个特点过滤出剩下特点的可选性
@interface SKUDataFilter : NSObject
@property (nonatomic, assign) id<SKUDataFilterDataSource> dataSource;
//当前 选中的特点indexPath
@property (nonatomic, strong, readonly) NSArray <NSIndexPath *> *selectedIndexPaths;
//当前 可选的特点indexPath
@property (nonatomic, strong, readonly) NSSet <NSIndexPath *> *availableIndexPathsSet;
- 依据选中的一切特点查询对应的结果(库存、价格等)
//条件式 对应的 结果数据(库存、价格等)
- (id)filter:(SKUDataFilter *)filter resultOfConditionForRow:(NSInteger)row;
为标准特点加一个坐标(特点ID),记录他们的方位
0 1 2
0 F M
1 R G B
2 L X S
SKU: 用下标(特点ID)表示条件式
M,G,X - 26元,30件 --- (1,1,1)
F,G,S - 28元,32件 --- (0,1,2)
F,R,X - 29元,45件 --- (0,0,1)
SKUDataFilterDataSource
署理办法: 判别某个特点是否存在于某个条件式中
//特点品种个数
- (NSInteger)numberOfSectionsForPropertiesInFilter:(SKUDataFilter *)filter;
/*
* 对应的条件式
* 这儿条件式的特点值,需要和propertiesInSection里面的数据类型保持一致
*/
- (NSArray *)filter:(SKUDataFilter *)filter conditionForRow:(NSInteger)row;
//满意条件 的 个数
- (NSInteger)numberOfConditionsInFilter:(SKUDataFilter *)filter;
/*
* 每个品种一切的的特点值
* 这儿不关心详细的值,可以是特点ID, 特点名,字典、model
*/
- (NSArray *)filter:(SKUDataFilter *)filter propertiesInSection:(NSInteger)section;
//查看数据是否正确
- (BOOL)checkConformToSkuConditions:(NSArray *)conditions {
if (conditions.count != [_dataSource numberOfSectionsForPropertiesInFilter:self]) {
return NO;
}
__block BOOL flag = YES;
[conditions enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSArray *properties = [_dataSource filter:self propertiesInSection:idx];
if (![properties containsObject:obj]) {
flag = NO;
*stop = YES;
}
}];
return flag;
}
II 相关问题
2.1 demo
获取demo请重视重视公号:iOS逆向
2.2 数据问题
问题:标准数据和条件式的标准ID数据次序不一致,导致数据检测不正确checkConformToSkuConditions
。
比如:对应式的色彩ID在第一个方位,但是标准数据的色彩在第二个方位。所以导致判别对应式完整性的时候,从尺码数据组中寻觅色彩ID。
对应式:"skuPropertyValId" : "1149583675277578240,1163819789202886656",
标准数据:productProductSpecifications
"productProductSpecifications" : [
{
"id" : "1163389120697995264",
"name" : "女装尺码",
"anotherName" : "尺码",
"specificationVals" : [
{
"value" : null,
"id" : "1163819789173526528",
"specificationId" : "1163389120697995264",
"type" : 1,
"name" : "XXS"
},
{
"value" : null,
"id" : "1163819789202886656",
"specificationId" : "1163389120697995264",
"type" : 1,
"name" : "L"
},
{
"value" : null,
"id" : "1163819789286772736",
"specificationId" : "1163389120697995264",
"type" : 1,
"name" : "5XL"
}
]
},
{
"id" : "0",
"name" : "色彩",
"anotherName" : "色彩",
"specificationVals" : [
{
"value" : "#FFFFFF",
"id" : "1149583675277578240",
"specificationId" : "0",
"type" : 2,
"name" : "白色"
},
{
"value" : "#E7E7E7",
"id" : "1149583822787055616",
"specificationId" : "0",
"type" : 2,
"name" : "米白"
}
]
}
],