|
|
@ -3,8 +3,10 @@ package com.epmet.service.impl; |
|
|
|
import cn.afterturn.easypoi.excel.ExcelExportUtil; |
|
|
|
import cn.afterturn.easypoi.excel.annotation.Excel; |
|
|
|
import cn.afterturn.easypoi.excel.entity.ExportParams; |
|
|
|
import cn.hutool.core.bean.BeanUtil; |
|
|
|
import com.alibaba.excel.EasyExcel; |
|
|
|
import com.alibaba.excel.EasyExcelFactory; |
|
|
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker; |
|
|
|
import com.epmet.bean.ResiImportCategoryData; |
|
|
|
import com.epmet.bean.ResiImportResiCategoryChangedCache; |
|
|
|
import com.epmet.bean.ResiImportChangedData; |
|
|
@ -16,9 +18,13 @@ import com.epmet.commons.tools.exception.EpmetErrorCode; |
|
|
|
import com.epmet.commons.tools.exception.ExceptionUtils; |
|
|
|
import com.epmet.commons.tools.exception.RenException; |
|
|
|
import com.epmet.commons.tools.feign.ResultDataResolver; |
|
|
|
import com.epmet.commons.tools.redis.RedisKeys; |
|
|
|
import com.epmet.commons.tools.redis.RedisUtils; |
|
|
|
import com.epmet.commons.tools.redis.common.CustomerStaffRedis; |
|
|
|
import com.epmet.commons.tools.security.user.LoginUserUtil; |
|
|
|
import com.epmet.commons.tools.utils.ConvertUtils; |
|
|
|
import com.epmet.commons.tools.utils.Result; |
|
|
|
import com.epmet.constant.ImportTaskConstants; |
|
|
|
import com.epmet.dao.IcResiUserDao; |
|
|
|
import com.epmet.dao.IcUserChangeDetailedDao; |
|
|
|
import com.epmet.dao.IcUserChangeRecordDao; |
|
|
@ -31,7 +37,7 @@ import com.epmet.entity.IcUserChangeDetailedEntity; |
|
|
|
import com.epmet.entity.IcUserChangeRecordEntity; |
|
|
|
import com.epmet.entity.IcUserTransferRecordEntity; |
|
|
|
import com.epmet.enums.IcResiUserTableEnum; |
|
|
|
import com.epmet.excel.handler.DynamicEasyExcelListener; |
|
|
|
import com.epmet.excel.handler.IcResiImportDynamicExcelListener; |
|
|
|
import com.epmet.feign.EpmetAdminOpenFeignClient; |
|
|
|
import com.epmet.feign.EpmetUserOpenFeignClient; |
|
|
|
import com.epmet.feign.GovOrgOpenFeignClient; |
|
|
@ -67,7 +73,6 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
|
|
|
|
// 错误和跳过excel行暂存
|
|
|
|
public static final ThreadLocal<Map<String, List<ErrorRow>>> errorRows = new ThreadLocal<>(); |
|
|
|
public static final ThreadLocal<Map<String, List<SkipedRow>>> skipedRows = new ThreadLocal<>(); |
|
|
|
|
|
|
|
/** |
|
|
|
* 导入的居民中,新增或者变动的居民 |
|
|
@ -118,6 +123,12 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
@Autowired |
|
|
|
private UserService userService; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private RedisUtils redisUtils; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private ImportTaskService importTaskService; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* 字表中不需要的列 |
|
|
@ -204,11 +215,13 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
|
|
|
|
/** |
|
|
|
* 导入居民信息 |
|
|
|
* 导入主表和所有子表信息 |
|
|
|
* @return |
|
|
|
* @param importTaskId 导入任务id |
|
|
|
* @param formItemList item列表 |
|
|
|
* @param excelPathName excel缓存路径 |
|
|
|
* @param response 响应对象 |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public void importIcResiInfoFromExcel(List<FormItemResult> formItemList, String excelPathName, HttpServletResponse response) { |
|
|
|
public void importIcResiInfoFromExcel(String importTaskId, List<FormItemResult> formItemList, String excelPathName, HttpServletResponse response) { |
|
|
|
|
|
|
|
String loginUserId = loginUserUtil.getLoginUserId(); |
|
|
|
String loginUserApp = loginUserUtil.getLoginUserApp(); |
|
|
@ -227,12 +240,14 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
CustomerAgencyDTO agencyInfo = getResultDataOrThrowsException(govOrgOpenFeignClient.getAgencyById(currUserAgencyId), ServiceConstant.GOV_ORG_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), null, null); |
|
|
|
String customerId = agencyInfo.getCustomerId(); |
|
|
|
|
|
|
|
boolean hasErrorRows = false; |
|
|
|
|
|
|
|
try { |
|
|
|
initImportThreadLocal(customerId); |
|
|
|
|
|
|
|
// 上传主表信息
|
|
|
|
importIcResiBaseInfoFromExcel(formItemList,excelPathName, IcResiUserTableEnum.IC_RESI_USER.getSheetNo(), IcResiUserTableEnum.IC_RESI_USER.getHeadRowNo(), |
|
|
|
currUserAgencyId, agencyInfo.getPids(), loginUserId, IcResiUserTableEnum.IC_RESI_USER.getTableName()); |
|
|
|
currUserAgencyId, agencyInfo.getPids(), loginUserId, IcResiUserTableEnum.IC_RESI_USER.getTableName(), customerId); |
|
|
|
|
|
|
|
// 上传附表信息
|
|
|
|
for (IcResiUserTableEnum sheet : IcResiUserTableEnum.values()) { |
|
|
@ -253,22 +268,50 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
} |
|
|
|
|
|
|
|
// 执行人员类别变更记录
|
|
|
|
Map<String, ResiImportCategoryData> newResis = newlyOrChangedResi.get().getNewResis(); |
|
|
|
// Map<String, ResiImportCategoryData> newResis = newlyOrChangedResi.get().getNewResis();
|
|
|
|
Map<String, ResiImportChangedData> categoryChangedResis = newlyOrChangedResi.get().getCategoryChangedResis(); |
|
|
|
Map<String, ResiImportChangedData> transferedResis = newlyOrChangedResi.get().getTransferedResis(); |
|
|
|
|
|
|
|
log.info("类别变动居民数:{}", categoryChangedResis.size()); |
|
|
|
log.info("调动居民数:{}", transferedResis.size()); |
|
|
|
|
|
|
|
//保存调动或者变更记录
|
|
|
|
saveNewResiCategoryRecord(newResis); |
|
|
|
saveNewResiCategoryRecord(); |
|
|
|
saveResiCategoryChangedRecord(categoryChangedResis); |
|
|
|
saveTransferedResiRecord(transferedResis); |
|
|
|
|
|
|
|
hasErrorRows = hasErrorRows(); |
|
|
|
|
|
|
|
try { |
|
|
|
downLoadResults(response); |
|
|
|
} catch (IOException e) { |
|
|
|
// todo 做了导入记录之后,这里就要判断,没有错误就不生成文件了
|
|
|
|
downLoadResults(hasErrorRows, response); |
|
|
|
} catch (Exception e) { |
|
|
|
log.error("【导入IC居民附加信息】下载导入结果信息失败:{}", ExceptionUtils.getErrorStackTrace(e)); |
|
|
|
} |
|
|
|
|
|
|
|
// 更新上传记录
|
|
|
|
if (hasErrorRows) { |
|
|
|
importTaskService.finish(importTaskId, ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL, loginUserId, |
|
|
|
null, null); |
|
|
|
} else { |
|
|
|
importTaskService.finish(importTaskId, ImportTaskConstants.PROCESS_STATUS_FINISHED_SUCCESS, loginUserId, |
|
|
|
null, null); |
|
|
|
} |
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
// 抛出,让外层捕获处理,记录
|
|
|
|
throw e; |
|
|
|
} finally { |
|
|
|
skipedRows.remove(); |
|
|
|
// 清空rediskey
|
|
|
|
try { |
|
|
|
String importTag = newlyOrChangedResi.get().getImportTag(); |
|
|
|
redisUtils.deleteByPattern(RedisKeys.icResiImportBaseKey(importTag).concat("*")); |
|
|
|
} catch (Exception e) { |
|
|
|
String errorMsg = ExceptionUtils.getErrorStackTrace(e); |
|
|
|
log.error("【导入IC居民附加信息】清空redis 类别缓存出错:{}", errorMsg); |
|
|
|
} |
|
|
|
|
|
|
|
// 清空线程变量
|
|
|
|
errorRows.remove(); |
|
|
|
newlyOrChangedResi.remove(); |
|
|
|
resiCategoryColumnNameAndLabel.remove(); |
|
|
@ -276,16 +319,35 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 是否有错误行 |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private Boolean hasErrorRows() { |
|
|
|
boolean hasError = false; |
|
|
|
Map<String, List<ErrorRow>> tableAndErrorRows = errorRows.get(); |
|
|
|
for (Map.Entry<String, List<ErrorRow>> entry:tableAndErrorRows.entrySet()) { |
|
|
|
if (entry.getValue().size() != 0) { |
|
|
|
hasError = true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return hasError; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* threadLocal初始化 |
|
|
|
*/ |
|
|
|
private void initImportThreadLocal(String customerId) { |
|
|
|
// 生成importTag,用于标记唯一一次导入操作,导入完成之后,用来删除redis里面临时的key
|
|
|
|
String operatorId = loginUserUtil.getLoginUserId(); |
|
|
|
String importTag = operatorId + System.currentTimeMillis(); |
|
|
|
|
|
|
|
// 跳过的,不导入的行
|
|
|
|
Map<String, List<SkipedRow>> skipedRowsMap = new LinkedHashMap<>(); |
|
|
|
for (IcResiUserTableEnum e : IcResiUserTableEnum.values()) { |
|
|
|
skipedRowsMap.put(e.getTableName(), new LinkedList<>()); |
|
|
|
} |
|
|
|
skipedRows.set(skipedRowsMap); |
|
|
|
|
|
|
|
// 错误信息
|
|
|
|
Map<String, List<ErrorRow>> errorRowsMap = new LinkedHashMap<>(); |
|
|
@ -296,6 +358,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
|
|
|
|
// 居民类别信息
|
|
|
|
ResiImportResiCategoryChangedCache c = new ResiImportResiCategoryChangedCache(); |
|
|
|
c.setImportTag(importTag); |
|
|
|
newlyOrChangedResi.set(c); |
|
|
|
|
|
|
|
List<ResiCategoryItemResultDTO> resiCategoryItems = getResultDataOrThrowsException(operCustomizeOpenFeignClient.listResiCategoryItems(customerId), |
|
|
@ -320,43 +383,12 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
* @param currentUserId |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private Object importIcResiBaseInfoFromExcel(List<FormItemResult> formItemList, String excelPathName, int sheetNo, int headRowNumber, String currUserAgencyId, String currUserAgencyPids, String currentUserId, |
|
|
|
String tableName) { |
|
|
|
DynamicEasyExcelListener readListener = new DynamicEasyExcelListener(); |
|
|
|
//EasyExcelFactory.read(new File(excelPathName)).registerReadListener(readListener).headRowNumber(headRowNumber).sheet(sheetNo).doRead();
|
|
|
|
EasyExcel.read(new File(excelPathName)).registerReadListener(readListener).headRowNumber(headRowNumber).sheet(sheetNo).doRead(); |
|
|
|
|
|
|
|
List<Map<Integer, String>> headList = readListener.getHeadList(); |
|
|
|
List<Map<Integer, String>> dataList = readListener.getDataList(); |
|
|
|
|
|
|
|
// 合并多级表头到一个list中,key为列序号
|
|
|
|
Map<Integer, List<String>> headers = mergeMultiLevelHeadLabels(headList); |
|
|
|
private void importIcResiBaseInfoFromExcel(List<FormItemResult> formItemList, String excelPathName, int sheetNo, int headRowNumber, String currUserAgencyId, String currUserAgencyPids, String currentUserId, |
|
|
|
String tableName, String customerId) { |
|
|
|
|
|
|
|
// 清洗表头数据,通过items剔除,并且得到options
|
|
|
|
Map<Integer, String> abandonedHeaders = removeAndGetOptionsFromHeaders(headers, formItemList); |
|
|
|
|
|
|
|
// 交换表头信息,以label连起来的string作为key,列号的列表作为value
|
|
|
|
HashMap<String, List<Integer>> combinedHeaders = exchangeKeyAndValueOfHeaders(headers); |
|
|
|
|
|
|
|
// 得到客户配置item数据。<"兴趣爱好:兴趣特长", item对象>
|
|
|
|
Map<String, FormItemResult> customizedLabelCompbinedItemsMap = formItemList.stream().collect( |
|
|
|
Collectors.toMap(formItem -> { |
|
|
|
String groupLabel = formItem.getGroupLabel(); |
|
|
|
String label = formItem.getLabel(); |
|
|
|
if (StringUtils.isNotBlank(groupLabel)) { |
|
|
|
return groupLabel.concat(":").concat(label); |
|
|
|
} else { |
|
|
|
return label; |
|
|
|
} |
|
|
|
}, formItem -> formItem) |
|
|
|
); |
|
|
|
|
|
|
|
Map<String, ColumnWrapper> itemIdAndColumnWrapper = convertExcelHeaders2DBColumnWrappers(customizedLabelCompbinedItemsMap, combinedHeaders); |
|
|
|
|
|
|
|
// 持久化
|
|
|
|
persistIcResiBaseInfo(itemIdAndColumnWrapper, dataList, currUserAgencyId, abandonedHeaders, currUserAgencyPids, currentUserId, tableName); |
|
|
|
|
|
|
|
return headers; |
|
|
|
IcResiImportDynamicExcelListener readListener = new IcResiImportDynamicExcelListener(this, customerId, currentUserId, currUserAgencyId, currUserAgencyPids, |
|
|
|
true, tableName, formItemList, headRowNumber); |
|
|
|
EasyExcel.read(new File(excelPathName)).registerReadListener(readListener).headRowNumber(headRowNumber).sheet(sheetNo).doRead(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -371,34 +403,12 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
* @param targetTableName 要插入哪一个表 |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private Object importIcResiExtraInfoFromExcel(List<FormItemResult> formItemList, String excelPathName, int sheetNo, int headRowNumber, String currUserAgencyId, String currentUserId, |
|
|
|
private void importIcResiExtraInfoFromExcel(List<FormItemResult> formItemList, 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(); |
|
|
|
|
|
|
|
List<Map<Integer, String>> headList = readListener.getHeadList(); |
|
|
|
List<Map<Integer, String>> dataList = readListener.getDataList(); |
|
|
|
|
|
|
|
Map<Integer, List<String>> headers = mergeMultiLevelHeadLabels(headList); |
|
|
|
|
|
|
|
Map<Integer, String> abandonedHeaders = removeAndGetOptionsFromHeaders(headers, formItemList); |
|
|
|
|
|
|
|
HashMap<String, List<Integer>> combinedHeaders = exchangeKeyAndValueOfHeaders(headers); |
|
|
|
|
|
|
|
Map<String, FormItemResult> formItemMap = formItemList.stream().collect( |
|
|
|
Collectors.toMap(formItem -> { |
|
|
|
String groupLabel = formItem.getGroupLabel(); |
|
|
|
String label = formItem.getLabel(); |
|
|
|
if (StringUtils.isNotBlank(groupLabel)) { |
|
|
|
return groupLabel.concat(":").concat(label); |
|
|
|
} else { |
|
|
|
return label; |
|
|
|
} |
|
|
|
}, formItem -> formItem) |
|
|
|
); |
|
|
|
Map<String, ColumnWrapper> headerColumnWrapper = convertExcelHeaders2DBColumnWrappers(formItemMap, combinedHeaders); |
|
|
|
persistIcResiExtraInfo(headerColumnWrapper, dataList, currUserAgencyId, abandonedHeaders, currentUserId, targetTableName, customerId); |
|
|
|
return headerColumnWrapper; |
|
|
|
IcResiImportDynamicExcelListener readListener = new IcResiImportDynamicExcelListener(this, customerId, currentUserId, currUserAgencyId, null, |
|
|
|
false, targetTableName, formItemList, headRowNumber); |
|
|
|
EasyExcelFactory.read(new File(excelPathName)).registerReadListener(readListener).headRowNumber(headRowNumber).sheet(sheetNo).doRead(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -408,7 +418,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
* @param currUserAgencyId 当前用户的组织id |
|
|
|
* @param checkBoxOptionColumnIdxAndLabel 复选框的列号&label中文 |
|
|
|
*/ |
|
|
|
private void persistIcResiBaseInfo(Map<String, ColumnWrapper> itemIdAndColumnWrapper, List<Map<Integer, String>> dataRows, |
|
|
|
public void persistIcResiBaseInfo(Map<String, ColumnWrapper> itemIdAndColumnWrapper, List<Map<Integer, String>> dataRows, |
|
|
|
String currUserAgencyId, Map<Integer, String> checkBoxOptionColumnIdxAndLabel, |
|
|
|
String currUserAgencyPids, String currentUserId, String tableName) { |
|
|
|
|
|
|
@ -468,8 +478,10 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
} |
|
|
|
} else { |
|
|
|
// 新增居民
|
|
|
|
String resiId = IdWorker.getIdStr(); |
|
|
|
|
|
|
|
columnAndValues.put("CREATED_BY", currentUserId); |
|
|
|
columnAndValues.put("ID", UUID.randomUUID().toString().replace("-", "")); |
|
|
|
columnAndValues.put("ID", resiId); |
|
|
|
icResiUserDao.add(tableName, columnAndValues); |
|
|
|
|
|
|
|
// 过滤出本居民含有哪些类别
|
|
|
@ -478,14 +490,26 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
.filter((categoryColumnName) -> "1".equals(columnAndValues.get(categoryColumnName))) |
|
|
|
.collect(Collectors.toMap((k) -> k, (k) -> columnAndValues.get(k))); |
|
|
|
|
|
|
|
newlyOrChangedResi.get().getNewResis().put(columnAndValues.get("ID"), |
|
|
|
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)); |
|
|
|
// 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, |
|
|
|
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); |
|
|
|
|
|
|
|
redisUtils.hMSet(RedisKeys.icResiImportResiCategoryKey(newlyOrChangedResi.get().getImportTag(), "add", resiId), BeanUtil.beanToMap(categoryData)); |
|
|
|
categoryData = null; |
|
|
|
} |
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
@ -517,7 +541,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
* @param checkBoxOptionColumnIdxAndLabel 复选框的列号&label中文 |
|
|
|
* @param targetTableName 要插入到哪一个表 |
|
|
|
*/ |
|
|
|
private void persistIcResiExtraInfo(Map<String, ColumnWrapper> headerColumnWrapper, List<Map<Integer, String>> dataRows, |
|
|
|
public void persistIcResiExtraInfo(Map<String, ColumnWrapper> headerColumnWrapper, List<Map<Integer, String>> dataRows, |
|
|
|
String currUserAgencyId, Map<Integer, String> checkBoxOptionColumnIdxAndLabel, |
|
|
|
String currentUserId, String targetTableName, String customerId) { |
|
|
|
|
|
|
@ -709,7 +733,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
* @author wxz |
|
|
|
* @date 2021.10.28 21:27:18 |
|
|
|
*/ |
|
|
|
private HashMap<String, List<Integer>> exchangeKeyAndValueOfHeaders(Map<Integer, List<String>> headers) { |
|
|
|
public HashMap<String, List<Integer>> exchangeKeyAndValueOfHeaders(Map<Integer, List<String>> headers) { |
|
|
|
HashMap<String, List<Integer>> itemAndColIndexs = new LinkedHashMap<>(); |
|
|
|
|
|
|
|
headers.forEach((k, v) -> { |
|
|
@ -734,7 +758,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
* @author wxz |
|
|
|
* @date 2021.10.28 21:07:12 |
|
|
|
*/ |
|
|
|
private Map<Integer, String> removeAndGetOptionsFromHeaders(Map<Integer, List<String>> headers, List<FormItemResult> items) { |
|
|
|
public Map<Integer, String> removeAndGetOptionsFromHeaders(Map<Integer, List<String>> headers, List<FormItemResult> items) { |
|
|
|
List<String> itemLabels = items.stream().map(i -> i.getLabel()).collect(Collectors.toList()); |
|
|
|
Map<Integer, String> abandonedOptions = new HashMap<>(); |
|
|
|
for (Map.Entry<Integer, List<String>> entry:headers.entrySet()) { |
|
|
@ -765,7 +789,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
* value:列号组成的列表(例如[1,2,3]) |
|
|
|
* @return key:itemId;value:columnWrapper |
|
|
|
*/ |
|
|
|
private Map<String, ColumnWrapper> convertExcelHeaders2DBColumnWrappers(Map<String, FormItemResult> customizedLabelCompbinedItemsMap, Map<String, List<Integer>> combinedHeaders) { |
|
|
|
public Map<String, ColumnWrapper> convertExcelHeaders2DBColumnWrappers(Map<String, FormItemResult> customizedLabelCompbinedItemsMap, Map<String, List<Integer>> combinedHeaders) { |
|
|
|
|
|
|
|
// HashMap<String, List<ColumnWrapper>> tables = new HashMap<>();
|
|
|
|
Map<String, ColumnWrapper> columns = new LinkedHashMap<>(combinedHeaders.size()); |
|
|
@ -835,7 +859,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
* @author wxz |
|
|
|
* @date 2021.10.27 16:17:34 |
|
|
|
*/ |
|
|
|
private Map<Integer, List<String>> mergeMultiLevelHeadLabels(List<Map<Integer, String>> headList) { |
|
|
|
public Map<Integer, List<String>> mergeMultiLevelHeadLabels(List<Map<Integer, String>> headList) { |
|
|
|
|
|
|
|
Map<Integer, String> lastNotNullHeads = new LinkedHashMap<>(); |
|
|
|
|
|
|
@ -1013,19 +1037,11 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
* @param response |
|
|
|
* @throws IOException |
|
|
|
*/ |
|
|
|
public void downLoadResults(HttpServletResponse response) throws IOException { |
|
|
|
public void downLoadResults(Boolean hasErrorRows, HttpServletResponse response) throws IOException { |
|
|
|
String fileName; |
|
|
|
|
|
|
|
// 判断是否有错误信息,以确定文件名
|
|
|
|
boolean hasError = false; |
|
|
|
Map<String, List<ErrorRow>> tableAndErrorRows = errorRows.get(); |
|
|
|
for (Map.Entry<String, List<ErrorRow>> entry:tableAndErrorRows.entrySet()) { |
|
|
|
if (entry.getValue().size() != 0) { |
|
|
|
hasError = true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (hasError) { |
|
|
|
if (hasErrorRows) { |
|
|
|
fileName = "导入失败条目清单.xls"; |
|
|
|
} else { |
|
|
|
fileName = "导入成功.xls"; |
|
|
@ -1093,6 +1109,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
} |
|
|
|
|
|
|
|
ResiImportCategoryData oldOne = new ResiImportCategoryData( |
|
|
|
existingResiMap.get("ID"), |
|
|
|
existingResiMap.get("AGENCY_ID"), |
|
|
|
existingResiMap.get("GRID_ID"), |
|
|
|
existingResiMap.get("VILLAGE_ID"), |
|
|
@ -1102,7 +1119,8 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
existingResiCategories); |
|
|
|
|
|
|
|
ResiImportCategoryData newOne = new ResiImportCategoryData( |
|
|
|
existingResiMap.get("AGENCY_ID"), |
|
|
|
newResiMap.get("ID"), |
|
|
|
newResiMap.get("AGENCY_ID"), |
|
|
|
newResiMap.get("GRID_ID"), |
|
|
|
newResiMap.get("VILLAGE_ID"), |
|
|
|
newResiMap.get("BUILD_ID"), |
|
|
@ -1153,6 +1171,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
} |
|
|
|
|
|
|
|
ResiImportCategoryData oldOne = new ResiImportCategoryData( |
|
|
|
existingResiMap.get("ID"), |
|
|
|
existingResiMap.get("AGENCY_ID"), |
|
|
|
existingResiMap.get("GRID_ID"), |
|
|
|
existingResiMap.get("VILLAGE_ID"), |
|
|
@ -1161,7 +1180,9 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
existingResiMap.get("HOME_ID"), |
|
|
|
oldCategories); |
|
|
|
|
|
|
|
ResiImportCategoryData newOne = new ResiImportCategoryData(existingResiMap.get("AGENCY_ID"), |
|
|
|
ResiImportCategoryData newOne = new ResiImportCategoryData( |
|
|
|
newResiMap.get("ID"), |
|
|
|
newResiMap.get("AGENCY_ID"), |
|
|
|
newResiMap.get("GRID_ID"), |
|
|
|
newResiMap.get("VILLAGE_ID"), |
|
|
|
newResiMap.get("BUILD_ID"), |
|
|
@ -1180,14 +1201,20 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
private void saveSubTableInfoToCategoryChangedResiCache(String icResiId, String columnName, Map<String, String> resiInfoMap) { |
|
|
|
|
|
|
|
ResiImportResiCategoryChangedCache cc = newlyOrChangedResi.get(); |
|
|
|
Map<String, ResiImportCategoryData> newResis = cc.getNewResis(); |
|
|
|
// Map<String, ResiImportCategoryData> newResis = cc.getNewResis();
|
|
|
|
Map<String, ResiImportChangedData> categoryChangedResis = cc.getCategoryChangedResis(); |
|
|
|
Map<String, ResiImportChangedData> transferedResis = cc.getTransferedResis(); |
|
|
|
|
|
|
|
ResiImportCategoryData newResi = newResis.get(icResiId); |
|
|
|
if (newResi != null) { |
|
|
|
// ResiImportCategoryData newResi = newResis.get(icResiId);
|
|
|
|
|
|
|
|
String userCateRedisKey = RedisKeys.icResiImportResiCategoryKey(newlyOrChangedResi.get().getImportTag(), "add", icResiId); |
|
|
|
Map < String, Object > addUserMap = redisUtils.hGetAll(userCateRedisKey); |
|
|
|
if (addUserMap != null) { |
|
|
|
//说明是新增居民
|
|
|
|
newResi.getCategories().put(columnName, "1"); |
|
|
|
ResiImportCategoryData newResiCateData = ConvertUtils.mapToEntity(addUserMap, ResiImportCategoryData.class); |
|
|
|
newResiCateData.getCategories().put(columnName, "1"); |
|
|
|
redisUtils.hMSet(userCateRedisKey, BeanUtil.beanToMap(newResiCateData)); |
|
|
|
newResiCateData = null; |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
@ -1339,35 +1366,39 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
|
|
|
|
/** |
|
|
|
* 保存新增居民类别记录 |
|
|
|
* @param newResis |
|
|
|
*/ |
|
|
|
public void saveNewResiCategoryRecord(Map<String, ResiImportCategoryData> newResis) { |
|
|
|
public void saveNewResiCategoryRecord() { |
|
|
|
Date now = new Date(); |
|
|
|
|
|
|
|
Set<String> newResiKeys = redisUtils.keys(RedisKeys.icResiImportTypeKey(newlyOrChangedResi.get().getImportTag(), "add").concat("*")); |
|
|
|
|
|
|
|
CustomerStaffInfoCacheResult operator = CustomerStaffRedis.getStaffInfo(loginUserUtil.getLoginUserCustomerId(), loginUserUtil.getLoginUserId()); |
|
|
|
|
|
|
|
for (Map.Entry<String, ResiImportCategoryData> resi : newResis.entrySet()) { |
|
|
|
String resiId = resi.getKey(); |
|
|
|
ResiImportCategoryData data = resi.getValue(); |
|
|
|
for (String resiKey : newResiKeys) { |
|
|
|
Map<String, Object> newResiInfoMap = redisUtils.hGetAll(resiKey); |
|
|
|
ResiImportCategoryData newResiInfoObj = ConvertUtils.mapToEntity(newResiInfoMap, ResiImportCategoryData.class); |
|
|
|
|
|
|
|
IcResiUserEntity resiInfo = icResiUserDao.selectById(resiId); |
|
|
|
IcResiUserEntity resiInfo = icResiUserDao.selectById(newResiInfoObj.getResiId()); |
|
|
|
|
|
|
|
// 插入changeRecord
|
|
|
|
IcUserChangeRecordEntity changeRecord = fillChangeRecord(loginUserUtil.getLoginUserCustomerId(), resiId, resiInfo.getName(), null, |
|
|
|
IcUserChangeRecordEntity changeRecord = fillChangeRecord(loginUserUtil.getLoginUserCustomerId(), newResiInfoObj.getResiId(), resiInfo.getName(), null, |
|
|
|
loginUserUtil.getLoginUserId(), operator.getRealName(), "-", "-", |
|
|
|
"add", "新增", "", now); |
|
|
|
icUserChangeRecordDao.insert(changeRecord); |
|
|
|
|
|
|
|
// 插入changeDetail
|
|
|
|
for (Map.Entry<String, String> column : data.getCategories().entrySet()) { |
|
|
|
IcUserChangeDetailedEntity changedetail = fillChangeDetail(loginUserUtil.getLoginUserCustomerId(), resiId, changeRecord.getId(), data.getAgencyId(), |
|
|
|
data.getGridId(), data.getVillageId(), data.getBuildId(), data.getUnitId(), |
|
|
|
data.getHomeId(), "add", "新增", column.getKey(), 1, resiInfo.getPids()); |
|
|
|
for (Map.Entry<String, String> column : newResiInfoObj.getCategories().entrySet()) { |
|
|
|
IcUserChangeDetailedEntity changedetail = fillChangeDetail(loginUserUtil.getLoginUserCustomerId(), newResiInfoObj.getResiId(), changeRecord.getId(), newResiInfoObj.getAgencyId(), |
|
|
|
newResiInfoObj.getGridId(), newResiInfoObj.getVillageId(), newResiInfoObj.getBuildId(), newResiInfoObj.getUnitId(), |
|
|
|
newResiInfoObj.getHomeId(), "add", "新增", column.getKey(), 1, resiInfo.getPids()); |
|
|
|
|
|
|
|
icUserChangeDetailedDao.insert(changedetail); |
|
|
|
changedetail = null; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
changeRecord = null; |
|
|
|
newResiInfoObj = null; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|