コード例 #1
0
  @Override
  public Integer updateRecords(String splitDbInfo, List<SkuAttribute> skuAttributeList) {
    Assert.notNull(splitDbInfo);
    if (CollectionUtils.isEmpty(skuAttributeList)) {
      return 0;
    }

    // 获取splitDbInfo中对应的分片序号(eg: db1_1)
    Integer splitNumber = Integer.valueOf(splitDbInfo.split("_")[1]);

    List<Long> idList = new ArrayList<Long>();
    for (SkuAttribute skuAttribute : skuAttributeList) {
      idList.add(skuAttribute.getId());
    }
    SkuQueryCondition condition = new SkuQueryCondition();
    condition.setIdList(idList);
    // 获取数据库中的值(由于property_hash是由property_id和property_values计算得到,需要先计算新hash值后更新
    List<SkuAttribute> queryList = this.skuAttributeDao.batchSelect(splitNumber, condition);
    Map<Long, SkuAttribute> queryMap = new HashMap<Long, SkuAttribute>();
    for (SkuAttribute skuAttribute : queryList) {
      queryMap.put(skuAttribute.getId(), skuAttribute);
    }
    for (SkuAttribute skuAttribute : skuAttributeList) {
      // 合并值,计算property_hash
      skuAttribute.mergeValue(queryMap.get(skuAttribute.getId()));
    }
    Integer successNum = this.skuAttributeDao.batchUpdate(splitNumber, skuAttributeList);
    // 更新签名
    return successNum = Math.min(successNum, updateSignature(splitDbInfo, skuAttributeList, false));
  }
コード例 #2
0
  private List<SkuAttribute> filterAndSetSkuInnerId(
      Integer splitNumber, List<SkuAttribute> skuAttributeList) {

    List<Long> skuHashKeyList = new ArrayList<Long>();
    List<String> skuIdList = new ArrayList<String>();
    for (SkuAttribute skuAttribute : skuAttributeList) {
      skuHashKeyList.add((long) skuAttribute.getSkuid().hashCode());
      skuIdList.add(skuAttribute.getSkuid());
    }
    SkuQueryCondition condition = new SkuQueryCondition();
    condition.setSkuIdList(skuIdList);
    List<SkuInfo> skuInfoList =
        this.skuInfoDao.batchSelectBySkuHashkey(splitNumber, skuHashKeyList);
    List<SkuAttribute> querySkuAttributeList =
        this.skuAttributeDao.batchSelect(splitNumber, condition);
    Map<String, Long> skuInfoMap = new HashMap<String, Long>();
    Map<String, SkuAttribute> querySkuAttributeMap = new HashMap<String, SkuAttribute>();
    for (SkuInfo skuInfo : skuInfoList) {
      skuInfoMap.put(skuInfo.getSkuid(), skuInfo.getSkuInnerid());
    }

    for (SkuAttribute skuAttribute : querySkuAttributeList) {
      querySkuAttributeMap.put(skuAttribute.getSkuid(), skuAttribute);
    }
    List<SkuAttribute> ret = new ArrayList<SkuAttribute>();
    for (SkuAttribute skuAttribute : skuAttributeList) {
      if (!querySkuAttributeMap.containsKey(skuAttribute.getSkuid())
          && skuInfoMap.containsKey(skuAttribute.getSkuid())) {
        skuAttribute.setSkuInnerid(skuInfoMap.get(skuAttribute.getSkuid()));
        ret.add(skuAttribute);
      }
    }
    return ret;
  }