From d9e15f97365e897c449e084d2272e84944f80beb Mon Sep 17 00:00:00 2001 From: tangwei Date: Tue, 7 Jul 2026 15:44:55 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=A0=96=E6=81=AF=E5=9C=B0=E5=85=B3?= =?UTF-8?q?=E8=81=94=E7=AB=99=E7=82=B9=E6=8F=8F=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fh/controller/FhHabitatController.java | 6 + .../qgc_env/fh/entity/vo/FhPointVo.java | 67 +++++++++ .../qgc_env/fh/service/FhHabitatService.java | 3 + .../fh/service/impl/FhHabitatServiceImpl.java | 138 ++++++++++++++++++ 4 files changed, 214 insertions(+) create mode 100644 backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/FhPointVo.java diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fh/controller/FhHabitatController.java b/backend/src/main/java/com/yfd/platform/qgc_env/fh/controller/FhHabitatController.java index 1ab1d44d..8c303c5e 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fh/controller/FhHabitatController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fh/controller/FhHabitatController.java @@ -77,4 +77,10 @@ public class FhHabitatController { public ResponseResult getFhvapKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { return ResponseResult.successData(fhHabitatService.getFhvapKendoListCust(dataSourceRequest)); } + + @PostMapping("/fhvap/fhPoint/GetKendoListCust") + @Operation(summary = "栖息地关联站点描点") + public ResponseResult getFhPoint(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(fhHabitatService.getFhPoint(dataSourceRequest)); + } } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/FhPointVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/FhPointVo.java new file mode 100644 index 00000000..6beebf5f --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/FhPointVo.java @@ -0,0 +1,67 @@ +package com.yfd.platform.qgc_env.fh.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +@Accessors(chain = true) +@Schema(description = "栖息地关联站点描点") +public class FhPointVo implements Serializable { + + private static final long serialVersionUID = 1L; + + @Schema(description = "所属栖息地编码") + private String fhstcd; + + @Schema(description = "站码") + private String stcd; + + @Schema(description = "站名") + private String stnm; + + @Schema(description = "所属电站名称") + private String ennm; + + @Schema(description = "经度") + private BigDecimal lgtd; + + @Schema(description = "纬度") + private BigDecimal lttd; + + @Schema(description = "基地编码") + private String baseId; + + @Schema(description = "基地名称") + private String baseName; + + @Schema(description = "所属流域编码") + private String rvcd; + + @Schema(description = "所属流域名称") + private String rvcdName; + + @Schema(description = "所属电站编码") + private String rstcd; + + @Schema(description = "所属站类编码") + private String sttpCode; + + @Schema(description = "基面高程") + private BigDecimal dtmel; + + @Schema(description = "是否接入") + private Integer dtin; + + @Schema(description = "建设状态分类") + private String bldsttCcode; + + @Schema(description = "描点状态") + private String anchoPointState; + + @Schema(description = "出入库标识(1 入库水温, 2 出库水温, 3 非出入库水温)") + private Integer ioType; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/FhHabitatService.java b/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/FhHabitatService.java index 12e188e6..f279b5a0 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/FhHabitatService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/FhHabitatService.java @@ -6,6 +6,7 @@ import com.yfd.platform.qgc_env.fh.entity.ao.FhDefaultAo; import com.yfd.platform.qgc_env.fh.entity.vo.FhBaseInfoVo; import com.yfd.platform.qgc_env.fh.entity.vo.FhDefaultVo; import com.yfd.platform.qgc_env.fh.entity.vo.FhHaVapVo; +import com.yfd.platform.qgc_env.fh.entity.vo.FhPointVo; import com.yfd.platform.qgc_env.fh.entity.vo.HabitatVo; public interface FhHabitatService { @@ -27,4 +28,6 @@ public interface FhHabitatService { DataSourceResult getStTbYsBVoKendoListCust(DataSourceRequest dataSourceRequest); DataSourceResult getFhvapKendoListCust(DataSourceRequest dataSourceRequest); + + DataSourceResult getFhPoint(DataSourceRequest dataSourceRequest); } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/impl/FhHabitatServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/impl/FhHabitatServiceImpl.java index aa5bad69..9156d14b 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/impl/FhHabitatServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/impl/FhHabitatServiceImpl.java @@ -17,6 +17,7 @@ import com.yfd.platform.qgc_env.fh.entity.ao.FhDefaultAo; import com.yfd.platform.qgc_env.fh.entity.vo.FhBaseInfoVo; import com.yfd.platform.qgc_env.fh.entity.vo.FhDefaultVo; import com.yfd.platform.qgc_env.fh.entity.vo.FhHaVapVo; +import com.yfd.platform.qgc_env.fh.entity.vo.FhPointVo; import com.yfd.platform.qgc_env.fh.entity.vo.HabitatVo; import com.yfd.platform.qgc_env.fh.entity.vo.FhMsstbprptVo; import com.yfd.platform.qgc_env.fh.entity.vo.FhSdriverdayVo; @@ -2004,6 +2005,120 @@ public class FhHabitatServiceImpl implements FhHabitatService { return dataSourceResult; } + @Override + public DataSourceResult getFhPoint(DataSourceRequest dataSourceRequest) { + DataSourceResult result = new DataSourceResult<>(); + result.setAggregates(new HashMap<>()); + + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + Map paramMap = new HashMap<>(); + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append("t.fhstcd AS fhstcd, ") + .append("t.stcd AS stcd, ") + .append("t.stnm AS stnm, ") + .append("eng.ENNM AS ennm, ") + .append("t.lgtd AS lgtd, ") + .append("t.lttd AS lttd, ") + .append("t.baseId AS baseId, ") + .append("hb.BASENAME AS baseName, ") + .append("t.rvcd AS rvcd, ") + .append("rv.RVNM AS rvcdName, ") + .append("t.rstcd AS rstcd, ") + .append("t.sttpCode AS sttpCode, ") + .append("t.dtmel AS dtmel, ") + .append("t.dtin AS dtin, ") + .append("t.bldsttCcode AS bldsttCcode, ") + .append("t.ioType AS ioType ") + .append("FROM (") + .append("SELECT fh.STCD AS fhstcd, wq.STCD AS stcd, wq.STNM AS stnm, ") + .append(" wq.LGTD AS lgtd, wq.LTTD AS lttd, fh.BASE_ID AS baseId, ") + .append(" null AS rvcd, wq.RSTCD AS rstcd, ") + .append(" 'WQ' AS sttpCode, wq.ELEV AS dtmel, wq.DTIN AS dtin, ") + .append(" TO_CHAR(wq.BLDSTT_CODE) AS bldsttCcode, CAST(NULL AS NUMBER) AS ioType ") + .append("FROM SD_FHBT_B_H fh ") + .append("INNER JOIN SD_WQ_B_H wq ON fh.STCD = wq.FHSTCD ") + .append("WHERE NVL(fh.IS_DELETED, 0) = 0 ") + .append(" AND NVL(wq.IS_DELETED, 0) = 0 ") + .append(" AND fh.BASE_ID <> 'other' ") + .append(" AND wq.LGTD IS NOT NULL ") + .append("UNION ALL ") + .append("SELECT fh.STCD AS fhstcd, wt.STCD AS stcd, wt.STNM AS stnm, ") + .append(" wt.LGTD AS lgtd, wt.LTTD AS lttd, fh.BASE_ID AS baseId, ") + .append(" NVL(fh.RVCD, engWt.RVCD) AS rvcd, wt.RSTCD AS rstcd, ") + .append(" 'WTRV' AS sttpCode, wt.ELEV AS dtmel, wt.DTIN AS dtin, ") + .append(" TO_CHAR(wt.BLDSTT_CODE) AS bldsttCcode, ") + .append(" CASE WHEN wt.WT_TYPE = 'IWT' THEN 1 ") + .append(" WHEN wt.WT_TYPE = 'DWT' THEN 2 ") + .append(" ELSE 3 END AS ioType ") + .append("FROM SD_FHBT_B_H fh ") + .append("INNER JOIN SD_WT_B_H wt ON fh.STCD = wt.FHSTCD ") + .append("LEFT JOIN SD_ENGINFO_B_H engWt ON engWt.STCD = wt.RSTCD AND NVL(engWt.IS_DELETED, 0) = 0 ") + .append("WHERE NVL(fh.IS_DELETED, 0) = 0 ") + .append(" AND NVL(wt.IS_DELETED, 0) = 0 ") + .append(" AND fh.BASE_ID <> 'other' ") + .append(" AND wt.LGTD IS NOT NULL ") + .append(" AND wt.STTP = 'WTRV' ") + .append("UNION ALL ") + .append("SELECT fh.STCD AS fhstcd, rv.STCD AS stcd, rv.STNM AS stnm, ") + .append(" rv.LGTD AS lgtd, rv.LTTD AS lttd, fh.BASE_ID AS baseId, ") + .append(" NVL(fh.RVCD, engRv.RVCD) AS rvcd, rv.RSTCD AS rstcd, ") + .append(" 'ZQ' AS sttpCode, rv.ELEV AS dtmel, rv.DTIN AS dtin, ") + .append(" TO_CHAR(rv.BLDSTT_CODE) AS bldsttCcode, CAST(NULL AS NUMBER) AS ioType ") + .append("FROM SD_FHBT_B_H fh ") + .append("INNER JOIN SD_RIVER_B_H rv ON fh.STCD = rv.FHSTCD ") + .append("LEFT JOIN SD_ENGINFO_B_H engRv ON engRv.STCD = rv.RSTCD AND NVL(engRv.IS_DELETED, 0) = 0 ") + .append("WHERE NVL(fh.IS_DELETED, 0) = 0 ") + .append(" AND NVL(rv.IS_DELETED, 0) = 0 ") + .append(" AND fh.BASE_ID <> 'other' ") + .append(" AND rv.LGTD IS NOT NULL ") + .append(" AND rv.STTP = 'ZQ' ") + .append("UNION ALL ") + .append("SELECT fh.STCD AS fhstcd, vd.STCD AS stcd, vd.STNM AS stnm, ") + .append(" vd.LGTD AS lgtd, vd.LTTD AS lttd, fh.BASE_ID AS baseId, ") + .append(" NVL(vd.RVCD, fh.RVCD) AS rvcd, vd.RSTCD AS rstcd, ") + .append(" 'VD' AS sttpCode, vd.ELEV AS dtmel, vd.DTIN AS dtin, ") + .append(" TO_CHAR(vd.BLDSTT_CODE) AS bldsttCcode, CAST(NULL AS NUMBER) AS ioType ") + .append("FROM SD_FHBT_B_H fh ") + .append("INNER JOIN SD_VDINFO_B vd ON fh.STCD = vd.FHSTCD ") + .append("WHERE NVL(fh.IS_DELETED, 0) = 0 ") + .append(" AND fh.BASE_ID <> 'other' ") + .append(" AND vd.LGTD IS NOT NULL ") + .append(") 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 = t.baseId AND NVL(hb.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = t.rvcd ") + .append("WHERE 1 = 1 "); + + String filterSql = QgcQueryWrapperUtil.buildFilterCondition( + dataSourceRequest == null ? null : dataSourceRequest.getFilter(), + paramMap, + new int[]{0}, + this::mapFhPointColumn + ); + if (StrUtil.isNotBlank(filterSql)) { + sql.append("AND ").append(filterSql).append(" "); + } + sql.append("ORDER BY t.fhstcd, t.sttpCode, t.stcd"); + + List list = microservicDynamicSQLMapper.getAllListWithResultType(sql.toString(), paramMap, FhPointVo.class); + for (FhPointVo vo : list) { + String sttpCode = StrUtil.blankToDefault(vo.getSttpCode(), ""); + if ("WQ".equalsIgnoreCase(sttpCode)) { + vo.setAnchoPointState("FH_WQ"); + } else if ("WTRV".equalsIgnoreCase(sttpCode)) { + vo.setAnchoPointState("FH_WTRV"); + } else if ("ZQ".equalsIgnoreCase(sttpCode)) { + vo.setAnchoPointState("FH_ZQ"); + } else if ("VD".equalsIgnoreCase(sttpCode)) { + vo.setAnchoPointState("FH_VD"); + } + } + result.setData(list); + result.setTotal((long) list.size()); + return result; + } + private String mapWeFvColumn(String field) { if (StrUtil.isBlank(field)) { return null; @@ -2014,4 +2129,27 @@ public class FhHabitatServiceImpl implements FhHabitatService { default -> null; }; } + + private String mapFhPointColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field.toLowerCase()) { + case "fhstcd" -> "t.fhstcd"; + case "stcd" -> "t.stcd"; + case "stnm" -> "t.stnm"; + case "ennm" -> "eng.ENNM"; + case "baseid" -> "t.baseId"; + case "basename" -> "hb.BASENAME"; + case "rvcd" -> "t.rvcd"; + case "rvcdname" -> "rv.RVNM"; + case "rstcd" -> "t.rstcd"; + case "sttpcode" -> "t.sttpCode"; + case "dtin" -> "t.dtin"; + case "bldsttccode" -> "t.bldsttCcode"; + case "lgtd" -> "t.lgtd"; + case "lttd" -> "t.lttd"; + default -> null; + }; + } }