From e4a2a5db6aac559d376068e0ce395e9d3d509171 Mon Sep 17 00:00:00 2001 From: tangwei Date: Fri, 12 Jun 2026 09:46:07 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=A0=B9=E6=8D=AE=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E8=BF=87=E9=B1=BC=E8=AE=BE=E6=96=BD=E9=B1=BC?= =?UTF-8?q?=E9=81=93=E4=BC=A0=E6=84=9F=E5=99=A8=E5=9F=BA=E7=A1=80=E5=88=97?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fp/controller/FishPassageController.java | 6 + .../qgc_env/fp/entity/vo/FpVmsstbprptVo.java | 21 ++ .../qgc_env/fp/service/FpBuildService.java | 2 + .../fp/service/impl/FpBuildServiceImpl.java | 244 +++++++++++++++++- 4 files changed, 266 insertions(+), 7 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fp/controller/FishPassageController.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/controller/FishPassageController.java index 495f05ca..b14fb25c 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fp/controller/FishPassageController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/controller/FishPassageController.java @@ -70,6 +70,12 @@ public class FishPassageController { return ResponseResult.successData(fpBuildService.getVmsstbprptList(dataSourceRequest)); } + @PostMapping("/fpq/msstbprpt/GetKendoList") + @Operation(summary = "根据条件查询过鱼设施鱼道传感器基础列表") + public ResponseResult getFpqMsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(fpBuildService.getFpqMsstbprptList(dataSourceRequest)); + } + @GetMapping("/msstbprpt/getStInfoByStcd") @Operation(summary = "根据站码查询单条过鱼设施基础数据") public ResponseResult getStInfoByStcd(@RequestParam String stcd) { diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FpVmsstbprptVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FpVmsstbprptVo.java index 174a4d1e..83915608 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FpVmsstbprptVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FpVmsstbprptVo.java @@ -16,9 +16,18 @@ public class FpVmsstbprptVo implements Serializable { @Schema(description = "过鱼设施编码") private String stcd; + @Schema(description = "旧接口兼容站码") + private String stCode; + @Schema(description = "过鱼设施名称") private String stnm; + @Schema(description = "旧接口兼容站名") + private String stName; + + @Schema(description = "过鱼设施类型") + private String sttp; + @Schema(description = "过鱼设施类型编码") private String sttpCode; @@ -208,6 +217,12 @@ public class FpVmsstbprptVo implements Serializable { @Schema(description = "主要过鱼月份") private String fpssmn; + @Schema(description = "监测方式") + private Integer mway; + + @Schema(description = "监测方式名称") + private String mwayName; + @Schema(description = "数据监测频次") private Integer dtfrqcy; @@ -229,6 +244,12 @@ public class FpVmsstbprptVo implements Serializable { @Schema(description = "LOGO") private String logo; + @Schema(description = "旧接口兼容排序") + private Integer orderIndex; + + @Schema(description = "描述") + private String description; + @Schema(description = "数据来源时间") private Date vlsrTm; diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/FpBuildService.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/FpBuildService.java index 8d1cefac..b7ff92f2 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/FpBuildService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/FpBuildService.java @@ -11,5 +11,7 @@ public interface FpBuildService { DataSourceResult getVmsstbprptList(DataSourceRequest dataSourceRequest); + DataSourceResult getFpqMsstbprptList(DataSourceRequest dataSourceRequest); + FpVmsstbprptVo getStInfoByStcd(String stcd); } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpBuildServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpBuildServiceImpl.java index 0f92c70f..e30b2f22 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpBuildServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpBuildServiceImpl.java @@ -58,18 +58,37 @@ public class FpBuildServiceImpl implements FpBuildService { @Override public DataSourceResult getVmsstbprptList(DataSourceRequest dataSourceRequest) { + return queryVmsstbprptList(dataSourceRequest, null); + } + + @Override + public DataSourceResult getFpqMsstbprptList(DataSourceRequest dataSourceRequest) { + return queryVmsstbprptList(dataSourceRequest, "FPQ"); + } + + private DataSourceResult queryVmsstbprptList(DataSourceRequest dataSourceRequest, String fixedSttpCode) { DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); Page page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); Map paramMap = new HashMap<>(); - StringBuilder sql = new StringBuilder(buildVmsstbprptBaseSql()); + StringBuilder innerSql = new StringBuilder(buildVmsstbprptBaseSql()); + if (fixedSttpCode != null && !fixedSttpCode.isBlank()) { + paramMap.put("fixedSttpCode", fixedSttpCode); + innerSql.append(" AND fp.STTP = #{map.fixedSttpCode}"); + } String filterSql = buildVmsstbprptFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0}); if (!filterSql.isBlank()) { - sql.append(" AND ").append(filterSql); + innerSql.append(" AND ").append(filterSql); } + StringBuilder sql = new StringBuilder("SELECT ") + .append(buildVmsstbprptSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect())) + .append(" FROM (") + .append(innerSql) + .append(") t "); + sql.append(buildVmsstbprptOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); List list = microservicDynamicSQLMapper.pageAllListWithResultType( @@ -98,8 +117,11 @@ public class FpBuildServiceImpl implements FpBuildService { StringBuilder sql = new StringBuilder(); sql.append("SELECT ") .append("fp.STCD AS stcd, ") + .append("fp.STCD AS stCode, ") .append("fp.LOGO AS logo, ") .append("fp.STNM AS stnm, ") + .append("fp.STNM AS stName, ") + .append("fp.STTP AS sttp, ") .append("fp.STTP AS sttpCode, ") .append("sttp.STTP_NAME AS sttpName, ") .append("sttp.FULL_PATH AS sttpFullPath, ") @@ -170,9 +192,13 @@ public class FpBuildServiceImpl implements FpBuildService { .append("fp.JBTXCS AS jbtxcs, ") .append("fp.IS_UP AS isUp, ") .append("fp.IS_DOWN AS isDown, ") + .append("CAST(NULL AS NUMBER(1,0)) AS mway, ") + .append("CAST(NULL AS VARCHAR2(32)) AS mwayName, ") .append("fp.REMARK AS remark, ") .append("fp.VLSR AS vlsr, ") .append("fp.VLSR_TM AS vlsrTm, ") + .append("fp.ORDER_INDEX AS orderIndex, ") + .append("CAST(NULL AS VARCHAR2(1000)) AS description, ") .append("NVL(hb.ORDER_INDEX, 999999) AS baseStepSort, ") .append("NVL(hbrv.ORDER_INDEX, 999999) AS rvcdStepSort, ") .append("NVL(eng.ORDER_INDEX, 999999) AS rstcdStepSort, ") @@ -188,6 +214,110 @@ public class FpBuildServiceImpl implements FpBuildService { return sql.toString(); } + private String buildVmsstbprptSelectSql(List selectFields) { + if (CollectionUtils.isEmpty(selectFields)) { + return "t.*"; + } + Map selectMap = buildVmsstbprptSelectMap(); + List selectItems = new ArrayList<>(); + for (String field : selectFields) { + String column = selectMap.get(field); + if (column != null && !column.isBlank()) { + selectItems.add(column); + } + } + return selectItems.isEmpty() ? "t.*" : String.join(", ", selectItems); + } + + private Map buildVmsstbprptSelectMap() { + Map selectMap = new HashMap<>(); + selectMap.put("stcd", "t.stcd AS stcd"); + selectMap.put("stCode", "t.stCode AS stCode"); + selectMap.put("stnm", "t.stnm AS stnm"); + selectMap.put("stName", "t.stName AS stName"); + selectMap.put("sttp", "t.sttp AS sttp"); + selectMap.put("sttpCode", "t.sttpCode AS sttpCode"); + selectMap.put("sttpName", "t.sttpName AS sttpName"); + selectMap.put("sttpFullPath", "t.sttpFullPath AS sttpFullPath"); + selectMap.put("sttpTreeLevel", "t.sttpTreeLevel AS sttpTreeLevel"); + selectMap.put("rstcd", "t.rstcd AS rstcd"); + selectMap.put("ennm", "t.ennm AS ennm"); + selectMap.put("baseId", "t.baseId AS baseId"); + selectMap.put("baseName", "t.baseName AS baseName"); + selectMap.put("hbrvcd", "t.hbrvcd AS hbrvcd"); + selectMap.put("hbrvcdName", "t.hbrvcdName AS hbrvcdName"); + 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("dtin", "t.dtin AS dtin"); + selectMap.put("dtinName", "t.dtinName AS dtinName"); + selectMap.put("dtinTm", "t.dtinTm AS dtinTm"); + selectMap.put("bldsttCcode", "t.bldsttCcode AS bldsttCcode"); + selectMap.put("bldsttCcodeName", "t.bldsttCcodeName AS bldsttCcodeName"); + selectMap.put("stdsdt", "t.stdsdt AS stdsdt"); + selectMap.put("pststdt", "t.pststdt AS pststdt"); + selectMap.put("pesstdt", "t.pesstdt AS pesstdt"); + selectMap.put("swdt", "t.swdt AS swdt"); + selectMap.put("jcdt", "t.jcdt AS jcdt"); + selectMap.put("wddt", "t.wddt AS wddt"); + selectMap.put("introduce", "t.introduce AS introduce"); + selectMap.put("ydxs", "t.ydxs AS ydxs"); + selectMap.put("ydzcd", "t.ydzcd AS ydzcd"); + selectMap.put("ydjkz", "t.ydjkz AS ydjkz"); + selectMap.put("ydjkcnt", "t.ydjkcnt AS ydjkcnt"); + selectMap.put("jkhg", "t.jkhg AS jkhg"); + selectMap.put("ydyyxs", "t.ydyyxs AS ydyyxs"); + selectMap.put("ydckz", "t.ydckz AS ydckz"); + selectMap.put("ydckcnt", "t.ydckcnt AS ydckcnt"); + selectMap.put("ckhg", "t.ckhg AS ckhg"); + selectMap.put("ydcsv", "t.ydcsv AS ydcsv"); + selectMap.put("ydcscd", "t.ydcscd AS ydcscd"); + selectMap.put("ydcskd", "t.ydcskd AS ydcskd"); + selectMap.put("ydcspd", "t.ydcspd AS ydcspd"); + selectMap.put("ydcscnt", "t.ydcscnt AS ydcscnt"); + selectMap.put("ydxxccnt", "t.ydxxccnt AS ydxxccnt"); + selectMap.put("v", "t.v AS v"); + selectMap.put("fzrdmxz", "t.fzrdmxz AS fzrdmxz"); + selectMap.put("fzrtdsz", "t.fzrtdsz AS fzrtdsz"); + selectMap.put("fzryxwdp", "t.fzryxwdp AS fzryxwdp"); + selectMap.put("fzrpj", "t.fzrpj AS fzrpj"); + selectMap.put("symtlc", "t.symtlc AS symtlc"); + selectMap.put("symtxs", "t.symtxs AS symtxs"); + selectMap.put("xymtlc", "t.xymtlc AS xymtlc"); + selectMap.put("xymtxs", "t.xymtxs AS xymtxs"); + selectMap.put("jyfs", "t.jyfs AS jyfs"); + selectMap.put("yyfs", "t.yyfs AS yyfs"); + selectMap.put("syjcnt", "t.syjcnt AS syjcnt"); + selectMap.put("syjhg", "t.syjhg AS syjhg"); + selectMap.put("syjq", "t.syjq AS syjq"); + selectMap.put("syjsz", "t.syjsz AS syjsz"); + selectMap.put("syjwdp", "t.syjwdp AS syjwdp"); + selectMap.put("sjgycnt", "t.sjgycnt AS sjgycnt"); + selectMap.put("zygydxms", "t.zygydxms AS zygydxms"); + selectMap.put("jggydxms", "t.jggydxms AS jggydxms"); + selectMap.put("gytm", "t.gytm AS gytm"); + selectMap.put("yxtm", "t.yxtm AS yxtm"); + selectMap.put("fpssmn", "t.fpssmn AS fpssmn"); + selectMap.put("dtfrqcy", "t.dtfrqcy AS dtfrqcy"); + selectMap.put("jbtxcs", "t.jbtxcs AS jbtxcs"); + selectMap.put("isUp", "t.isUp AS isUp"); + selectMap.put("isDown", "t.isDown AS isDown"); + selectMap.put("mway", "t.mway AS mway"); + selectMap.put("mwayName", "t.mwayName AS mwayName"); + selectMap.put("remark", "t.remark AS remark"); + selectMap.put("vlsr", "t.vlsr AS vlsr"); + selectMap.put("vlsrTm", "t.vlsrTm AS vlsrTm"); + selectMap.put("logo", "t.logo AS logo"); + selectMap.put("orderIndex", "t.orderIndex AS orderIndex"); + selectMap.put("description", "t.description AS description"); + selectMap.put("baseStepSort", "t.baseStepSort AS baseStepSort"); + selectMap.put("rvcdStepSort", "t.rvcdStepSort AS rvcdStepSort"); + selectMap.put("rstcdStepSort", "t.rstcdStepSort AS rstcdStepSort"); + selectMap.put("siteStepSort", "t.siteStepSort AS siteStepSort"); + return selectMap; + } + private String buildVmsstbprptFilterCondition(DataSourceRequest.FilterDescriptor filter, Map paramMap, int[] indexHolder) { @@ -309,8 +439,11 @@ public class FpBuildServiceImpl implements FpBuildService { } Map columnMap = new HashMap<>(); columnMap.put("stcd", "fp.STCD"); + columnMap.put("stCode", "fp.ST_CODE"); columnMap.put("logo", "fp.LOGO"); columnMap.put("stnm", "fp.STNM"); + columnMap.put("stName", "fp.STNM"); + columnMap.put("sttp", "fp.STTP"); columnMap.put("sttpCode", "fp.STTP"); columnMap.put("sttpName", "sttp.STTP_NAME"); columnMap.put("sttpFullPath", "sttp.FULL_PATH"); @@ -378,9 +511,13 @@ public class FpBuildServiceImpl implements FpBuildService { columnMap.put("jbtxcs", "fp.JBTXCS"); columnMap.put("isUp", "fp.IS_UP"); columnMap.put("isDown", "fp.IS_DOWN"); + columnMap.put("mway", "NULL"); + columnMap.put("mwayName", "NULL"); columnMap.put("remark", "fp.REMARK"); columnMap.put("vlsr", "fp.VLSR"); columnMap.put("vlsrTm", "fp.VLSR_TM"); + columnMap.put("orderIndex", "fp.ORDER_INDEX"); + columnMap.put("description", "NULL"); columnMap.put("siteStepSort", "fp.ORDER_INDEX"); columnMap.put("rstcdStepSort", "eng.ORDER_INDEX"); columnMap.put("baseStepSort", "hb.ORDER_INDEX"); @@ -390,15 +527,15 @@ public class FpBuildServiceImpl implements FpBuildService { private String buildVmsstbprptOrderBySql(List sorts) { if (sorts == null || sorts.isEmpty()) { - return " ORDER BY NVL(hb.ORDER_INDEX, 999999) ASC, NVL(hbrv.ORDER_INDEX, 999999) ASC, " + - "NVL(eng.ORDER_INDEX, 999999) ASC, NVL(fp.ORDER_INDEX, 999999) ASC, fp.STCD ASC"; + return " ORDER BY t.baseStepSort ASC NULLS LAST, t.rvcdStepSort ASC NULLS LAST, " + + "t.rstcdStepSort ASC NULLS LAST, t.siteStepSort ASC NULLS LAST, t.stcd ASC"; } List orderItems = new ArrayList<>(); for (DataSourceRequest.SortDescriptor sort : sorts) { if (sort == null || sort.getField() == null || sort.getField().isBlank()) { continue; } - String column = mapVmsstbprptColumn(sort.getField()); + String column = mapVmsstbprptOuterColumn(sort.getField()); if (column == null) { continue; } @@ -406,9 +543,102 @@ public class FpBuildServiceImpl implements FpBuildService { orderItems.add(column + " " + direction + " NULLS LAST"); } if (orderItems.isEmpty()) { - return " ORDER BY NVL(hb.ORDER_INDEX, 999999) ASC, NVL(hbrv.ORDER_INDEX, 999999) ASC, " + - "NVL(eng.ORDER_INDEX, 999999) ASC, NVL(fp.ORDER_INDEX, 999999) ASC, fp.STCD ASC"; + return " ORDER BY t.baseStepSort ASC NULLS LAST, t.rvcdStepSort ASC NULLS LAST, " + + "t.rstcdStepSort ASC NULLS LAST, t.siteStepSort ASC NULLS LAST, t.stcd ASC"; } return " ORDER BY " + String.join(", ", orderItems); } + + private String mapVmsstbprptOuterColumn(String field) { + if (field == null || field.isBlank()) { + return null; + } + return switch (field) { + case "stcd" -> "t.stcd"; + case "stCode" -> "t.stCode"; + case "logo" -> "t.logo"; + case "stnm" -> "t.stnm"; + case "stName" -> "t.stName"; + case "sttp" -> "t.sttp"; + case "sttpCode" -> "t.sttpCode"; + case "sttpName" -> "t.sttpName"; + case "sttpFullPath" -> "t.sttpFullPath"; + case "sttpTreeLevel" -> "t.sttpTreeLevel"; + case "rstcd" -> "t.rstcd"; + case "ennm" -> "t.ennm"; + case "baseId" -> "t.baseId"; + case "baseName" -> "t.baseName"; + case "hbrvcd" -> "t.hbrvcd"; + case "hbrvcdName" -> "t.hbrvcdName"; + case "lgtd" -> "t.lgtd"; + case "lttd" -> "t.lttd"; + case "elev" -> "t.elev"; + case "stlc" -> "t.stlc"; + case "dtin" -> "t.dtin"; + case "dtinName" -> "t.dtinName"; + case "dtinTm" -> "t.dtinTm"; + case "bldsttCcode" -> "t.bldsttCcode"; + case "bldsttCcodeName" -> "t.bldsttCcodeName"; + case "stdsdt" -> "t.stdsdt"; + case "pststdt" -> "t.pststdt"; + case "pesstdt" -> "t.pesstdt"; + case "swdt" -> "t.swdt"; + case "jcdt" -> "t.jcdt"; + case "wddt" -> "t.wddt"; + case "introduce" -> "t.introduce"; + case "ydxs" -> "t.ydxs"; + case "ydzcd" -> "t.ydzcd"; + case "ydjkz" -> "t.ydjkz"; + case "ydjkcnt" -> "t.ydjkcnt"; + case "jkhg" -> "t.jkhg"; + case "ydyyxs" -> "t.ydyyxs"; + case "ydckz" -> "t.ydckz"; + case "ydckcnt" -> "t.ydckcnt"; + case "ckhg" -> "t.ckhg"; + case "ydcsv" -> "t.ydcsv"; + case "ydcscd" -> "t.ydcscd"; + case "ydcskd" -> "t.ydcskd"; + case "ydcspd" -> "t.ydcspd"; + case "ydcscnt" -> "t.ydcscnt"; + case "ydxxccnt" -> "t.ydxxccnt"; + case "v" -> "t.v"; + case "fzrdmxz" -> "t.fzrdmxz"; + case "fzrtdsz" -> "t.fzrtdsz"; + case "fzryxwdp" -> "t.fzryxwdp"; + case "fzrpj" -> "t.fzrpj"; + case "symtlc" -> "t.symtlc"; + case "symtxs" -> "t.symtxs"; + case "xymtlc" -> "t.xymtlc"; + case "xymtxs" -> "t.xymtxs"; + case "jyfs" -> "t.jyfs"; + case "yyfs" -> "t.yyfs"; + case "syjcnt" -> "t.syjcnt"; + case "syjhg" -> "t.syjhg"; + case "syjq" -> "t.syjq"; + case "syjsz" -> "t.syjsz"; + case "syjwdp" -> "t.syjwdp"; + case "sjgycnt" -> "t.sjgycnt"; + case "zygydxms" -> "t.zygydxms"; + case "jggydxms" -> "t.jggydxms"; + case "gytm" -> "t.gytm"; + case "yxtm" -> "t.yxtm"; + case "fpssmn" -> "t.fpssmn"; + case "dtfrqcy" -> "t.dtfrqcy"; + case "jbtxcs" -> "t.jbtxcs"; + case "isUp" -> "t.isUp"; + case "isDown" -> "t.isDown"; + case "mway" -> "t.mway"; + case "mwayName" -> "t.mwayName"; + case "remark" -> "t.remark"; + case "vlsr" -> "t.vlsr"; + case "vlsrTm" -> "t.vlsrTm"; + case "orderIndex" -> "t.orderIndex"; + case "description" -> "t.description"; + case "baseStepSort" -> "t.baseStepSort"; + case "rvcdStepSort" -> "t.rvcdStepSort"; + case "rstcdStepSort" -> "t.rstcdStepSort"; + case "siteStepSort" -> "t.siteStepSort"; + default -> null; + }; + } }