From 312925b9bcfbe24ec88dd13b156d0ca2f452143b Mon Sep 17 00:00:00 2001 From: tangwei Date: Wed, 3 Jun 2026 11:47:27 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eq/service/impl/EngEqDataServiceImpl.java | 41 ++++++++++++------- 1 file changed, 26 insertions(+), 15 deletions(-) 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 f52967b0..1d251c5c 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 @@ -1099,6 +1099,10 @@ public class EngEqDataServiceImpl implements EngEqDataService { private List queryStaticIntervals(DataSourceRequest dataSourceRequest, String type) { StringBuilder sql = new StringBuilder(); Map paramMap = new HashMap<>(); + int[] indexHolder = new int[]{0}; + boolean hasDtinFilter = CollUtil.isNotEmpty(findFilterValues(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), "dtin")); + String validTable = "day".equalsIgnoreCase(type) ? "SD_QECDAY_S" : "SD_QEC_R"; + String validTimeColumn = "day".equalsIgnoreCase(type) ? "valid.DT" : "valid.TM"; sql.append("SELECT ") .append("eng.STCD AS stcd, ") .append(buildStaticIntervalSql("agg.QEC_RATE", "agg.QR", "qecNoRule.STCD", false)) @@ -1109,7 +1113,7 @@ public class EngEqDataServiceImpl implements EngEqDataService { .append(" AS avqInterval ") .append("FROM SD_ENGINFO_B_H eng ") .append("LEFT JOIN (") - .append(buildStaticAggregateSql(type, dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0})) + .append(buildStaticAggregateSql(type, dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, indexHolder)) .append(") agg ON agg.STCD = eng.STCD ") .append("LEFT JOIN (") .append(buildStaticRuleSql("EQMN")) @@ -1123,11 +1127,21 @@ public class EngEqDataServiceImpl implements EngEqDataService { .append("LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD ") .append("LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD ") .append("WHERE NVL(eng.IS_DELETED, 0) = 0 ") - .append(" AND NVL(eng.DTIN, 0) = 1 ") - .append(" AND NVL(eng.BLDSTT_CODE, 0) = 2 ") - .append(" AND EXISTS (SELECT 1 FROM SD_QEC_R valid WHERE valid.STCD = eng.STCD AND NVL(valid.IS_DELETED, 0) = 0) "); + .append(" AND NVL(eng.BLDSTT_CODE, 0) = 2 "); + if (!hasDtinFilter) { + sql.append(" AND NVL(eng.DTIN, 0) = 1 "); + } + sql.append(" AND EXISTS (SELECT 1 FROM ") + .append(validTable) + .append(" valid WHERE valid.STCD = eng.STCD AND NVL(valid.IS_DELETED, 0) = 0"); + String validTimeFilter = buildStaticTimeFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), + paramMap, indexHolder, validTimeColumn); + if (StrUtil.isNotBlank(validTimeFilter)) { + sql.append(" AND ").append(validTimeFilter); + } + sql.append(") "); - String stationFilter = buildStaticStationFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0}); + String stationFilter = buildStaticStationFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, indexHolder); if (StrUtil.isNotBlank(stationFilter)) { sql.append(" AND ").append(stationFilter).append(" "); } @@ -1347,7 +1361,8 @@ public class EngEqDataServiceImpl implements EngEqDataService { Map paramMap, int[] indexHolder) { String tableName = "day".equalsIgnoreCase(type) ? "SD_QECDAY_S" : "SD_QEC_R"; - String timeFilter = buildStaticTimeFilterCondition(filter, paramMap, indexHolder,type); + String timeColumn = "day".equalsIgnoreCase(type) ? "data.DT" : "data.TM"; + String timeFilter = buildStaticTimeFilterCondition(filter, paramMap, indexHolder, timeColumn); StringBuilder sql = new StringBuilder(); sql.append("SELECT data.STCD, ") .append("(CASE WHEN SUM(CASE WHEN data.SFDB IN (0, 1) THEN 1 ELSE 0 END) = 0 THEN NULL ") @@ -1970,7 +1985,8 @@ public class EngEqDataServiceImpl implements EngEqDataService { private String buildStaticTimeFilterCondition(DataSourceRequest.FilterDescriptor filter, Map paramMap, - int[] indexHolder,String type) { + int[] indexHolder, + String timeColumn) { if (filter == null) { return ""; } @@ -1978,20 +1994,14 @@ public class EngEqDataServiceImpl implements EngEqDataService { if (!"tm".equalsIgnoreCase(filter.getField())) { return ""; } - if (type.equals("day")) { - return buildGenericCondition("data.DT", filter, paramMap, indexHolder, true); - }else{ - return buildGenericCondition("data.TM", filter, paramMap, indexHolder, true); - } - - + return buildGenericCondition(timeColumn, filter, paramMap, indexHolder, true); } if (CollUtil.isEmpty(filter.getFilters())) { return ""; } List conditions = new ArrayList<>(); for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { - String childSql = buildStaticTimeFilterCondition(child, paramMap, indexHolder,type); + String childSql = buildStaticTimeFilterCondition(child, paramMap, indexHolder, timeColumn); if (StrUtil.isNotBlank(childSql)) { conditions.add("(" + childSql + ")"); } @@ -2137,6 +2147,7 @@ public class EngEqDataServiceImpl implements EngEqDataService { case "baseName" -> "hb.BASENAME"; case "stnm", "ennm" -> "eng.ENNM"; case "baseId" -> "eng.BASE_ID"; + case "dtin" -> "eng.DTIN"; case "rvcdName" -> "rv.RVNM"; case "addvcdName" -> "addv.ADDVNM"; case "stcd" -> "eng.STCD";