fix: 水质站基础数据查询优化

This commit is contained in:
tangwei 2026-05-29 09:08:00 +08:00
parent 704a9c3ff2
commit 0d1abdf94b

View File

@ -544,6 +544,43 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
@Override
public DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
if (CollUtil.isEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT ")
.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_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD ")
.append(" AND hbrv.BASEID = eng.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 ")
.append("LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD ")
.append("LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = t.STTP AND NVL(sttp.IS_DELETED, 0) = 0 ")
.append("WHERE NVL(t.IS_DELETED, 0) = 0 ");
Map<String, Object> paramMap = new HashMap<>();
String filterSql = buildMsstbprptFilterCondition(
dataSourceRequest == null ? null : dataSourceRequest.getFilter(),
paramMap,
new int[]{0}
);
if (StrUtil.isNotBlank(filterSql)) {
sql.append(" AND ").append(filterSql).append(" ");
}
sql.append(buildMsstbprptDetailOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort()));
Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
List<WqBaseInfoVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, WqBaseInfoVo.class);
DataSourceResult<WqBaseInfoVo> result = new DataSourceResult<>();
result.setData(list);
result.setTotal(page != null ? page.getTotal() : list.size());
result.setAggregates(new HashMap<>());
return result;
}
String groupField = "dtinType";
String groupColumn = "t.DTIN_TYPE";
String groupDir = "ASC";
@ -1890,12 +1927,80 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
case "dtinType" -> "t.DTIN_TYPE";
case "stcd" -> "t.STCD";
case "stnm" -> "t.STNM";
case "fhstcd" -> "t.FHSTCD";
case "baseId" -> "eng.BASE_ID";
case "dtin" -> "t.DTIN";
default -> null;
};
}
private String buildMsstbprptDetailSelectSql(List<String> selectFields) {
Map<String, String> selectMap = new LinkedHashMap<>();
selectMap.put("stcd", "t.STCD AS stcd");
selectMap.put("stnm", "t.STNM AS stnm");
selectMap.put("tm", "t.TM AS tm");
selectMap.put("sttp", "t.STTP AS sttp");
selectMap.put("lgtd", "t.LGTD AS lgtd");
selectMap.put("lttd", "t.LTTD AS lttd");
selectMap.put("elev", "t.ELEV AS elev");
selectMap.put("stlc", "t.STLC AS stlc");
selectMap.put("wwqtg", "t.WWQTG AS wwqtg");
selectMap.put("wqtype", "t.WQTYPE AS wqtype");
selectMap.put("jcdt", "t.JCDT AS jcdt");
selectMap.put("wddt", "t.WDDT AS wddt");
selectMap.put("bldsttCode", "t.BLDSTT_CODE AS bldsttCode");
selectMap.put("introduce", "t.INTRODUCE AS introduce");
selectMap.put("logo", "t.LOGO AS logo");
selectMap.put("inffile", "t.INFFILE AS inffile");
selectMap.put("usfl", "t.USFL AS usfl");
selectMap.put("dtin", "t.DTIN AS dtin");
selectMap.put("dtinSrc", "t.DTIN_SRC AS dtinSrc");
selectMap.put("dtinType", "t.DTIN_TYPE AS dtinType");
selectMap.put("dtinTm", "t.DTIN_TM AS dtinTm");
selectMap.put("mway", "t.MWAY AS mway");
selectMap.put("stindx", "t.STINDX AS stindx");
selectMap.put("orderIndex", "t.ORDER_INDEX AS orderIndex");
selectMap.put("rstcd", "t.RSTCD AS rstcd");
selectMap.put("ennm", "eng.ENNM AS ennm");
selectMap.put("baseId", "eng.BASE_ID AS baseId");
selectMap.put("baseName", "hb.BASENAME AS baseName");
selectMap.put("hbrvcd", "eng.HBRVCD AS hbrvcd");
selectMap.put("hbrvcdName", "hbrv.HBRVNM AS hbrvcdName");
selectMap.put("rvcd", "eng.RVCD AS rvcd");
selectMap.put("rvcdName", "rv.RVNM AS rvcdName");
selectMap.put("addvcd", "eng.ADDVCD AS addvcd");
selectMap.put("addvcdName", "addv.ADDVNM AS addvcdName");
selectMap.put("fhstcd", "t.FHSTCD AS fhstcd");
selectMap.put("ispro", "t.ISPRO AS ispro");
selectMap.put("dtfrqcy", "t.DTFRQCY AS dtfrqcy");
selectMap.put("remark", "t.REMARK AS remark");
selectMap.put("vlsr", "t.VLSR AS vlsr");
selectMap.put("vlsrTm", "t.VLSR_TM AS vlsrTm");
selectMap.put("recordUser", "t.RECORD_USER AS recordUser");
selectMap.put("recordTime", "t.RECORD_TIME AS recordTime");
selectMap.put("modifyUser", "t.MODIFY_USER AS modifyUser");
selectMap.put("modifyTime", "t.MODIFY_TIME AS modifyTime");
selectMap.put("isDeleted", "t.IS_DELETED AS isDeleted");
selectMap.put("deleteUser", "t.DELETE_USER AS deleteUser");
selectMap.put("deleteTime", "t.DELETE_TIME AS deleteTime");
if (CollUtil.isEmpty(selectFields)) {
return String.join(", ", selectMap.values());
}
List<String> actualColumns = new ArrayList<>();
for (String selectField : selectFields) {
String column = selectMap.get(selectField);
if (StrUtil.isNotBlank(column)) {
actualColumns.add(column);
}
}
if (actualColumns.isEmpty()) {
actualColumns.addAll(selectMap.values());
}
return String.join(", ", actualColumns);
}
private List<Map<String, Object>> toMsstbprptLegacyGroups(List<Map<String, Object>> rows, String groupField) {
List<Map<String, Object>> result = new ArrayList<>();
if (rows == null) {
@ -1940,6 +2045,46 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
return result;
}
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 ";
}
List<String> orderColumns = new ArrayList<>();
for (DataSourceRequest.SortDescriptor sortDescriptor : sortList) {
if (sortDescriptor == null || StrUtil.isBlank(sortDescriptor.getField())) {
continue;
}
String column = switch (sortDescriptor.getField()) {
case "stcd" -> "t.STCD";
case "stnm" -> "t.STNM";
case "tm" -> "t.TM";
case "sttp" -> "t.STTP";
case "jcdt" -> "t.JCDT";
case "rstcd" -> "t.RSTCD";
case "ennm" -> "eng.ENNM";
case "baseId" -> "eng.BASE_ID";
case "baseName" -> "hb.BASENAME";
case "hbrvcd" -> "eng.HBRVCD";
case "rvcd" -> "eng.RVCD";
case "fhstcd" -> "t.FHSTCD";
case "mway" -> "t.MWAY";
case "dtin" -> "t.DTIN";
case "dtinType" -> "t.DTIN_TYPE";
case "orderIndex" -> "t.ORDER_INDEX";
default -> null;
};
if (StrUtil.isBlank(column)) {
continue;
}
String dir = "desc".equalsIgnoreCase(sortDescriptor.getDir()) || "des".equalsIgnoreCase(sortDescriptor.getDir()) ? "DESC" : "ASC";
orderColumns.add(column + " " + dir + " NULLS LAST");
}
if (orderColumns.isEmpty()) {
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 " + String.join(", ", orderColumns);
}
private String buildEnvWqOrderBySql(List<DataSourceRequest.SortDescriptor> sortList) {
if (sortList == null || sortList.isEmpty()) {
return "";