关于SKU禁用前端隐藏实现

526 阅读1分钟

后端实现SKU的隐藏

一、在sku增加禁用标识

  • 增加商品规格的禁用字段 skuStatus(0-禁用 1-启用)

  • 如果该规格参加了活动,不允许进行禁用

  • 禁用时,校验至少存在一个有效SKU,避免前端展示没有规格

二、在前端展示规格时,进行禁用的sku的规格隐藏

  • 获取可用的sku列表
  • 根据可用的sku列表获取可展示的规格
  • 遍历当前商品的所有规格与可用的规格进行对比,不存在于可用规格列表中的规格进行remove。具体操作如下:
     /***
	 * 获取有效的规格选项
	 * @param level
	 * @param optionList
	 * @return
	 */
	public static List<Map<String,Object>> getValidSkuProList(int level,List<Map<String,Object>> optionList, String goodsCode){
		Set<String> optionSet = new HashSet<>(); // 所有option
		Set<String> validSet = new HashSet<>(); // 有效option

		// 获取所有option
		for(Iterator<Map<String,Object>> iterator = optionList.iterator(); iterator.hasNext();){
			Map<String,Object> skuMap = iterator.next();
			List<Map<String,Object>> options = (List<Map<String, Object>>) skuMap.get("options");
			for(Iterator<Map<String,Object>> iterator2 = options.iterator(); iterator2.hasNext();){
				Map<String,Object> optionMap = iterator2.next();
				optionSet.add(optionMap.get("optionCode").toString());
			}
		}

		// 获取可展示的sku列表
		List<Map<String, Object>> skuList = SkuUtil.querySkuList(goodsCode);
		for(Iterator<Map<String,Object>> iterator = skuList.iterator(); iterator.hasNext();){
			Map<String,Object> skuMap = iterator.next();
			int skuStatus = NumberUtil.getInt(skuMap.get("skuStatus"),-1);
			if(skuStatus == 0){
			    iterator.remove();
			}
		}

		// 获取可用的optionCode
		for(String key: optionSet){
			for(Map<String,Object> skuMap: skuList){
				String skuOptionCodes = StringUtil.getString(skuMap.get("skuOptionCodes"));
				if(skuOptionCodes.contains(key)){
					validSet.add(key);
					continue;
				}
			}
		}

		// 排除无用optionCode
		for(Iterator<Map<String,Object>> iterator = optionList.iterator(); iterator.hasNext();){
			Map<String,Object> skuMap = iterator.next();
			List<Map<String,Object>> options = (List<Map<String, Object>>) skuMap.get("options");
			for(Iterator<Map<String,Object>> iterator2 = options.iterator(); iterator2.hasNext();){
				Map<String,Object> optionMap = iterator2.next();
				String optionCode = StringUtil.getString(optionMap.get("optionCode"));
				if(!validSet.contains(optionCode)){
					iterator2.remove();
				}
			}
		}

		return optionList;
	}