diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java index 2debcad5..b5750551 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java @@ -496,8 +496,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { if (CollUtil.isEmpty(list)) { return; } - String sql = "SELECT t2.YS AS ys, t2.MIN_VAL AS minVal, t2.MAX_VAL AS maxVal, t2.LVL AS lvl " + - "FROM MS_WARN_RULE_B t1 " + + String sql = "SELECT t2.YS AS \"ys\", t2.MIN_VAL AS \"minVal\", t2.MAX_VAL AS \"maxVal\", t2.LVL AS \"lvl\" " + "FROM MS_WARN_RULE_B t1 " + "INNER JOIN MS_WARN_RULE_DETAIL_B t2 ON t1.ID = t2.RULE_ID " + "WHERE t1.RULE_TYPE = 'WQLVL'"; List> ruleList = microservicDynamicSQLMapper.pageAllList(null, sql, null); @@ -771,7 +770,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { "t.ORDER_INDEX AS orderIndex, " + "t.RSTCD AS rstcd, " + "eng.ENNM AS ennm, " + - "eng.BASE_ID AS baseId, " + + "t.BASE_ID AS baseId, " + "base.BASENAME AS baseName, " + "eng.HBRVCD AS hbrvcd, " + "hbrv.HBRVNM AS hbrvcdName, " + @@ -921,7 +920,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { "wq.FHSTCD AS ST_CODE, " + "CAST(NULL AS VARCHAR2(200)) AS ST_NAME, " + "eng.ENNM, " + - "eng.BASE_ID, " + + "wq.BASE_ID, " + "hb.BASENAME AS BASE_NAME, " + "rv.RVNM AS RVCD_NAME, " + "addv.ADDVNM AS ADDVCD_NAME, " + @@ -1134,8 +1133,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { if (CollUtil.isEmpty(list)) { return; } - String sql = "SELECT t2.YS AS ys, t2.MIN_VAL AS minVal, t2.MAX_VAL AS maxVal, t2.LVL AS lvl " + - "FROM MS_WARN_RULE_B t1 " + + String sql = "SELECT t2.YS AS \"ys\", t2.MIN_VAL AS \"minVal\", t2.MAX_VAL AS \"maxVal\", t2.LVL AS \"lvl\" " + "FROM MS_WARN_RULE_B t1 " + "INNER JOIN MS_WARN_RULE_DETAIL_B t2 ON t1.ID = t2.RULE_ID " + "WHERE t1.RULE_TYPE = 'WQLVL'"; List> ruleList = microservicDynamicSQLMapper.pageAllList(null, sql, null); @@ -1315,10 +1313,13 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { } sql.append("FROM (").append(buildStationBaseSql()).append(") MSB "); if (calculated) { - sql.append("INNER JOIN MS_WQCALCULATION_T MWT ON MWT.STCD = MSB.STCD ") - .append("WHERE MWT.RECORD_USER = #{map.recordUser} "); + sql.append("INNER JOIN (") + .append(buildEnvWqMetricSourceSql(true)) + .append(") MWT ON MWT.STCD = MSB.STCD "); } else { - sql.append("INNER JOIN MS_WQ_T MWT ON MWT.STCD = MSB.STCD ") + sql.append("INNER JOIN (") + .append(buildEnvWqMetricSourceSql(false)) + .append(") MWT ON MWT.STCD = MSB.STCD ") .append("LEFT JOIN SD_WQDAY_S WQD ON WQD.DT = MWT.TM AND MSB.STCD = WQD.STCD AND NVL(WQD.IS_DELETED, 0) = 0 ") .append("LEFT JOIN SD_WQDAY_S WQD2 ON ADD_MONTHS(WQD2.DT, 12) = WQD.DT AND WQD2.STCD = WQD.STCD AND NVL(WQD2.IS_DELETED, 0) = 0 "); } @@ -1326,6 +1327,21 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { return sql.toString(); } + private String buildEnvWqMetricSourceSql(boolean calculated) { + if (calculated) { + return "SELECT " + + "ID, STCD, TM, TYPE, STTYPE, SFDB, DR_MONTH, DR_YEAR, " + + "WQ_SFDB_HY, WQ_SFDB_COUNT, WQ_SFDB_HO, WQ_RATE, WQ_SFDB_HN " + + "FROM MS_WQCALCULATION_T " + + "WHERE NVL(IS_DELETED, 0) = 0 AND RECORD_USER = #{map.recordUser}"; + } + return "SELECT " + + "ID, STCD, TM, TYPE, STTYPE, SFDB, DR_MONTH, DR_YEAR, " + + "WQ_SFDB_HY, WQ_SFDB_COUNT, WQ_SFDB_HO, WQ_RATE, WQ_SFDB_HN " + + "FROM MS_WQ_T " + + "WHERE NVL(IS_DELETED, 0) = 0"; + } + private String buildStationBaseSql() { return "SELECT " + "wq.STCD, " + @@ -1347,7 +1363,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { "FROM SD_WQ_B_H wq " + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wq.RSTCD " + "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = wq.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " + - "LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND hbrv.BASEID = eng.BASE_ID AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 " + + "LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND hbrv.BASEID = wq.BASE_ID AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 " + "LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD " + "LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD " + "LEFT JOIN MS_ALONG_B rvAlong ON rvAlong.RVCD = eng.HBRVCD AND rvAlong.CODE = 'common' AND NVL(rvAlong.IS_DELETED, 0) = 0 " + @@ -1521,7 +1537,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { item.put("field", group.getField()); } item.put("key", group.getKey()); - item.put("keyName", group.getKeyName()); + item.put("keyName", StrUtil.blankToDefault(group.getKeyName(), resolveEnvWqGroupKeyName(group.getField(), group.getKey()))); item.put("keyExt", group.getKeyExt() == null ? new HashMap<>() : group.getKeyExt()); item.put("count", group.getCount()); item.put("summary", group.getSummary() == null ? new Object[0] : group.getSummary()); @@ -1536,6 +1552,31 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { return result; } + private String resolveEnvWqGroupKeyName(Object field, Object key) { + if (field == null || key == null) { + return null; + } + String fieldName = String.valueOf(field); + String keyValue = String.valueOf(key); + return switch (fieldName) { + case "sfdb" -> parseInteger(keyValue) == null ? null : getSfdbName(parseInteger(keyValue)); + case "sttype" -> getSttypeName(keyValue); + case "wwqtg", "wqGrd", "beforeWqGrd" -> getWqLevelName(keyValue); + default -> null; + }; + } + + private Integer parseInteger(String value) { + if (StrUtil.isBlank(value)) { + return null; + } + try { + return Integer.parseInt(value); + } catch (NumberFormatException ex) { + return null; + } + } + private Object readGroupValue(Map row, String field) { Object value = row.get(field); if (value == null) { @@ -1731,7 +1772,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { "t.DTIN AS DTIN, " + "t.RSTCD AS RSTCD, " + "eng.ENNM AS ENNM, " + - "eng.BASE_ID AS BASEID, " + + "t.BASE_ID AS BASEID, " + "eng.HBRVCD AS HBRVCD, " + "eng.RVCD AS RVCD, " + "eng.ADDVCD AS ADDVCD, " + @@ -2254,7 +2295,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { selectMap.put("orderIndex", "t.ORDER_INDEX AS orderIndex"); selectMap.put("rstcd", "t.RSTCD AS rstcd"); selectMap.put("ennm", "eng.ENNM AS ennm"); - selectMap.put("baseId", "eng.BASE_ID AS baseId"); + selectMap.put("baseId", "t.BASE_ID AS baseId"); selectMap.put("baseName", "hb.BASENAME AS baseName"); selectMap.put("hbrvcd", "eng.HBRVCD AS hbrvcd"); selectMap.put("hbrvcdName", "hbrv.HBRVNM AS hbrvcdName"); @@ -2369,7 +2410,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { private String buildMsstbprptDetailOrderBySql(List sortList) { if (CollUtil.isEmpty(sortList)) { - return " ORDER BY eng.BASE_ID ASC NULLS LAST, eng.HBRVCD ASC NULLS LAST, eng.ORDER_INDEX ASC NULLS LAST, t.ORDER_INDEX ASC NULLS LAST, t.STCD ASC "; + return " ORDER BY t.BASE_ID ASC NULLS LAST, eng.HBRVCD ASC NULLS LAST, eng.ORDER_INDEX ASC NULLS LAST, t.ORDER_INDEX ASC NULLS LAST, t.STCD ASC "; } List orderColumns = new ArrayList<>(); for (DataSourceRequest.SortDescriptor sortDescriptor : sortList) { @@ -2402,7 +2443,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { orderColumns.add(column + " " + dir + " NULLS LAST"); } if (orderColumns.isEmpty()) { - return " ORDER BY eng.BASE_ID ASC NULLS LAST, eng.HBRVCD ASC NULLS LAST, eng.ORDER_INDEX ASC NULLS LAST, t.ORDER_INDEX ASC NULLS LAST, t.STCD ASC "; + return " ORDER BY t.BASE_ID ASC NULLS LAST, eng.HBRVCD ASC NULLS LAST, eng.ORDER_INDEX ASC NULLS LAST, t.ORDER_INDEX ASC NULLS LAST, t.STCD ASC "; } return " ORDER BY " + String.join(", ", orderColumns); } diff --git a/backend/src/main/resources/application-prod.yml b/backend/src/main/resources/application-prod.yml index 8520bc61..b125d232 100644 --- a/backend/src/main/resources/application-prod.yml +++ b/backend/src/main/resources/application-prod.yml @@ -122,6 +122,8 @@ logging: level: root: info com.yfd.platform: info + com.yfd.platform.common.MicroservicDynamicSQLMapper: debug + # ... existing code ... # com.yfd.platform.*.mapper: trace # 在线文档: swagger-ui(生产环境建议关闭)