fix: 优化逻辑

This commit is contained in:
tangwei 2026-06-03 11:47:27 +08:00
parent a2e81f5f42
commit 312925b9bc

View File

@ -1099,6 +1099,10 @@ public class EngEqDataServiceImpl implements EngEqDataService {
private List<EngEqStaticIntervalVo> queryStaticIntervals(DataSourceRequest dataSourceRequest, String type) {
StringBuilder sql = new StringBuilder();
Map<String, Object> 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<String, Object> 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<String, Object> 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<String> 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";