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) { private List<EngEqStaticIntervalVo> queryStaticIntervals(DataSourceRequest dataSourceRequest, String type) {
StringBuilder sql = new StringBuilder(); StringBuilder sql = new StringBuilder();
Map<String, Object> paramMap = new HashMap<>(); 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 ") sql.append("SELECT ")
.append("eng.STCD AS stcd, ") .append("eng.STCD AS stcd, ")
.append(buildStaticIntervalSql("agg.QEC_RATE", "agg.QR", "qecNoRule.STCD", false)) .append(buildStaticIntervalSql("agg.QEC_RATE", "agg.QR", "qecNoRule.STCD", false))
@ -1109,7 +1113,7 @@ public class EngEqDataServiceImpl implements EngEqDataService {
.append(" AS avqInterval ") .append(" AS avqInterval ")
.append("FROM SD_ENGINFO_B_H eng ") .append("FROM SD_ENGINFO_B_H eng ")
.append("LEFT JOIN (") .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(") agg ON agg.STCD = eng.STCD ")
.append("LEFT JOIN (") .append("LEFT JOIN (")
.append(buildStaticRuleSql("EQMN")) .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_RVCD_DIC rv ON rv.RVCD = eng.RVCD ")
.append("LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD ") .append("LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD ")
.append("WHERE NVL(eng.IS_DELETED, 0) = 0 ") .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 NVL(eng.BLDSTT_CODE, 0) = 2 ") if (!hasDtinFilter) {
.append(" AND EXISTS (SELECT 1 FROM SD_QEC_R valid WHERE valid.STCD = eng.STCD AND NVL(valid.IS_DELETED, 0) = 0) "); 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)) { if (StrUtil.isNotBlank(stationFilter)) {
sql.append(" AND ").append(stationFilter).append(" "); sql.append(" AND ").append(stationFilter).append(" ");
} }
@ -1347,7 +1361,8 @@ public class EngEqDataServiceImpl implements EngEqDataService {
Map<String, Object> paramMap, Map<String, Object> paramMap,
int[] indexHolder) { int[] indexHolder) {
String tableName = "day".equalsIgnoreCase(type) ? "SD_QECDAY_S" : "SD_QEC_R"; 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(); StringBuilder sql = new StringBuilder();
sql.append("SELECT data.STCD, ") sql.append("SELECT data.STCD, ")
.append("(CASE WHEN SUM(CASE WHEN data.SFDB IN (0, 1) THEN 1 ELSE 0 END) = 0 THEN NULL ") .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, private String buildStaticTimeFilterCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap, Map<String, Object> paramMap,
int[] indexHolder,String type) { int[] indexHolder,
String timeColumn) {
if (filter == null) { if (filter == null) {
return ""; return "";
} }
@ -1978,20 +1994,14 @@ public class EngEqDataServiceImpl implements EngEqDataService {
if (!"tm".equalsIgnoreCase(filter.getField())) { if (!"tm".equalsIgnoreCase(filter.getField())) {
return ""; return "";
} }
if (type.equals("day")) { return buildGenericCondition(timeColumn, filter, paramMap, indexHolder, true);
return buildGenericCondition("data.DT", filter, paramMap, indexHolder, true);
}else{
return buildGenericCondition("data.TM", filter, paramMap, indexHolder, true);
}
} }
if (CollUtil.isEmpty(filter.getFilters())) { if (CollUtil.isEmpty(filter.getFilters())) {
return ""; return "";
} }
List<String> conditions = new ArrayList<>(); List<String> conditions = new ArrayList<>();
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
String childSql = buildStaticTimeFilterCondition(child, paramMap, indexHolder,type); String childSql = buildStaticTimeFilterCondition(child, paramMap, indexHolder, timeColumn);
if (StrUtil.isNotBlank(childSql)) { if (StrUtil.isNotBlank(childSql)) {
conditions.add("(" + childSql + ")"); conditions.add("(" + childSql + ")");
} }
@ -2137,6 +2147,7 @@ public class EngEqDataServiceImpl implements EngEqDataService {
case "baseName" -> "hb.BASENAME"; case "baseName" -> "hb.BASENAME";
case "stnm", "ennm" -> "eng.ENNM"; case "stnm", "ennm" -> "eng.ENNM";
case "baseId" -> "eng.BASE_ID"; case "baseId" -> "eng.BASE_ID";
case "dtin" -> "eng.DTIN";
case "rvcdName" -> "rv.RVNM"; case "rvcdName" -> "rv.RVNM";
case "addvcdName" -> "addv.ADDVNM"; case "addvcdName" -> "addv.ADDVNM";
case "stcd" -> "eng.STCD"; case "stcd" -> "eng.STCD";