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 " +
" AND NVL(sab.IS_DELETED, 0) = 0 " +
" 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.endTime}, 'YYYY-MM-DD HH24:MI:SS') " +
"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 " +
" AND NVL(sab.IS_DELETED, 0) = 0 " +
" AND mab.CODE = 'common' " +
" AND eng.BASE_ID = #{map.baseId} " +
" AND wq.BASE_ID = #{map.baseId} " +
"ORDER BY r.TM DESC " +
") WHERE ROWNUM = 1";
}
@ -412,7 +412,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
sql.append("AND mab.RVCD = #{map.rvcd} ");
}
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 ")
.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} ");
}
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");
return sql.toString();
@ -551,9 +551,9 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
.append(buildMsstbprptDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect()))
.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_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(" 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.ENABLED, 1) = 1 ")
.append("LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD ")
@ -581,29 +581,31 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
return result;
}
String groupField = "dtinType";
String groupColumn = "t.DTIN_TYPE";
String groupDir = "ASC";
if (CollUtil.isNotEmpty(dataSourceRequest.getGroup())) {
DataSourceRequest.GroupDescriptor groupDescriptor = dataSourceRequest.getGroup().get(0);
if (groupDescriptor != null && StrUtil.isNotBlank(groupDescriptor.getField())) {
groupField = groupDescriptor.getField();
String mappedColumn = mapMsstbprptColumn(groupField);
if (StrUtil.isNotBlank(mappedColumn)) {
groupColumn = mappedColumn;
}
if ("desc".equalsIgnoreCase(groupDescriptor.getDir()) || "des".equalsIgnoreCase(groupDescriptor.getDir())) {
groupDir = "DESC";
}
}
}
StringBuilder sql = new StringBuilder();
sql.append("SELECT ")
.append(groupColumn).append(" AS ").append(groupField.toUpperCase()).append(", ")
.append("COUNT(*) AS COUNT_").append(groupField.toUpperCase()).append(" ")
GroupingInfo[] groupInfos = loadOptions == null ? null : loadOptions.getGroup();
StringBuilder baseSql = new StringBuilder();
baseSql.append("SELECT ")
.append("NVL(t.IS_DELETED, 0) AS isDeleted, ")
.append("t.STTP AS sttpCode, ")
.append("t.MWAY AS mway, ")
.append("t.DTIN_TYPE AS dtinType, ")
.append("t.STCD AS stcd, ")
.append("t.STNM AS stnm, ")
.append("t.FHSTCD AS fhstcd, ")
.append("t.DTIN AS dtin, ")
.append("t.BASE_ID AS baseId, ")
.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, ")
.append("t.ORDER_INDEX AS siteStepSort ")
.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 ");
Map<String, Object> paramMap = new HashMap<>();
@ -613,14 +615,17 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
new int[]{0}
);
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();
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.setAggregates(new HashMap<>());
return result;
@ -789,9 +794,9 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
"t.DELETE_TIME AS deleteTime " +
"FROM SD_WQ_B_H t " +
"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 " +
" AND hbrv.BASEID = eng.BASE_ID " +
" AND hbrv.BASEID = t.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 " +
@ -929,7 +934,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
"wq.STTP AS STTP_CODE " +
"FROM SD_WQ_B_H wq " +
"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_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 " +
@ -1341,7 +1346,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
"siteAlong.SORT AS SITESTEPSORT " +
"FROM SD_WQ_B_H wq " +
"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_RVCD_DIC rv ON rv.RVCD = eng.RVCD " +
"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 "stnm" -> "t.STNM";
case "fhstcd" -> "t.FHSTCD";
case "baseId" -> "eng.BASE_ID";
case "baseId" -> "t.BASE_ID";
case "dtin" -> "t.DTIN";
default -> null;
};
@ -2045,6 +2050,36 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
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) {
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 ";