|
@ -17,9 +17,7 @@ import com.epmet.commons.tools.exception.EpmetErrorCode; |
|
|
import com.epmet.commons.tools.exception.ExceptionUtils; |
|
|
import com.epmet.commons.tools.exception.ExceptionUtils; |
|
|
import com.epmet.commons.tools.exception.RenException; |
|
|
import com.epmet.commons.tools.exception.RenException; |
|
|
import com.epmet.commons.tools.feign.ResultDataResolver; |
|
|
import com.epmet.commons.tools.feign.ResultDataResolver; |
|
|
import com.epmet.commons.tools.redis.common.CustomerOrgRedis; |
|
|
|
|
|
import com.epmet.commons.tools.redis.common.CustomerStaffRedis; |
|
|
import com.epmet.commons.tools.redis.common.CustomerStaffRedis; |
|
|
import com.epmet.commons.tools.redis.common.bean.GridInfoCache; |
|
|
|
|
|
import com.epmet.commons.tools.security.user.LoginUserUtil; |
|
|
import com.epmet.commons.tools.security.user.LoginUserUtil; |
|
|
import com.epmet.commons.tools.utils.Result; |
|
|
import com.epmet.commons.tools.utils.Result; |
|
|
import com.epmet.dao.IcResiUserDao; |
|
|
import com.epmet.dao.IcResiUserDao; |
|
@ -73,14 +71,14 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
public static final ThreadLocal<Map<String, List<SkipedRow>>> skipedRows = new ThreadLocal<>(); |
|
|
public static final ThreadLocal<Map<String, List<SkipedRow>>> skipedRows = new ThreadLocal<>(); |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 类别发生变更的居民 |
|
|
* 导入的居民中,新增或者变动的居民 |
|
|
*/ |
|
|
*/ |
|
|
public static final ThreadLocal<ResiImportResiCategoryChangedCache> categoryChangedResi = new ThreadLocal<>(); |
|
|
public static final ThreadLocal<ResiImportResiCategoryChangedCache> newlyChangedResi = new ThreadLocal<>(); |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 居民类别items列表 |
|
|
* 居民类别items列表。<columnName,label> |
|
|
*/ |
|
|
*/ |
|
|
public static final ThreadLocal<Map<String, String>> resiCategoryItemsCache = new ThreadLocal<>(); |
|
|
public static final ThreadLocal<Map<String, String>> resiCategoryColumnNameAndLabel = new ThreadLocal<>(); |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* key: itemId |
|
|
* key: itemId |
|
@ -249,10 +247,9 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 执行人员类别变更记录
|
|
|
// 执行人员类别变更记录
|
|
|
Map<String, ResiImportCategoryData> newResis = categoryChangedResi.get().getNewResis(); |
|
|
Map<String, ResiImportCategoryData> newResis = newlyOrChangedResi.get().getNewResis(); |
|
|
// todo 此处没测试
|
|
|
Map<String, ResiImportChangedData> categoryChangedResis = newlyOrChangedResi.get().getCategoryChangedResis(); |
|
|
Map<String, ResiImportChangedData> categoryChangedResis = categoryChangedResi.get().getCategoryChangedResis(); |
|
|
Map<String, ResiImportChangedData> transferedResis = newlyOrChangedResi.get().getTransferedResis(); |
|
|
Map<String, ResiImportChangedData> transferedResis = categoryChangedResi.get().getTransferedResis(); |
|
|
|
|
|
|
|
|
|
|
|
//保存调动或者变更记录
|
|
|
//保存调动或者变更记录
|
|
|
saveNewResiCategoryRecord(newResis); |
|
|
saveNewResiCategoryRecord(newResis); |
|
@ -267,8 +264,8 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
} finally { |
|
|
} finally { |
|
|
skipedRows.remove(); |
|
|
skipedRows.remove(); |
|
|
errorRows.remove(); |
|
|
errorRows.remove(); |
|
|
categoryChangedResi.remove(); |
|
|
newlyOrChangedResi.remove(); |
|
|
resiCategoryItemsCache.remove(); |
|
|
resiCategoryColumnNameAndLabel.remove(); |
|
|
itemIdAndOptionsCache.invalidateAll(); |
|
|
itemIdAndOptionsCache.invalidateAll(); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
@ -293,7 +290,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
|
|
|
|
|
// 居民类别信息
|
|
|
// 居民类别信息
|
|
|
ResiImportResiCategoryChangedCache c = new ResiImportResiCategoryChangedCache(); |
|
|
ResiImportResiCategoryChangedCache c = new ResiImportResiCategoryChangedCache(); |
|
|
categoryChangedResi.set(c); |
|
|
newlyOrChangedResi.set(c); |
|
|
|
|
|
|
|
|
List<ResiCategoryItemResultDTO> resiCategoryItems = getResultDataOrThrowsException(operCustomizeOpenFeignClient.listResiCategoryItems(customerId), |
|
|
List<ResiCategoryItemResultDTO> resiCategoryItems = getResultDataOrThrowsException(operCustomizeOpenFeignClient.listResiCategoryItems(customerId), |
|
|
ServiceConstant.OPER_CUSTOMIZE_SERVER, |
|
|
ServiceConstant.OPER_CUSTOMIZE_SERVER, |
|
@ -303,7 +300,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
|
|
|
|
|
Map<String, String> columnNameAndLabel = resiCategoryItems.stream().collect(Collectors.toMap((o) -> o.getColumnName(), (o) -> o.getLabel())); |
|
|
Map<String, String> columnNameAndLabel = resiCategoryItems.stream().collect(Collectors.toMap((o) -> o.getColumnName(), (o) -> o.getLabel())); |
|
|
|
|
|
|
|
|
resiCategoryItemsCache.set(columnNameAndLabel); |
|
|
resiCategoryColumnNameAndLabel.set(columnNameAndLabel); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
@ -326,16 +323,17 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
List<Map<Integer, String>> headList = readListener.getHeadList(); |
|
|
List<Map<Integer, String>> headList = readListener.getHeadList(); |
|
|
List<Map<Integer, String>> dataList = readListener.getDataList(); |
|
|
List<Map<Integer, String>> dataList = readListener.getDataList(); |
|
|
|
|
|
|
|
|
Map<Integer, List<String>> headers = mergeHead(headList); |
|
|
// 合并多级表头到一个list中,key为列序号
|
|
|
|
|
|
Map<Integer, List<String>> headers = mergeMultiLevelHeadLabels(headList); |
|
|
|
|
|
|
|
|
// 清洗表头数据
|
|
|
// 清洗表头数据,通过items剔除,并且得到options
|
|
|
Map<Integer, String> abandonedHeaders = washHeaders(headers, formItemList); |
|
|
Map<Integer, String> abandonedHeaders = removeAndGetOptionsFromHeaders(headers, formItemList); |
|
|
|
|
|
|
|
|
//合并多级表头
|
|
|
// 交换表头信息,以label连起来的string作为key,列号的列表作为value
|
|
|
HashMap<String, List<Integer>> combinedHeaders = combineHeaders(headers); |
|
|
HashMap<String, List<Integer>> combinedHeaders = exchangeKeyAndValueOfHeaders(headers); |
|
|
|
|
|
|
|
|
// 得到客户配置item数据
|
|
|
// 得到客户配置item数据。<"兴趣爱好:兴趣特长", item对象>
|
|
|
Map<String, FormItemResult> formItemMap = formItemList.stream().collect( |
|
|
Map<String, FormItemResult> customizedLabelCompbinedItemsMap = formItemList.stream().collect( |
|
|
Collectors.toMap(formItem -> { |
|
|
Collectors.toMap(formItem -> { |
|
|
String groupLabel = formItem.getGroupLabel(); |
|
|
String groupLabel = formItem.getGroupLabel(); |
|
|
String label = formItem.getLabel(); |
|
|
String label = formItem.getLabel(); |
|
@ -346,10 +344,11 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
} |
|
|
} |
|
|
}, formItem -> formItem) |
|
|
}, formItem -> formItem) |
|
|
); |
|
|
); |
|
|
Map<String, ColumnWrapper> headerColumnWrapper = convertExcelHeaders2DBColumnWrappers(formItemMap, combinedHeaders, dataList, abandonedHeaders); |
|
|
|
|
|
|
|
|
Map<String, ColumnWrapper> itemIdAndColumnWrapper = convertExcelHeaders2DBColumnWrappers(customizedLabelCompbinedItemsMap, combinedHeaders); |
|
|
|
|
|
|
|
|
// 持久化
|
|
|
// 持久化
|
|
|
persistIcResiBaseInfo(headerColumnWrapper, dataList, currUserAgencyId, abandonedHeaders, currUserAgencyPids, currentUserId, tableName); |
|
|
persistIcResiBaseInfo(itemIdAndColumnWrapper, dataList, currUserAgencyId, abandonedHeaders, currUserAgencyPids, currentUserId, tableName); |
|
|
|
|
|
|
|
|
return headers; |
|
|
return headers; |
|
|
} |
|
|
} |
|
@ -374,15 +373,12 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
List<Map<Integer, String>> headList = readListener.getHeadList(); |
|
|
List<Map<Integer, String>> headList = readListener.getHeadList(); |
|
|
List<Map<Integer, String>> dataList = readListener.getDataList(); |
|
|
List<Map<Integer, String>> dataList = readListener.getDataList(); |
|
|
|
|
|
|
|
|
Map<Integer, List<String>> headers = mergeHead(headList); |
|
|
Map<Integer, List<String>> headers = mergeMultiLevelHeadLabels(headList); |
|
|
|
|
|
|
|
|
// 清洗表头数据
|
|
|
Map<Integer, String> abandonedHeaders = removeAndGetOptionsFromHeaders(headers, formItemList); |
|
|
Map<Integer, String> abandonedHeaders = washHeaders(headers, formItemList); |
|
|
|
|
|
|
|
|
|
|
|
//合并多级表头
|
|
|
HashMap<String, List<Integer>> combinedHeaders = exchangeKeyAndValueOfHeaders(headers); |
|
|
HashMap<String, List<Integer>> combinedHeaders = combineHeaders(headers); |
|
|
|
|
|
|
|
|
|
|
|
// 得到客户配置item数据
|
|
|
|
|
|
Map<String, FormItemResult> formItemMap = formItemList.stream().collect( |
|
|
Map<String, FormItemResult> formItemMap = formItemList.stream().collect( |
|
|
Collectors.toMap(formItem -> { |
|
|
Collectors.toMap(formItem -> { |
|
|
String groupLabel = formItem.getGroupLabel(); |
|
|
String groupLabel = formItem.getGroupLabel(); |
|
@ -394,19 +390,19 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
} |
|
|
} |
|
|
}, formItem -> formItem) |
|
|
}, formItem -> formItem) |
|
|
); |
|
|
); |
|
|
Map<String, ColumnWrapper> headerColumnWrapper = convertExcelHeaders2DBColumnWrappers(formItemMap, combinedHeaders, dataList, abandonedHeaders); |
|
|
Map<String, ColumnWrapper> headerColumnWrapper = convertExcelHeaders2DBColumnWrappers(formItemMap, combinedHeaders); |
|
|
persistIcResiExtraInfo(headerColumnWrapper, dataList, currUserAgencyId, abandonedHeaders, currentUserId, targetTableName, customerId); |
|
|
persistIcResiExtraInfo(headerColumnWrapper, dataList, currUserAgencyId, abandonedHeaders, currentUserId, targetTableName, customerId); |
|
|
return headerColumnWrapper; |
|
|
return headerColumnWrapper; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 持久化IC居民基础信息 |
|
|
* 持久化IC居民基础信息 |
|
|
* @param headerColumnWrapper 数据库列包装信息 |
|
|
* @param itemIdAndColumnWrapper 数据库列包装信息 |
|
|
* @param dataRows 数据行集合 |
|
|
* @param dataRows 数据行集合 |
|
|
* @param currUserAgencyId 当前用户的组织id |
|
|
* @param currUserAgencyId 当前用户的组织id |
|
|
* @param checkBoxOptionColumnIdxAndLabel 复选框的列号&label中文 |
|
|
* @param checkBoxOptionColumnIdxAndLabel 复选框的列号&label中文 |
|
|
*/ |
|
|
*/ |
|
|
private void persistIcResiBaseInfo(Map<String, ColumnWrapper> headerColumnWrapper, List<Map<Integer, String>> dataRows, |
|
|
private void persistIcResiBaseInfo(Map<String, ColumnWrapper> itemIdAndColumnWrapper, List<Map<Integer, String>> dataRows, |
|
|
String currUserAgencyId, Map<Integer, String> checkBoxOptionColumnIdxAndLabel, |
|
|
String currUserAgencyId, Map<Integer, String> checkBoxOptionColumnIdxAndLabel, |
|
|
String currUserAgencyPids, String currentUserId, String tableName) { |
|
|
String currUserAgencyPids, String currentUserId, String tableName) { |
|
|
|
|
|
|
|
@ -415,8 +411,9 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
|
|
|
|
|
LinkedHashMap<String, String> columnAndValues = new LinkedHashMap<>(); |
|
|
LinkedHashMap<String, String> columnAndValues = new LinkedHashMap<>(); |
|
|
try { |
|
|
try { |
|
|
convertColumnWrappers2Map4Persist(headerColumnWrapper, row, currUserAgencyId, checkBoxOptionColumnIdxAndLabel, columnAndValues); |
|
|
convertColumnWrappers2Map4Persist(itemIdAndColumnWrapper, row, currUserAgencyId, checkBoxOptionColumnIdxAndLabel, columnAndValues); |
|
|
|
|
|
|
|
|
|
|
|
// 因为还没有读取子sheet,所以这些居民类别没有办法获取,先默认设置成0,后面读取子sheet的时候再更新
|
|
|
columnAndValues.put("IS_ENSURE_HOUSE", "0"); |
|
|
columnAndValues.put("IS_ENSURE_HOUSE", "0"); |
|
|
columnAndValues.put("IS_OLD_PEOPLE", "0"); |
|
|
columnAndValues.put("IS_OLD_PEOPLE", "0"); |
|
|
columnAndValues.put("IS_PARTY", "0"); |
|
|
columnAndValues.put("IS_PARTY", "0"); |
|
@ -447,12 +444,12 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
// 任意组织维度一个发生变化,则放到调动居民缓存中
|
|
|
// 任意组织维度一个发生变化,则放到调动居民缓存中
|
|
|
ResiImportChangedData transferData; |
|
|
ResiImportChangedData transferData; |
|
|
if ((transferData = this.getResiImportTrasferData(existingResiMap, columnAndValues)) != null) { |
|
|
if ((transferData = this.getResiImportTrasferData(existingResiMap, columnAndValues)) != null) { |
|
|
categoryChangedResi.get().getTransferedResis().put(existingResiMap.get("ID"), transferData); |
|
|
newlyOrChangedResi.get().getTransferedResis().put(existingResiMap.get("ID"), transferData); |
|
|
} else { |
|
|
} else { |
|
|
// 组织维度没有发生变化,看是否有居民类型变更
|
|
|
// 组织维度没有发生变化,看是否有居民类型变更
|
|
|
ResiImportChangedData d = getResiImportCategoryChangedData(existingResiMap, columnAndValues); |
|
|
ResiImportChangedData d = getResiImportCategoryChangedData(existingResiMap, columnAndValues); |
|
|
if (d != null) { |
|
|
if (d != null) { |
|
|
categoryChangedResi.get().getCategoryChangedResis().put(existingResiMap.get("ID"), d); |
|
|
newlyOrChangedResi.get().getCategoryChangedResis().put(existingResiMap.get("ID"), d); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} else { |
|
|
} else { |
|
@ -461,19 +458,20 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
columnAndValues.put("ID", UUID.randomUUID().toString().replace("-", "")); |
|
|
columnAndValues.put("ID", UUID.randomUUID().toString().replace("-", "")); |
|
|
icResiUserDao.add(tableName, columnAndValues); |
|
|
icResiUserDao.add(tableName, columnAndValues); |
|
|
|
|
|
|
|
|
Map<String, String> categories = resiCategoryItemsCache.get().keySet() |
|
|
// 过滤出本居民含有哪些类别
|
|
|
|
|
|
Map<String, String> resiCategories = resiCategoryColumnNameAndLabel.get().keySet() |
|
|
.stream() |
|
|
.stream() |
|
|
.filter((categoryColumnName) -> "1".equals(columnAndValues.get(categoryColumnName))) |
|
|
.filter((categoryColumnName) -> "1".equals(columnAndValues.get(categoryColumnName))) |
|
|
.collect(Collectors.toMap((k) -> k, (k) -> columnAndValues.get(k))); |
|
|
.collect(Collectors.toMap((k) -> k, (k) -> columnAndValues.get(k))); |
|
|
|
|
|
|
|
|
categoryChangedResi.get().getNewResis().put(columnAndValues.get("ID"), |
|
|
newlyOrChangedResi.get().getNewResis().put(columnAndValues.get("ID"), |
|
|
new ResiImportCategoryData(columnAndValues.get("AGENCY_ID"), |
|
|
new ResiImportCategoryData(columnAndValues.get("AGENCY_ID"), |
|
|
columnAndValues.get("GRID_ID"), |
|
|
columnAndValues.get("GRID_ID"), |
|
|
columnAndValues.get("VILLAGE_ID"), |
|
|
columnAndValues.get("VILLAGE_ID"), |
|
|
columnAndValues.get("BUILD_ID"), |
|
|
columnAndValues.get("BUILD_ID"), |
|
|
columnAndValues.get("UNIT_ID"), |
|
|
columnAndValues.get("UNIT_ID"), |
|
|
columnAndValues.get("HOME_ID"), |
|
|
columnAndValues.get("HOME_ID"), |
|
|
categories)); |
|
|
resiCategories)); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
} catch (Exception e) { |
|
@ -604,13 +602,13 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 将当前行数据转化成LinkedHashMap,供后续插入 |
|
|
* 将当前行数据转化成LinkedHashMap,供后续插入 |
|
|
* @param headerColumnWrapper 当前行的ColumnWrapper,每一个ColumnWrapper元素都是当前行中的一个列 |
|
|
* @param itemIdAndColumnWrappers 当前行的ColumnWrapper,每一个ColumnWrapper元素都是当前行中的一个列,key:itemId |
|
|
* @param row 当前行数据 |
|
|
* @param row 当前行数据 |
|
|
* @param currUserAgencyId 当前用户所属机构ID |
|
|
* @param currUserAgencyId 当前用户所属机构ID |
|
|
* @param checkBoxOptionColumnIdxAndLabel 复选框options列表。key:列号,value:复选框中文 |
|
|
* @param checkBoxOptionColumnIdxAndLabel 复选框options列表。key:列号,value:复选框中文 |
|
|
* @param target 要将数据放到哪个对象中 |
|
|
* @param target 要将数据放到哪个对象中 |
|
|
*/ |
|
|
*/ |
|
|
private void convertColumnWrappers2Map4Persist(Map<String, ColumnWrapper> headerColumnWrapper, Map<Integer, String> row, |
|
|
private void convertColumnWrappers2Map4Persist(Map<String, ColumnWrapper> itemIdAndColumnWrappers, Map<Integer, String> row, |
|
|
String currUserAgencyId, Map<Integer, String> checkBoxOptionColumnIdxAndLabel, |
|
|
String currUserAgencyId, Map<Integer, String> checkBoxOptionColumnIdxAndLabel, |
|
|
LinkedHashMap<String, String> target) { |
|
|
LinkedHashMap<String, String> target) { |
|
|
|
|
|
|
|
@ -618,9 +616,9 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
|
|
|
|
|
|
List<String> errorColumnNames = new LinkedList<>(); |
|
|
List<String> errorColumnNames = new LinkedList<>(); |
|
|
|
|
|
|
|
|
for (Map.Entry<String, ColumnWrapper> columnWrapperEntry : headerColumnWrapper.entrySet()) { |
|
|
for (Map.Entry<String, ColumnWrapper> itemIdAndColumnWrapper : itemIdAndColumnWrappers.entrySet()) { |
|
|
|
|
|
|
|
|
ColumnWrapper columnWrapper = columnWrapperEntry.getValue(); |
|
|
ColumnWrapper columnWrapper = itemIdAndColumnWrapper.getValue(); |
|
|
if ("input".equals(columnWrapper.getItemType()) |
|
|
if ("input".equals(columnWrapper.getItemType()) |
|
|
|| "textarea".equals(columnWrapper.getItemType()) |
|
|
|| "textarea".equals(columnWrapper.getItemType()) |
|
|
|| "datepicker".equals(columnWrapper.getItemType()) |
|
|
|| "datepicker".equals(columnWrapper.getItemType()) |
|
@ -646,10 +644,10 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
columnWrapper.setColValue(colValue); |
|
|
columnWrapper.setColValue(colValue); |
|
|
} else { |
|
|
} else { |
|
|
// remote类型。优先从缓存取
|
|
|
// remote类型。优先从缓存取
|
|
|
Map<String, String> optionsOfItem = itemIdAndOptionsCache.getIfPresent(columnWrapperEntry.getKey()); |
|
|
Map<String, String> optionsOfItem = itemIdAndOptionsCache.getIfPresent(itemIdAndColumnWrapper.getKey()); |
|
|
if (optionsOfItem == null || optionsOfItem.size() == 0) { |
|
|
if (optionsOfItem == null || optionsOfItem.size() == 0) { |
|
|
optionsOfItem = listRemoteOptions(headerColumnWrapper, columnWrapper.getOptionSourceValue(), currUserAgencyId, "saveorupdate"); |
|
|
optionsOfItem = listRemoteOptions(itemIdAndColumnWrappers, columnWrapper.getOptionSourceValue(), currUserAgencyId, "saveorupdate"); |
|
|
itemIdAndOptionsCache.put(columnWrapperEntry.getKey(), optionsOfItem); |
|
|
itemIdAndOptionsCache.put(itemIdAndColumnWrapper.getKey(), optionsOfItem); |
|
|
} |
|
|
} |
|
|
String colValue = optionsOfItem.get(cellContent); |
|
|
String colValue = optionsOfItem.get(cellContent); |
|
|
columnWrapper.setColValue(colValue); |
|
|
columnWrapper.setColValue(colValue); |
|
@ -674,22 +672,22 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* @description 合并头 |
|
|
* @description 调换表头信息。将中文label做key,列号list作value(因为复选框的原因,会出现相同的label对应多个列号,以兴趣特长为例) |
|
|
* |
|
|
* |
|
|
* @param headers |
|
|
* @param headers 例: <38:[兴趣爱好,兴趣特长]> <39:[兴趣爱好,兴趣特长]> <40:[兴趣爱好,兴趣特长]>... |
|
|
* @return |
|
|
* @return <"兴趣爱好,兴趣特长":[38,39,40...]> |
|
|
* @author wxz |
|
|
* @author wxz |
|
|
* @date 2021.10.28 21:27:18 |
|
|
* @date 2021.10.28 21:27:18 |
|
|
*/ |
|
|
*/ |
|
|
private HashMap<String, List<Integer>> combineHeaders(Map<Integer, List<String>> headers) { |
|
|
private HashMap<String, List<Integer>> exchangeKeyAndValueOfHeaders(Map<Integer, List<String>> headers) { |
|
|
HashMap<String, List<Integer>> itemAndColIndexs = new LinkedHashMap<>(); |
|
|
HashMap<String, List<Integer>> itemAndColIndexs = new LinkedHashMap<>(); |
|
|
|
|
|
|
|
|
headers.forEach((k, v) -> { |
|
|
headers.forEach((k, v) -> { |
|
|
String tempKey = String.join(":", v); |
|
|
String combinedHeaderLabels = String.join(":", v); |
|
|
List<Integer> colIndexs = itemAndColIndexs.get(tempKey); |
|
|
List<Integer> colIndexs = itemAndColIndexs.get(combinedHeaderLabels); |
|
|
if (colIndexs == null) { |
|
|
if (colIndexs == null) { |
|
|
colIndexs = new ArrayList<>(); |
|
|
colIndexs = new ArrayList<>(); |
|
|
itemAndColIndexs.put(tempKey, colIndexs); |
|
|
itemAndColIndexs.put(combinedHeaderLabels, colIndexs); |
|
|
} |
|
|
} |
|
|
colIndexs.add(k); |
|
|
colIndexs.add(k); |
|
|
}); |
|
|
}); |
|
@ -698,56 +696,54 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* @description 洗头 |
|
|
* @description 复选框在excel中体现为多个列,他们在oper_customize.items表中不存在,所以要从headers中剔除这部分。然后将剔除的部分返回 |
|
|
* |
|
|
* |
|
|
* @param headers |
|
|
* @param headers excel表头。 <列号:中文label列表> |
|
|
* @param items |
|
|
* @param items customize库中查询出来的,items的列表 |
|
|
* @return |
|
|
* @return 被移除的options |
|
|
* @author wxz |
|
|
* @author wxz |
|
|
* @date 2021.10.28 21:07:12 |
|
|
* @date 2021.10.28 21:07:12 |
|
|
*/ |
|
|
*/ |
|
|
private Map<Integer, String> washHeaders(Map<Integer, List<String>> headers, List<FormItemResult> items) { |
|
|
private Map<Integer, String> removeAndGetOptionsFromHeaders(Map<Integer, List<String>> headers, List<FormItemResult> items) { |
|
|
List<String> itemLabels = items.stream().map(i -> i.getLabel()).collect(Collectors.toList()); |
|
|
List<String> itemLabels = items.stream().map(i -> i.getLabel()).collect(Collectors.toList()); |
|
|
Map<Integer, String> abandonedHeaders = new HashMap<>(); |
|
|
Map<Integer, String> abandonedOptions = new HashMap<>(); |
|
|
for (Map.Entry<Integer, List<String>> entry:headers.entrySet()) { |
|
|
for (Map.Entry<Integer, List<String>> entry:headers.entrySet()) { |
|
|
Integer colIdx = entry.getKey(); |
|
|
Integer columnIndex = entry.getKey(); |
|
|
List<String> v = entry.getValue(); |
|
|
List<String> headerLabels = entry.getValue(); |
|
|
int lastPartIndex = v.size() - 1; |
|
|
int lastLevelHeaderLevel = headerLabels.size() - 1; |
|
|
String lastValuePart = v.get(lastPartIndex); |
|
|
// 最后一集header的中文label
|
|
|
if (!itemLabels.contains(lastValuePart)) { |
|
|
String lastLevelHeaderLabel = headerLabels.get(lastLevelHeaderLevel); |
|
|
|
|
|
if (!itemLabels.contains(lastLevelHeaderLabel)) { |
|
|
// 该部分为options,它的上一级是item,那么去掉options这一级
|
|
|
// 该部分为options,它的上一级是item,那么去掉options这一级
|
|
|
v.remove(lastPartIndex); |
|
|
headerLabels.remove(lastLevelHeaderLevel); |
|
|
abandonedHeaders.put(colIdx, lastValuePart); |
|
|
abandonedOptions.put(columnIndex, lastLevelHeaderLabel); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return abandonedHeaders; |
|
|
return abandonedOptions; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* @description 数据整合,将excel表头汉字信息转化成ColumnWrapper列封装数据 |
|
|
* @description 数据整合,将excel表头汉字信息转化成ColumnWrapper列封装数据 |
|
|
* * key:itemId |
|
|
* * key:itemId |
|
|
* * value:ColumnWrapper列包装信息 |
|
|
* * value:ColumnWrapper列包装信息 |
|
|
* @param formItemMap item map |
|
|
* @param customizedLabelCompbinedItemsMap item map |
|
|
* key:itemId; |
|
|
* key:itemId; |
|
|
* value: 合并之后的head字符串,例如:健康信息:监护人 |
|
|
* value: 合并之后的head字符串,例如:健康信息:监护人 |
|
|
* @param combinedHeaders 合并之后的head信息。 |
|
|
* @param combinedHeaders 合并之后的head信息。 |
|
|
* key:合并之后head字符串(例如:党员信息:入党时间); |
|
|
* key:合并之后head字符串(例如:党员信息:入党时间); |
|
|
* value:列号组成的列表(例如[1,2,3]) |
|
|
* value:列号组成的列表(例如[1,2,3]) |
|
|
* @param datas |
|
|
* @return key:itemId;value:columnWrapper |
|
|
* @param abandonedHeaders |
|
|
|
|
|
* @return |
|
|
|
|
|
*/ |
|
|
*/ |
|
|
private Map<String, ColumnWrapper> convertExcelHeaders2DBColumnWrappers(Map<String, FormItemResult> formItemMap, Map<String, List<Integer>> combinedHeaders, |
|
|
private Map<String, ColumnWrapper> convertExcelHeaders2DBColumnWrappers(Map<String, FormItemResult> customizedLabelCompbinedItemsMap, Map<String, List<Integer>> combinedHeaders) { |
|
|
List<Map<Integer, String>> datas, Map<Integer, String> abandonedHeaders) { |
|
|
|
|
|
|
|
|
|
|
|
// HashMap<String, List<ColumnWrapper>> tables = new HashMap<>();
|
|
|
// HashMap<String, List<ColumnWrapper>> tables = new HashMap<>();
|
|
|
Map<String, ColumnWrapper> columns = new LinkedHashMap<>(combinedHeaders.size()); |
|
|
Map<String, ColumnWrapper> columns = new LinkedHashMap<>(combinedHeaders.size()); |
|
|
|
|
|
|
|
|
for (Map.Entry<String, List<Integer>> entry : combinedHeaders.entrySet()) { |
|
|
for (Map.Entry<String, List<Integer>> labelAndColumnIndexs : combinedHeaders.entrySet()) { |
|
|
String combinedHeader = entry.getKey(); |
|
|
String combinedHeader = labelAndColumnIndexs.getKey(); |
|
|
|
|
|
|
|
|
FormItemResult item = formItemMap.get(combinedHeader); |
|
|
FormItemResult item = customizedLabelCompbinedItemsMap.get(combinedHeader); |
|
|
|
|
|
|
|
|
if (item == null) { |
|
|
if (item == null) { |
|
|
// 如果数据库中没有该项,可能是用户自己定义的项,忽略
|
|
|
// 如果数据库中没有该项,可能是用户自己定义的项,忽略
|
|
@ -766,7 +762,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
String combinedLabel = StringUtils.isBlank(groupLabel) ? item.getLabel() : groupLabel.concat(":").concat(item.getLabel()); |
|
|
String combinedLabel = StringUtils.isBlank(groupLabel) ? item.getLabel() : groupLabel.concat(":").concat(item.getLabel()); |
|
|
columnWrapper.setCombinedLabel(combinedLabel); |
|
|
columnWrapper.setCombinedLabel(combinedLabel); |
|
|
columnWrapper.setColumnName((columnNum == null || columnNum == 0) ? columnName : columnName + columnNum); |
|
|
columnWrapper.setColumnName((columnNum == null || columnNum == 0) ? columnName : columnName + columnNum); |
|
|
columnWrapper.setColIndex(entry.getValue()); |
|
|
columnWrapper.setColIndex(labelAndColumnIndexs.getValue()); |
|
|
columnWrapper.setRequired(item.getRequired()); |
|
|
columnWrapper.setRequired(item.getRequired()); |
|
|
|
|
|
|
|
|
columnWrapper.setOptionSourceType(item.getOptionSourceType()); |
|
|
columnWrapper.setOptionSourceType(item.getOptionSourceType()); |
|
@ -802,15 +798,14 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* @description 合并表头 |
|
|
* @description 合并多级表头,竖着将多级表头放入同一个list,然后以列号为key,list为value,放入map |
|
|
* Map<Integer, List<String>> |
|
|
|
|
|
* |
|
|
* |
|
|
* @param headList |
|
|
* @param headList 表头列表,每一个元素都是一行表头。Map结构:<列号:某级表头中文> |
|
|
* @return |
|
|
* @return 表头列表,Map结构:<列号:[一级表头中文,二级表头中文,三级表头中文]> |
|
|
* @author wxz |
|
|
* @author wxz |
|
|
* @date 2021.10.27 16:17:34 |
|
|
* @date 2021.10.27 16:17:34 |
|
|
*/ |
|
|
*/ |
|
|
private Map<Integer, List<String>> mergeHead(List<Map<Integer, String>> headList) { |
|
|
private Map<Integer, List<String>> mergeMultiLevelHeadLabels(List<Map<Integer, String>> headList) { |
|
|
|
|
|
|
|
|
Map<Integer, String> lastNotNullHeads = new LinkedHashMap<>(); |
|
|
Map<Integer, String> lastNotNullHeads = new LinkedHashMap<>(); |
|
|
|
|
|
|
|
@ -1045,7 +1040,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
HashMap<String, String> existingResiCategories = new HashMap<>(); |
|
|
HashMap<String, String> existingResiCategories = new HashMap<>(); |
|
|
HashMap<String, String> newResiCategories = new HashMap<>(); |
|
|
HashMap<String, String> newResiCategories = new HashMap<>(); |
|
|
|
|
|
|
|
|
for (String categoryColumnName : resiCategoryItemsCache.get().keySet()) { |
|
|
for (String categoryColumnName : resiCategoryColumnNameAndLabel.get().keySet()) { |
|
|
String oldCategoryValue = existingResiMap.get(categoryColumnName); |
|
|
String oldCategoryValue = existingResiMap.get(categoryColumnName); |
|
|
String newCategoryValue = newResiMap.get(categoryColumnName); |
|
|
String newCategoryValue = newResiMap.get(categoryColumnName); |
|
|
|
|
|
|
|
@ -1091,7 +1086,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
HashMap<String, String> oldCategories = new HashMap<>(); |
|
|
HashMap<String, String> oldCategories = new HashMap<>(); |
|
|
HashMap<String, String> newCategories = new HashMap<>(); |
|
|
HashMap<String, String> newCategories = new HashMap<>(); |
|
|
|
|
|
|
|
|
Set<String> categoryColumnNames = resiCategoryItemsCache.get().keySet(); |
|
|
Set<String> categoryColumnNames = resiCategoryColumnNameAndLabel.get().keySet(); |
|
|
for (String categoryColumnName : categoryColumnNames) { |
|
|
for (String categoryColumnName : categoryColumnNames) { |
|
|
String existingColumnValue = existingResiMap.get(categoryColumnName); |
|
|
String existingColumnValue = existingResiMap.get(categoryColumnName); |
|
|
String newColumnValue = newResiMap.get(categoryColumnName); |
|
|
String newColumnValue = newResiMap.get(categoryColumnName); |
|
@ -1142,7 +1137,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
*/ |
|
|
*/ |
|
|
private void saveSubTableInfoToCategoryChangedResiCache(String icResiId, String columnName) { |
|
|
private void saveSubTableInfoToCategoryChangedResiCache(String icResiId, String columnName) { |
|
|
|
|
|
|
|
|
ResiImportResiCategoryChangedCache cc = categoryChangedResi.get(); |
|
|
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> categoryChangedResis = cc.getCategoryChangedResis(); |
|
|
Map<String, ResiImportChangedData> transferedResis = cc.getTransferedResis(); |
|
|
Map<String, ResiImportChangedData> transferedResis = cc.getTransferedResis(); |
|
@ -1224,7 +1219,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res |
|
|
String beforeValueName = "0".equals(oldColumnValue) ? "否" : "是"; |
|
|
String beforeValueName = "0".equals(oldColumnValue) ? "否" : "是"; |
|
|
String newValueName = "0".equals(newColumnValue) ? "否" : "是"; |
|
|
String newValueName = "0".equals(newColumnValue) ? "否" : "是"; |
|
|
|
|
|
|
|
|
String label = resiCategoryItemsCache.get().get(columnName); |
|
|
String label = resiCategoryColumnNameAndLabel.get().get(columnName); |
|
|
|
|
|
|
|
|
sbBefore.append(label).append(":").append(beforeValueName).append("\n"); |
|
|
sbBefore.append(label).append(":").append(beforeValueName).append("\n"); |
|
|
sbAfter.append(label).append(":").append(newValueName).append("\n"); |
|
|
sbAfter.append(label).append(":").append(newValueName).append("\n"); |
|
|