diff --git a/backend/src/main/java/com/yfd/platform/env/wt/controller/SdWTMonitorController.java b/backend/src/main/java/com/yfd/platform/env/wt/controller/SdWTMonitorController.java index f21913b2..93460c1a 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/controller/SdWTMonitorController.java +++ b/backend/src/main/java/com/yfd/platform/env/wt/controller/SdWTMonitorController.java @@ -191,6 +191,12 @@ public class SdWTMonitorController { return ResponseResult.successData(sdWtMonitorService.getVmsstbprptList(dataSourceRequest)); } + @PostMapping("/msstbprpt/GetKendoList") + @Operation(summary = "根据条件查询水温基础站点列表") + public ResponseResult getMsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(sdWtMonitorService.getMsstbprptList(dataSourceRequest)); + } + @GetMapping("/msstbprpt/getStcdInfo") @Operation(summary = "根据站码查询单条水温基础数据") public ResponseResult getStcdInfo(@RequestParam String stcd) { diff --git a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdWtBaseInfoVO.java b/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdWtBaseInfoVO.java index 07d0a824..15a30c95 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdWtBaseInfoVO.java +++ b/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdWtBaseInfoVO.java @@ -68,6 +68,9 @@ public class SdWtBaseInfoVO implements Serializable { @Schema(description = "站码") private String stcd; + @Schema(description = "所属栖息地编码") + private String fhstcd; + @Schema(description = "所属电站编码") private String rstcd; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/service/SdWtMonitorService.java b/backend/src/main/java/com/yfd/platform/env/wt/service/SdWtMonitorService.java index 6aec9e4f..9a52159c 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/service/SdWtMonitorService.java +++ b/backend/src/main/java/com/yfd/platform/env/wt/service/SdWtMonitorService.java @@ -20,6 +20,8 @@ public interface SdWtMonitorService { DataSourceResult getVmsstbprptList(DataSourceRequest dataSourceRequest); + DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest); + WtBaseInfoVo getStcdInfo(String stcd); DataSourceResult getCxDetailList(DataSourceRequest dataSourceRequest); diff --git a/backend/src/main/java/com/yfd/platform/env/wt/service/impl/SdWtMonitorServiceImpl.java b/backend/src/main/java/com/yfd/platform/env/wt/service/impl/SdWtMonitorServiceImpl.java index a9fc3f71..7c0fb6c4 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/service/impl/SdWtMonitorServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/env/wt/service/impl/SdWtMonitorServiceImpl.java @@ -842,6 +842,37 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { return result; } + @Override + public DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest) { + List selectFields = dataSourceRequest == null ? null : dataSourceRequest.getSelect(); + String selectSql = buildWtMsstbprptSelectSql(selectFields); + + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ").append(selectSql).append(" ") + .append("FROM SD_WT_B_H wt ") + .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wt.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 AND hbrv.BASEID = eng.BASE_ID AND NVL(hbrv.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = wt.STTP AND NVL(sttp.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN (SELECT DISTINCT STCD FROM SD_WTRV_R WHERE IS_DELETED = 0 AND TM >= SYSDATE - 1) rvRecent ON rvRecent.STCD = wt.STCD ") + .append("LEFT JOIN (SELECT DISTINCT STCD FROM SD_WTVT_R WHERE IS_DELETED = 0 AND TM >= SYSDATE - 1) vtRecent ON vtRecent.STCD = wt.STCD ") + .append("WHERE NVL(wt.IS_DELETED, 0) = 0 AND NVL(wt.DTIN_TYPE, 0) = 0 "); + + Map paramMap = new HashMap<>(); + appendWtMsstbprptFilters(sql, paramMap, dataSourceRequest == null ? null : dataSourceRequest.getFilter()); + sql.append(buildVmsstbprptOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); + + DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest(); + Page page = QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + List list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, SdWtBaseInfoVO.class); + + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(page != null ? page.getTotal() : list.size()); + result.setAggregates(new HashMap<>()); + return result; + } + @Override public DataSourceResult getCxDetailList(DataSourceRequest dataSourceRequest) { List filters = new ArrayList<>(); @@ -1889,7 +1920,7 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { } else if ("hbrvcd".equals(field)) { orderColumns.add("NVL(hbrvcd, '~') " + dir); } else if ("rstcdStepSort".equals(field)) { - orderColumns.add("NVL(rstcdStepSort, 999999) " + dir); +// orderColumns.add("NVL(rstcdStepSort, 999999) " + dir); } else if ("siteStepSort".equals(field)) { orderColumns.add("NVL(siteStepSort, 999999) " + dir); } else if ("stnm".equals(field)) { @@ -1902,11 +1933,138 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { } } if (orderColumns.isEmpty()) { - return " ORDER BY NVL(baseStepSort, 999999) ASC, NVL(rstcdStepSort, 999999) ASC"; + return ""; +// return " ORDER BY NVL(baseStepSort, 999999) ASC, NVL(rstcdStepSort, 999999) ASC"; } return " ORDER BY " + String.join(", ", orderColumns); } + private String buildWtMsstbprptSelectSql(List selectFields) { + Map columnMap = new LinkedHashMap<>(); + columnMap.put("baseName", "hb.BASENAME AS baseName"); + columnMap.put("baseId", "hb.BASEID AS baseId"); + columnMap.put("baseStepSort", "hb.ORDER_INDEX AS baseStepSort"); + columnMap.put("rvcdStepSort", "NVL(hbrv.ORDER_INDEX, 999999) AS rvcdStepSort"); + columnMap.put("rstcdStepSort", "eng.ORDER_INDEX AS rstcdStepSort"); + columnMap.put("siteStepSort", "wt.ORDER_INDEX AS siteStepSort"); + columnMap.put("stnm", "wt.STNM AS stnm"); + columnMap.put("ennm", "eng.ENNM AS ennm"); + columnMap.put("jcdt", "wt.JCDT AS jcdt"); + columnMap.put("stindx", "wt.STINDX AS stindx"); + columnMap.put("coenvwState", "CASE WHEN wt.STTP = 'WTRV' AND rvRecent.STCD IS NOT NULL THEN 1 WHEN wt.STTP = 'WTVT' AND vtRecent.STCD IS NOT NULL THEN 1 ELSE 0 END AS coenvwState"); + columnMap.put("sttpCode", "wt.STTP AS sttpCode"); + columnMap.put("sttpName", "sttp.STTP_NAME AS sttpName"); + columnMap.put("sttpFullPath", "sttp.FULL_PATH AS sttpFullPath"); + columnMap.put("stcd", "wt.STCD AS stcd"); + columnMap.put("fhstcd", "wt.FHSTCD AS fhstcd"); + columnMap.put("rstcd", "wt.RSTCD AS rstcd"); + columnMap.put("bldsttCcodeName", "CASE WHEN wt.BLDSTT_CODE IN ('1', '10', '11') THEN '已建' WHEN wt.BLDSTT_CODE IN ('2', '7', '8') THEN '在建' ELSE '未建/规划' END AS bldsttCcodeName"); + columnMap.put("bldsttCcode", "wt.BLDSTT_CODE AS bldsttCcode"); + columnMap.put("stCode", "NULL AS stCode"); + columnMap.put("stName", "NULL AS stName"); + columnMap.put("dvtp", "eng.DVTP AS dvtp"); + columnMap.put("hbrvcd", "eng.HBRVCD AS hbrvcd"); + + List actualColumns = new ArrayList<>(); + if (selectFields != null && !selectFields.isEmpty()) { + for (String field : selectFields) { + String column = columnMap.get(field); + if (StrUtil.isNotBlank(column)) { + actualColumns.add(column); + } + } + } + if (actualColumns.isEmpty()) { + actualColumns.addAll(columnMap.values()); + } + return String.join(", ", actualColumns); + } + + private void appendWtMsstbprptFilters(StringBuilder sql, + Map paramMap, + DataSourceRequest.FilterDescriptor filter) { + List filters = new ArrayList<>(); + collectFilters(filter, filters); + for (DataSourceRequest.FilterDescriptor descriptor : filters) { + String field = descriptor.getField(); + String operator = descriptor.getOperator(); + Object value = descriptor.getValue(); + if (StrUtil.isBlank(field) || StrUtil.isBlank(operator)) { + continue; + } + String paramKey = "wtMsst_" + field + "_" + paramMap.size(); + if ("fhstcd".equals(field)) { + appendWtMsstbprptLeaf(sql, paramMap, paramKey, "wt.FHSTCD", operator, value); + } else if ("sttpCode".equals(field)) { + appendWtMsstbprptLeaf(sql, paramMap, paramKey, "wt.STTP", operator, value); + } else if ("stcd".equals(field)) { + appendWtMsstbprptLeaf(sql, paramMap, paramKey, "wt.STCD", operator, value); + } else if ("stnm".equals(field)) { + appendWtMsstbprptLeaf(sql, paramMap, paramKey, "wt.STNM", operator, value); + } else if ("rstcd".equals(field)) { + appendWtMsstbprptLeaf(sql, paramMap, paramKey, "wt.RSTCD", operator, value); + } else if ("baseId".equals(field)) { + appendWtMsstbprptLeaf(sql, paramMap, paramKey, "eng.BASE_ID", operator, value); + } else if ("mway".equals(field)) { + appendWtMsstbprptLeaf(sql, paramMap, paramKey, "wt.MWAY", operator, value); + } else if ("dtin".equals(field)) { + appendWtMsstbprptLeaf(sql, paramMap, paramKey, "wt.DTIN", operator, value); + } else if ("bldsttCcode".equals(field)) { + appendWtMsstbprptLeaf(sql, paramMap, paramKey, "wt.BLDSTT_CODE", operator, value); + } + } + } + + private void appendWtMsstbprptLeaf(StringBuilder sql, + Map paramMap, + String paramKey, + String column, + String operator, + Object value) { + switch (operator) { + case "eq": + sql.append("AND ").append(column).append(" = #{map.").append(paramKey).append("} "); + paramMap.put(paramKey, value); + break; + case "neq": + sql.append("AND ").append(column).append(" <> #{map.").append(paramKey).append("} "); + paramMap.put(paramKey, value); + break; + case "contains": + sql.append("AND ").append(column).append(" LIKE #{map.").append(paramKey).append("} "); + paramMap.put(paramKey, "%" + value + "%"); + break; + case "startswith": + sql.append("AND ").append(column).append(" LIKE #{map.").append(paramKey).append("} "); + paramMap.put(paramKey, value + "%"); + break; + case "endswith": + sql.append("AND ").append(column).append(" LIKE #{map.").append(paramKey).append("} "); + paramMap.put(paramKey, "%" + value); + break; + case "in": + if (value instanceof List && !((List) value).isEmpty()) { + List values = (List) value; + List placeholders = new ArrayList<>(); + for (int i = 0; i < values.size(); i++) { + String itemKey = paramKey + "_" + i; + placeholders.add("#{map." + itemKey + "}"); + paramMap.put(itemKey, values.get(i)); + } + sql.append("AND ").append(column).append(" IN (").append(String.join(", ", placeholders)).append(") "); + } + break; + case "isnull": + sql.append("AND ").append(column).append(" IS NULL "); + break; + case "isnotnull": + sql.append("AND ").append(column).append(" IS NOT NULL "); + break; + default: + break; + } + } + private void collectFilters(DataSourceRequest.FilterDescriptor filter, List result) { if (filter == null) { return;