fix: 优化逻辑

This commit is contained in:
tangwei 2026-06-24 11:41:31 +08:00
parent b03837f201
commit be14b5aaf2
3 changed files with 28 additions and 21 deletions

View File

@ -1738,7 +1738,7 @@ public class VpConstructionServiceImpl implements VpConstructionService {
columnMap.put("runState", "vp.RUN_STATE"); columnMap.put("runState", "vp.RUN_STATE");
columnMap.put("runStateName", "CASE NVL(vp.RUN_STATE, -1) WHEN 1 THEN '运行' WHEN 0 THEN '未运行' ELSE NULL END"); columnMap.put("runStateName", "CASE NVL(vp.RUN_STATE, -1) WHEN 1 THEN '运行' WHEN 0 THEN '未运行' ELSE NULL END");
columnMap.put("baseStepSort", "hb.ORDER_INDEX"); columnMap.put("baseStepSort", "hb.ORDER_INDEX");
columnMap.put("rvcdStepSort", "hbrv.ORDER_INDEX"); // columnMap.put("rvcdStepSort", "hbrv.ORDER_INDEX");
columnMap.put("rstcdStepSort", "eng.ORDER_INDEX"); columnMap.put("rstcdStepSort", "eng.ORDER_INDEX");
columnMap.put("siteStepSort", "vp.ORDER_INDEX"); columnMap.put("siteStepSort", "vp.ORDER_INDEX");
return columnMap.get(field); return columnMap.get(field);

View File

@ -51,9 +51,15 @@ public class StcdWarnStateVo {
@Schema(description = "基础排序") @Schema(description = "基础排序")
private Integer baseStepSort; private Integer baseStepSort;
@Schema(description = "流域排序")
private Integer rvcdStepSort;
@Schema(description = "电站排序") @Schema(description = "电站排序")
private Integer rstcdStepSort; private Integer rstcdStepSort;
@Schema(description = "站点排序")
private Integer siteStepSort;
@Schema(description = "数据接入类型") @Schema(description = "数据接入类型")
private Integer dtinType; private Integer dtinType;
} }

View File

@ -325,7 +325,9 @@ public class WarnDataServiceImpl implements WarnDataService {
.append("r.rvcd AS rvcd, ") .append("r.rvcd AS rvcd, ")
.append("r.warnState AS warnState, ") .append("r.warnState AS warnState, ")
.append("r.baseStepSort AS baseStepSort, ") .append("r.baseStepSort AS baseStepSort, ")
.append("r.rvcdStepSort AS rvcdStepSort, ")
.append("r.rstcdStepSort AS rstcdStepSort, ") .append("r.rstcdStepSort AS rstcdStepSort, ")
.append("r.siteStepSort AS siteStepSort, ")
.append("r.dtinType AS dtinType ") .append("r.dtinType AS dtinType ")
.append("FROM (") .append("FROM (")
.append(buildWarnStcdDetailSql(warnType)) .append(buildWarnStcdDetailSql(warnType))
@ -369,18 +371,16 @@ public class WarnDataServiceImpl implements WarnDataService {
String normalizedWarnStateExpr = "CASE " + String normalizedWarnStateExpr = "CASE " +
"WHEN eng.WARN_STATE = '0' OR eng.WARN_STATE IS NULL OR eng.WARN_STATE = '' THEN '00' " + "WHEN eng.WARN_STATE = '0' OR eng.WARN_STATE IS NULL OR eng.WARN_STATE = '' THEN '00' " +
"ELSE eng.WARN_STATE END"; "ELSE eng.WARN_STATE END";
String nonEngWarnStateExpr = "CASE state.STD_SSTATE " + String wqWarnStateExpr = "TO_NUMBER(NULLIF(wq.WARN_STATE, ''))";
"WHEN 2 THEN 0 " + String wtWarnStateExpr = "TO_NUMBER(NULLIF(wt.WARN_STATE, ''))";
"WHEN 3 THEN 2 " +
"ELSE state.STD_SSTATE END";
List<String> parts = new ArrayList<>(); List<String> parts = new ArrayList<>();
if ("QEC".equalsIgnoreCase(warnType)) { if ("QEC".equalsIgnoreCase(warnType)) {
parts.add(buildWarnStcdEngSql(normalizedWarnStateExpr, warnType)); parts.add(buildWarnStcdEngSql(normalizedWarnStateExpr, warnType));
} else { } else {
parts.add(buildWarnStcdEngSql(normalizedWarnStateExpr, warnType)); parts.add(buildWarnStcdEngSql(normalizedWarnStateExpr, warnType));
parts.add(buildWarnStcdWqSql(nonEngWarnStateExpr)); parts.add(buildWarnStcdWqSql(wqWarnStateExpr));
parts.add(buildWarnStcdWtSql(nonEngWarnStateExpr)); parts.add(buildWarnStcdWtSql(wtWarnStateExpr));
} }
return String.join(" UNION ALL ", parts); return String.join(" UNION ALL ", parts);
} }
@ -409,11 +409,14 @@ public class WarnDataServiceImpl implements WarnDataService {
.append("eng.HBRVCD AS rvcd, ") .append("eng.HBRVCD AS rvcd, ")
.append(warnStateExpr).append(" AS warnState, ") .append(warnStateExpr).append(" AS warnState, ")
.append("hb.ORDER_INDEX AS baseStepSort, ") .append("hb.ORDER_INDEX AS baseStepSort, ")
.append("along.ORDER_INDEX AS rvcdStepSort, ")
.append("eng.ORDER_INDEX AS rstcdStepSort, ") .append("eng.ORDER_INDEX AS rstcdStepSort, ")
.append("eng.ORDER_INDEX AS siteStepSort, ")
.append("CAST(NULL AS NUMBER) AS dtinType ") .append("CAST(NULL AS NUMBER) AS dtinType ")
.append("FROM SD_ENGINFO_B_H eng ") .append("FROM SD_ENGINFO_B_H eng ")
.append("LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = 'ENG' AND NVL(sttp.IS_DELETED, 0) = 0 ") .append("LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = 'ENG' AND NVL(sttp.IS_DELETED, 0) = 0 ")
.append("LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 ") .append("LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 ")
.append("LEFT JOIN MS_ALONG_B along ON along.RVCD = eng.HBRVCD AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 ")
.append("WHERE NVL(eng.IS_DELETED, 0) = 0 "); .append("WHERE NVL(eng.IS_DELETED, 0) = 0 ");
if ("QEC".equalsIgnoreCase(warnType)) { if ("QEC".equalsIgnoreCase(warnType)) {
sql.append("AND NVL(eng.BLDSTT_CODE, -1) = 2 ") sql.append("AND NVL(eng.BLDSTT_CODE, -1) = 2 ")
@ -439,12 +442,15 @@ public class WarnDataServiceImpl implements WarnDataService {
"eng.HBRVCD AS rvcd, " + "eng.HBRVCD AS rvcd, " +
warnStateExpr + " AS warnState, " + warnStateExpr + " AS warnState, " +
"hb.ORDER_INDEX AS baseStepSort, " + "hb.ORDER_INDEX AS baseStepSort, " +
"along.ORDER_INDEX AS rvcdStepSort, " +
"eng.ORDER_INDEX AS rstcdStepSort, " + "eng.ORDER_INDEX AS rstcdStepSort, " +
"siteAlong.SORT AS siteStepSort, " +
"wq.DTIN_TYPE AS dtinType " + "wq.DTIN_TYPE AS dtinType " +
"FROM SD_WQ_B_H wq " + "FROM SD_WQ_B_H wq " +
"LEFT JOIN (" + buildWarnStcdLatestStateSql() + ") state ON state.STCD = wq.STCD AND state.STTP_CODE = wq.STTP " +
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wq.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wq.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " +
"LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " + "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " +
"LEFT JOIN MS_ALONG_B along ON along.RVCD = eng.HBRVCD AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 " +
"LEFT JOIN MS_ALONGDET_B siteAlong ON siteAlong.ALONG_ID = along.ID AND siteAlong.STCD = wq.STCD AND NVL(siteAlong.IS_DELETED, 0) = 0 " +
"LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = wq.STTP AND NVL(sttp.IS_DELETED, 0) = 0 " + "LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = wq.STTP AND NVL(sttp.IS_DELETED, 0) = 0 " +
"WHERE NVL(wq.IS_DELETED, 0) = 0 " + "WHERE NVL(wq.IS_DELETED, 0) = 0 " +
"AND NVL(wq.USFL, 0) = 1 " + "AND NVL(wq.USFL, 0) = 1 " +
@ -465,30 +471,21 @@ public class WarnDataServiceImpl implements WarnDataService {
"eng.HBRVCD AS rvcd, " + "eng.HBRVCD AS rvcd, " +
warnStateExpr + " AS warnState, " + warnStateExpr + " AS warnState, " +
"hb.ORDER_INDEX AS baseStepSort, " + "hb.ORDER_INDEX AS baseStepSort, " +
"along.ORDER_INDEX AS rvcdStepSort, " +
"eng.ORDER_INDEX AS rstcdStepSort, " + "eng.ORDER_INDEX AS rstcdStepSort, " +
"siteAlong.SORT AS siteStepSort, " +
"wt.DTIN_TYPE AS dtinType " + "wt.DTIN_TYPE AS dtinType " +
"FROM SD_WT_B_H wt " + "FROM SD_WT_B_H wt " +
"LEFT JOIN (" + buildWarnStcdLatestStateSql() + ") state ON state.STCD = wt.STCD AND state.STTP_CODE = wt.STTP " +
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wt.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wt.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " +
"LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " + "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " +
"LEFT JOIN MS_ALONG_B along ON along.RVCD = eng.HBRVCD AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 " +
"LEFT JOIN MS_ALONGDET_B siteAlong ON siteAlong.ALONG_ID = along.ID AND siteAlong.STCD = wt.STCD AND NVL(siteAlong.IS_DELETED, 0) = 0 " +
"LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = wt.STTP AND NVL(sttp.IS_DELETED, 0) = 0 " + "LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = wt.STTP AND NVL(sttp.IS_DELETED, 0) = 0 " +
"WHERE NVL(wt.IS_DELETED, 0) = 0 " + "WHERE NVL(wt.IS_DELETED, 0) = 0 " +
"AND NVL(wt.USFL, 0) = 1 " + "AND NVL(wt.USFL, 0) = 1 " +
"AND wt.STTP = 'WTRV' "; "AND wt.STTP = 'WTRV' ";
} }
private String buildWarnStcdLatestStateSql() {
return "SELECT s.STCD, s.STTP_CODE, s.STD_SSTATE " +
"FROM MS_STSTATE_T s " +
"INNER JOIN (" +
"SELECT STCD, MAX(YR) AS MAX_YR " +
"FROM MS_STSTATE_T " +
"WHERE NVL(IS_DELETED, 0) = 0 " +
"GROUP BY STCD" +
") mx ON mx.STCD = s.STCD AND mx.MAX_YR = s.YR " +
"WHERE NVL(s.IS_DELETED, 0) = 0";
}
private String buildWarnStcdFilterCondition(DataSourceRequest.FilterDescriptor filter, private String buildWarnStcdFilterCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap, Map<String, Object> paramMap,
int[] indexHolder) { int[] indexHolder) {
@ -595,6 +592,10 @@ public class WarnDataServiceImpl implements WarnDataService {
case "baseName" -> "r.baseName"; case "baseName" -> "r.baseName";
case "rvcd" -> "r.rvcd"; case "rvcd" -> "r.rvcd";
case "warnState" -> "r.warnState"; case "warnState" -> "r.warnState";
case "baseStepSort" -> "r.baseStepSort";
case "rvcdStepSort" -> "r.rvcdStepSort";
case "rstcdStepSort" -> "r.rstcdStepSort";
case "siteStepSort" -> "r.siteStepSort";
case "dtinType" -> "r.dtinType"; case "dtinType" -> "r.dtinType";
default -> null; default -> null;
}; };