fix: 优化

This commit is contained in:
tangwei 2026-06-01 20:02:13 +08:00
parent d3d41cb3b6
commit 81b3b8b981

View File

@ -368,7 +368,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
"WHERE NVL(mab.IS_DELETED, 0) = 0 " + "WHERE NVL(mab.IS_DELETED, 0) = 0 " +
" AND NVL(sab.IS_DELETED, 0) = 0 " + " AND NVL(sab.IS_DELETED, 0) = 0 " +
" AND mab.CODE = 'common' " + " AND mab.CODE = 'common' " +
" AND eng.BASE_ID = #{map.baseId} " + " AND wq.BASE_ID = #{map.baseId} " +
" AND r.TM >= TO_DATE(#{map.startTime}, 'YYYY-MM-DD HH24:MI:SS') " + " AND r.TM >= TO_DATE(#{map.startTime}, 'YYYY-MM-DD HH24:MI:SS') " +
" AND r.TM <= TO_DATE(#{map.endTime}, 'YYYY-MM-DD HH24:MI:SS') " + " AND r.TM <= TO_DATE(#{map.endTime}, 'YYYY-MM-DD HH24:MI:SS') " +
"ORDER BY NVL(mab.ORDER_INDEX, 999999) ASC, NVL(sab.SORT, 999999) ASC " + "ORDER BY NVL(mab.ORDER_INDEX, 999999) ASC, NVL(sab.SORT, 999999) ASC " +
@ -386,7 +386,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
"WHERE NVL(mab.IS_DELETED, 0) = 0 " + "WHERE NVL(mab.IS_DELETED, 0) = 0 " +
" AND NVL(sab.IS_DELETED, 0) = 0 " + " AND NVL(sab.IS_DELETED, 0) = 0 " +
" AND mab.CODE = 'common' " + " AND mab.CODE = 'common' " +
" AND eng.BASE_ID = #{map.baseId} " + " AND wq.BASE_ID = #{map.baseId} " +
"ORDER BY r.TM DESC " + "ORDER BY r.TM DESC " +
") WHERE ROWNUM = 1"; ") WHERE ROWNUM = 1";
} }
@ -412,7 +412,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
sql.append("AND mab.RVCD = #{map.rvcd} "); sql.append("AND mab.RVCD = #{map.rvcd} ");
} }
if (StrUtil.isNotBlank(baseId)) { if (StrUtil.isNotBlank(baseId)) {
sql.append("AND eng.BASE_ID = #{map.baseId} "); sql.append("AND wq.BASE_ID = #{map.baseId} ");
} }
sql.append("AND swr.TM IS NOT NULL ") sql.append("AND swr.TM IS NOT NULL ")
.append("ORDER BY NVL(mab.ORDER_INDEX, 999999) ASC, NVL(sab.SORT, 999999) ASC, swr.TM DESC") .append("ORDER BY NVL(mab.ORDER_INDEX, 999999) ASC, NVL(sab.SORT, 999999) ASC, swr.TM DESC")
@ -486,7 +486,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
sql.append("AND mab.RVCD = #{map.rvcd} "); sql.append("AND mab.RVCD = #{map.rvcd} ");
} }
if (StrUtil.isNotBlank(baseId)) { if (StrUtil.isNotBlank(baseId)) {
sql.append("AND eng.BASE_ID = #{map.baseId} "); sql.append("AND wq.BASE_ID = #{map.baseId} ");
} }
sql.append("ORDER BY NVL(mab.ORDER_INDEX, 999999) ASC, NVL(sab.SORT, 999999) ASC"); sql.append("ORDER BY NVL(mab.ORDER_INDEX, 999999) ASC, NVL(sab.SORT, 999999) ASC");
return sql.toString(); return sql.toString();
@ -551,9 +551,9 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
.append(buildMsstbprptDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect())) .append(buildMsstbprptDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect()))
.append(" FROM SD_WQ_B_H t ") .append(" FROM SD_WQ_B_H t ")
.append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = t.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ") .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = t.RSTCD AND NVL(eng.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 = t.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 ")
.append("LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD ") .append("LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD ")
.append(" AND hbrv.BASEID = eng.BASE_ID ") .append(" AND hbrv.BASEID = t.BASE_ID ")
.append(" AND NVL(hbrv.IS_DELETED, 0) = 0 ") .append(" AND NVL(hbrv.IS_DELETED, 0) = 0 ")
.append(" AND NVL(hbrv.ENABLED, 1) = 1 ") .append(" AND NVL(hbrv.ENABLED, 1) = 1 ")
.append("LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD ") .append("LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD ")
@ -581,29 +581,31 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
return result; return result;
} }
String groupField = "dtinType"; GroupingInfo[] groupInfos = loadOptions == null ? null : loadOptions.getGroup();
String groupColumn = "t.DTIN_TYPE"; StringBuilder baseSql = new StringBuilder();
String groupDir = "ASC"; baseSql.append("SELECT ")
if (CollUtil.isNotEmpty(dataSourceRequest.getGroup())) { .append("NVL(t.IS_DELETED, 0) AS isDeleted, ")
DataSourceRequest.GroupDescriptor groupDescriptor = dataSourceRequest.getGroup().get(0); .append("t.STTP AS sttpCode, ")
if (groupDescriptor != null && StrUtil.isNotBlank(groupDescriptor.getField())) { .append("t.MWAY AS mway, ")
groupField = groupDescriptor.getField(); .append("t.DTIN_TYPE AS dtinType, ")
String mappedColumn = mapMsstbprptColumn(groupField); .append("t.STCD AS stcd, ")
if (StrUtil.isNotBlank(mappedColumn)) { .append("t.STNM AS stnm, ")
groupColumn = mappedColumn; .append("t.FHSTCD AS fhstcd, ")
} .append("t.DTIN AS dtin, ")
if ("desc".equalsIgnoreCase(groupDescriptor.getDir()) || "des".equalsIgnoreCase(groupDescriptor.getDir())) { .append("t.BASE_ID AS baseId, ")
groupDir = "DESC"; .append("hb.BASENAME AS baseName, ")
} .append("hb.ORDER_INDEX AS baseStepSort, ")
} .append("eng.HBRVCD AS hbrvcd, ")
} .append("hbrv.HBRVNM AS hbrvcdName, ")
.append("eng.ORDER_INDEX AS rstcdStepSort, ")
StringBuilder sql = new StringBuilder(); .append("t.ORDER_INDEX AS siteStepSort ")
sql.append("SELECT ")
.append(groupColumn).append(" AS ").append(groupField.toUpperCase()).append(", ")
.append("COUNT(*) AS COUNT_").append(groupField.toUpperCase()).append(" ")
.append("FROM SD_WQ_B_H t ") .append("FROM SD_WQ_B_H t ")
.append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = t.RSTCD ") .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = t.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ")
.append("LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = t.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 ")
.append("LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD ")
.append(" AND hbrv.BASEID = t.BASE_ID ")
.append(" AND NVL(hbrv.IS_DELETED, 0) = 0 ")
.append(" AND NVL(hbrv.ENABLED, 1) = 1 ")
.append("WHERE NVL(t.IS_DELETED, 0) = 0 "); .append("WHERE NVL(t.IS_DELETED, 0) = 0 ");
Map<String, Object> paramMap = new HashMap<>(); Map<String, Object> paramMap = new HashMap<>();
@ -613,14 +615,17 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
new int[]{0} new int[]{0}
); );
if (StrUtil.isNotBlank(filterSql)) { if (StrUtil.isNotBlank(filterSql)) {
sql.append(" AND ").append(filterSql).append(" "); baseSql.append(" AND ").append(filterSql).append(" ");
} }
sql.append("GROUP BY ").append(groupColumn).append(" ")
.append("ORDER BY ").append(groupColumn).append(" ").append(groupDir);
List<Map<String, Object>> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap); String groupedSql = buildMsstbprptGroupSql(baseSql.toString(), groupInfos);
List<Map<String, Object>> rows = microservicDynamicSQLMapper.pageAllList(null, groupedSql, paramMap);
DataSourceResult result = new DataSourceResult(); DataSourceResult result = new DataSourceResult();
result.setData(toMsstbprptLegacyGroups(rows, groupField)); if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) {
result.setData(new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos)));
} else {
result.setData(toLegacyGroupResult(new GroupHelper().group(rows, Arrays.asList(groupInfos)), 0));
}
result.setTotal((long) rows.size()); result.setTotal((long) rows.size());
result.setAggregates(new HashMap<>()); result.setAggregates(new HashMap<>());
return result; return result;
@ -789,9 +794,9 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
"t.DELETE_TIME AS deleteTime " + "t.DELETE_TIME AS deleteTime " +
"FROM SD_WQ_B_H t " + "FROM SD_WQ_B_H t " +
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = t.RSTCD " + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = t.RSTCD " +
"LEFT JOIN SD_HYDROBASE base ON base.BASEID = eng.BASE_ID AND NVL(base.IS_DELETED, 0) = 0 " + "LEFT JOIN SD_HYDROBASE base ON base.BASEID = t.BASE_ID AND NVL(base.IS_DELETED, 0) = 0 " +
"LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD " + "LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD " +
" AND hbrv.BASEID = eng.BASE_ID " + " AND hbrv.BASEID = t.BASE_ID " +
" AND NVL(hbrv.IS_DELETED, 0) = 0 " + " AND NVL(hbrv.IS_DELETED, 0) = 0 " +
" AND NVL(hbrv.ENABLED, 1) = 1 " + " AND NVL(hbrv.ENABLED, 1) = 1 " +
"LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD " + "LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD " +
@ -929,7 +934,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
"wq.STTP AS STTP_CODE " + "wq.STTP AS STTP_CODE " +
"FROM SD_WQ_B_H wq " + "FROM SD_WQ_B_H wq " +
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wq.RSTCD " + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wq.RSTCD " +
"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 = wq.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " +
"LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD " + "LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD " +
"LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD " + "LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD " +
"LEFT JOIN MS_ALONG_B rvAlong ON rvAlong.RVCD = eng.HBRVCD AND rvAlong.CODE = 'common' AND NVL(rvAlong.IS_DELETED, 0) = 0 " + "LEFT JOIN MS_ALONG_B rvAlong ON rvAlong.RVCD = eng.HBRVCD AND rvAlong.CODE = 'common' AND NVL(rvAlong.IS_DELETED, 0) = 0 " +
@ -1341,7 +1346,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
"siteAlong.SORT AS SITESTEPSORT " + "siteAlong.SORT AS SITESTEPSORT " +
"FROM SD_WQ_B_H wq " + "FROM SD_WQ_B_H wq " +
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wq.RSTCD " + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wq.RSTCD " +
"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 = wq.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " +
"LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND hbrv.BASEID = eng.BASE_ID AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 " + "LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND hbrv.BASEID = eng.BASE_ID AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 " +
"LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD " + "LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD " +
"LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD " + "LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD " +
@ -1928,7 +1933,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
case "stcd" -> "t.STCD"; case "stcd" -> "t.STCD";
case "stnm" -> "t.STNM"; case "stnm" -> "t.STNM";
case "fhstcd" -> "t.FHSTCD"; case "fhstcd" -> "t.FHSTCD";
case "baseId" -> "eng.BASE_ID"; case "baseId" -> "t.BASE_ID";
case "dtin" -> "t.DTIN"; case "dtin" -> "t.DTIN";
default -> null; default -> null;
}; };
@ -2045,6 +2050,36 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
return result; return result;
} }
private String buildMsstbprptGroupSql(String baseSql, GroupingInfo[] groupInfos) {
if (groupInfos == null || groupInfos.length == 0) {
return baseSql;
}
List<String> groupFields = new ArrayList<>();
List<String> orderByItems = new ArrayList<>();
for (GroupingInfo item : groupInfos) {
if (item == null || StrUtil.isBlank(item.getSelector())) {
continue;
}
groupFields.add(item.getSelector());
String dir = Boolean.TRUE.equals(item.getDesc()) ? "DESC" : "ASC";
orderByItems.add(item.getSelector() + " " + dir);
}
if (groupFields.isEmpty()) {
return baseSql;
}
StringBuilder sql = new StringBuilder("SELECT ");
sql.append(String.join(", ", groupFields));
for (String groupField : groupFields) {
sql.append(", COUNT(*) AS count_").append(groupField).append(" ");
}
sql.append("FROM (").append(baseSql).append(") T ")
.append("GROUP BY ").append(String.join(", ", groupFields)).append(" ");
if (!orderByItems.isEmpty()) {
sql.append("ORDER BY ").append(String.join(", ", orderByItems));
}
return sql.toString();
}
private String buildMsstbprptDetailOrderBySql(List<DataSourceRequest.SortDescriptor> sortList) { private String buildMsstbprptDetailOrderBySql(List<DataSourceRequest.SortDescriptor> sortList) {
if (CollUtil.isEmpty(sortList)) { if (CollUtil.isEmpty(sortList)) {
return " ORDER BY eng.BASE_ID ASC NULLS LAST, eng.HBRVCD ASC NULLS LAST, eng.ORDER_INDEX ASC NULLS LAST, t.ORDER_INDEX ASC NULLS LAST, t.STCD ASC "; return " ORDER BY eng.BASE_ID ASC NULLS LAST, eng.HBRVCD ASC NULLS LAST, eng.ORDER_INDEX ASC NULLS LAST, t.ORDER_INDEX ASC NULLS LAST, t.STCD ASC ";