From 4eb0f5c0cb1faca63580eead054e103026e42dac Mon Sep 17 00:00:00 2001 From: wangxianzhang Date: Thu, 4 Nov 2021 17:51:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=9A=20=E5=AE=8C?= =?UTF-8?q?=E6=88=90excel=E8=A1=A8=E6=A0=BC=E7=9A=84=E5=9F=BA=E6=9C=AC?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=20=E4=B8=8B=E4=B8=80=E6=AD=A5=EF=BC=9A?= =?UTF-8?q?=E5=81=A5=E5=A3=AE=E6=80=A7=E5=88=A4=E6=96=AD=EF=BC=8C=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E8=AE=B0=E5=BD=95=EF=BC=8Cexcel=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tools/exception/EpmetErrorCode.java | 2 + .../controller/IcResiUserController.java | 13 +- .../com/epmet/service/IcResiUserService.java | 2 +- .../service/impl/IcResiUserServiceImpl.java | 258 +++++++++++++----- 4 files changed, 189 insertions(+), 86 deletions(-) diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java index 92c190c7ec..a38091fa60 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java +++ b/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, "请求第三方平台错误"), diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java index 4ed686ba22..d466e6273e 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java +++ b/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 loginUserDetails = epmetUserOpenFeignClient.getLoginUserDetails(userForm); - - Object result = icResiUserService.importIcResiInfoFromExcel(loginUserDetails.getData().getAgencyId()); + public Result importExcelByEasyExcel() { + Object result = icResiUserService.importIcResiInfoFromExcel(); return new Result().ok(result); } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java index 0363899e8a..b497302753 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java @@ -130,7 +130,7 @@ public interface IcResiUserService extends BaseService { */ Map queryIcResiDetail(IcResiDetailFormDTO pageFormDTO); - Object importIcResiInfoFromExcel(String currUserAgencyId); + Object importIcResiInfoFromExcel(); List> dynamicQuery(String customerId, String formCode, diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java index af1e0e4578..cd357537c3 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java +++ b/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; /** * 用户基础信息 @@ -95,7 +97,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl page(Map params) { IPage page = baseDao.selectPage( @@ -484,22 +486,40 @@ public class IcResiUserServiceImpl extends BaseServiceImpl 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 formItem) ); Map 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 headerColumnWrapper, List> dataRows, - String currUserAgencyId, Map checkBoxOptionColumnIdxAndLabel, String tableName, - String currUserAgencyPids, String currentUserId) { + private void persistIcResiBaseInfo(Map headerColumnWrapper, List> dataRows, + String currUserAgencyId, Map checkBoxOptionColumnIdxAndLabel, + String currUserAgencyPids, String currentUserId) { + + // 遍历每一行,将行内容转化为 for (Map row : dataRows) { - // 当前行的列们 -// List columnsOfCurrRow = new ArrayList<>(); - - List columnNames = new ArrayList<>(); - List columnValues = new ArrayList<>(); - LinkedHashMap columnAndValues = new LinkedHashMap<>(); - - for (Map.Entry columnWrapperEntry : headerColumnWrapper.entrySet()) { - - ColumnWrapper columnWrapper = columnWrapperEntry.getValue(); - if ("input".equals(columnWrapper.getItemType()) - || "textarea".equals(columnWrapper.getItemType()) - || "datepicker".equals(columnWrapper.getItemType()) - || "timerange".equals(columnWrapper.getItemType()) - ) { - - String cellContent = row.get(columnWrapper.getColIndexs().get(0)); - columnWrapper.setCellContent(cellContent); - columnWrapper.setColValue(cellContent); - - } else if ("select".equals(columnWrapper.getItemType()) - || "radio".equals(columnWrapper.getItemType())){ - - String optionSourceType = columnWrapper.getOptionSourceType(); - // 取单元格的内容 - String cellContent = row.get(columnWrapper.getColIndexs().get(0)); - columnWrapper.setCellContent(cellContent); - - if ("local".equals(optionSourceType)) { - // 根据单元格内容,取到指定的option - Map options = columnWrapper.getOptions(); - String colValue = options.get(cellContent); - columnWrapper.setColValue(colValue); - } else { - // remote类型 - - Map options = listRemoteOptions(headerColumnWrapper, columnWrapper.getOptionSourceValue(), currUserAgencyId); - String colValue = options.get(cellContent); - columnWrapper.setColValue(colValue); - } - } else if ("checkbox".equals(columnWrapper.getItemType())) { - String checkBoxColValue = getCheckBoxColValue(columnWrapper, row, checkBoxOptionColumnIdxAndLabel); - columnWrapper.setColValue(checkBoxColValue); - } - columnAndValues.put(columnWrapper.columnName, columnWrapper.colValue); - } + LinkedHashMap columnAndValues = convertColumnWrappers2Map4Persist(headerColumnWrapper, row, currUserAgencyId, checkBoxOptionColumnIdxAndLabel); columnAndValues.put("IS_ENSURE_HOUSE", "0"); columnAndValues.put("IS_OLD_PEOPLE", "0"); @@ -669,14 +647,146 @@ public class IcResiUserServiceImpl extends BaseServiceImpl { -// System.out.println(c.columnName + "\t" + c.getColValue()); -// }); + // 验证居民信息是否存在 + String idCard = columnAndValues.get("ID_CARD"); + LambdaQueryWrapper 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 headerColumnWrapper, List> dataRows, + String currUserAgencyId, Map checkBoxOptionColumnIdxAndLabel, + String currentUserId, String targetTableName, String customerId) { + + // 遍历每一行,将行内容转化为 + for (Map row : dataRows) { + + LinkedHashMap 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 idCardQuery = new LambdaQueryWrapper<>(); + idCardQuery.eq(IcResiUserEntity::getIdCard, idCard); + + 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); -// System.out.println("-------------------"); + baseDao.add(targetTableName, columnAndValues); + } + } + + /** + * 去掉多余的列 + * @param originColumnAndValues + * @return + */ + private LinkedHashMap removeNeedlessColumns(LinkedHashMap originColumnAndValues) { + List 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 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 convertColumnWrappers2Map4Persist(Map headerColumnWrapper, Map row, + String currUserAgencyId, Map checkBoxOptionColumnIdxAndLabel) { + LinkedHashMap columnAndValues = new LinkedHashMap<>(); + + for (Map.Entry columnWrapperEntry : headerColumnWrapper.entrySet()) { + + ColumnWrapper columnWrapper = columnWrapperEntry.getValue(); + if ("input".equals(columnWrapper.getItemType()) + || "textarea".equals(columnWrapper.getItemType()) + || "datepicker".equals(columnWrapper.getItemType()) + || "daterange".equals(columnWrapper.getItemType()) + ) { + + String cellContent = row.get(columnWrapper.getColIndexs().get(0)); + columnWrapper.setCellContent(cellContent); + columnWrapper.setColValue(cellContent); + + } else if ("select".equals(columnWrapper.getItemType()) + || "radio".equals(columnWrapper.getItemType())){ + + String optionSourceType = columnWrapper.getOptionSourceType(); + // 取单元格的内容 + String cellContent = row.get(columnWrapper.getColIndexs().get(0)); + columnWrapper.setCellContent(cellContent); + + if ("local".equals(optionSourceType)) { + // 根据单元格内容,取到指定的option + Map options = columnWrapper.getOptions(); + String colValue = options.get(cellContent); + columnWrapper.setColValue(colValue); + } else { + // remote类型 - baseDao.add(tableName, columnAndValues); + Map options = listRemoteOptions(headerColumnWrapper, columnWrapper.getOptionSourceValue(), currUserAgencyId); + String colValue = options.get(cellContent); + columnWrapper.setColValue(colValue); + } + } else if ("checkbox".equals(columnWrapper.getItemType())) { + String checkBoxColValue = getCheckBoxColValue(columnWrapper, row, checkBoxOptionColumnIdxAndLabel); + columnWrapper.setColValue(checkBoxColValue); + } + columnAndValues.put(columnWrapper.columnName, columnWrapper.colValue); } + + return columnAndValues; } /**