diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java index e067db09..4b3fb30a 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yfd.platform.common.DataSourceLoadOptionsBase; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; +import com.yfd.platform.common.Group; import com.yfd.platform.common.GroupHelper; import com.yfd.platform.common.GroupingInfo; import com.yfd.platform.common.MicroservicDynamicSQLMapper; @@ -752,7 +753,9 @@ public class EngEqDataServiceImpl implements EngEqDataService { if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) { result.setData((List) (List) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos))); } else { - result.setData((List) (List) new GroupHelper().group(rows, Arrays.asList(groupInfos))); + List grouped = new GroupHelper().group(rows, Arrays.asList(groupInfos)); + populateHourDayGroupKeyNames(grouped); + result.setData((List) (List) grouped); } result.setTotal(0L); result.setAggregates(new HashMap<>()); @@ -907,7 +910,9 @@ public class EngEqDataServiceImpl implements EngEqDataService { if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) { result.setData((List) (List) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos))); } else { - result.setData((List) (List) new GroupHelper().group(rows, Arrays.asList(groupInfos))); + List grouped = new GroupHelper().group(rows, Arrays.asList(groupInfos)); + populateHourDayGroupKeyNames(grouped); + result.setData((List) (List) grouped); } result.setTotal(0L); result.setAggregates(new HashMap<>()); @@ -961,6 +966,169 @@ public class EngEqDataServiceImpl implements EngEqDataService { } } + private void populateHourDayGroupKeyNames(List groups) { + if (CollUtil.isEmpty(groups)) { + return; + } + Map baseNameCache = new HashMap<>(); + Map hbrvNameCache = new HashMap<>(); + populateHourDayGroupKeyNames(groups, baseNameCache, hbrvNameCache); + } + + private void populateHourDayGroupKeyNames(List groups, + Map baseNameCache, + Map hbrvNameCache) { + for (Group group : groups) { + if (group == null) { + continue; + } + if (StrUtil.isBlank(group.getKeyName())) { + group.setKeyName(resolveHourDayGroupKeyName(group.getField(), group.getKey(), baseNameCache, hbrvNameCache)); + } + if (CollUtil.isNotEmpty(group.getItems()) && group.getItems().get(0) instanceof Group) { + populateHourDayGroupKeyNames((List) group.getItems(), baseNameCache, hbrvNameCache); + } + } + } + + private String resolveHourDayGroupKeyName(Object field, + Object key, + Map baseNameCache, + Map hbrvNameCache) { + if (field == null || key == null) { + return null; + } + String fieldName = String.valueOf(field); + String keyValue = String.valueOf(key); + if (StrUtil.isBlank(keyValue)) { + return null; + } + return switch (fieldName) { + case "stnm", "ennm", "titleName", "baseName", "hbrvcdName", "addvcdName" -> keyValue; + case "sttp", "sttpCode" -> "ENG".equalsIgnoreCase(keyValue) ? "电站" : keyValue; + case "baseId" -> StrUtil.blankToDefault(resolveBaseName(keyValue, baseNameCache), keyValue); + case "hbrvcd" -> StrUtil.blankToDefault(resolveHbrvName(keyValue, hbrvNameCache), keyValue); + case "dtin" -> resolveDtinName(keyValue); + case "dtinEnv" -> resolveDtinEnvName(keyValue); + case "prsc" -> resolvePrscName(keyValue); + case "bldstt", "bldsttCcode" -> resolveBldsttName(keyValue); + case "qecInterval", "mwrInterval", "avqInterval" -> resolveQecIntervalName(keyValue); + case "anchoPointState", "mwrPointState", "avqPointState" -> resolvePointStateName(keyValue); + default -> keyValue; + }; + } + + private String resolveBaseName(String baseId, Map cache) { + if (StrUtil.isBlank(baseId)) { + return null; + } + if (cache.containsKey(baseId)) { + return cache.get(baseId); + } + Map paramMap = new HashMap<>(); + paramMap.put("code", baseId); + List> rows = microservicDynamicSQLMapper.pageAllList(null, + "SELECT hb.BASENAME AS name FROM SD_HYDROBASE hb " + + "WHERE hb.BASEID = #{map.code} AND NVL(hb.IS_DELETED, 0) = 0 AND ROWNUM = 1", + paramMap); + String name = extractName(rows); + cache.put(baseId, name); + return name; + } + + private String resolveHbrvName(String hbrvcd, Map cache) { + if (StrUtil.isBlank(hbrvcd)) { + return null; + } + if (cache.containsKey(hbrvcd)) { + return cache.get(hbrvcd); + } + Map paramMap = new HashMap<>(); + paramMap.put("code", hbrvcd); + List> rows = microservicDynamicSQLMapper.pageAllList(null, + "SELECT dic.HBRVNM AS name FROM SD_HBRV_DIC dic " + + "WHERE dic.HBRVCD = #{map.code} AND NVL(dic.IS_DELETED, 0) = 0 AND NVL(dic.ENABLED, 1) = 1 AND ROWNUM = 1", + paramMap); + String name = extractName(rows); + cache.put(hbrvcd, name); + return name; + } + + private String extractName(List> rows) { + if (CollUtil.isEmpty(rows)) { + return null; + } + Object name = rows.get(0).get("NAME"); + if (name == null) { + name = rows.get(0).get("name"); + } + return name == null ? null : String.valueOf(name); + } + + private String resolveDtinName(String keyValue) { + return switch (keyValue) { + case "1" -> "是"; + case "0" -> "否"; + default -> keyValue; + }; + } + + private String resolveDtinEnvName(String keyValue) { + return switch (keyValue) { + case "2" -> "已全部接入"; + case "1" -> "部分接入"; + case "0" -> "未接入"; + default -> keyValue; + }; + } + + private String resolvePrscName(String keyValue) { + return switch (keyValue) { + case "1" -> "大型1"; + case "2" -> "大型2"; + case "3" -> "中型"; + case "4" -> "小型"; + default -> keyValue; + }; + } + + private String resolveBldsttName(String keyValue) { + return switch (keyValue) { + case "0" -> "未建/规划"; + case "1" -> "在建"; + case "2" -> "已建"; + default -> keyValue; + }; + } + + private String resolveQecIntervalName(String keyValue) { + for (QecIntervalEnum item : QecIntervalEnum.values()) { + if (Objects.equals(item.getCode(), keyValue)) { + return item.getDesc(); + } + } + return keyValue; + } + + private String resolvePointStateName(String keyValue) { + String prefix; + if (keyValue.startsWith("eef_1_")) { + prefix = "大型1"; + } else if (keyValue.startsWith("eef_2_")) { + prefix = "大型2/中型"; + } else { + return keyValue; + } + return switch (keyValue.substring("eef_".length())) { + case "1_none", "2_none" -> prefix + "_无生态流量数据或要求"; + case "1_1", "2_1" -> prefix + "_>=95%"; + case "1_2", "2_2" -> prefix + "_90%~95%"; + case "1_3", "2_3" -> prefix + "_80%~90%"; + case "1_4", "2_4" -> prefix + "_<80%"; + default -> keyValue; + }; + } + private String buildDayIntervalViewSql(DataSourceRequest.FilterDescriptor filter, Map paramMap, int[] indexHolder) {