@buoge
2017-09-28T11:29:39.000000Z
字数 2776
阅读 1013
模型算法
2.假设当前选 a1,b2:
2.1.获取当前选中 a1,b2 作为 select option
2.2.使用select option和需要判断可用的项组成MatchOption,
使用MatchOption对所有sku进行匹配,
有任一sku匹配到此Option组合,则表示待判断的Option是可用的
2.3. MatchOption如果包含了已经选中的项,需要把已经选中项提出:
* 判断 a 选项 a2 可用时:
match option(A:a1;B:b2;A:a2)去除已选中的A:a1后为:A:a1;B:b2;
* 判断 b 选项 b1 可用时:
match option(A:a1;B:b2;B:b1)去除已选中B:b2为:A:a1;B:b1;
* 可以匹配到canbuy ture else false
3. 特殊情况:如果当前选项只有一个值,那么这个值默认选中
public void updateValueCanUseInOption(long confirmGroupID) {
List<ConfirmOptionWrapper> modelList = getModelList();
// 获取当前有哪些选中项
List<ConfirmOptionWrapper> currentItemOptionList = getModelList(confirmGroupID);
// optionWraper 的option 和 optionValWraper中的option内存地址不一样,没有currentSelectVal
Map<String, String> selOptionKSMap = getSelectOptionsKKVMap(currentItemOptionList, confirmGroupID);
Set<String> matchOptionSet = new HashSet<String>();
for (ConfirmOptionWrapper optionWrapper : modelList) {
if (!optionWrapper.isOptionTxt() && !optionWrapper.isOptionImg()) {
continue;
}
if (CollectionsUtil.isListBlank(optionWrapper.optionValueWrappers)) {
continue;
}
for (ConfirmOptionValueWrapper optionValueWrapper : optionWrapper.optionValueWrappers) {
// 该选项是选中的item不用做可用判断,待判断item和点击触发的item不处于统一组时不做处理
if (optionValueWrapper == optionWrapper.tmpSelecValWrapper || optionWrapper.confirmGroupID != confirmGroupID) {
continue;
}
// 带判断item重置为默认
optionValueWrapper.isCanBuy = false;
matchOptionSet.clear();
// 默认把选中Map中的KVSet赋值到MatchSet中
for (Map.Entry<String, String> entry : selOptionKSMap.entrySet()) {
matchOptionSet.add(entry.getValue());
}
//LogUtils.i("====== selOptionSet is " + matchOptionSet.toString());
// 假如是匹配是当前Option在mactch set 中去除当前option 和 Vaule,得到匹配中的 matchOptionSetPre
String optionKeyStr = optionValueWrapper.getOptionValKeyStr();
if (selOptionKSMap.containsKey(optionKeyStr)) {
String currentSelOption = selOptionKSMap.get(optionKeyStr);
matchOptionSet.remove(currentSelOption);
}
//LogUtils.i("====== selOptionSet After Filter is " + matchOptionSet.toString());
// 由得到匹配中的selectOptionKVSet和判断项组成mactchSet
String currentOptionKVStr = optionValueWrapper.getOptionValKVStr();
matchOptionSet.add(currentOptionKVStr);
//LogUtils.i("====== matchOptionSet is " + matchOptionSet.toString());
// skuMap中假如有任一sku 的option set 匹配mactchset 则返回可用,循环判断每一个项
optionValueWrapper.isCanBuy = isOptionSetCanMatchInSkuMap(matchOptionSet,optionWrapper);
// LogUtils.w("=====" + optionValueWrapper.optionValue.value + ":" +optionValueWrapper.optionValue.opNameId + ":" +optionValueWrapper.optionValue.opValueId +" wrapper.isCanBuy is :" + optionValueWrapper.isCanBuy);
}
} // end: ConfirmOptionWrapper optionWrapper : modelList
}