fix: 优化逻辑
This commit is contained in:
parent
a2e81f5f42
commit
312925b9bc
@ -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";
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user