Browse Source

初始化居民变更记录 事务粒度及分批处理粒度缩小

feature/teamB_zz_wgh
jianjun 3 years ago
parent
commit
5ed2d1c2fd
  1. 36
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcUserChangeRecordServiceImpl.java

36
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcUserChangeRecordServiceImpl.java

@ -17,6 +17,7 @@
package com.epmet.service.impl; package com.epmet.service.impl;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant; import com.epmet.commons.tools.constant.StrConstant;
@ -45,7 +46,6 @@ import com.epmet.service.IcUserChangeRecordService;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.ListUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -175,7 +175,6 @@ public class IcUserChangeRecordServiceImpl extends BaseServiceImpl<IcUserChangeR
* @Author sun * @Author sun
* @Description 按客户初始化客户下居民的变更记录变更明细数据 * @Description 按客户初始化客户下居民的变更记录变更明细数据
**/ **/
@Transactional(rollbackFor = Exception.class)
public void initIcUserChange(String customerId) throws ParseException { public void initIcUserChange(String customerId) throws ParseException {
log.info("开始初始客户下居民的变更记录和变更明细数据,客户Id->"+customerId); log.info("开始初始客户下居民的变更记录和变更明细数据,客户Id->"+customerId);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@ -205,8 +204,7 @@ public class IcUserChangeRecordServiceImpl extends BaseServiceImpl<IcUserChangeR
//3.遍历封装数据 //3.遍历封装数据
for (Map<String,String> map : icUserList){ for (Map<String,String> map : icUserList){
//存放一个人的类别为是的变更明细数据 //存放一个人的类别为是的变更明细数据
List<IcUserChangeDetailedEntity> subList = new ArrayList<>(); String changeId = IdWorker.getIdStr();
String changeId = UUID.randomUUID().toString().replaceAll("-", "");
for (IcResiCategoryStatsConfigDTO dto : categoryListResult.getData()){ for (IcResiCategoryStatsConfigDTO dto : categoryListResult.getData()){
if(map.containsKey(dto.getColumnName())&&"1".equals(map.get(dto.getColumnName()))){ if(map.containsKey(dto.getColumnName())&&"1".equals(map.get(dto.getColumnName()))){
detailed = new IcUserChangeDetailedEntity(); detailed = new IcUserChangeDetailedEntity();
@ -228,12 +226,10 @@ public class IcUserChangeRecordServiceImpl extends BaseServiceImpl<IcUserChangeR
detailed.setCreatedTime(sdf.parse(map.get("CREATED_TIME"))); detailed.setCreatedTime(sdf.parse(map.get("CREATED_TIME")));
detailed.setUpdatedBy("APP_USER"); detailed.setUpdatedBy("APP_USER");
detailed.setUpdatedTime(new Date()); detailed.setUpdatedTime(new Date());
subList.add(detailed); detailedList.add(detailed);
}
} }
if (subList.size() > NumConstant.ZERO) {
detailedList.addAll(subList);
} }
if (!hash.containsKey(map.get("CREATED_BY"))) { if (!hash.containsKey(map.get("CREATED_BY"))) {
CustomerStaffInfoCacheResult staffInfoCache = CustomerStaffRedis.getStaffInfo(customerId, map.get("CREATED_BY")); CustomerStaffInfoCacheResult staffInfoCache = CustomerStaffRedis.getStaffInfo(customerId, map.get("CREATED_BY"));
//被删除或被移除的工作人员,名字为空 //被删除或被移除的工作人员,名字为空
@ -257,20 +253,34 @@ public class IcUserChangeRecordServiceImpl extends BaseServiceImpl<IcUserChangeR
change.setUpdatedTime(new Date()); change.setUpdatedTime(new Date());
changeList.add(change); changeList.add(change);
} }
//每500个居民处理一批
if (changeList.size()>= NumConstant.FIVE_HUNDRED){
delAndInsertChangeRecord(customerId, changeList, detailedList);
}
} while (icUserList.size() == NumConstant.ONE_THOUSAND); } while (icUserList.size() == NumConstant.ONE_THOUSAND);
//4.批量新增数据,先删后增【只删除新增节点的历史数据】 //4.批量新增数据,先删后增【只删除新增节点的历史数据】
//4-1.删除待处理的人员数据【这类人是指在变更记录表中不存在新增节点数据的人】 //4-1.删除待处理的人员数据【这类人是指在变更记录表中不存在新增节点数据的人】
//最后再处理一批
delAndInsertChangeRecord(customerId, changeList, detailedList);
}
@Transactional(rollbackFor = Exception.class)
public void delAndInsertChangeRecord(String customerId, List<IcUserChangeRecordEntity> changeList, List<IcUserChangeDetailedEntity> detailedList) {
if (CollectionUtils.isEmpty(changeList)) {
log.info("customerId:{}初始变更记录数据 已完成!", customerId);
return;
}
List<String> icUserIdList = changeList.stream().map(IcUserChangeRecordEntity::getIcUserId).collect(Collectors.toList()); List<String> icUserIdList = changeList.stream().map(IcUserChangeRecordEntity::getIcUserId).collect(Collectors.toList());
List<List<String>> partition = ListUtils.partition(icUserIdList, NumConstant.FIVE_HUNDRED); baseDao.delByCustomerId(customerId, "add", icUserIdList);
partition.forEach(part -> { icUserChangeDetailedService.delByCustomerId(customerId, "add", icUserIdList);
baseDao.delByCustomerId(customerId, "add", part);
icUserChangeDetailedService.delByCustomerId(customerId, "add", part);
});
log.info("初始变更记录数据,总条数->" + changeList.size()); log.info("初始变更记录数据,总条数->" + changeList.size());
icUserChangeRecordService.insertBatch(changeList); icUserChangeRecordService.insertBatch(changeList);
log.info("初始变更记录明细数据,总条数->" + detailedList.size()); log.info("初始变更记录明细数据,总条数->" + detailedList.size());
icUserChangeDetailedService.insertBatch(detailedList); icUserChangeDetailedService.insertBatch(detailedList);
changeList.clear();
detailedList.clear();
icUserIdList.clear();
} }
} }

Loading…
Cancel
Save