fix: 优化逻辑

This commit is contained in:
tangwei 2026-06-02 11:28:46 +08:00
parent 75bbb0a65e
commit c5db1d6ae4
2 changed files with 58 additions and 15 deletions

View File

@ -496,8 +496,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
if (CollUtil.isEmpty(list)) { if (CollUtil.isEmpty(list)) {
return; return;
} }
String sql = "SELECT t2.YS AS ys, t2.MIN_VAL AS minVal, t2.MAX_VAL AS maxVal, t2.LVL AS lvl " + 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 " +
"FROM MS_WARN_RULE_B t1 " +
"INNER JOIN MS_WARN_RULE_DETAIL_B t2 ON t1.ID = t2.RULE_ID " + "INNER JOIN MS_WARN_RULE_DETAIL_B t2 ON t1.ID = t2.RULE_ID " +
"WHERE t1.RULE_TYPE = 'WQLVL'"; "WHERE t1.RULE_TYPE = 'WQLVL'";
List<Map<String, Object>> ruleList = microservicDynamicSQLMapper.pageAllList(null, sql, null); List<Map<String, Object>> ruleList = microservicDynamicSQLMapper.pageAllList(null, sql, null);
@ -771,7 +770,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
"t.ORDER_INDEX AS orderIndex, " + "t.ORDER_INDEX AS orderIndex, " +
"t.RSTCD AS rstcd, " + "t.RSTCD AS rstcd, " +
"eng.ENNM AS ennm, " + "eng.ENNM AS ennm, " +
"eng.BASE_ID AS baseId, " + "t.BASE_ID AS baseId, " +
"base.BASENAME AS baseName, " + "base.BASENAME AS baseName, " +
"eng.HBRVCD AS hbrvcd, " + "eng.HBRVCD AS hbrvcd, " +
"hbrv.HBRVNM AS hbrvcdName, " + "hbrv.HBRVNM AS hbrvcdName, " +
@ -921,7 +920,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
"wq.FHSTCD AS ST_CODE, " + "wq.FHSTCD AS ST_CODE, " +
"CAST(NULL AS VARCHAR2(200)) AS ST_NAME, " + "CAST(NULL AS VARCHAR2(200)) AS ST_NAME, " +
"eng.ENNM, " + "eng.ENNM, " +
"eng.BASE_ID, " + "wq.BASE_ID, " +
"hb.BASENAME AS BASE_NAME, " + "hb.BASENAME AS BASE_NAME, " +
"rv.RVNM AS RVCD_NAME, " + "rv.RVNM AS RVCD_NAME, " +
"addv.ADDVNM AS ADDVCD_NAME, " + "addv.ADDVNM AS ADDVCD_NAME, " +
@ -1134,8 +1133,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
if (CollUtil.isEmpty(list)) { if (CollUtil.isEmpty(list)) {
return; return;
} }
String sql = "SELECT t2.YS AS ys, t2.MIN_VAL AS minVal, t2.MAX_VAL AS maxVal, t2.LVL AS lvl " + 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 " +
"FROM MS_WARN_RULE_B t1 " +
"INNER JOIN MS_WARN_RULE_DETAIL_B t2 ON t1.ID = t2.RULE_ID " + "INNER JOIN MS_WARN_RULE_DETAIL_B t2 ON t1.ID = t2.RULE_ID " +
"WHERE t1.RULE_TYPE = 'WQLVL'"; "WHERE t1.RULE_TYPE = 'WQLVL'";
List<Map<String, Object>> ruleList = microservicDynamicSQLMapper.pageAllList(null, sql, null); List<Map<String, Object>> ruleList = microservicDynamicSQLMapper.pageAllList(null, sql, null);
@ -1315,10 +1313,13 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
} }
sql.append("FROM (").append(buildStationBaseSql()).append(") MSB "); sql.append("FROM (").append(buildStationBaseSql()).append(") MSB ");
if (calculated) { if (calculated) {
sql.append("INNER JOIN MS_WQCALCULATION_T MWT ON MWT.STCD = MSB.STCD ") sql.append("INNER JOIN (")
.append("WHERE MWT.RECORD_USER = #{map.recordUser} "); .append(buildEnvWqMetricSourceSql(true))
.append(") MWT ON MWT.STCD = MSB.STCD ");
} else { } 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 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 "); .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(); 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() { private String buildStationBaseSql() {
return "SELECT " + return "SELECT " +
"wq.STCD, " + "wq.STCD, " +
@ -1347,7 +1363,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
"FROM SD_WQ_B_H wq " + "FROM SD_WQ_B_H wq " +
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wq.RSTCD " + "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_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_RVCD_DIC rv ON rv.RVCD = eng.RVCD " +
"LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD " + "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 " + "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("field", group.getField());
} }
item.put("key", group.getKey()); 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("keyExt", group.getKeyExt() == null ? new HashMap<>() : group.getKeyExt());
item.put("count", group.getCount()); item.put("count", group.getCount());
item.put("summary", group.getSummary() == null ? new Object[0] : group.getSummary()); item.put("summary", group.getSummary() == null ? new Object[0] : group.getSummary());
@ -1536,6 +1552,31 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
return result; 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<String, Object> row, String field) { private Object readGroupValue(Map<String, Object> row, String field) {
Object value = row.get(field); Object value = row.get(field);
if (value == null) { if (value == null) {
@ -1731,7 +1772,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
"t.DTIN AS DTIN, " + "t.DTIN AS DTIN, " +
"t.RSTCD AS RSTCD, " + "t.RSTCD AS RSTCD, " +
"eng.ENNM AS ENNM, " + "eng.ENNM AS ENNM, " +
"eng.BASE_ID AS BASEID, " + "t.BASE_ID AS BASEID, " +
"eng.HBRVCD AS HBRVCD, " + "eng.HBRVCD AS HBRVCD, " +
"eng.RVCD AS RVCD, " + "eng.RVCD AS RVCD, " +
"eng.ADDVCD AS ADDVCD, " + "eng.ADDVCD AS ADDVCD, " +
@ -2254,7 +2295,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
selectMap.put("orderIndex", "t.ORDER_INDEX AS orderIndex"); selectMap.put("orderIndex", "t.ORDER_INDEX AS orderIndex");
selectMap.put("rstcd", "t.RSTCD AS rstcd"); selectMap.put("rstcd", "t.RSTCD AS rstcd");
selectMap.put("ennm", "eng.ENNM AS ennm"); 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("baseName", "hb.BASENAME AS baseName");
selectMap.put("hbrvcd", "eng.HBRVCD AS hbrvcd"); selectMap.put("hbrvcd", "eng.HBRVCD AS hbrvcd");
selectMap.put("hbrvcdName", "hbrv.HBRVNM AS hbrvcdName"); selectMap.put("hbrvcdName", "hbrv.HBRVNM AS hbrvcdName");
@ -2369,7 +2410,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
private String buildMsstbprptDetailOrderBySql(List<DataSourceRequest.SortDescriptor> sortList) { private String buildMsstbprptDetailOrderBySql(List<DataSourceRequest.SortDescriptor> sortList) {
if (CollUtil.isEmpty(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<String> orderColumns = new ArrayList<>(); List<String> orderColumns = new ArrayList<>();
for (DataSourceRequest.SortDescriptor sortDescriptor : sortList) { for (DataSourceRequest.SortDescriptor sortDescriptor : sortList) {
@ -2402,7 +2443,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
orderColumns.add(column + " " + dir + " NULLS LAST"); orderColumns.add(column + " " + dir + " NULLS LAST");
} }
if (orderColumns.isEmpty()) { 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); return " ORDER BY " + String.join(", ", orderColumns);
} }

View File

@ -122,6 +122,8 @@ logging:
level: level:
root: info root: info
com.yfd.platform: info com.yfd.platform: info
com.yfd.platform.common.MicroservicDynamicSQLMapper: debug
# ... existing code ...
# com.yfd.platform.*.mapper: trace # com.yfd.platform.*.mapper: trace
# 在线文档: swagger-ui生产环境建议关闭 # 在线文档: swagger-ui生产环境建议关闭