Browse Source

居民信息导入:将表批量导入的阈值改为200;对志愿者发送volunteer_changed MQ事件

master
wangxianzhang 4 years ago
parent
commit
83523ed477
  1. 43
      epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcResiImportDynamicExcelListener.java
  2. 34
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java

43
epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcResiImportDynamicExcelListener.java

@ -2,10 +2,19 @@ package com.epmet.excel.handler;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.dto.form.mq.MqBaseFormDTO;
import com.epmet.commons.tools.utils.EpmetRequestHolder;
import com.epmet.commons.tools.utils.SpringContextUtils;
import com.epmet.constant.SystemMessageType;
import com.epmet.dto.result.FormItemResult;
import com.epmet.enums.IcResiUserTableEnum;
import com.epmet.feign.EpmetMessageOpenFeignClient;
import com.epmet.send.SendMqMsgUtil;
import com.epmet.service.impl.IcResiUserImportServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.HashMap;
@ -22,7 +31,7 @@ public class IcResiImportDynamicExcelListener extends AnalysisEventListener<Map<
/**
* 一次性导入的条数
*/
private static final Integer ONCE_BATCH_IMPORT_ITEMS_SIZE = 2000;
private static final Integer ONCE_BATCH_IMPORT_ITEMS_SIZE = 200;
/**
* 客户id
@ -44,11 +53,6 @@ public class IcResiImportDynamicExcelListener extends AnalysisEventListener<Map<
*/
private String currUserAgencyPids;
/**
* 数据库表名
*/
private String tableName;
private IcResiUserImportServiceImpl icResiUserImportService;
/**
@ -62,9 +66,9 @@ public class IcResiImportDynamicExcelListener extends AnalysisEventListener<Map<
private Boolean isPrimary;
/**
* 有几行是表头
* sheet元数据
*/
private Integer headRowNumber;
private IcResiUserTableEnum sheetEnumObject;
/**
* key:itemId
@ -91,8 +95,8 @@ public class IcResiImportDynamicExcelListener extends AnalysisEventListener<Map<
public IcResiImportDynamicExcelListener(IcResiUserImportServiceImpl icResiUserImportService, String customerId,
String currentUserId, String currUserAgencyId,
String currUserAgencyPids, Boolean isPrimary, String tableName,
List<FormItemResult> formItemList, Integer headRowNumber) {
String currUserAgencyPids, Boolean isPrimary,
List<FormItemResult> formItemList, IcResiUserTableEnum sheetEnumObject) {
this.customerId = customerId;
this.icResiUserImportService = icResiUserImportService;
@ -101,8 +105,7 @@ public class IcResiImportDynamicExcelListener extends AnalysisEventListener<Map<
this.currentUserId = currentUserId;
this.currUserAgencyId = currUserAgencyId;
this.currUserAgencyPids = currUserAgencyPids;
this.tableName = tableName;
this.headRowNumber = headRowNumber;
this.sheetEnumObject = sheetEnumObject;
}
/**
@ -115,7 +118,7 @@ public class IcResiImportDynamicExcelListener extends AnalysisEventListener<Map<
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
headList.add(headMap);
if (headList.size() < headRowNumber) {
if (headList.size() < sheetEnumObject.getHeadRowNo()) {
return;
}
@ -180,9 +183,19 @@ public class IcResiImportDynamicExcelListener extends AnalysisEventListener<Map<
private void execPersistant() {
// 持久化
if (isPrimary) {
icResiUserImportService.persistIcResiBaseInfo(itemIdAndColumnWrapper, dataList, currUserAgencyId, abandonedHeaders, currUserAgencyPids, currentUserId, tableName);
icResiUserImportService.persistIcResiBaseInfo(itemIdAndColumnWrapper, dataList, currUserAgencyId, abandonedHeaders, currUserAgencyPids, currentUserId, sheetEnumObject.getTableName());
} else {
icResiUserImportService.persistIcResiExtraInfo(itemIdAndColumnWrapper, dataList, currUserAgencyId, abandonedHeaders, currentUserId, tableName, customerId);
List<String> successIdCards = icResiUserImportService.persistIcResiExtraInfo(itemIdAndColumnWrapper, dataList, currUserAgencyId, abandonedHeaders, currentUserId, sheetEnumObject.getTableName(), customerId);
// 对于志愿者,发送一个mq消息,对端监听器会对志愿者做相应处理
if (sheetEnumObject == IcResiUserTableEnum.IC_VOLUNTEER && !CollectionUtils.isEmpty(successIdCards)) {
MqBaseFormDTO msg = new MqBaseFormDTO();
msg.setCustomerId(EpmetRequestHolder.getHeader(AppClientConstant.CUSTOMER_ID));
msg.setObjectIdList(successIdCards);
SendMqMsgUtil.build()
.openFeignClient(SpringContextUtils.getBean(EpmetMessageOpenFeignClient.class))
.sendRocketMqMsg(SystemMessageType.VOLUNTEER_CHANGED, msg);
}
}
dataList.clear();
}

34
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java

@ -259,8 +259,8 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
// 上传主表信息
log.info("======开始导入基础信息=======");
importIcResiBaseInfoFromExcel(formItemList,excelPathName, IcResiUserTableEnum.IC_RESI_USER.getSheetNo(), IcResiUserTableEnum.IC_RESI_USER.getHeadRowNo(),
currUserAgencyId, agencyInfo.getPids(), loginUserId, IcResiUserTableEnum.IC_RESI_USER.getTableName(), customerId);
importIcResiBaseInfoFromExcel(formItemList,excelPathName, IcResiUserTableEnum.IC_RESI_USER,
currUserAgencyId, agencyInfo.getPids(), loginUserId, customerId);
// 上传附表信息
for (IcResiUserTableEnum sheet : IcResiUserTableEnum.values()) {
@ -379,24 +379,21 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
* excel导入居民基本信息
*
* @param formItemList
* @param sheetNo
* @param headRowNumber
* @param currUserAgencyId
* @param currUserAgencyPids
* @param currentUserId
* @return
*/
private void importIcResiBaseInfoFromExcel(List<FormItemResult> formItemList, String excelPathName, int sheetNo, int headRowNumber, String currUserAgencyId, String currUserAgencyPids, String currentUserId,
String tableName, String customerId) {
String loginUserApp = EpmetRequestHolder.getHeader(AppClientConstant.APP);
String loginUserClient = EpmetRequestHolder.getHeader(AppClientConstant.CLIENT);
String loginUserId = EpmetRequestHolder.getHeader(AppClientConstant.USER_ID.toLowerCase());
String loginUserCustomerId = EpmetRequestHolder.getHeader(AppClientConstant.CUSTOMER_ID.toLowerCase());
private void importIcResiBaseInfoFromExcel(List<FormItemResult> formItemList, String excelPathName, IcResiUserTableEnum sheetTableEnum, String currUserAgencyId, String currUserAgencyPids, String currentUserId,
String customerId) {
IcResiImportDynamicExcelListener readListener = new IcResiImportDynamicExcelListener(this, customerId, currentUserId, currUserAgencyId, currUserAgencyPids,
true, tableName, formItemList, headRowNumber);
EasyExcel.read(new File(excelPathName)).registerReadListener(readListener).headRowNumber(headRowNumber).sheet(sheetNo).doRead();
true, formItemList, sheetTableEnum);
EasyExcel.read(new File(excelPathName))
.registerReadListener(readListener)
.headRowNumber(sheetTableEnum.getHeadRowNo())
.sheet(sheetTableEnum.getTableComment())
.doRead();
}
/**
@ -416,7 +413,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
if (sheetEnumObject.isExistsDBTable()) {
IcResiImportDynamicExcelListener readListener = new IcResiImportDynamicExcelListener(
this, customerId, currentUserId, currUserAgencyId, null,
false, sheetEnumObject.getTableName(), formItemList, sheetEnumObject.getHeadRowNo());
false, formItemList, sheetEnumObject);
EasyExcelFactory.read(new File(excelPathName))
.registerReadListener(readListener)
@ -650,7 +647,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
* @param checkBoxOptionColumnIdxAndLabel 复选框的列号&label中文
* @param targetTableName 要插入到哪一个表
*/
public void persistIcResiExtraInfo(Map<String, ColumnWrapper> headerColumnWrapper, List<Map<Integer, String>> dataRows,
public List<String> persistIcResiExtraInfo(Map<String, ColumnWrapper> headerColumnWrapper, List<Map<Integer, String>> dataRows,
String currUserAgencyId, Map<Integer, String> checkBoxOptionColumnIdxAndLabel,
String currentUserId, String targetTableName, String customerId) {
@ -658,6 +655,9 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
String loginUserCustomerId = EpmetRequestHolder.getHeader(AppClientConstant.CUSTOMER_ID.toLowerCase());
// 成功处理的数据的身份证号
List<String> successIdCards = new ArrayList<>();
// 遍历每一行,将行内容转化为
for (Map<Integer, String> row : dataRows) {
@ -711,6 +711,8 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
Objects.requireNonNull(IcResiUserTableEnum.getObjectByTableName(targetTableName)).getMainTableFlagColumnName(),
existResiInfoMap);
// 将成功的居民的身份证号添加到列表中
successIdCards.add(row.get(ID_CARD_COLUMN_NO));
} catch (Exception e) {
String errorMsg;
if (e instanceof RenException || e instanceof EpmetException) {
@ -730,6 +732,8 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
columnAndValues.clear();
}
}
return successIdCards;
}
/**

Loading…
Cancel
Save