From 6fc80d7199bffd4ab82f38c5348eb72c3ec8445a Mon Sep 17 00:00:00 2001 From: tangwei Date: Mon, 1 Jun 2026 10:03:52 +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=A7=86=E9=A2=91=E7=9B=91=E6=8E=A7=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E5=9F=BA=E7=A1=80=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vd/controller/VdMonitorController.java | 6 + .../qgc_env/vd/entity/vo/VdVmsstbprptVo.java | 18 +++ .../vd/service/impl/VdMonitorServiceImpl.java | 129 ++++++++++++------ 3 files changed, 110 insertions(+), 43 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/vd/controller/VdMonitorController.java b/backend/src/main/java/com/yfd/platform/qgc_env/vd/controller/VdMonitorController.java index 841e56e7..8dd04bf2 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/vd/controller/VdMonitorController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/vd/controller/VdMonitorController.java @@ -29,6 +29,12 @@ public class VdMonitorController { return ResponseResult.successData(vdMonitorService.getVmsstbprptList(dataSourceRequest)); } + @PostMapping("/msstbprpt/GetKendoList") + @Operation(summary = "根据条件查询视频监控设备基础数据") + public ResponseResult getMsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(vdMonitorService.getVmsstbprptList(dataSourceRequest)); + } + @GetMapping("/msstbprpt/getStcdInfo") @Operation(summary = "根据站码查询单条视频监控设备详情") public ResponseResult getStcdInfo(@RequestParam String stcd) { diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/vd/entity/vo/VdVmsstbprptVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/vd/entity/vo/VdVmsstbprptVo.java index 620e7996..b4281f26 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/vd/entity/vo/VdVmsstbprptVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/vd/entity/vo/VdVmsstbprptVo.java @@ -46,6 +46,18 @@ public class VdVmsstbprptVo implements Serializable { @Schema(description = "所属电站名称") private String ennm; + @Schema(description = "所属栖息地编码") + private String fhstcd; + + @Schema(description = "所属栖息地名称") + private String fhstnm; + + @Schema(description = "所属测站编码") + private String stCode; + + @Schema(description = "所属测站名称") + private String stName; + @Schema(description = "基地编码") private String baseId; @@ -118,6 +130,12 @@ public class VdVmsstbprptVo implements Serializable { @Schema(description = "数据来源时间") private Date vlsrTm; + @Schema(description = "视频播放地址") + private String url; + + @Schema(description = "播放方式") + private Integer playWay; + @Schema(description = "基地排序") private Integer baseStepSort; diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/vd/service/impl/VdMonitorServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/vd/service/impl/VdMonitorServiceImpl.java index 42f124ca..1748774d 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/vd/service/impl/VdMonitorServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/vd/service/impl/VdMonitorServiceImpl.java @@ -58,6 +58,10 @@ public class VdMonitorServiceImpl implements VdMonitorService { .append("t.sttpFullPath AS sttpFullPath, ") .append("t.rstcd AS rstcd, ") .append("t.ennm AS ennm, ") + .append("t.fhstcd AS fhstcd, ") + .append("t.fhstnm AS fhstnm, ") + .append("t.stCode AS stCode, ") + .append("t.stName AS stName, ") .append("t.baseId AS baseId, ") .append("t.baseName AS baseName, ") .append("t.hbrvcd AS hbrvcd, ") @@ -85,6 +89,8 @@ public class VdMonitorServiceImpl implements VdMonitorService { .append("t.remark AS remark, ") .append("t.vlsr AS vlsr, ") .append("t.vlsrTm AS vlsrTm, ") + .append("t.url AS url, ") + .append("t.playWay AS playWay, ") .append("t.baseStepSort AS baseStepSort, ") .append("t.rstcdStepSort AS rstcdStepSort, ") .append("t.siteStepSort AS siteStepSort, ") @@ -149,45 +155,7 @@ public class VdMonitorServiceImpl implements VdMonitorService { Page page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); StringBuilder sql = new StringBuilder(); sql.append("SELECT ") - .append("t.stcd AS stcd, ") - .append("t.stnm AS stnm, ") - .append("t.mntp AS mntp, ") - .append("t.sttpCode AS sttpCode, ") - .append("t.sttpName AS sttpName, ") - .append("t.sttpFullPath AS sttpFullPath, ") - .append("t.rstcd AS rstcd, ") - .append("t.ennm AS ennm, ") - .append("t.baseId AS baseId, ") - .append("t.baseName AS baseName, ") - .append("t.hbrvcd AS hbrvcd, ") - .append("t.rvcd AS rvcd, ") - .append("t.addvcd AS addvcd, ") - .append("t.stlc AS stlc, ") - .append("t.lgtd AS lgtd, ") - .append("t.lttd AS lttd, ") - .append("t.elev AS elev, ") - .append("t.jcdt AS jcdt, ") - .append("t.wddt AS wddt, ") - .append("t.dtin AS dtin, ") - .append("CASE WHEN NVL(t.dtin, 0) = 1 THEN '已接入' ELSE '未接入' END AS dtinName, ") - .append("t.usfl AS usfl, ") - .append("t.bldsttCcode AS bldsttCcode, ") - .append("CASE ") - .append("WHEN t.bldsttCcode IN (1, 10, 11) THEN '已建' ") - .append("WHEN t.bldsttCcode IN (2, 7, 8) THEN '在建' ") - .append("ELSE '未建/规划' END AS bldsttCcodeName, ") - .append("t.stindx AS stindx, ") - .append("t.introduce AS introduce, ") - .append("t.logo AS logo, ") - .append("t.inffile AS inffile, ") - .append("t.dtfrqcy AS dtfrqcy, ") - .append("t.remark AS remark, ") - .append("t.vlsr AS vlsr, ") - .append("t.vlsrTm AS vlsrTm, ") - .append("t.baseStepSort AS baseStepSort, ") - .append("t.rstcdStepSort AS rstcdStepSort, ") - .append("t.siteStepSort AS siteStepSort, ") - .append("t.sourceTable AS sourceTable ") + .append(buildVmsstbprptDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect())) .append("FROM (") .append(buildVmsstbprptViewSql()) .append(") t WHERE 1 = 1 "); @@ -205,6 +173,67 @@ public class VdMonitorServiceImpl implements VdMonitorService { return result; } + private String buildVmsstbprptDetailSelectSql(List selectFields) { + Map selectMap = new LinkedHashMap<>(); + selectMap.put("stcd", "t.stcd AS stcd"); + selectMap.put("stnm", "t.stnm AS stnm"); + selectMap.put("mntp", "t.mntp AS mntp"); + selectMap.put("sttpCode", "t.sttpCode AS sttpCode"); + selectMap.put("sttpName", "t.sttpName AS sttpName"); + selectMap.put("sttpFullPath", "t.sttpFullPath AS sttpFullPath"); + selectMap.put("rstcd", "t.rstcd AS rstcd"); + selectMap.put("ennm", "t.ennm AS ennm"); + selectMap.put("fhstcd", "t.fhstcd AS fhstcd"); + selectMap.put("fhstnm", "t.fhstnm AS fhstnm"); + selectMap.put("stCode", "t.stCode AS stCode"); + selectMap.put("stName", "t.stName AS stName"); + selectMap.put("baseId", "t.baseId AS baseId"); + selectMap.put("baseName", "t.baseName AS baseName"); + selectMap.put("hbrvcd", "t.hbrvcd AS hbrvcd"); + selectMap.put("rvcd", "t.rvcd AS rvcd"); + selectMap.put("addvcd", "t.addvcd AS addvcd"); + selectMap.put("stlc", "t.stlc AS stlc"); + selectMap.put("lgtd", "t.lgtd AS lgtd"); + selectMap.put("lttd", "t.lttd AS lttd"); + selectMap.put("elev", "t.elev AS elev"); + selectMap.put("jcdt", "t.jcdt AS jcdt"); + selectMap.put("wddt", "t.wddt AS wddt"); + selectMap.put("dtin", "t.dtin AS dtin"); + selectMap.put("dtinName", "CASE WHEN NVL(t.dtin, 0) = 1 THEN '已接入' ELSE '未接入' END AS dtinName"); + selectMap.put("usfl", "t.usfl AS usfl"); + selectMap.put("bldsttCcode", "t.bldsttCcode AS bldsttCcode"); + selectMap.put("bldsttCcodeName", "CASE WHEN t.bldsttCcode IN (1, 10, 11) THEN '已建' WHEN t.bldsttCcode IN (2, 7, 8) THEN '在建' ELSE '未建/规划' END AS bldsttCcodeName"); + selectMap.put("stindx", "t.stindx AS stindx"); + selectMap.put("introduce", "t.introduce AS introduce"); + selectMap.put("logo", "t.logo AS logo"); + selectMap.put("inffile", "t.inffile AS inffile"); + 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.vlsrTm AS vlsrTm"); + selectMap.put("url", "t.url AS url"); + selectMap.put("playWay", "t.playWay AS playWay"); + selectMap.put("baseStepSort", "t.baseStepSort AS baseStepSort"); + selectMap.put("rstcdStepSort", "t.rstcdStepSort AS rstcdStepSort"); + selectMap.put("siteStepSort", "t.siteStepSort AS siteStepSort"); + selectMap.put("sourceTable", "t.sourceTable AS sourceTable"); + + if (CollUtil.isEmpty(selectFields)) { + return String.join(", ", selectMap.values()) + " "; + } + List 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 DataSourceResult queryRunDataDetailList(DataSourceRequest dataSourceRequest, DataSourceLoadOptionsBase loadOptions) { StringBuilder sql = new StringBuilder(); @@ -310,6 +339,10 @@ public class VdMonitorServiceImpl implements VdMonitorService { "sttp.FULL_PATH AS sttpFullPath, " + "src.RSTCD AS rstcd, " + "eng.ENNM AS ennm, " + + "src.FHSTCD AS fhstcd, " + + "fh.STNM AS fhstnm, " + + "src.CSTCD AS stCode, " + + "cst.STNM AS stName, " + "NVL(eng.BASE_ID, src.BASE_ID) AS baseId, " + "hb.BASENAME AS baseName, " + "NVL(eng.HBRVCD, src.HBRVCD) AS hbrvcd, " + @@ -332,6 +365,8 @@ public class VdMonitorServiceImpl implements VdMonitorService { "src.REMARK AS remark, " + "src.VLSR AS vlsr, " + "src.VLSR_TM AS vlsrTm, " + + "src.URL AS url, " + + "CASE WHEN src.URL IS NULL THEN NULL WHEN INSTR(src.URL, 'm3u8') > 0 THEN 1 ELSE 0 END AS playWay, " + "NVL(hb.ORDER_INDEX, 999999) AS baseStepSort, " + "NVL(eng.ORDER_INDEX, 999999) AS rstcdStepSort, " + "NVL(src.ORDER_INDEX, 999999) AS siteStepSort, " + @@ -341,8 +376,10 @@ public class VdMonitorServiceImpl implements VdMonitorService { ") src " + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = src.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " + "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = NVL(eng.BASE_ID, src.BASE_ID) AND NVL(hb.IS_DELETED, 0) = 0 " + + "LEFT JOIN SD_FHBT_B_H fh ON fh.STCD = src.FHSTCD AND NVL(fh.IS_DELETED, 0) = 0 " + + "LEFT JOIN (" + buildStationBaseSql() + ") cst ON cst.STCD = src.CSTCD " + "LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = src.STTP " + - " AND NVL(sttp.IS_DELETED, 0) = 0 AND NVL(sttp.ENABLED, 1) = 1 "; + " AND NVL(sttp.IS_DELETED, 0) = 0 AND NVL(sttp.ENABLE, 1) = 1 "; } private String buildVdDeviceBaseSql() { @@ -350,14 +387,14 @@ public class VdMonitorServiceImpl implements VdMonitorService { " vd.JCDT, vd.WDDT, vd.BLDSTT_CODE, vd.USFL, vd.DTIN, vd.STINDX, vd.RSTCD, vd.BASE_ID, " + " vd.HBRVCD, vd.RVCD, vd.ADDVCD, vd.CSTCD, vd.FHSTCD, CAST(NULL AS VARCHAR2(3000)) AS INTRODUCE, " + " CAST(NULL AS VARCHAR2(255)) AS LOGO, CAST(NULL AS VARCHAR2(1000)) AS INFFILE, " + - " vd.DTFRQCY, vd.REMARK, vd.VLSR, vd.VLSR_TM, CAST(NULL AS NUMBER(8,0)) AS ORDER_INDEX, " + + " vd.DTFRQCY, vd.REMARK, vd.VLSR, vd.VLSR_TM, vd.URL AS URL, CAST(NULL AS NUMBER(8,0)) AS ORDER_INDEX, " + " 'SD_VDINFO_B' AS SOURCE_TABLE " + "FROM SD_VDINFO_B vd WHERE vd.STTP = 'VD_FP' " + "UNION ALL " + "SELECT sonar.STCD, sonar.STNM, sonar.MNTP, sonar.STTP, sonar.LGTD, sonar.LTTD, sonar.ELEV, sonar.STLC, " + " sonar.JCDT, sonar.WDDT, sonar.BLDSTT_CODE, sonar.USFL, sonar.DTIN, sonar.STINDX, sonar.RSTCD, sonar.BASE_ID, " + " sonar.HBRVCD, sonar.RVCD, sonar.ADDVCD, CAST(NULL AS VARCHAR2(36)) AS CSTCD, CAST(NULL AS VARCHAR2(36)) AS FHSTCD, " + - " sonar.INTRODUCE, sonar.LOGO, sonar.INFFILE, sonar.DTFRQCY, sonar.REMARK, sonar.VLSR, sonar.VLSR_TM, sonar.ORDER_INDEX, " + + " sonar.INTRODUCE, sonar.LOGO, sonar.INFFILE, sonar.DTFRQCY, sonar.REMARK, sonar.VLSR, sonar.VLSR_TM, CAST(NULL AS VARCHAR2(512)) AS URL, sonar.ORDER_INDEX, " + " 'SD_SONAR_B_H' AS SOURCE_TABLE " + "FROM SD_SONAR_B_H sonar WHERE NVL(sonar.IS_DELETED, 0) = 0 AND sonar.STTP IN ('VD_WVD', 'VD_SN') "; } @@ -403,7 +440,7 @@ public class VdMonitorServiceImpl implements VdMonitorService { "LEFT JOIN SD_FHBT_B_H fh ON fh.STCD = base.FHSTCD AND NVL(fh.IS_DELETED, 0) = 0 " + "LEFT JOIN (" + buildStationBaseSql() + ") cst ON cst.STCD = base.CSTCD " + "LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = base.STTP " + - " AND NVL(sttp.IS_DELETED, 0) = 0 AND NVL(sttp.ENABLE, 1) = 1 " + + " AND NVL(sttp.IS_DELETED, 0) = 0 AND NVL(sttp.ENABLED, 1) = 1 " + "WHERE NVL(run.IS_DELETED, 0) = 0 "; } @@ -725,6 +762,10 @@ public class VdMonitorServiceImpl implements VdMonitorService { case "stnm" -> "t.stnm"; case "rstcd" -> "t.rstcd"; case "ennm" -> "t.ennm"; + case "fhstcd" -> "t.fhstcd"; + case "fhstnm" -> "t.fhstnm"; + case "stCode" -> "t.stCode"; + case "stName" -> "t.stName"; case "baseId" -> "t.baseId"; case "baseName" -> "t.baseName"; case "hbrvcd" -> "t.hbrvcd"; @@ -733,6 +774,8 @@ public class VdMonitorServiceImpl implements VdMonitorService { case "dtin" -> "t.dtin"; case "usfl" -> "t.usfl"; case "bldsttCcode" -> "t.bldsttCcode"; + case "url" -> "t.url"; + case "playWay" -> "t.playWay"; case "sourceTable" -> "t.sourceTable"; default -> null; };