|
|
@ -486,9 +486,12 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi |
|
|
|
|
|
|
|
@Override |
|
|
|
public Object importIcResiInfoFromExcel(String currUserAgencyId) { |
|
|
|
String excelPathName = "/opt/test/基础信息表/resi_info.xls"; |
|
|
|
CustomerAgencyDTO agencyInfo = getResultDataOrThrowsException(govOrgOpenFeignClient.getAgencyById(currUserAgencyId), ServiceConstant.GOV_ORG_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), null); |
|
|
|
String loginUserId = loginUserUtil.getLoginUserId(); |
|
|
|
return importIcResiInfoFromExcel(0, 3, currUserAgencyId, agencyInfo.getPids(), loginUserId); |
|
|
|
|
|
|
|
//return importIcResiInfoFromExcel(excelPathName, 0, 3, currUserAgencyId, agencyInfo.getPids(), loginUserId);
|
|
|
|
return importIcResiExtraInfoFromExcel(excelPathName, 1, 2, currUserAgencyId, agencyInfo.getPids(), loginUserId); |
|
|
|
// imporExcel(1, 1);
|
|
|
|
// imporExcel(2, 1);
|
|
|
|
// imporExcel(3, 1);
|
|
|
@ -499,9 +502,18 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi |
|
|
|
// imporExcel(8, 1);
|
|
|
|
} |
|
|
|
|
|
|
|
private Object importIcResiInfoFromExcel(int sheetNo, int headRowNumber, String currUserAgencyId, String currUserAgencyPids, String currentUserId) { |
|
|
|
/** |
|
|
|
* excel导入居民基本信息 |
|
|
|
* @param sheetNo |
|
|
|
* @param headRowNumber |
|
|
|
* @param currUserAgencyId |
|
|
|
* @param currUserAgencyPids |
|
|
|
* @param currentUserId |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private Object importIcResiInfoFromExcel(String excelPathName, int sheetNo, int headRowNumber, String currUserAgencyId, String currUserAgencyPids, String currentUserId) { |
|
|
|
DynamicEasyExcelListener readListener = new DynamicEasyExcelListener(); |
|
|
|
EasyExcelFactory.read(new File("/opt/test/基础信息表/resi_info.xls")).registerReadListener(readListener).headRowNumber(3).sheet(sheetNo).doRead(); |
|
|
|
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(); |
|
|
@ -509,10 +521,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi |
|
|
|
Map<Integer, List<String>> headers = mergeHead(headList); |
|
|
|
|
|
|
|
// 查询form相关信息
|
|
|
|
CustomerFormQueryDTO form = new CustomerFormQueryDTO(); |
|
|
|
form.setFormCode("resi_base_info"); |
|
|
|
Result<List<FormItem>> result = operCustomizeOpenFeignClient.listItems(form); |
|
|
|
List<FormItem> customerItems = getResultDataOrThrowsException(result, ServiceConstant.OPER_CUSTOMIZE_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), "【居民信息excel导入】查询表单相关信息失败"); |
|
|
|
List<FormItem> customerItems = listFormItems("resi_base_info"); |
|
|
|
|
|
|
|
// 清洗表头数据
|
|
|
|
Map<Integer, String> abandonedHeaders = washHeaders(headers, customerItems); |
|
|
@ -532,12 +541,57 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi |
|
|
|
} |
|
|
|
}, formItem -> formItem) |
|
|
|
); |
|
|
|
Map<String, ColumnWrapper> headerColumnWrapper = integrate(formItemMap, combinedHeaders, dataList, abandonedHeaders); |
|
|
|
Map<String, ColumnWrapper> headerColumnWrapper = convertExcelHeaders2DBColumnWrappers(formItemMap, combinedHeaders, dataList, abandonedHeaders); |
|
|
|
|
|
|
|
// 持久化
|
|
|
|
persist(headerColumnWrapper, dataList, currUserAgencyId, abandonedHeaders, customerItems.get(0).getTableName(), currUserAgencyPids, currentUserId); |
|
|
|
|
|
|
|
return headerColumnWrapper; |
|
|
|
return headers; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* excel导入居民附加信息 |
|
|
|
* @param excelPathName |
|
|
|
* @param sheetNo |
|
|
|
* @param headRowNumber |
|
|
|
* @param currUserAgencyId |
|
|
|
* @param currUserAgencyPids |
|
|
|
* @param currentUserId |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private Object importIcResiExtraInfoFromExcel(String excelPathName, int sheetNo, int headRowNumber, String currUserAgencyId, String currUserAgencyPids, String currentUserId) { |
|
|
|
DynamicEasyExcelListener readListener = new DynamicEasyExcelListener(); |
|
|
|
EasyExcelFactory.read(new File(excelPathName)).registerReadListener(readListener).headRowNumber(headRowNumber).sheet(sheetNo).doRead(); |
|
|
|
|
|
|
|
List<Map<Integer, String>> headList = readListener.getHeadList(); |
|
|
|
List<Map<Integer, String>> dataList = readListener.getDataList(); |
|
|
|
|
|
|
|
Map<Integer, List<String>> headers = mergeHead(headList); |
|
|
|
|
|
|
|
// 查询form相关信息
|
|
|
|
List<FormItem> customerItems = listFormItems("resi_base_info"); |
|
|
|
|
|
|
|
// 清洗表头数据
|
|
|
|
Map<Integer, String> abandonedHeaders = washHeaders(headers, customerItems); |
|
|
|
|
|
|
|
//合并多级表头
|
|
|
|
HashMap<String, List<Integer>> combinedHeaders = combineHeaders(headers); |
|
|
|
|
|
|
|
// 得到客户配置item数据
|
|
|
|
Map<String, FormItem> formItemMap = customerItems.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, dataList, abandonedHeaders); |
|
|
|
|
|
|
|
return formItemMap; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -625,6 +679,18 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 根据formCode查询该form的item列表 |
|
|
|
* @param formCode |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private List<FormItem> listFormItems(String formCode) { |
|
|
|
CustomerFormQueryDTO form = new CustomerFormQueryDTO(); |
|
|
|
form.setFormCode(formCode); |
|
|
|
Result<List<FormItem>> result = operCustomizeOpenFeignClient.listItems(form); |
|
|
|
return getResultDataOrThrowsException(result, ServiceConstant.OPER_CUSTOMIZE_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), "【居民信息excel导入】查询表单相关信息失败"); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @description 合并头 |
|
|
|
* |
|
|
@ -677,14 +743,21 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @description 数据整合 |
|
|
|
* |
|
|
|
* @description 数据整合,将excel表头汉字信息转化成ColumnWrapper列封装数据 |
|
|
|
* * key:itemId |
|
|
|
* * value:ColumnWrapper列包装信息 |
|
|
|
* @param formItemMap item map |
|
|
|
* key:itemId; |
|
|
|
* value: 合并之后的head字符串,例如:健康信息:监护人 |
|
|
|
* @param combinedHeaders 合并之后的head信息。 |
|
|
|
* key:合并之后head字符串(例如:党员信息:入党时间); |
|
|
|
* value:列号组成的列表(例如[1,2,3]) |
|
|
|
* @param datas |
|
|
|
* @param abandonedHeaders |
|
|
|
* @return |
|
|
|
* @author wxz |
|
|
|
* @date 2021.10.28 17:08:51 |
|
|
|
*/ |
|
|
|
private Map<String, ColumnWrapper> integrate(Map<String, FormItem> formItemMap, Map<String, List<Integer>> combinedHeaders, |
|
|
|
List<Map<Integer, String>> datas, Map<Integer, String> abandonedHeaders) { |
|
|
|
private Map<String, ColumnWrapper> convertExcelHeaders2DBColumnWrappers(Map<String, FormItem> formItemMap, Map<String, List<Integer>> combinedHeaders, |
|
|
|
List<Map<Integer, String>> datas, Map<Integer, String> abandonedHeaders) { |
|
|
|
|
|
|
|
// HashMap<String, List<ColumnWrapper>> tables = new HashMap<>();
|
|
|
|
Map<String, ColumnWrapper> columns = new LinkedHashMap<>(combinedHeaders.size()); |
|
|
@ -758,7 +831,9 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi |
|
|
|
cascadeItemId = uriParts[1]; |
|
|
|
|
|
|
|
// 根据uri上的id,找到关联的itemid,从而找到关联的item的值
|
|
|
|
cascadeItemColumnWrapper = columnWrappers.get(cascadeItemId); |
|
|
|
if (columnWrappers != null){ |
|
|
|
cascadeItemColumnWrapper = columnWrappers.get(cascadeItemId); |
|
|
|
} |
|
|
|
} else { |
|
|
|
pureUri = fullUri; |
|
|
|
} |
|
|
@ -857,6 +932,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi |
|
|
|
|
|
|
|
/** |
|
|
|
* @description 合并表头 |
|
|
|
* Map<Integer, List<String>> |
|
|
|
* |
|
|
|
* @param headList |
|
|
|
* @return |
|
|
@ -864,67 +940,42 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi |
|
|
|
* @date 2021.10.27 16:17:34 |
|
|
|
*/ |
|
|
|
private Map<Integer, List<String>> mergeHead(List<Map<Integer, String>> headList) { |
|
|
|
Map<Integer, String> l1 = headList.get(0); |
|
|
|
Map<Integer, String> l2 = headList.get(1); |
|
|
|
Map<Integer, String> l3 = headList.get(2); |
|
|
|
|
|
|
|
String l1LastHeadName = ""; |
|
|
|
String l2LastHeadName = ""; |
|
|
|
Map<Integer, String> lastNotNullHeads = new LinkedHashMap<>(); |
|
|
|
|
|
|
|
//Map<Integer, String> resultMap = new HashMap<>();
|
|
|
|
HashMap<Integer, List<String>> result = new HashMap<>(); |
|
|
|
Map<Integer, List<String>> mergedHead = new LinkedHashMap<>(); |
|
|
|
|
|
|
|
for (Map.Entry<Integer, String> entry : l1.entrySet()) { |
|
|
|
int levelCount = headList.size(); |
|
|
|
|
|
|
|
StringBuilder headerNameConcatStr = new StringBuilder(); |
|
|
|
Map<Integer, String> firstLevel = headList.get(0); |
|
|
|
|
|
|
|
Integer key = entry.getKey(); |
|
|
|
String l1TempValue = entry.getValue(); |
|
|
|
// 遍历所有列
|
|
|
|
for (Map.Entry<Integer, String> column : firstLevel.entrySet()) { |
|
|
|
Integer columIndex = column.getKey(); |
|
|
|
|
|
|
|
String l2TempValue = l2.get(key); |
|
|
|
String l3TempValue = l3.get(key); |
|
|
|
|
|
|
|
if (StringUtils.isNotBlank(l1TempValue)) { |
|
|
|
l1LastHeadName = l1TempValue; |
|
|
|
} |
|
|
|
|
|
|
|
if (StringUtils.isNotBlank(l2TempValue)) { |
|
|
|
l2LastHeadName = l2TempValue; |
|
|
|
} |
|
|
|
List<String> labels = new ArrayList<>(); |
|
|
|
|
|
|
|
// 开始拼接
|
|
|
|
if (StringUtils.isNotBlank(l3TempValue)) { |
|
|
|
//headerNameConcatStr.append(l1LastHeadName).append(":").append(l2LastHeadName).append(":").append(l3TempValue);
|
|
|
|
//resultMap.put(key, headerNameConcatStr.toString());
|
|
|
|
ArrayList<String> parts = new ArrayList<>(); |
|
|
|
parts.add(l1LastHeadName); |
|
|
|
parts.add(l2LastHeadName); |
|
|
|
parts.add(l3TempValue); |
|
|
|
result.put(key, parts); |
|
|
|
continue; |
|
|
|
} |
|
|
|
// 竖着遍历该列的所有行
|
|
|
|
for (int currentLevel = 0; currentLevel < levelCount; currentLevel ++) { |
|
|
|
String label = headList.get(currentLevel).get(columIndex); |
|
|
|
|
|
|
|
if (StringUtils.isNotBlank(l2TempValue)) { |
|
|
|
//headerNameConcatStr.append(l1LastHeadName).append(":").append(l2LastHeadName);
|
|
|
|
//resultMap.put(key, headerNameConcatStr.toString());
|
|
|
|
ArrayList<String> parts = new ArrayList<>(); |
|
|
|
parts.add(l1LastHeadName); |
|
|
|
parts.add(l2LastHeadName); |
|
|
|
result.put(key, parts); |
|
|
|
continue; |
|
|
|
} |
|
|
|
if (StringUtils.isNotBlank(label)) { |
|
|
|
lastNotNullHeads.put(currentLevel, label); |
|
|
|
} else { |
|
|
|
if (currentLevel == 0 || StringUtils.isBlank(headList.get(currentLevel - 1).get(columIndex))) { |
|
|
|
label = lastNotNullHeads.get(currentLevel); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (StringUtils.isNotBlank(l1TempValue)) { |
|
|
|
//headerNameConcatStr.append(l1LastHeadName);
|
|
|
|
//resultMap.put(key, headerNameConcatStr.toString());
|
|
|
|
ArrayList<String> parts = new ArrayList<>(); |
|
|
|
parts.add(l1LastHeadName); |
|
|
|
result.put(key, parts); |
|
|
|
continue; |
|
|
|
if (StringUtils.isNotBlank(label)) { |
|
|
|
labels.add(label); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
mergedHead.put(columIndex, labels); |
|
|
|
} |
|
|
|
return result; |
|
|
|
|
|
|
|
return mergedHead; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -1050,24 +1101,45 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi |
|
|
|
Map<String, Map<String, Object>> result = new LinkedHashMap<>(); |
|
|
|
mapList.stream().filter(Objects::nonNull).forEach(map -> { |
|
|
|
String resiId = (String) map.getOrDefault(UserConstant.IC_RESI_USER, ""); |
|
|
|
formItemMap.forEach((k, v)->{ |
|
|
|
for (Map.Entry<String, FormItem> e : formItemMap.entrySet()) { |
|
|
|
String k = e.getKey(); |
|
|
|
FormItem v = e.getValue(); |
|
|
|
Object temp = map.get(k); |
|
|
|
if (temp != null) { |
|
|
|
if (v.getOptionSourceType().equals("remote")) { |
|
|
|
//todo 获取 options
|
|
|
|
} |
|
|
|
if (v.getItemType().equals("checkbox")) { |
|
|
|
v.getOptions().forEach(optionDTO -> { |
|
|
|
map.put(optionDTO.getValue(), temp.toString().contains(optionDTO.getValue()) ? "是" : "否"); |
|
|
|
}); |
|
|
|
} else if (v.getItemType().equals("select")) { |
|
|
|
v.getOptions().forEach(optionDTO -> { |
|
|
|
map.put(optionDTO.getValue(), temp.toString().equals(optionDTO.getValue()) ? optionDTO.getLabel() : ""); |
|
|
|
}); |
|
|
|
try { |
|
|
|
//todo 获取 options
|
|
|
|
Map<String, String> stringMap = listRemoteOptions(new HashMap<>(), v.getOptionSourceValue(), null); |
|
|
|
System.out.println("======remote:"+v.getLabel()+" "+JSON.toJSONString(stringMap)); |
|
|
|
if ("checkbox".equals(v.getItemType())) { |
|
|
|
stringMap.forEach((label, value) -> map.put(value, temp.toString().contains(value) ? "是" : "否")); |
|
|
|
} else if ("select".equals(v.getItemType())) { |
|
|
|
|
|
|
|
stringMap.forEach((label,value)->{ |
|
|
|
if (temp.toString().equals(value)){ |
|
|
|
map.put(k, label); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
} catch (Exception ex) { |
|
|
|
log.warn("listRemoteOptions url:{}",v.getOptionSourceValue()); |
|
|
|
} |
|
|
|
|
|
|
|
} else { |
|
|
|
if ("checkbox".equals(v.getItemType())) { |
|
|
|
v.getOptions().forEach(optionDTO -> { |
|
|
|
map.put(optionDTO.getValue(), temp.toString().contains(optionDTO.getValue()) ? "是" : "否"); |
|
|
|
}); |
|
|
|
} else if ("select".equals(v.getItemType())) { |
|
|
|
v.getOptions().forEach(optionDTO -> { |
|
|
|
if (optionDTO.getLabel().equals(temp.toString())){ |
|
|
|
map.put(k, optionDTO.getLabel()); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
if ("ic_resi_user".equals(baseTableName)) { |
|
|
|
resiId = (String) map.get("ID"); |
|
|
|
} |
|
|
@ -1098,6 +1170,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi |
|
|
|
map.put("VILLAGE_NAME", houseInfoDTO.getNeighborHoodName()); |
|
|
|
map.put("BUILD_NAME", houseInfoDTO.getBuildingName()); |
|
|
|
map.put("HOME_ID", houseInfoDTO.getDoorName()); |
|
|
|
map.put("UNIT_ID", houseInfoDTO.getUnitName()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|