Browse Source

修改:

完成excel表格的基本导入
下一步:健壮性判断,失败记录,excel上传
dev_shibei_match
wangxianzhang 4 years ago
parent
commit
4eb0f5c0cb
  1. 2
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java
  2. 13
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java
  3. 2
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java
  4. 210
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java

2
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java

@ -78,6 +78,8 @@ public enum EpmetErrorCode {
HAVE_GUIDE_CANNOT_DEL(8211,"当前分类已经存在办事指南,不允许删除"),
GUIDE_CATEGORY_NAME_EXITS(8212,"分类已存在"),
CUSTOMER_FORM_NOT_EXITS(8213,"客户未配置表单"),
RESI_NOT_FOUND(8214,"居民信息找不到"),
REQUIRE_PERMISSION(8301, "您没有足够的操作权限"),
THIRD_PLAT_REQUEST_ERROR(8302, "请求第三方平台错误"),

13
epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java

@ -406,20 +406,11 @@ public class IcResiUserController {
/**
* excel导入居民基本信息
* @param loginUser
* @return
*/
@PostMapping("import/excel")
public Result importExcelByEasyExcel(@LoginUser TokenDto loginUser) {
LoginUserDetailsFormDTO userForm = new LoginUserDetailsFormDTO();
userForm.setApp(loginUser.getApp());
userForm.setClient(loginUser.getClient());
userForm.setUserId(loginUser.getUserId());
Result<LoginUserDetailsResultDTO> loginUserDetails = epmetUserOpenFeignClient.getLoginUserDetails(userForm);
Object result = icResiUserService.importIcResiInfoFromExcel(loginUserDetails.getData().getAgencyId());
public Result importExcelByEasyExcel() {
Object result = icResiUserService.importIcResiInfoFromExcel();
return new Result().ok(result);
}

2
epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java

@ -130,7 +130,7 @@ public interface IcResiUserService extends BaseService<IcResiUserEntity> {
*/
Map queryIcResiDetail(IcResiDetailFormDTO pageFormDTO);
Object importIcResiInfoFromExcel(String currUserAgencyId);
Object importIcResiInfoFromExcel();
List<Map<String,Object>> dynamicQuery(String customerId,
String formCode,

210
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java

@ -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;
}
/**

Loading…
Cancel
Save