|
|
@ -45,6 +45,7 @@ import com.epmet.dao.IcResiUserDao; |
|
|
|
import com.epmet.dto.*; |
|
|
|
import com.epmet.dto.form.*; |
|
|
|
import com.epmet.dto.result.*; |
|
|
|
import com.epmet.entity.IcPartyMemberEntity; |
|
|
|
import com.epmet.entity.IcResiUserEntity; |
|
|
|
import com.epmet.excel.handler.DynamicEasyExcelListener; |
|
|
|
import com.epmet.feign.EpmetAdminOpenFeignClient; |
|
|
@ -69,6 +70,7 @@ import java.io.File; |
|
|
|
import java.util.*; |
|
|
|
import java.util.function.Function; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
import java.util.stream.Stream; |
|
|
|
|
|
|
|
/** |
|
|
|
* 用户基础信息 |
|
|
@ -484,22 +486,40 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi |
|
|
|
return resultMap; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 导入居民信息 |
|
|
|
* 导入主表和所有子表信息 |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public Object importIcResiInfoFromExcel(String currUserAgencyId) { |
|
|
|
public Object importIcResiInfoFromExcel() { |
|
|
|
String loginUserId = loginUserUtil.getLoginUserId(); |
|
|
|
String loginUserApp = loginUserUtil.getLoginUserApp(); |
|
|
|
String loginUserClient = loginUserUtil.getLoginUserClient(); |
|
|
|
|
|
|
|
LoginUserDetailsFormDTO userForm = new LoginUserDetailsFormDTO(); |
|
|
|
userForm.setApp(loginUserApp); |
|
|
|
userForm.setClient(loginUserClient); |
|
|
|
userForm.setUserId(loginUserId); |
|
|
|
|
|
|
|
LoginUserDetailsResultDTO loginUserDetails = getResultDataOrThrowsException(epmetUserOpenFeignClient.getLoginUserDetails(userForm), ServiceConstant.EPMET_USER_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), null); |
|
|
|
String currUserAgencyId = loginUserDetails.getAgencyId(); |
|
|
|
|
|
|
|
String excelPathName = "/opt/test/基础信息表/resi_info.xls"; |
|
|
|
CustomerAgencyDTO agencyInfo = getResultDataOrThrowsException(govOrgOpenFeignClient.getAgencyById(currUserAgencyId), ServiceConstant.GOV_ORG_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), null); |
|
|
|
String loginUserId = loginUserUtil.getLoginUserId(); |
|
|
|
String customerId = agencyInfo.getCustomerId(); |
|
|
|
|
|
|
|
importIcResiBaseInfoFromExcel(excelPathName, 0, 3, currUserAgencyId, agencyInfo.getPids(), loginUserId); |
|
|
|
importIcResiExtraInfoFromExcel(excelPathName, 1, 2, currUserAgencyId, loginUserId, "ic_party_member", customerId); |
|
|
|
importIcResiExtraInfoFromExcel(excelPathName, 2, 2, currUserAgencyId, loginUserId, "ic_ensure_house", customerId); |
|
|
|
importIcResiExtraInfoFromExcel(excelPathName, 3, 2, currUserAgencyId, loginUserId, "ic_unemployed", customerId); |
|
|
|
importIcResiExtraInfoFromExcel(excelPathName, 4, 2, currUserAgencyId, loginUserId, "ic_veterans", customerId); |
|
|
|
importIcResiExtraInfoFromExcel(excelPathName, 5, 2, currUserAgencyId, loginUserId, "ic_united_front", customerId); |
|
|
|
importIcResiExtraInfoFromExcel(excelPathName, 6, 3, currUserAgencyId, loginUserId, "ic_volunteer", customerId); |
|
|
|
importIcResiExtraInfoFromExcel(excelPathName, 7, 2, currUserAgencyId, loginUserId, "ic_old_people", customerId); |
|
|
|
importIcResiExtraInfoFromExcel(excelPathName, 8, 3, currUserAgencyId, loginUserId, "ic_special", customerId); |
|
|
|
|
|
|
|
//return importIcResiInfoFromExcel(excelPathName, 0, 3, currUserAgencyId, agencyInfo.getPids(), loginUserId);
|
|
|
|
return importIcResiExtraInfoFromExcel(excelPathName, 1, 2, currUserAgencyId, agencyInfo.getPids(), loginUserId); |
|
|
|
// imporExcel(1, 1);
|
|
|
|
// imporExcel(2, 1);
|
|
|
|
// imporExcel(3, 1);
|
|
|
|
// imporExcel(4, 1);
|
|
|
|
// imporExcel(5, 1);
|
|
|
|
// imporExcel(6, 2);
|
|
|
|
// imporExcel(7, 1);
|
|
|
|
// imporExcel(8, 1);
|
|
|
|
return new Object(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -511,7 +531,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi |
|
|
|
* @param currentUserId |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private Object importIcResiInfoFromExcel(String excelPathName, int sheetNo, int headRowNumber, String currUserAgencyId, String currUserAgencyPids, String currentUserId) { |
|
|
|
private Object importIcResiBaseInfoFromExcel(String excelPathName, int sheetNo, int headRowNumber, String currUserAgencyId, String currUserAgencyPids, String currentUserId) { |
|
|
|
DynamicEasyExcelListener readListener = new DynamicEasyExcelListener(); |
|
|
|
EasyExcelFactory.read(new File(excelPathName)).registerReadListener(readListener).headRowNumber(headRowNumber).sheet(sheetNo).doRead(); |
|
|
|
|
|
|
@ -544,7 +564,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi |
|
|
|
Map<String, ColumnWrapper> headerColumnWrapper = convertExcelHeaders2DBColumnWrappers(formItemMap, combinedHeaders, dataList, abandonedHeaders); |
|
|
|
|
|
|
|
// 持久化
|
|
|
|
persist(headerColumnWrapper, dataList, currUserAgencyId, abandonedHeaders, customerItems.get(0).getTableName(), currUserAgencyPids, currentUserId); |
|
|
|
persistIcResiBaseInfo(headerColumnWrapper, dataList, currUserAgencyId, abandonedHeaders, currUserAgencyPids, currentUserId); |
|
|
|
|
|
|
|
return headers; |
|
|
|
} |
|
|
@ -555,11 +575,12 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi |
|
|
|
* @param sheetNo |
|
|
|
* @param headRowNumber |
|
|
|
* @param currUserAgencyId |
|
|
|
* @param currUserAgencyPids |
|
|
|
* @param currentUserId |
|
|
|
* @param targetTableName 要插入哪一个表 |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private Object importIcResiExtraInfoFromExcel(String excelPathName, int sheetNo, int headRowNumber, String currUserAgencyId, String currUserAgencyPids, String currentUserId) { |
|
|
|
private Object importIcResiExtraInfoFromExcel(String excelPathName, int sheetNo, int headRowNumber, String currUserAgencyId, String currentUserId, |
|
|
|
String targetTableName, String customerId) { |
|
|
|
DynamicEasyExcelListener readListener = new DynamicEasyExcelListener(); |
|
|
|
EasyExcelFactory.read(new File(excelPathName)).registerReadListener(readListener).headRowNumber(headRowNumber).sheet(sheetNo).doRead(); |
|
|
|
|
|
|
@ -590,27 +611,139 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi |
|
|
|
}, formItem -> formItem) |
|
|
|
); |
|
|
|
Map<String, ColumnWrapper> headerColumnWrapper = convertExcelHeaders2DBColumnWrappers(formItemMap, combinedHeaders, dataList, abandonedHeaders); |
|
|
|
|
|
|
|
return formItemMap; |
|
|
|
persistIcResiExtraInfo(headerColumnWrapper, dataList, currUserAgencyId, abandonedHeaders, currentUserId, targetTableName, customerId); |
|
|
|
return headerColumnWrapper; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 持久化 |
|
|
|
* 持久化IC居民基础信息 |
|
|
|
* @param headerColumnWrapper 数据库列包装信息 |
|
|
|
* @param dataRows 数据行集合 |
|
|
|
* @param currUserAgencyId 当前用户的组织id |
|
|
|
* @param checkBoxOptionColumnIdxAndLabel 复选框的列号&label中文 |
|
|
|
*/ |
|
|
|
private void persist(Map<String, ColumnWrapper> headerColumnWrapper, List<Map<Integer, String>> dataRows, |
|
|
|
String currUserAgencyId, Map<Integer, String> checkBoxOptionColumnIdxAndLabel, String tableName, |
|
|
|
private void persistIcResiBaseInfo(Map<String, ColumnWrapper> headerColumnWrapper, List<Map<Integer, String>> dataRows, |
|
|
|
String currUserAgencyId, Map<Integer, String> checkBoxOptionColumnIdxAndLabel, |
|
|
|
String currUserAgencyPids, String currentUserId) { |
|
|
|
|
|
|
|
// 遍历每一行,将行内容转化为
|
|
|
|
for (Map<Integer, String> row : dataRows) { |
|
|
|
|
|
|
|
LinkedHashMap<String, String> columnAndValues = convertColumnWrappers2Map4Persist(headerColumnWrapper, row, currUserAgencyId, checkBoxOptionColumnIdxAndLabel); |
|
|
|
|
|
|
|
columnAndValues.put("IS_ENSURE_HOUSE", "0"); |
|
|
|
columnAndValues.put("IS_OLD_PEOPLE", "0"); |
|
|
|
columnAndValues.put("IS_PARTY", "0"); |
|
|
|
columnAndValues.put("IS_SPECIAL", "0"); |
|
|
|
columnAndValues.put("IS_UNEMPLOYED", "0"); |
|
|
|
columnAndValues.put("IS_UNITED_FRONT", "0"); |
|
|
|
columnAndValues.put("IS_VETERANS", "0"); |
|
|
|
columnAndValues.put("IS_VOLUNTEER", "0"); |
|
|
|
|
|
|
|
columnAndValues.put("AGENCY_ID", currUserAgencyId); |
|
|
|
columnAndValues.put("PIDS", currUserAgencyPids); |
|
|
|
columnAndValues.put("CUSTOMER_ID", loginUserUtil.getCurrentCustomerId()); |
|
|
|
columnAndValues.put("CREATED_BY", currentUserId); |
|
|
|
columnAndValues.put("UPDATED_BY", currentUserId); |
|
|
|
columnAndValues.put("ID", UUID.randomUUID().toString().replace("-", "")); |
|
|
|
|
|
|
|
// 验证居民信息是否存在
|
|
|
|
String idCard = columnAndValues.get("ID_CARD"); |
|
|
|
LambdaQueryWrapper<IcResiUserEntity> idCardQuery = new LambdaQueryWrapper<>(); |
|
|
|
idCardQuery.eq(IcResiUserEntity::getIdCard, idCard); |
|
|
|
|
|
|
|
if (baseDao.selectCount(idCardQuery) > 0) { |
|
|
|
log.info("身份证号为【{}】的居民信息已存在,跳过导入", idCard); |
|
|
|
} |
|
|
|
|
|
|
|
baseDao.add("ic_resi_user", columnAndValues); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 持久化IC居民附加信息 |
|
|
|
* @param headerColumnWrapper 数据库列包装信息 |
|
|
|
* @param dataRows 数据行集合 |
|
|
|
* @param currUserAgencyId 当前用户的组织id |
|
|
|
* @param checkBoxOptionColumnIdxAndLabel 复选框的列号&label中文 |
|
|
|
* @param targetTableName 要插入到哪一个表 |
|
|
|
*/ |
|
|
|
private void persistIcResiExtraInfo(Map<String, ColumnWrapper> headerColumnWrapper, List<Map<Integer, String>> dataRows, |
|
|
|
String currUserAgencyId, Map<Integer, String> checkBoxOptionColumnIdxAndLabel, |
|
|
|
String currentUserId, String targetTableName, String customerId) { |
|
|
|
|
|
|
|
// 遍历每一行,将行内容转化为
|
|
|
|
for (Map<Integer, String> row : dataRows) { |
|
|
|
|
|
|
|
// 当前行的列们
|
|
|
|
// List<ColumnWrapper> columnsOfCurrRow = new ArrayList<>();
|
|
|
|
LinkedHashMap<String, String> columnAndValues = convertColumnWrappers2Map4Persist(headerColumnWrapper, row, currUserAgencyId, checkBoxOptionColumnIdxAndLabel); |
|
|
|
|
|
|
|
// 检验身份证号
|
|
|
|
String idCard = columnAndValues.get("ID_CARD"); |
|
|
|
if (StringUtils.isBlank(idCard)) { |
|
|
|
throw new RenException(EpmetErrorCode.IDCARDNO_ERROR.getCode(), String.format("用户【%s】身份证号未填写或格式错误", columnAndValues.get("NAME"))); |
|
|
|
} |
|
|
|
|
|
|
|
// 检查用户是否存在
|
|
|
|
LambdaQueryWrapper<IcResiUserEntity> idCardQuery = new LambdaQueryWrapper<>(); |
|
|
|
idCardQuery.eq(IcResiUserEntity::getIdCard, idCard); |
|
|
|
|
|
|
|
List<String> columnNames = new ArrayList<>(); |
|
|
|
List<String> columnValues = new ArrayList<>(); |
|
|
|
IcResiUserEntity icResiUserBaseInfo = baseDao.selectOne(idCardQuery); |
|
|
|
if (icResiUserBaseInfo == null) { |
|
|
|
throw new RenException(EpmetErrorCode.RESI_NOT_FOUND.getCode(), String.format("身份证号为【%s】的居民信息未找到,请确认该居民信息存在", idCard)); |
|
|
|
} |
|
|
|
|
|
|
|
String icResiId = icResiUserBaseInfo.getId(); |
|
|
|
|
|
|
|
// 验证党员信息是否存在
|
|
|
|
if (CollectionUtils.isNotEmpty(baseDao.selectSubTableRecords(customerId, icResiId, targetTableName))) { |
|
|
|
log.info("身份证号为【{}】的居民【{}】信息已存在,跳过导入", idCard, targetTableName); |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
columnAndValues.put("IC_RESI_USER", icResiId); |
|
|
|
|
|
|
|
columnAndValues.put("CUSTOMER_ID", loginUserUtil.getCurrentCustomerId()); |
|
|
|
columnAndValues.put("CREATED_BY", currentUserId); |
|
|
|
columnAndValues.put("UPDATED_BY", currentUserId); |
|
|
|
columnAndValues.put("ID", UUID.randomUUID().toString().replace("-", "")); |
|
|
|
|
|
|
|
columnAndValues = removeNeedlessColumns(columnAndValues); |
|
|
|
|
|
|
|
baseDao.add(targetTableName, columnAndValues); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 去掉多余的列 |
|
|
|
* @param originColumnAndValues |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private LinkedHashMap<String, String> removeNeedlessColumns(LinkedHashMap<String, String> originColumnAndValues) { |
|
|
|
List<String> needlessColumns = Arrays.asList("GRID_ID", "VILLAGE_ID", "BUILD_ID", "UNIT_ID", "HOME_ID", |
|
|
|
"IS_BDHJ", "NAME", "MOBILE", "GENDER", "ID_CARD", |
|
|
|
"BIRTHDAY", "CONTACTS", "CONTACTS_MOBILE"); |
|
|
|
|
|
|
|
LinkedHashMap<String, String> newMap = new LinkedHashMap(); |
|
|
|
|
|
|
|
originColumnAndValues.entrySet().forEach(b -> { |
|
|
|
if (!needlessColumns.contains(b.getKey())) { |
|
|
|
newMap.put(b.getKey(), b.getValue()); |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
return newMap; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 将当前行数据转化成LinkedHashMap,供后续插入 |
|
|
|
* @param headerColumnWrapper 当前行的ColumnWrapper,每一个ColumnWrapper元素都是当前行中的一个列 |
|
|
|
* @param row 当前行数据 |
|
|
|
* @param currUserAgencyId 当前用户所属机构ID |
|
|
|
* @param checkBoxOptionColumnIdxAndLabel 复选框options列表。key:列号,value:复选框中文 |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private LinkedHashMap<String, String> convertColumnWrappers2Map4Persist(Map<String, ColumnWrapper> headerColumnWrapper, Map<Integer, String> row, |
|
|
|
String currUserAgencyId, Map<Integer, String> checkBoxOptionColumnIdxAndLabel) { |
|
|
|
LinkedHashMap<String, String> columnAndValues = new LinkedHashMap<>(); |
|
|
|
|
|
|
|
for (Map.Entry<String, ColumnWrapper> columnWrapperEntry : headerColumnWrapper.entrySet()) { |
|
|
@ -619,7 +752,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi |
|
|
|
if ("input".equals(columnWrapper.getItemType()) |
|
|
|
|| "textarea".equals(columnWrapper.getItemType()) |
|
|
|
|| "datepicker".equals(columnWrapper.getItemType()) |
|
|
|
|| "timerange".equals(columnWrapper.getItemType()) |
|
|
|
|| "daterange".equals(columnWrapper.getItemType()) |
|
|
|
) { |
|
|
|
|
|
|
|
String cellContent = row.get(columnWrapper.getColIndexs().get(0)); |
|
|
@ -653,30 +786,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi |
|
|
|
columnAndValues.put(columnWrapper.columnName, columnWrapper.colValue); |
|
|
|
} |
|
|
|
|
|
|
|
columnAndValues.put("IS_ENSURE_HOUSE", "0"); |
|
|
|
columnAndValues.put("IS_OLD_PEOPLE", "0"); |
|
|
|
columnAndValues.put("IS_PARTY", "0"); |
|
|
|
columnAndValues.put("IS_SPECIAL", "0"); |
|
|
|
columnAndValues.put("IS_UNEMPLOYED", "0"); |
|
|
|
columnAndValues.put("IS_UNITED_FRONT", "0"); |
|
|
|
columnAndValues.put("IS_VETERANS", "0"); |
|
|
|
columnAndValues.put("IS_VOLUNTEER", "0"); |
|
|
|
|
|
|
|
columnAndValues.put("AGENCY_ID", currUserAgencyId); |
|
|
|
columnAndValues.put("PIDS", currUserAgencyPids); |
|
|
|
columnAndValues.put("CUSTOMER_ID", loginUserUtil.getCurrentCustomerId()); |
|
|
|
columnAndValues.put("CREATED_BY", currentUserId); |
|
|
|
columnAndValues.put("UPDATED_BY", currentUserId); |
|
|
|
columnAndValues.put("ID", UUID.randomUUID().toString().replace("-", "")); |
|
|
|
|
|
|
|
// rowColumnWrappers.forEach(c -> {
|
|
|
|
// System.out.println(c.columnName + "\t" + c.getColValue());
|
|
|
|
// });
|
|
|
|
|
|
|
|
// System.out.println("-------------------");
|
|
|
|
|
|
|
|
baseDao.add(tableName, columnAndValues); |
|
|
|
} |
|
|
|
return columnAndValues; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|