diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserExportServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserExportServiceImpl.java index 966e294733..5c4dda0d9b 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserExportServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserExportServiceImpl.java @@ -76,7 +76,6 @@ public class IcResiUserExportServiceImpl implements IcResiUserExportService { /** * desc: 根据条件查询居民信息并根据配置模板导出 * - * * @param tokenDto * @param exportResiUserFormDTO * @param response @@ -96,15 +95,15 @@ public class IcResiUserExportServiceImpl implements IcResiUserExportService { ExcelWriter excelWriter = null; try { //获取用户配置的导出条件 - Result exportConfigResult = getIcCustomExportConfig(searchForm.getCustomerId(),templateId,exportResiUserFormDTO.getExportConfig()); + Result exportConfigResult = getIcCustomExportConfig(searchForm.getCustomerId(), templateId, exportResiUserFormDTO.getExportConfig()); Map itemOriginMap = getItemMap(searchForm.getCustomerId()); IcCustomExportResultDTO exportConfigData = exportConfigResult.getData(); log.info("查询到的模板配置信息:{}", JSON.toJSONString(exportConfigData)); CustomerStaffInfoCacheResult staffInfoCacheResult = CustomerStaffRedis.getStaffInfo(searchForm.getCustomerId(), searchForm.getStaffId()); - if (staffInfoCacheResult == null){ - throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),"获取工作人员信息失败"); + if (staffInfoCacheResult == null) { + throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "获取工作人员信息失败"); } List allShowColumns = new ArrayList<>(exportConfigData.getShowSqlColumns()); @@ -114,12 +113,12 @@ public class IcResiUserExportServiceImpl implements IcResiUserExportService { List mergeColumnIndexList = new ArrayList<>(); for (int i = 0; i < allShowColumns.size(); i++) { IcCustomExportResultDTO.SqlColumn sqlColumn = allShowColumns.get(i); - if (!sqlColumn.getManyToOne()){ + if (!sqlColumn.getManyToOne()) { mergeColumnIndexList.add(i); } } - int[] mergeColumnIndex = mergeColumnIndexList.stream().filter(Objects::nonNull).mapToInt(i->i).toArray(); + int[] mergeColumnIndex = mergeColumnIndexList.stream().filter(Objects::nonNull).mapToInt(i -> i).toArray(); // 从那一列开始合并 int mergeRowIndex = exportConfigData.getHeaderRow(); @@ -162,8 +161,8 @@ public class IcResiUserExportServiceImpl implements IcResiUserExportService { result.forEach(o -> { List singleResult = new ArrayList<>(); - Map originalConditionMap = new ConcurrentHashMap<>(); - o.forEach((key,value) -> { + Map originalConditionMap = new ConcurrentHashMap<>(); + o.forEach((key, value) -> { List showSqlColumns = exportConfigData.getShowSqlColumns(); Map itemMap = showSqlColumns.stream().collect(Collectors.toMap(IcCustomExportResultDTO.SqlColumn::getColumnName, item -> item)); @@ -178,15 +177,15 @@ public class IcResiUserExportServiceImpl implements IcResiUserExportService { String vauleStr = value == null ? StrConstant.EPMETY_STR : value.toString(); //保留原始值 便于remote条件获取 - originalConditionMap.putIfAbsent(columnName,vauleStr); + originalConditionMap.putIfAbsent(columnName, vauleStr); ExportResiUserItemDTO exportResiUserItemDTO = itemOriginMap.get(tableName); FormItemResult formItemResult = exportResiUserItemDTO.getItemMap().get(columnName); String newValue = vauleStr; - if (Constant.OPITON_SOURCE_REMOTE.equals(sqlColumn.getOptionSourceType())&&StringUtils.isNotBlank(vauleStr)) { - putRemoteValue(exportResiUserItemDTO.getRemoteItemConditionMap().get(itemId), staffInfoCacheResult.getAgencyId(), o,originalConditionMap, formItemResult, columnName, vauleStr); + if (Constant.OPITON_SOURCE_REMOTE.equals(sqlColumn.getOptionSourceType()) && StringUtils.isNotBlank(vauleStr)) { + putRemoteValue(exportResiUserItemDTO.getRemoteItemConditionMap().get(itemId), staffInfoCacheResult.getAgencyId(), o, originalConditionMap, formItemResult, columnName, vauleStr); newValue = String.valueOf(o.get(columnName)); - } else if (Constant.OPITON_SOURCE_LOCAL.equals(sqlColumn.getOptionSourceType())){ + } else if (Constant.OPITON_SOURCE_LOCAL.equals(sqlColumn.getOptionSourceType())) { newValue = putOptionValue(formItemResult, vauleStr); } singleResult.add(newValue); @@ -209,6 +208,7 @@ public class IcResiUserExportServiceImpl implements IcResiUserExportService { /** * desc:校验查询表单参数 + * * @param tokenDto * @param exportResiUserFormDTO */ @@ -230,12 +230,12 @@ public class IcResiUserExportServiceImpl implements IcResiUserExportService { Result exportConfigResult = operCustomizeOpenFeignClient.getExcelHeaderAndSqlColumnForExport(param); if (!exportConfigResult.success() || exportConfigResult.getData() == null) { log.error("获取模板失败"); - throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),"获取模板失败"+exportConfigResult.getInternalMsg()); + throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "获取模板失败" + exportConfigResult.getInternalMsg()); } IcCustomExportResultDTO data = exportConfigResult.getData(); //添加一个虚拟列Id 用于分组 - data.getShowSqlColumns().add(0,new IcCustomExportResultDTO.SqlColumn(null,"ic_resi_user",false,"ID","local")); + data.getShowSqlColumns().add(0, new IcCustomExportResultDTO.SqlColumn(null, "ic_resi_user", false, "ID", "local")); List id = new ArrayList<>(); id.add("ID"); data.getHeaders().add(0, id); @@ -246,41 +246,44 @@ public class IcResiUserExportServiceImpl implements IcResiUserExportService { /** * key:itemId,value: key:columnName,中文 */ - private static Map> remoteOptionCacheMap = new HashMap<>(); + private static Map> remoteOptionCacheMap = new HashMap<>(); + private void putRemoteValue(Set conditionItemSet, String currentStaffAgencyId, Map map, Map originalConditionMap, FormItemResult e, String columnName, String vauleStr) { try { Map columnWrappers = new HashMap<>(); - if (e.getOptionSourceValue().contains(StrConstant.QUESTION_MARK)){ + if (e.getOptionSourceValue().contains(StrConstant.QUESTION_MARK)) { for (FormItemResult o : conditionItemSet) { - String conditionColumnName = o.getColumnNum() == NumConstant.ZERO? o.getColumnName():o.getColumnName().concat(o.getColumnNum().toString()); + String conditionColumnName = o.getColumnNum() == NumConstant.ZERO ? o.getColumnName() : o.getColumnName().concat(o.getColumnNum().toString()); Object conditionValue = originalConditionMap.getOrDefault(conditionColumnName, map.get(conditionColumnName)); - originalConditionMap.putIfAbsent(conditionColumnName,conditionValue.toString()); + originalConditionMap.putIfAbsent(conditionColumnName, conditionValue.toString()); IcResiUserImportServiceImpl.ColumnWrapper value = new IcResiUserImportServiceImpl.ColumnWrapper(); value.setColValue(conditionValue.toString()); columnWrappers.put(o.getItemId(), value); } } Cache cache = remoteOptionCacheMap.getOrDefault(e.getItemId(), CacheBuilder.newBuilder().maximumSize(NumConstant.FIVE_HUNDRED).build()); - remoteOptionCacheMap.putIfAbsent(e.getItemId(),cache); + remoteOptionCacheMap.putIfAbsent(e.getItemId(), cache); String cacheValue = cache.getIfPresent(vauleStr); - if (StringUtils.isNotBlank(cacheValue)){ - map.put(columnName,cacheValue); + if (StringUtils.isNotBlank(cacheValue)) { + map.put(columnName, cacheValue); } else { String[] parts = icResiUserImportService.splitOptionSourceUrl(e.getOptionSourceValue()); if (FormItemTypeEnum.CASCADER.getCode().equals(e.getItemType())) { - Map remoteOptions = icResiUserImportService.listRemoteCascadeOptions(parts[0], parts[1], columnWrappers, currentStaffAgencyId, "query"); + Map remoteOptionMap = icResiUserImportService.listRemoteCascadeOptions(parts[0], parts[1], columnWrappers, currentStaffAgencyId, "query"); List listOptions = new ArrayList<>(); - remoteOptions.forEach((value,label) -> { + String[] split = vauleStr.split(StrConstant.COMMA); + Arrays.stream(split).forEach((value) -> { //todo 看看怎么更好的利用本地缓存 - if (vauleStr.equals(value)) { - listOptions.add(label.getLabel()); + OptionResultDTO optionResultDTO = remoteOptionMap.get(value); + if (optionResultDTO != null) { + listOptions.add(optionResultDTO.getLabel()); } }); String join = Joiner.on("-").join(listOptions); - cache.put(vauleStr,join); + cache.put(vauleStr, join); map.put(columnName, join); - }else { + } else { //todo 不支持多个itemId Map remoteOptions = icResiUserImportService.listRemoteOptions(parts[0], parts[1], columnWrappers, currentStaffAgencyId, "query"); if (FormItemTypeEnum.CHECKBOX.getCode().equals(e.getItemType())) { @@ -291,28 +294,28 @@ public class IcResiUserExportServiceImpl implements IcResiUserExportService { map.put(columnName, label); } //放if外面是为了下次取得时候 可以有值 - cache.put(value,label); + cache.put(value, label); }); } } } - } catch (Exception ex) { + } catch (Exception ex) { log.warn("listRemoteOptions url", ex); } } private String putOptionValue(FormItemResult e, String vauleStr) { - if (e == null){ + if (e == null) { return vauleStr; } FormItemTypeEnum itemTypeEnum = FormItemTypeEnum.getEnum(e.getItemType()); switch (itemTypeEnum) { case CHECKBOX: - if (e.getMultiSelect()){ + if (e.getMultiSelect()) { List valueList = new ArrayList<>(); - e.getOptions().forEach(option->{ - if (vauleStr.contains(option.getValue())){ + e.getOptions().forEach(option -> { + if (vauleStr.contains(option.getValue())) { valueList.add(option.getLabel()); } }); @@ -338,36 +341,37 @@ public class IcResiUserExportServiceImpl implements IcResiUserExportService { /** * desc:获取表单配置 + * * @param customerId * @return map key:tableName ,value:ExportResiUserItemDTO */ - private Map getItemMap(String customerId){ + private Map getItemMap(String customerId) { //获取表单项 IcResiUserService icResiUserService = SpringContextUtils.getBean(IcResiUserService.class); - if (icResiUserService == null){ + if (icResiUserService == null) { log.error("获取bean IcResiUserService 失败"); return null; } List resiFormAllItems = this.icResiUserService.listFormItems(customerId, IcFormCodeEnum.RESI_BASE_INFO.getCode()); Map allItemMap = resiFormAllItems.stream().collect(Collectors.toMap(FormItemResult::getItemId, o -> o)); Map map = new HashMap<>(); - allItemMap.values().forEach(item->{ + allItemMap.values().forEach(item -> { String tableName = item.getTableName(); ExportResiUserItemDTO exportItem = map.getOrDefault(tableName, new ExportResiUserItemDTO()); - map.putIfAbsent(tableName,exportItem); + map.putIfAbsent(tableName, exportItem); String columnName = item.getColumnName().concat(item.getColumnNum() == NumConstant.ZERO ? StrConstant.EPMETY_STR : item.getColumnNum().toString()); - exportItem.getItemMap().put(columnName,item); - if (Constant.OPITON_SOURCE_REMOTE.equals(item.getOptionSourceType())&&item.getOptionSourceValue().contains(StrConstant.QUESTION_MARK)){ + exportItem.getItemMap().put(columnName, item); + if (Constant.OPITON_SOURCE_REMOTE.equals(item.getOptionSourceType()) && item.getOptionSourceValue().contains(StrConstant.QUESTION_MARK)) { //多个参数 String[] paramArr = item.getOptionSourceValue().split(StrConstant.QUESTION_MARK_TRANSFER)[NumConstant.ONE].split(StrConstant.AND_MARK); - Arrays.stream(paramArr).forEach(o->{ + Arrays.stream(paramArr).forEach(o -> { FormItemResult value = allItemMap.get(o); - if (value == null){ + if (value == null) { return; } - Set conditionSet = exportItem.getRemoteItemConditionMap().getOrDefault(item.getItemId(),new HashSet<>()); + Set conditionSet = exportItem.getRemoteItemConditionMap().getOrDefault(item.getItemId(), new HashSet<>()); conditionSet.add(value); - exportItem.getRemoteItemConditionMap().putIfAbsent(item.getItemId(),conditionSet); + exportItem.getRemoteItemConditionMap().putIfAbsent(item.getItemId(), conditionSet); }); } });