@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)); }
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; }