Browse Source

修改:

【居民信息导入】模板变更。bug修复
dev
wangxianzhang 4 years ago
parent
commit
fa473bb10c
  1. 2
      epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java
  2. 74
      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/dao/IcResiUserDao.java
  4. 62
      epmet-user/epmet-user-server/src/main/java/com/epmet/enums/IcResiUserTableEnum.java
  5. 44
      epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcResiVirtualSheetImportListener.java
  6. 468
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java
  7. 6
      epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml

2
epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java

@ -650,7 +650,7 @@ public interface EpmetUserOpenFeignClient {
@GetMapping(value = "/epmetuser/user/queryUserClient/{userId}") @GetMapping(value = "/epmetuser/user/queryUserClient/{userId}")
Result<UserDTO> queryUserClient(@PathVariable("userId") String userId); Result<UserDTO> queryUserClient(@PathVariable("userId") String userId);
@PostMapping("/epmetuser/icresidemanddict/demandoption/demandoption") @PostMapping("/epmetuser/icresidemanddict/demandoption")
Result<List<OptionResultDTO>> getDemandOptions(); Result<List<OptionResultDTO>> getDemandOptions();
@PostMapping("/epmetuser/icresiuser/categorycount") @PostMapping("/epmetuser/icresiuser/categorycount")

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

@ -71,6 +71,7 @@ import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest; import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest;
@ -439,7 +440,7 @@ public class IcResiUserController implements ResultDataResolver {
} }
String originalFilename = file.getOriginalFilename(); String originalFilename = file.getOriginalFilename();
// 校验文件类型 // 一.校验文件类型
String extension = FilenameUtils.getExtension(originalFilename); String extension = FilenameUtils.getExtension(originalFilename);
if (!"xls".equals(extension) && !"xlsx".equals(extension)) { if (!"xls".equals(extension) && !"xlsx".equals(extension)) {
throw new RenException("文件类型不匹配"); throw new RenException("文件类型不匹配");
@ -447,9 +448,9 @@ public class IcResiUserController implements ResultDataResolver {
String operatorId = loginUserUtil.getLoginUserId(); String operatorId = loginUserUtil.getLoginUserId();
String importTaskId = icResiUserImportService.createImportTaskRecord(operatorId, ImportTaskConstants.BIZ_TYPE_RESI, originalFilename);; String importTaskId = icResiUserImportService.createImportTaskRecord(operatorId, ImportTaskConstants.BIZ_TYPE_RESI, originalFilename);
// 缓存上传的文件 // 二.缓存上传的文件
Path importTempFileSavePath; Path importTempFileSavePath;
try { try {
String fileName = UUID.randomUUID().toString().concat(".").concat(extension); String fileName = UUID.randomUUID().toString().concat(".").concat(extension);
@ -460,22 +461,46 @@ public class IcResiUserController implements ResultDataResolver {
throw new RenException("上传失败"); throw new RenException("上传失败");
} }
final Path importTempFileSavePathFinal = importTempFileSavePath;
HttpServletRequest request = ((StandardMultipartHttpServletRequest)multipartRequest).getRequest(); HttpServletRequest request = ((StandardMultipartHttpServletRequest)multipartRequest).getRequest();
HashMap<String, String> headers = getHeadersFromRequest(request); HashMap<String, String> headers = getHeadersFromRequest(request);
// 异步执行导入 // 三.异步执行导入
CompletableFuture.runAsync(() -> { CompletableFuture.runAsync(() -> {
try { try {
// 睡眠2秒钟,等待主线程先结束,主线程会清空request对象的headers,等他执行了清空之后,我们这边再手动setHeader进去 // 睡眠2秒钟,等待主线程先结束,主线程会清空request对象的headers,等他执行了清空之后,我们这边再手动setHeader进去
Thread.sleep(1000l); Thread.sleep(2000l);
System.out.println("请求头:" + headers);
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); String errorMsg = ExceptionUtils.getErrorStackTrace(e);
log.error("【上传居民信息】失败,睡眠2s发生中断:{}", errorMsg);
return;
}
try {
setHeaders2Request(request, headers);
List<FormItemResult> formItemList = icResiUserService.listFormItems(customerId,IcFormCodeEnum.RESI_BASE_INFO.getCode());
icResiUserImportService.importIcResiInfoFromExcel(importTaskId, formItemList, importTempFileSavePath.toString(), response, IC_RESI_UPLOAD_DIR);
} catch (Throwable e) {
String errorMsg = ExceptionUtils.getThrowableErrorStackTrace(e);
log.error("【导入居民信息失败】导入失败:{}", errorMsg);
// 要将导入任务状态设置为结束但不成功。不报错即成功,没有返回值
icResiUserImportService.finishImportTask(importTaskId, operatorId, ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL, "系统异常,请查看系统日志", null);
} finally {
try {
if (importTempFileSavePath != null){
Files.delete(importTempFileSavePath);
}
} catch (IOException e) {
log.error("【导入居民信息失败】清理上传的文件失败:{}", ExceptionUtils.getErrorStackTrace(e));
}
// 清理request对象
RequestContextHolder.resetRequestAttributes();
} }
setHeaders2Request(request, headers);
submitResiImportTask(customerId, operatorId, importTaskId, importTempFileSavePathFinal, response);
}); });
return new Result(); return new Result();
@ -524,35 +549,6 @@ public class IcResiUserController implements ResultDataResolver {
} }
} }
/**
* 提交居民导入任务
* @param customerId
* @param operatorId
* @param importTaskId
* @param response
*/
private void submitResiImportTask(String customerId, String operatorId, String importTaskId, Path importTempFileSavePath, HttpServletResponse response) {
try {
List<FormItemResult> formItemList = icResiUserService.listFormItems(customerId,IcFormCodeEnum.RESI_BASE_INFO.getCode());
icResiUserImportService.importIcResiInfoFromExcel(importTaskId, formItemList, importTempFileSavePath.toString(), response, IC_RESI_UPLOAD_DIR);
} catch (Throwable e) {
String errorMsg = ExceptionUtils.getThrowableErrorStackTrace(e);
log.error("【导入居民信息失败】导入失败:{}", errorMsg);
// 要将导入任务状态设置为结束但不成功。不报错即成功,没有返回值
icResiUserImportService.finishImportTask(importTaskId, operatorId, ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL, "系统异常,请查看系统日志", null);
} finally {
try {
if (importTempFileSavePath != null){
Files.delete(importTempFileSavePath);
}
} catch (IOException e) {
log.error("【导入居民信息失败】清理上传的文件失败:{}", ExceptionUtils.getErrorStackTrace(e));
}
}
}
@PostMapping("test") @PostMapping("test")
public Result<List<Map<String, Object>>> test(@LoginUser TokenDto tokenDto, @RequestBody DynamicQueryFormDTO formDTO) { public Result<List<Map<String, Object>>> test(@LoginUser TokenDto tokenDto, @RequestBody DynamicQueryFormDTO formDTO) {
formDTO.setCustomerId("45687aa479955f9d06204d415238f7cc"); formDTO.setCustomerId("45687aa479955f9d06204d415238f7cc");

2
epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java

@ -239,7 +239,7 @@ public interface IcResiUserDao extends BaseDao<IcResiUserEntity> {
Map<String, String> getCategoryListMap(@Param("columns")List<String> columns, @Param("icUserId") String icUserId); Map<String, String> getCategoryListMap(@Param("columns")List<String> columns, @Param("icUserId") String icUserId);
Map<String, String> selectResiInfoMap(@Param("idCard") String idCard); Map<String, String> selectResiInfoMap(@Param("idCard") String idCard, @Param("resiId") String resiId);
List<Map<String,Object>> selectResiUsers(@Param("types")List<String> types,@Param("orgId")String orgId); List<Map<String,Object>> selectResiUsers(@Param("types")List<String> types,@Param("orgId")String orgId);

62
epmet-user/epmet-user-server/src/main/java/com/epmet/enums/IcResiUserTableEnum.java

@ -1,6 +1,9 @@
package com.epmet.enums; package com.epmet.enums;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.List;
/** /**
* @Description 描述 * @Description 描述
@ -13,21 +16,40 @@ public enum IcResiUserTableEnum {
/** /**
* 注释 * 注释
*/ */
IC_RESI_USER("ic_resi_user","社区居民基本信息录入表", 0, 3, null), IC_RESI_USER("ic_resi_user","社区居民基本信息录入表", 0, 3, null, true),
IC_PARTY_MEMBER("ic_party_member","党员信息录入表", 1, 2, "IS_PARTY"), IC_PARTY_MEMBER("ic_party_member","党员信息录入表", 1, 2, "IS_PARTY", true),
IC_ENSURE_HOUSE("ic_ensure_house","保障房人员信息录入表", 2, 2, "IS_ENSURE_HOUSE"), IC_ENSURE_HOUSE("ic_ensure_house","保障房人员信息录入表", 2, 2, "IS_ENSURE_HOUSE", true),
IC_UNEMPLOYED("ic_unemployed","失业人员信息录入表", 3, 2, "IS_UNEMPLOYED"), IC_UNEMPLOYED("ic_unemployed","失业人员信息录入表", 3, 2, "IS_UNEMPLOYED", true),
IC_VETERANS("ic_veterans","退役军人信息录入表", 4, 2, "IS_VETERANS"), IC_VETERANS("ic_veterans","退役军人信息录入表", 4, 2, "IS_VETERANS", true),
IC_UNITED_FRONT("ic_united_front","统战人员信息录入表", 5, 2, "IS_UNITED_FRONT"), IC_UNITED_FRONT("ic_united_front","统战人员信息录入表", 5, 2, "IS_UNITED_FRONT", true),
IC_VOLUNTEER("ic_volunteer","志愿者信息录入表", 6, 3, "IS_VOLUNTEER"), IC_VOLUNTEER("ic_volunteer","志愿者信息录入表", 6, 3, "IS_VOLUNTEER", true),
IC_OLD_PEOPLE("ic_old_people","老年人信息录入表", 7, 2, "IS_OLD_PEOPLE"), IC_OLD_PEOPLE("ic_old_people","老年人信息录入表", 7, 2, "IS_OLD_PEOPLE", true),
IC_SPECIAL("ic_special","特殊人群信息录入表", 8, 3, "IS_SPECIAL"); IC_SPECIAL("ic_special","特殊人群信息录入表", 8, 3, "IS_SPECIAL", true),
// 下面的是:没有实际数据库表,在ic_resi_user中有一个标记,但是导入的时候是有单独的sheet的
IC_DBH("ic_resi_user","低保人员信息录入表", null, 2, "IS_DBH", false),
IC_YLFN("ic_resi_user","育龄妇女信息录入表", null, 2, "IS_YLFN", false),
IC_XFRY("ic_resi_user","信访人员信息录入表", null, 2, "IS_XFRY", false),
IC_KC("ic_resi_user","空巢老人信息录入表", null, 2, "IS_KC", false),
IC_SD("ic_resi_user","失独人员信息录入表", null, 2, "IS_SD", false),
IC_SN("ic_resi_user","失能人员信息录入表", null, 2, "IS_SN", false),
IC_SZ("ic_resi_user","失智人员信息录入表", null, 2, "IS_SZ", false),
IC_CJ("ic_resi_user","残疾人员信息录入表", null, 2, "IS_CJ", false),
IC_DB("ic_resi_user","大病人员信息录入表", null, 2, "IS_DB", false),
IC_MB("ic_resi_user","慢病人员信息录入表", null, 2, "IS_MB", false);
private String tableName; private String tableName;
/**
* 表描述 && sheet名称
*/
private String tableComment; private String tableComment;
private int sheetNo; private Integer sheetNo;
private int headRowNo; private int headRowNo;
private String mainTableFlagColumnName; private String mainTableFlagColumnName;
/**
* 该sheet是否有数据库表
*/
private boolean existsDBTable;
/** /**
* 根据表名获取枚举对象 * 根据表名获取枚举对象
@ -63,34 +85,18 @@ public enum IcResiUserTableEnum {
return tableName; return tableName;
} }
public void setTableName(String tableName) {
this.tableName = tableName;
}
public String getTableComment() { public String getTableComment() {
return tableComment; return tableComment;
} }
public void setTableComment(String tableComment) {
this.tableComment = tableComment;
}
public int getSheetNo() { public int getSheetNo() {
return sheetNo; return sheetNo;
} }
public void setSheetNo(int sheetNo) {
this.sheetNo = sheetNo;
}
public int getHeadRowNo() { public int getHeadRowNo() {
return headRowNo; return headRowNo;
} }
public void setHeadRowNo(int headRowNo) {
this.headRowNo = headRowNo;
}
public String getMainTableFlagColumnName() { public String getMainTableFlagColumnName() {
return mainTableFlagColumnName; return mainTableFlagColumnName;
} }
@ -98,4 +104,8 @@ public enum IcResiUserTableEnum {
public void setMainTableFlagColumnName(String mainTableFlagColumnName) { public void setMainTableFlagColumnName(String mainTableFlagColumnName) {
this.mainTableFlagColumnName = mainTableFlagColumnName; this.mainTableFlagColumnName = mainTableFlagColumnName;
} }
public boolean isExistsDBTable() {
return existsDBTable;
}
} }

44
epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcResiVirtualSheetImportListener.java

@ -0,0 +1,44 @@
package com.epmet.excel.handler;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.epmet.enums.IcResiUserTableEnum;
import com.epmet.service.impl.IcResiUserImportServiceImpl;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class IcResiVirtualSheetImportListener extends AnalysisEventListener<Map<String, String>> {
private IcResiUserImportServiceImpl importService;
private IcResiUserTableEnum sheetEnumObject;
/**
* 身份证号列表
*/
private List<Map<String, String>> resiInfo = new ArrayList<>();
public IcResiVirtualSheetImportListener(IcResiUserImportServiceImpl importService, IcResiUserTableEnum sheetEnumObject) {
this.importService = importService;
this.sheetEnumObject = sheetEnumObject;
}
@Override
public void invoke(Map<String, String> data, AnalysisContext context) {
if (data != null && data.size() > 0) {
resiInfo.add(data);
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
try {
importService.persistIcResiVirtualSheetExtraInfo(resiInfo, sheetEnumObject);
} finally {
// 清空数据
resiInfo.clear();
}
}
}

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

@ -12,6 +12,7 @@ import com.epmet.bean.ResiImportResiCategoryChangedCache;
import com.epmet.bean.ResiImportChangedData; import com.epmet.bean.ResiImportChangedData;
import com.epmet.commons.tools.constant.ServiceConstant; import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.constant.StrConstant; import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.constant.ThreadLocalConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult; import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.dto.result.OptionResultDTO; import com.epmet.commons.tools.dto.result.OptionResultDTO;
import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.EpmetErrorCode;
@ -39,6 +40,7 @@ import com.epmet.entity.IcUserChangeRecordEntity;
import com.epmet.entity.IcUserTransferRecordEntity; import com.epmet.entity.IcUserTransferRecordEntity;
import com.epmet.enums.IcResiUserTableEnum; import com.epmet.enums.IcResiUserTableEnum;
import com.epmet.excel.handler.IcResiImportDynamicExcelListener; import com.epmet.excel.handler.IcResiImportDynamicExcelListener;
import com.epmet.excel.handler.IcResiVirtualSheetImportListener;
import com.epmet.feign.*; import com.epmet.feign.*;
import com.epmet.service.*; import com.epmet.service.*;
import com.google.common.cache.Cache; import com.google.common.cache.Cache;
@ -73,6 +75,11 @@ import java.util.stream.Collectors;
@Service @Service
public class IcResiUserImportServiceImpl implements IcResiUserImportService, ResultDataResolver { public class IcResiUserImportServiceImpl implements IcResiUserImportService, ResultDataResolver {
/**
* 身份证号列序号
*/
public static final Integer ID_CARD_COLUMN_NO = 9;
// 错误和跳过excel行暂存 // 错误和跳过excel行暂存
public static final ThreadLocal<Map<String, List<ErrorRow>>> errorRows = new ThreadLocal<>(); public static final ThreadLocal<Map<String, List<ErrorRow>>> errorRows = new ThreadLocal<>();
@ -200,24 +207,6 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
private String errorInfo; private String errorInfo;
} }
@Data
public static class SkipedRow {
@Excel(name = "工作表")
private String sheetName;
private String tableName;
@Excel(name = "身份证号")
private String idCard;
@Excel(name = "姓名")
private String name;
@Excel(name = "信息")
private String info;
}
/** /**
* 导入居民信息 * 导入居民信息
* @param importTaskId 导入任务id * @param importTaskId 导入任务id
@ -245,8 +234,6 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
CustomerAgencyDTO agencyInfo = getResultDataOrThrowsException(govOrgOpenFeignClient.getAgencyById(currUserAgencyId), ServiceConstant.GOV_ORG_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), null, null); CustomerAgencyDTO agencyInfo = getResultDataOrThrowsException(govOrgOpenFeignClient.getAgencyById(currUserAgencyId), ServiceConstant.GOV_ORG_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), null, null);
String customerId = agencyInfo.getCustomerId(); String customerId = agencyInfo.getCustomerId();
boolean hasErrorRows = false;
try { try {
initImportThreadLocal(customerId); initImportThreadLocal(customerId);
@ -256,12 +243,13 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
// 上传附表信息 // 上传附表信息
for (IcResiUserTableEnum sheet : IcResiUserTableEnum.values()) { for (IcResiUserTableEnum sheet : IcResiUserTableEnum.values()) {
// 是主表
if (sheet == IcResiUserTableEnum.IC_RESI_USER) { if (sheet == IcResiUserTableEnum.IC_RESI_USER) {
continue; continue;
} }
try { try {
importIcResiExtraInfoFromExcel(formItemList, excelPathName, sheet.getSheetNo(), sheet.getHeadRowNo(), currUserAgencyId, loginUserId, sheet.getTableName(), customerId); importIcResiExtraInfoFromExcel(formItemList, excelPathName, sheet, currUserAgencyId, loginUserId, customerId);
} catch (Exception e) { } catch (Exception e) {
String errorMsg = ExceptionUtils.getErrorStackTrace(e); String errorMsg = ExceptionUtils.getErrorStackTrace(e);
log.error("导入IC居民附加信息【{}】错误:{}", sheet.getTableComment(), errorMsg); log.error("导入IC居民附加信息【{}】错误:{}", sheet.getTableComment(), errorMsg);
@ -339,12 +327,6 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
String operatorId = loginUserUtil.getLoginUserId(); String operatorId = loginUserUtil.getLoginUserId();
String importTag = operatorId + System.currentTimeMillis(); String importTag = operatorId + System.currentTimeMillis();
// 跳过的,不导入的行
Map<String, List<SkipedRow>> skipedRowsMap = new LinkedHashMap<>();
for (IcResiUserTableEnum e : IcResiUserTableEnum.values()) {
skipedRowsMap.put(e.getTableName(), new LinkedList<>());
}
// 错误信息 // 错误信息
Map<String, List<ErrorRow>> errorRowsMap = new LinkedHashMap<>(); Map<String, List<ErrorRow>> errorRowsMap = new LinkedHashMap<>();
for (IcResiUserTableEnum e : IcResiUserTableEnum.values()) { for (IcResiUserTableEnum e : IcResiUserTableEnum.values()) {
@ -392,19 +374,35 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
* *
* @param formItemList * @param formItemList
* @param excelPathName * @param excelPathName
* @param sheetNo * @param sheetEnumObject sheet枚举对象
* @param headRowNumber
* @param currUserAgencyId * @param currUserAgencyId
* @param currentUserId * @param currentUserId
* @param targetTableName 要插入哪一个表
* @return * @return
*/ */
private void importIcResiExtraInfoFromExcel(List<FormItemResult> formItemList, String excelPathName, int sheetNo, int headRowNumber, String currUserAgencyId, String currentUserId, private void importIcResiExtraInfoFromExcel(List<FormItemResult> formItemList, String excelPathName, IcResiUserTableEnum sheetEnumObject, String currUserAgencyId,
String targetTableName, String customerId) { String currentUserId, String customerId) {
IcResiImportDynamicExcelListener readListener = new IcResiImportDynamicExcelListener(this, customerId, currentUserId, currUserAgencyId, null, // 如果该sheet对应有实际的数据库表,使用items动态的解析
false, targetTableName, formItemList, headRowNumber); if (sheetEnumObject.isExistsDBTable()) {
EasyExcelFactory.read(new File(excelPathName)).registerReadListener(readListener).headRowNumber(headRowNumber).sheet(sheetNo).doRead(); IcResiImportDynamicExcelListener readListener = new IcResiImportDynamicExcelListener(
this, customerId, currentUserId, currUserAgencyId, null,
false, sheetEnumObject.getTableName(), formItemList, sheetEnumObject.getHeadRowNo());
EasyExcelFactory.read(new File(excelPathName))
.registerReadListener(readListener)
.headRowNumber(sheetEnumObject.getHeadRowNo())
.sheet(sheetEnumObject.getTableComment())
.doRead();
} else {
// 实际上并不存在该sheet对应的数据库表,此时无法使用items解析,就要读取固定的ID_CARD字段数据,更新主表字段为true
IcResiVirtualSheetImportListener vitualSheetReadListener = new IcResiVirtualSheetImportListener(this, sheetEnumObject);
EasyExcelFactory.read(new File(excelPathName))
.registerReadListener(vitualSheetReadListener)
.headRowNumber(sheetEnumObject.getHeadRowNo())
.sheet(sheetEnumObject.getTableComment())
.doRead();
}
} }
/** /**
@ -427,7 +425,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
String idCard = columnAndValues.get("ID_CARD"); String idCard = columnAndValues.get("ID_CARD");
Map<String, String> existingResiMap = icResiUserDao.selectResiInfoMap(idCard); Map<String, String> existingResiMap = icResiUserDao.selectResiInfoMap(idCard, null);
if (existingResiMap == null) { if (existingResiMap == null) {
// 新导入的居民,因为还没有读取子sheet,所以这些居民类别没有办法获取,先默认设置成0,后面读取子sheet的时候再更新 // 新导入的居民,因为还没有读取子sheet,所以这些居民类别没有办法获取,先默认设置成0,后面读取子sheet的时候再更新
@ -439,6 +437,16 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
columnAndValues.put("IS_UNITED_FRONT", "0"); columnAndValues.put("IS_UNITED_FRONT", "0");
columnAndValues.put("IS_VETERANS", "0"); columnAndValues.put("IS_VETERANS", "0");
columnAndValues.put("IS_VOLUNTEER", "0"); columnAndValues.put("IS_VOLUNTEER", "0");
columnAndValues.put("IS_DBH", "0");
columnAndValues.put("IS_YLFN", "0");
columnAndValues.put("IS_XFRY", "0");
columnAndValues.put("IS_KC", "0");
columnAndValues.put("IS_SD", "0");
columnAndValues.put("IS_SN", "0");
columnAndValues.put("IS_SZ", "0");
columnAndValues.put("IS_CJ", "0");
columnAndValues.put("IS_DB", "0");
columnAndValues.put("IS_MB", "0");
} else { } else {
// 该居民已存在,要做更新操作,因为还没有读取子sheet,所以这些居民最新类别没有办法获取,先设置上旧的数据 // 该居民已存在,要做更新操作,因为还没有读取子sheet,所以这些居民最新类别没有办法获取,先设置上旧的数据
columnAndValues.put("IS_ENSURE_HOUSE", existingResiMap.get("IS_ENSURE_HOUSE")); columnAndValues.put("IS_ENSURE_HOUSE", existingResiMap.get("IS_ENSURE_HOUSE"));
@ -449,6 +457,16 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
columnAndValues.put("IS_UNITED_FRONT", existingResiMap.get("IS_UNITED_FRONT")); columnAndValues.put("IS_UNITED_FRONT", existingResiMap.get("IS_UNITED_FRONT"));
columnAndValues.put("IS_VETERANS", existingResiMap.get("IS_VETERANS")); columnAndValues.put("IS_VETERANS", existingResiMap.get("IS_VETERANS"));
columnAndValues.put("IS_VOLUNTEER", existingResiMap.get("IS_VOLUNTEER")); columnAndValues.put("IS_VOLUNTEER", existingResiMap.get("IS_VOLUNTEER"));
columnAndValues.put("IS_DBH", existingResiMap.get("IS_DBH"));
columnAndValues.put("IS_YLFN", existingResiMap.get("IS_YLFN"));
columnAndValues.put("IS_XFRY", existingResiMap.get("IS_XFRY"));
columnAndValues.put("IS_KC", existingResiMap.get("IS_KC"));
columnAndValues.put("IS_SD", existingResiMap.get("IS_SD"));
columnAndValues.put("IS_SN", existingResiMap.get("IS_SN"));
columnAndValues.put("IS_SZ", existingResiMap.get("IS_SZ"));
columnAndValues.put("IS_CJ", existingResiMap.get("IS_CJ"));
columnAndValues.put("IS_DB", existingResiMap.get("IS_DB"));
columnAndValues.put("IS_MB", existingResiMap.get("IS_MB"));
} }
columnAndValues.put("AGENCY_ID", currUserAgencyId); columnAndValues.put("AGENCY_ID", currUserAgencyId);
@ -465,12 +483,6 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
ResiImportChangedData transferData; ResiImportChangedData transferData;
if ((transferData = this.getResiImportTrasferData(existingResiMap, columnAndValues)) != null) { if ((transferData = this.getResiImportTrasferData(existingResiMap, columnAndValues)) != null) {
newlyOrChangedResi.get().getTransferedResis().put(existingResiMap.get("ID"), transferData); newlyOrChangedResi.get().getTransferedResis().put(existingResiMap.get("ID"), transferData);
} else {
// 组织维度没有发生变化,看是否有居民类型变更
ResiImportChangedData d = getResiImportCategoryChangedData(existingResiMap, columnAndValues);
if (d != null) {
newlyOrChangedResi.get().getCategoryChangedResis().put(existingResiMap.get("ID"), d);
}
} }
} else { } else {
// 新增居民 // 新增居民
@ -478,22 +490,8 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
columnAndValues.put("CREATED_BY", currentUserId); columnAndValues.put("CREATED_BY", currentUserId);
columnAndValues.put("ID", resiId); columnAndValues.put("ID", resiId);
icResiUserDao.add(tableName, columnAndValues);
// 过滤出本居民含有哪些类别 icResiUserDao.add(tableName, columnAndValues);
Map<String, String> resiCategories = resiCategoryColumnNameAndLabel.get().keySet()
.stream()
.filter((categoryColumnName) -> "1".equals(columnAndValues.get(categoryColumnName)))
.collect(Collectors.toMap((k) -> k, (k) -> columnAndValues.get(k)));
// newlyOrChangedResi.get().getNewResis().put(resiId,
// new ResiImportCategoryData(columnAndValues.get("AGENCY_ID"),
// columnAndValues.get("GRID_ID"),
// columnAndValues.get("VILLAGE_ID"),
// columnAndValues.get("BUILD_ID"),
// columnAndValues.get("UNIT_ID"),
// columnAndValues.get("HOME_ID"),
// resiCategories));
ResiImportCategoryData categoryData = new ResiImportCategoryData(resiId, ResiImportCategoryData categoryData = new ResiImportCategoryData(resiId,
columnAndValues.get("AGENCY_ID"), columnAndValues.get("AGENCY_ID"),
@ -502,7 +500,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
columnAndValues.get("BUILD_ID"), columnAndValues.get("BUILD_ID"),
columnAndValues.get("UNIT_ID"), columnAndValues.get("UNIT_ID"),
columnAndValues.get("HOME_ID"), columnAndValues.get("HOME_ID"),
resiCategories); new HashMap<>());
redisUtils.hMSet(RedisKeys.icResiImportResiCategoryKey(newlyOrChangedResi.get().getImportTag(), "add", resiId), BeanUtil.beanToMap(categoryData)); redisUtils.hMSet(RedisKeys.icResiImportResiCategoryKey(newlyOrChangedResi.get().getImportTag(), "add", resiId), BeanUtil.beanToMap(categoryData));
categoryData = null; categoryData = null;
@ -560,13 +558,13 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
} }
// 检查用户是否存在 // 检查用户是否存在
Map<String, String> resiInfoMap = icResiUserDao.selectResiInfoMap(idCard); Map<String, String> existResiInfoMap = icResiUserDao.selectResiInfoMap(idCard, null);
if (resiInfoMap == null || resiInfoMap.size() == 0) { if (existResiInfoMap == null || existResiInfoMap.size() == 0) {
throw new RenException(EpmetErrorCode.RESI_NOT_FOUND.getCode(), String.format("身份证号为【%s】的居民信息未找到,请确认该居民信息存在", idCard)); throw new RenException(EpmetErrorCode.RESI_NOT_FOUND.getCode(), String.format("身份证号为【%s】的居民信息未找到,请确认该居民信息存在", idCard));
} }
String icResiId = resiInfoMap.get("ID"); String icResiId = existResiInfoMap.get("ID");
columnAndValues.put("IC_RESI_USER", icResiId); columnAndValues.put("IC_RESI_USER", icResiId);
columnAndValues.put("CUSTOMER_ID", loginUserUtil.getLoginUserCustomerId()); columnAndValues.put("CUSTOMER_ID", loginUserUtil.getLoginUserCustomerId());
@ -594,7 +592,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
// 保存到类别变更缓存中 // 保存到类别变更缓存中
saveSubTableInfoToCategoryChangedResiCache(icResiId, saveSubTableInfoToCategoryChangedResiCache(icResiId,
Objects.requireNonNull(IcResiUserTableEnum.getObjectByTableName(targetTableName)).getMainTableFlagColumnName(), Objects.requireNonNull(IcResiUserTableEnum.getObjectByTableName(targetTableName)).getMainTableFlagColumnName(),
resiInfoMap); existResiInfoMap);
} catch (Exception e) { } catch (Exception e) {
String errorMsg; String errorMsg;
@ -617,6 +615,45 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
} }
} }
/**
* 虚拟(不对应实际的数据库表)sheet的数据导入持久化
* @param sheetEnumObject
*/
public void persistIcResiVirtualSheetExtraInfo(List<Map<String, String>> resiInfo, IcResiUserTableEnum sheetEnumObject) {
for (Map<String, String> columnAndValues : resiInfo) {
String idCard = columnAndValues.get(ID_CARD_COLUMN_NO);
try {
Map<String, String> resiInfoMap = icResiUserDao.selectResiInfoMap(idCard, null);
if (resiInfoMap == null || resiInfoMap.size() == 0) {
throw new RenException(EpmetErrorCode.RESI_NOT_FOUND.getCode(), String.format("身份证号为【%s】的居民信息未找到,请确认该居民信息存在", idCard));
}
String icResiId = resiInfoMap.get("ID");
// 更新主表中该居民类型字段为true
updateMainTableResiTypeFlag(sheetEnumObject, icResiId);
// 保存类别变更信息
saveSubTableInfoToCategoryChangedResiCache(icResiId, sheetEnumObject.getMainTableFlagColumnName(), resiInfoMap);
} catch (Exception e) {
String errorMsg;
if (e instanceof RenException || e instanceof EpmetException) {
errorMsg = e.getMessage();
} else {
errorMsg = "未知系统错误";
log.error(ExceptionUtils.getErrorStackTrace(e));
}
ErrorRow errorRow = new ErrorRow();
errorRow.setName(columnAndValues.get("NAME"));
errorRow.setIdCard(idCard);
errorRow.setErrorInfo(errorMsg);
errorRow.setTableName(sheetEnumObject.getTableName());
errorRows.get().get(sheetEnumObject.getTableName()).add(errorRow);
}
}
}
/** /**
* 去掉多余的列 * 去掉多余的列
* @param originColumnAndValues * @param originColumnAndValues
@ -1060,7 +1097,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
private void updateMainTableResiTypeFlag(IcResiUserTableEnum icResiUserTableEnum, String resiUserId) { private void updateMainTableResiTypeFlag(IcResiUserTableEnum icResiUserTableEnum, String resiUserId) {
HashMap<String, Boolean> map = new HashMap<>(); HashMap<String, Boolean> map = new HashMap<>();
map.put(icResiUserTableEnum.getMainTableFlagColumnName(), true); map.put(icResiUserTableEnum.getMainTableFlagColumnName(), true);
icResiUserDao.upTable("ic_resi_user", resiUserId, map); icResiUserDao.upTable(IcResiUserTableEnum.IC_RESI_USER.getTableName(), resiUserId, map);
} }
/** /**
@ -1127,93 +1164,6 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
return null; return null;
} }
HashMap<String, String> existingResiCategories = new HashMap<>();
HashMap<String, String> newResiCategories = new HashMap<>();
for (String categoryColumnName : resiCategoryColumnNameAndLabel.get().keySet()) {
String oldCategoryValue = existingResiMap.get(categoryColumnName);
String newCategoryValue = newResiMap.get(categoryColumnName);
if (StringUtils.isBlank(oldCategoryValue)) oldCategoryValue = "0";
if (StringUtils.isBlank(newCategoryValue)) newCategoryValue = "0";
if ("1".equals(oldCategoryValue) || "1".equals(newCategoryValue)) {
// 新旧值有一个为1,则放入
existingResiCategories.put(categoryColumnName, oldCategoryValue);
newResiCategories.put(categoryColumnName, newCategoryValue);
}
// if ("1".equals(oldCategoryValue)) {
// existingResiCategories.put(categoryColumnName, oldCategoryValue);
// }
//
// if ("1".equals(newCategoryValue)) {
// newResiCategories.put(categoryColumnName, newCategoryValue);
// }
}
ResiImportCategoryData oldOne = new ResiImportCategoryData(
existingResiMap.get("ID"),
existingResiMap.get("AGENCY_ID"),
existingResiMap.get("GRID_ID"),
existingResiMap.get("VILLAGE_ID"),
existingResiMap.get("BUILD_ID"),
existingResiMap.get("UNIT_ID"),
existingResiMap.get("HOME_ID"),
existingResiCategories);
ResiImportCategoryData newOne = new ResiImportCategoryData(
newResiMap.get("ID"),
newResiMap.get("AGENCY_ID"),
newResiMap.get("GRID_ID"),
newResiMap.get("VILLAGE_ID"),
newResiMap.get("BUILD_ID"),
newResiMap.get("UNIT_ID"),
newResiMap.get("HOME_ID"),
newResiCategories);
return new ResiImportChangedData(oldOne, newOne);
}
/**
* 类别变更的居民信息封装只要发生变化0或者1都要保存
* 1.
* @param existingResiMap
* @param newResiMap
* @return
*/
private ResiImportChangedData getResiImportCategoryChangedData(Map<String, String> existingResiMap, Map<String, String> newResiMap) {
// 发生变化的类别列明
HashMap<String, String> oldCategories = new HashMap<>();
HashMap<String, String> newCategories = new HashMap<>();
Set<String> categoryColumnNames = resiCategoryColumnNameAndLabel.get().keySet();
for (String categoryColumnName : categoryColumnNames) {
String existingColumnValue = existingResiMap.get(categoryColumnName);
String newColumnValue = newResiMap.get(categoryColumnName);
// 先转为0再对比
if (StringUtils.isBlank(existingColumnValue)) existingColumnValue = "0";
if (StringUtils.isBlank(newColumnValue)) newColumnValue = "0";
if (!existingColumnValue.equals(newColumnValue)) {
oldCategories.put(categoryColumnName, existingColumnValue);
newCategories.put(categoryColumnName, newColumnValue);
}
// if (StringUtils.isAllBlank(existingColumnValue, newColumnValue)) {
// // 都为空,则没发生变化
// continue;
// } else {
//
// }
}
if (oldCategories.size() == 0) {
return null;
}
ResiImportCategoryData oldOne = new ResiImportCategoryData( ResiImportCategoryData oldOne = new ResiImportCategoryData(
existingResiMap.get("ID"), existingResiMap.get("ID"),
existingResiMap.get("AGENCY_ID"), existingResiMap.get("AGENCY_ID"),
@ -1222,7 +1172,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
existingResiMap.get("BUILD_ID"), existingResiMap.get("BUILD_ID"),
existingResiMap.get("UNIT_ID"), existingResiMap.get("UNIT_ID"),
existingResiMap.get("HOME_ID"), existingResiMap.get("HOME_ID"),
oldCategories); new HashMap<>());
ResiImportCategoryData newOne = new ResiImportCategoryData( ResiImportCategoryData newOne = new ResiImportCategoryData(
newResiMap.get("ID"), newResiMap.get("ID"),
@ -1232,7 +1182,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
newResiMap.get("BUILD_ID"), newResiMap.get("BUILD_ID"),
newResiMap.get("UNIT_ID"), newResiMap.get("UNIT_ID"),
newResiMap.get("HOME_ID"), newResiMap.get("HOME_ID"),
newCategories); new HashMap<>());
return new ResiImportChangedData(oldOne, newOne); return new ResiImportChangedData(oldOne, newOne);
} }
@ -1241,20 +1191,19 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
* *
* @param icResiId 居民id * @param icResiId 居民id
* @param columnName 该项信息在主表的列名 * @param columnName 该项信息在主表的列名
* @param existResiInfoMap 已存在的居民信息map
*/ */
private void saveSubTableInfoToCategoryChangedResiCache(String icResiId, String columnName, Map<String, String> resiInfoMap) { private void saveSubTableInfoToCategoryChangedResiCache(String icResiId, String columnName, Map<String, String> existResiInfoMap) {
ResiImportResiCategoryChangedCache cc = newlyOrChangedResi.get(); ResiImportResiCategoryChangedCache cc = newlyOrChangedResi.get();
// Map<String, ResiImportCategoryData> newResis = cc.getNewResis();
Map<String, ResiImportChangedData> categoryChangedResis = cc.getCategoryChangedResis(); Map<String, ResiImportChangedData> categoryChangedResis = cc.getCategoryChangedResis();
Map<String, ResiImportChangedData> transferedResis = cc.getTransferedResis(); Map<String, ResiImportChangedData> transferedResis = cc.getTransferedResis();
// ResiImportCategoryData newResi = newResis.get(icResiId);
// 为新增居民
String userCateRedisKey = RedisKeys.icResiImportResiCategoryKey(newlyOrChangedResi.get().getImportTag(), "add", icResiId); String userCateRedisKey = RedisKeys.icResiImportResiCategoryKey(newlyOrChangedResi.get().getImportTag(), "add", icResiId);
Map < String, Object > addUserMap = redisUtils.hGetAll(userCateRedisKey); Map<String, Object> addUserMap = redisUtils.hGetAll(userCateRedisKey);
if (addUserMap != null && addUserMap.size() > 0) { if (addUserMap != null && addUserMap.size() > 0) {
//说明是新增居民
ResiImportCategoryData newResiCateData = ConvertUtils.mapToEntity(addUserMap, ResiImportCategoryData.class); ResiImportCategoryData newResiCateData = ConvertUtils.mapToEntity(addUserMap, ResiImportCategoryData.class);
newResiCateData.getCategories().put(columnName, "1"); newResiCateData.getCategories().put(columnName, "1");
redisUtils.hMSet(userCateRedisKey, BeanUtil.beanToMap(newResiCateData)); redisUtils.hMSet(userCateRedisKey, BeanUtil.beanToMap(newResiCateData));
@ -1262,47 +1211,53 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
return; return;
} }
ResiImportChangedData categoryChangedData = categoryChangedResis.get(icResiId); String oldValue = existResiInfoMap.get(columnName);
if (categoryChangedData != null) {
// 说明是类别变更的居民
Map<String, String> oldCategories = categoryChangedData.getOldData().getCategories();
Map<String, String> newCategories = categoryChangedData.getNewData().getCategories();
if ("0".equals(resiInfoMap.get(columnName))) {
oldCategories.put(columnName, "0");
newCategories.put(columnName, "1");
}
return;
}
// 为发生调动的居民。不管标志相同与否都往里面put
ResiImportChangedData transferedData = transferedResis.get(icResiId); ResiImportChangedData transferedData = transferedResis.get(icResiId);
if (transferedData != null) { if (transferedData != null) {
// 说明是发生调动的居民,新数据值为1
Map<String, String> newCategories = transferedData.getNewData().getCategories(); Map<String, String> newCategories = transferedData.getNewData().getCategories();
Map<String, String> oldCategories = transferedData.getOldData().getCategories(); Map<String, String> oldCategories = transferedData.getOldData().getCategories();
String oldValue = resiInfoMap.get(columnName); oldCategories.put(columnName, oldValue);
if (StringUtils.isBlank(oldValue)) {
oldValue = "0";
}
oldCategories.put(columnName, oldValue);
newCategories.put(columnName, "1"); newCategories.put(columnName, "1");
return; return;
} }
if ("0".equals(resiInfoMap.get(columnName))) { // 类别变更的居民。不管标志相同与否都往里面put
// 非新增,非调动,变更的数据不在主sheet中,而在附sheet中。看是否发生人员类型变更(从0->1) ResiImportChangedData categoryChangedData = categoryChangedResis.get(icResiId);
ResiImportCategoryData oldOne = new ResiImportCategoryData(); if (categoryChangedData != null) {
ResiImportCategoryData newOne = new ResiImportCategoryData(); Map<String, String> oldCategories = categoryChangedData.getOldData().getCategories();
Map<String, String> newCategories = categoryChangedData.getNewData().getCategories();
oldOne.getCategories().put(columnName, "0"); oldCategories.put(columnName, oldValue);
newOne.getCategories().put(columnName, "1"); newCategories.put(columnName, "1");
ResiImportChangedData cd = new ResiImportChangedData(oldOne, newOne); return;
categoryChangedResis.put(icResiId, cd);
} }
// 非新增,非调动,可能是类别变更的,只是主表中没有数据,只有附加表的数据
ResiImportCategoryData oldOne = new ResiImportCategoryData();
ResiImportCategoryData newOne = new ResiImportCategoryData();
oldOne.setAgencyId(existResiInfoMap.get("AGENCY_ID"));
oldOne.setGridId(existResiInfoMap.get("GRID_ID"));
oldOne.setVillageId(existResiInfoMap.get("VILLAGE_ID"));
oldOne.setBuildId(existResiInfoMap.get("BUILD_ID"));
oldOne.setUnitId(existResiInfoMap.get("UNIT_ID"));
oldOne.setHomeId(existResiInfoMap.get("HOME_ID"));
oldOne.getCategories().put(columnName, oldValue);
newOne.setAgencyId(existResiInfoMap.get("AGENCY_ID"));
newOne.setGridId(existResiInfoMap.get("GRID_ID"));
newOne.setVillageId(existResiInfoMap.get("VILLAGE_ID"));
newOne.setBuildId(existResiInfoMap.get("BUILD_ID"));
newOne.setUnitId(existResiInfoMap.get("UNIT_ID"));
newOne.setHomeId(existResiInfoMap.get("HOME_ID"));
newOne.getCategories().put(columnName, "1");
ResiImportChangedData cd = new ResiImportChangedData(oldOne, newOne);
categoryChangedResis.put(icResiId, cd);
} }
/** /**
@ -1322,7 +1277,9 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
Map<String, String> oldCategories = oldData.getCategories(); Map<String, String> oldCategories = oldData.getCategories();
Map<String, String> newCategories = newData.getCategories(); Map<String, String> newCategories = newData.getCategories();
fillResiSubCategoryInfo4TransferAndCategoryChange(oldData, newData); Map<String, String> resiInfoMap = icResiUserDao.selectResiInfoMap(null, resiId);
fillResiSubCategoryInfo4TransferAndCategoryChange(oldData, newData, resiInfoMap);
StringBuilder sbBefore = new StringBuilder(""); StringBuilder sbBefore = new StringBuilder("");
StringBuilder sbAfter = new StringBuilder(""); StringBuilder sbAfter = new StringBuilder("");
@ -1339,23 +1296,19 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
} }
// 生成changeRecord并存入 // 生成changeRecord并存入
IcResiUserEntity resiInfo = icResiUserDao.selectById(resiId); IcUserChangeRecordEntity changeRecord = fillChangeRecord(loginUserUtil.getLoginUserCustomerId(), resiId, resiInfoMap.get("NAME"), null, loginUserUtil.getLoginUserId(),
IcUserChangeRecordEntity changeRecord = fillChangeRecord(loginUserUtil.getLoginUserCustomerId(), resiId, resiInfo.getName(), null, loginUserUtil.getLoginUserId(),
operator.getRealName() , descBefore, descAfter, "category", "类别", "", now); operator.getRealName() , descBefore, descAfter, "category", "类别", "", now);
icUserChangeRecordDao.insert(changeRecord); icUserChangeRecordDao.insert(changeRecord);
for (Map.Entry<String, String> columnEntry : newCategories.entrySet()) { for (Map.Entry<String, String> columnEntry : newCategories.entrySet()) {
String newValue = columnEntry.getValue(); String newValue = columnEntry.getValue();
String oldValue = oldCategories.get(columnEntry.getKey()); String oldValue = oldCategories.get(columnEntry.getKey());
oldValue = oldValue == null ? "0" : oldValue;
if (newValue.equals(oldValue)) { if (newValue.equals(oldValue)) {
// 新旧值相等,跳过 // 新旧值相等,跳过
continue; continue;
} }
int value = newValue.equals("1") && oldValue.equals("0") ? 1 : -1;
String agencyId = newData.getAgencyId(); String agencyId = newData.getAgencyId();
String gridId = newData.getGridId(); String gridId = newData.getGridId();
String villageId = newData.getVillageId(); String villageId = newData.getVillageId();
@ -1363,17 +1316,9 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
String unitId = newData.getUnitId(); String unitId = newData.getUnitId();
String homeId = newData.getHomeId(); String homeId = newData.getHomeId();
// 如果只有附加表信息,但是没有主表信息,并且附加表基础信息很多空着的,此处需要从主表获取了然后填充一下该信息
if (agencyId == null) agencyId = resiInfo.getAgencyId();
if (gridId == null) gridId = resiInfo.getGridId();
if (villageId == null) villageId = resiInfo.getVillageId();
if (buildId == null) buildId = resiInfo.getBuildId();
if (unitId == null) unitId = resiInfo.getUnitId();
if (homeId == null) homeId = resiInfo.getHomeId();
IcUserChangeDetailedEntity newDetail = fillChangeDetail(loginUserUtil.getLoginUserCustomerId(), resiId, changeRecord.getId(), agencyId, IcUserChangeDetailedEntity newDetail = fillChangeDetail(loginUserUtil.getLoginUserCustomerId(), resiId, changeRecord.getId(), agencyId,
gridId, villageId, buildId, unitId, gridId, villageId, buildId, unitId,
homeId, "category", "类别", columnEntry.getKey(), value, resiInfo.getPids()); homeId, "category", "类别", columnEntry.getKey(), 1, resiInfoMap.get("PIDS"));
icUserChangeDetailedDao.insert(newDetail); icUserChangeDetailedDao.insert(newDetail);
} }
@ -1431,10 +1376,10 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
icUserChangeRecordDao.insert(changeRecord); icUserChangeRecordDao.insert(changeRecord);
// 插入changeDetail // 插入changeDetail
for (Map.Entry<String, String> column : newResiInfoObj.getCategories().entrySet()) { for (Map.Entry<String, String> mainTableColumn : newResiInfoObj.getCategories().entrySet()) {
IcUserChangeDetailedEntity changedetail = fillChangeDetail(loginUserUtil.getLoginUserCustomerId(), newResiInfoObj.getResiId(), changeRecord.getId(), newResiInfoObj.getAgencyId(), IcUserChangeDetailedEntity changedetail = fillChangeDetail(loginUserUtil.getLoginUserCustomerId(), newResiInfoObj.getResiId(), changeRecord.getId(), newResiInfoObj.getAgencyId(),
newResiInfoObj.getGridId(), newResiInfoObj.getVillageId(), newResiInfoObj.getBuildId(), newResiInfoObj.getUnitId(), newResiInfoObj.getGridId(), newResiInfoObj.getVillageId(), newResiInfoObj.getBuildId(), newResiInfoObj.getUnitId(),
newResiInfoObj.getHomeId(), "add", "新增", column.getKey(), 1, resiInfo.getPids()); newResiInfoObj.getHomeId(), "add", "新增", mainTableColumn.getKey(), 1, resiInfo.getPids());
icUserChangeDetailedDao.insert(changedetail); icUserChangeDetailedDao.insert(changedetail);
changedetail = null; changedetail = null;
@ -1457,11 +1402,15 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
for (Map.Entry<String, ResiImportChangedData> resi : transferedResis.entrySet()) { for (Map.Entry<String, ResiImportChangedData> resi : transferedResis.entrySet()) {
String resiId = resi.getKey(); String resiId = resi.getKey();
Map<String, String> resiInfoMap = icResiUserDao.selectResiInfoMap(null, resiId);
String resiName = resiInfoMap.get("NAME");
String pids = resiInfoMap.get("PIDS");
ResiImportCategoryData oldData = resi.getValue().getOldData(); ResiImportCategoryData oldData = resi.getValue().getOldData();
ResiImportCategoryData newData = resi.getValue().getNewData(); ResiImportCategoryData newData = resi.getValue().getNewData();
// 把附加表的旧数据填充到新数据中 // 把附加表的旧数据填充到新数据中
fillResiSubCategoryInfo4TransferAndCategoryChange(oldData, newData); fillResiSubCategoryInfo4TransferAndCategoryChange(oldData, newData, resiInfoMap);
StringBuilder sbBefore = new StringBuilder(); StringBuilder sbBefore = new StringBuilder();
StringBuilder sbAfter = new StringBuilder(); StringBuilder sbAfter = new StringBuilder();
@ -1472,7 +1421,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
String oldBuildId = oldData.getBuildId(); String oldBuildId = oldData.getBuildId();
String oldUnitId = oldData.getUnitId(); String oldUnitId = oldData.getUnitId();
String oldHomeId = oldData.getHomeId(); String oldHomeId = oldData.getHomeId();
//
String newAgencyId = newData.getAgencyId(); String newAgencyId = newData.getAgencyId();
String newGridId = newData.getGridId(); String newGridId = newData.getGridId();
String newvillageId = newData.getVillageId(); String newvillageId = newData.getVillageId();
@ -1482,22 +1431,22 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
IcResiUserOrgMsgFormDTO oldOrgFormDTO = new IcResiUserOrgMsgFormDTO(); IcResiUserOrgMsgFormDTO oldOrgFormDTO = new IcResiUserOrgMsgFormDTO();
oldOrgFormDTO.setCustomerId(customerId); oldOrgFormDTO.setCustomerId(customerId);
oldOrgFormDTO.setAgencyId(oldData.getAgencyId()); oldOrgFormDTO.setAgencyId(oldAgencyId);
oldOrgFormDTO.setGridId(oldData.getGridId()); oldOrgFormDTO.setGridId(oldGridId);
oldOrgFormDTO.setNeighborHoodId(oldData.getVillageId()); oldOrgFormDTO.setNeighborHoodId(oldvillageId);
oldOrgFormDTO.setBuildingId(oldData.getBuildId()); oldOrgFormDTO.setBuildingId(oldBuildId);
oldOrgFormDTO.setBuildingUnitId(oldData.getUnitId()); oldOrgFormDTO.setBuildingUnitId(oldUnitId);
oldOrgFormDTO.setHouseId(oldData.getHomeId()); oldOrgFormDTO.setHouseId(oldHomeId);
Result<IcResiUserOrgMsgResultDTO> oldOrgInfoRst = govOrgOpenFeignClient.icResiUserOrgMsg(oldOrgFormDTO); Result<IcResiUserOrgMsgResultDTO> oldOrgInfoRst = govOrgOpenFeignClient.icResiUserOrgMsg(oldOrgFormDTO);
IcResiUserOrgMsgFormDTO newOrgInfo = new IcResiUserOrgMsgFormDTO(); IcResiUserOrgMsgFormDTO newOrgInfo = new IcResiUserOrgMsgFormDTO();
newOrgInfo.setCustomerId(customerId); newOrgInfo.setCustomerId(customerId);
newOrgInfo.setAgencyId(newData.getAgencyId()); newOrgInfo.setAgencyId(newAgencyId);
newOrgInfo.setGridId(newData.getGridId()); newOrgInfo.setGridId(newGridId);
newOrgInfo.setNeighborHoodId(newData.getVillageId()); newOrgInfo.setNeighborHoodId(newvillageId);
newOrgInfo.setBuildingId(newData.getBuildId()); newOrgInfo.setBuildingId(newBuildId);
newOrgInfo.setBuildingUnitId(newData.getUnitId()); newOrgInfo.setBuildingUnitId(newUnitId);
newOrgInfo.setHouseId(newData.getHomeId()); newOrgInfo.setHouseId(newHomeId);
Result<IcResiUserOrgMsgResultDTO> newOrgInfoRst = govOrgOpenFeignClient.icResiUserOrgMsg(newOrgInfo); Result<IcResiUserOrgMsgResultDTO> newOrgInfoRst = govOrgOpenFeignClient.icResiUserOrgMsg(newOrgInfo);
IcResiUserOrgMsgResultDTO oldOrg = null; IcResiUserOrgMsgResultDTO oldOrg = null;
@ -1560,16 +1509,14 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
} }
} }
IcResiUserEntity resiInfo = icResiUserDao.selectById(resiId);
// 保存 transferRecord // 保存 transferRecord
IcUserTransferRecordEntity transferRecord = fillTransferRecord(resiInfo, operator, customerId, oldAgencyId, oldGridId, IcUserTransferRecordEntity transferRecord = fillTransferRecord(resiId, resiName, operator, customerId,
oldvillageId, oldBuildId, oldUnitId, oldHomeId, customerId, oldAgencyId, oldGridId, oldvillageId, oldBuildId, oldUnitId, oldHomeId, customerId,
newAgencyId, newGridId, newvillageId, newBuildId, newUnitId, newHomeId, oldOrg, newOrg); newAgencyId, newGridId, newvillageId, newBuildId, newUnitId, newHomeId, oldOrg, newOrg);
icUserTransferRecordDao.insert(transferRecord); icUserTransferRecordDao.insert(transferRecord);
// 保存 调动changeRecord // 保存 调动changeRecord
IcUserChangeRecordEntity transferChangeRecord = fillChangeRecord(customerId, resiId, resiInfo.getName(), transferRecord.getId(), operator.getStaffId(), IcUserChangeRecordEntity transferChangeRecord = fillChangeRecord(customerId, resiId, resiName, transferRecord.getId(), operator.getStaffId(),
operator.getRealName(), sbBefore.toString(), sbAfter.toString(), "transfer", "调动", "", now); operator.getRealName(), sbBefore.toString(), sbAfter.toString(), "transfer", "调动", "", now);
icUserChangeRecordDao.insert(transferChangeRecord); icUserChangeRecordDao.insert(transferChangeRecord);
@ -1578,17 +1525,14 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
sbAfter = new StringBuilder(); sbAfter = new StringBuilder();
// 过滤居民类别的key并集 // 过滤居民类别的key并集
Set<String> bingji = new HashSet<>(); // Set<String> bingji = new HashSet<>();
newData.getCategories().keySet().forEach((k) -> bingji.add(k)); // newData.getCategories().keySet().forEach((k) -> bingji.add(k));
oldData.getCategories().keySet().forEach((k) -> bingji.add(k)); // oldData.getCategories().keySet().forEach((k) -> bingji.add(k));
for (String category : bingji) { for (String category : newData.getCategories().keySet()) {
String newColumnValue = newData.getCategories().get(category); String newColumnValue = newData.getCategories().get(category);
String oldColumnValue = oldData.getCategories().get(category); String oldColumnValue = oldData.getCategories().get(category);
if (oldColumnValue == null) oldColumnValue = "0";
if (newColumnValue == null) newColumnValue = "0";
if (newColumnValue.equals(oldColumnValue)) { if (newColumnValue.equals(oldColumnValue)) {
continue; continue;
} }
@ -1606,7 +1550,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
String categoryDescAfter = sbAfter.toString(); String categoryDescAfter = sbAfter.toString();
if (!StringUtils.isAllBlank(categoryDescBefore, categoryDescAfter)) { if (!StringUtils.isAllBlank(categoryDescBefore, categoryDescAfter)) {
IcUserChangeRecordEntity categoryChangeRecord = fillChangeRecord(customerId, resiId, resiInfo.getName(), transferRecord.getId(), operator.getStaffId(), IcUserChangeRecordEntity categoryChangeRecord = fillChangeRecord(customerId, resiId, resiName, transferRecord.getId(), operator.getStaffId(),
operator.getRealName(), categoryDescBefore, categoryDescAfter , "category", "类别", "", now); operator.getRealName(), categoryDescBefore, categoryDescAfter , "category", "类别", "", now);
icUserChangeRecordDao.insert(categoryChangeRecord); icUserChangeRecordDao.insert(categoryChangeRecord);
} }
@ -1619,9 +1563,9 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
// 之前是这个类型,那这个类型需要-1 // 之前是这个类型,那这个类型需要-1
String oldValue = oldCategories.getValue(); String oldValue = oldCategories.getValue();
if ("1".equals(oldValue)) { if ("1".equals(oldValue)) {
IcUserChangeDetailedEntity changeDetail = fillChangeDetail(customerId, resiId, transferChangeRecord.getId(), oldData.getAgencyId(), IcUserChangeDetailedEntity changeDetail = fillChangeDetail(customerId, resiId, transferChangeRecord.getId(), oldAgencyId,
oldData.getGridId(), oldData.getVillageId(), oldData.getBuildId(), oldData.getUnitId(), oldGridId, oldvillageId, oldBuildId, oldUnitId,
oldData.getHomeId(), transferChangeRecord.getType(), transferChangeRecord.getTypeName(), key, -1, resiInfo.getPids()); oldHomeId, transferChangeRecord.getType(), transferChangeRecord.getTypeName(), key, -1, pids);
icUserChangeDetailedDao.insert(changeDetail); icUserChangeDetailedDao.insert(changeDetail);
} }
} }
@ -1633,9 +1577,9 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
// 现在是这个类型,这个类型要+1 // 现在是这个类型,这个类型要+1
if ("1".equals(newValue)) { if ("1".equals(newValue)) {
IcUserChangeDetailedEntity changeDetail = fillChangeDetail(customerId, resiId, transferChangeRecord.getId(), newData.getAgencyId(), IcUserChangeDetailedEntity changeDetail = fillChangeDetail(customerId, resiId, transferChangeRecord.getId(), newAgencyId,
newData.getGridId(), newData.getVillageId(), newData.getBuildId(), newData.getUnitId(), newGridId, newvillageId, newBuildId, newUnitId,
newData.getHomeId(), transferChangeRecord.getType(), transferChangeRecord.getTypeName(), key, 1, resiInfo.getPids()); newHomeId, transferChangeRecord.getType(), transferChangeRecord.getTypeName(), key, 1, pids);
icUserChangeDetailedDao.insert(changeDetail); icUserChangeDetailedDao.insert(changeDetail);
} }
} }
@ -1648,18 +1592,43 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
* @param oldData * @param oldData
* @param newData * @param newData
*/ */
private void fillResiSubCategoryInfo4TransferAndCategoryChange(ResiImportCategoryData oldData, ResiImportCategoryData newData) { private void fillResiSubCategoryInfo4TransferAndCategoryChange(ResiImportCategoryData oldData, ResiImportCategoryData newData, Map<String, String> resiInfoMap) {
for (String category : oldData.getCategories().keySet()) {
String newValue = newData.getCategories().get(category); Map<String, String> oldCates = oldData.getCategories();
String oldValue = oldData.getCategories().get(category); Map<String, String> newCates = newData.getCategories();
// 如果新数据中没有或者是0,并且是附加表信息,并且旧数据是1, 拿旧数据的过来 for (IcResiUserTableEnum c : IcResiUserTableEnum.values()) {
if ((newValue == null || "0".equals(newValue)) // 主表,跳过
&& "1".equals(oldValue) String mainTableColumnName = c.getMainTableFlagColumnName();
&& IcResiUserTableEnum.existsColumn(category)) { if (mainTableColumnName == null) {
newData.getCategories().put(category, "1"); return;
}
// 不为空,说明本次导入含有该居民的类别信息,不需要补充
String oldValue = oldCates.get(mainTableColumnName);
if (StringUtils.isNotBlank(oldValue)) {
return;
}
// 本次导入不含有该居民类别信息,db中存储的数据,如果是1,newValue和oldValue都应该为1
oldValue = resiInfoMap.get(mainTableColumnName);
if ("1".equals(oldValue)) {
oldCates.put(mainTableColumnName, oldValue);
newCates.put(mainTableColumnName, oldValue);
} }
} }
// for (String category : oldData.getCategories().keySet()) {
// String newValue = newData.getCategories().get(category);
// String oldValue = oldData.getCategories().get(category);
//
// // 如果新数据中没有或者是0,并且是附加表信息,并且旧数据是1, 拿旧数据的过来
// if ((newValue == null || "0".equals(newValue))
// && "1".equals(oldValue)
// && IcResiUserTableEnum.existsColumn(category)) {
// newData.getCategories().put(category, "1");
// }
// }
} }
/** /**
@ -1739,7 +1708,6 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
/** /**
* 填充调动记录 * 填充调动记录
* @param resiInfo
* @param operator * @param operator
* @param oldCustomerId * @param oldCustomerId
* @param oldAgencyId * @param oldAgencyId
@ -1757,15 +1725,15 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
* @param newHomeId * @param newHomeId
* @return * @return
*/ */
private IcUserTransferRecordEntity fillTransferRecord(IcResiUserEntity resiInfo, CustomerStaffInfoCacheResult operator, String oldCustomerId, String oldAgencyId, String oldGridId, private IcUserTransferRecordEntity fillTransferRecord(String resiId, String resiName, CustomerStaffInfoCacheResult operator, String oldCustomerId, String oldAgencyId, String oldGridId,
String oldVillageId, String oldBuildId, String oldUnitId, String oldHomeId, String newCustomerId, String oldVillageId, String oldBuildId, String oldUnitId, String oldHomeId, String newCustomerId,
String newAgencyId, String newGridId, String newVillageId, String newBuildId, String newUnitId, String newAgencyId, String newGridId, String newVillageId, String newBuildId, String newUnitId,
String newHomeId, IcResiUserOrgMsgResultDTO oldOrg, IcResiUserOrgMsgResultDTO newOrg) { String newHomeId, IcResiUserOrgMsgResultDTO oldOrg, IcResiUserOrgMsgResultDTO newOrg) {
IcUserTransferRecordEntity recordEntity = new IcUserTransferRecordEntity(); IcUserTransferRecordEntity recordEntity = new IcUserTransferRecordEntity();
recordEntity.setIcUserId(resiInfo.getId()); recordEntity.setIcUserId(resiId);
recordEntity.setOperatorId(operator.getStaffId()); recordEntity.setOperatorId(operator.getStaffId());
recordEntity.setIcUserName(resiInfo.getName()); recordEntity.setIcUserName(resiName);
recordEntity.setOperatorName(operator.getRealName()); recordEntity.setOperatorName(operator.getRealName());
recordEntity.setOldCustomerId(oldCustomerId); recordEntity.setOldCustomerId(oldCustomerId);
recordEntity.setOldAgencyId(oldAgencyId); recordEntity.setOldAgencyId(oldAgencyId);

6
epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml

@ -552,8 +552,12 @@
<select id="selectResiInfoMap" resultType="java.util.Map"> <select id="selectResiInfoMap" resultType="java.util.Map">
select * from ic_resi_user select * from ic_resi_user
<where> <where>
DEL_FLAG='0'
<if test="idCard != null and idCard != ''"> <if test="idCard != null and idCard != ''">
ID_CARD=#{idCard} AND ID_CARD=#{idCard}
</if>
<if test="resiId != null and resiId != ''">
AND ID=#{resiId}
</if> </if>
</where> </where>
</select> </select>

Loading…
Cancel
Save