From 26837f30c5a2e319d4208175a5fd02a0edcab55e Mon Sep 17 00:00:00 2001 From: tangwei Date: Mon, 22 Jun 2026 17:17:28 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=A7=86=E9=A2=91=E7=AB=99=E6=A0=91?= =?UTF-8?q?=E7=BA=A7=E7=BB=93=E6=9E=84=E6=9F=A5=E8=AF=A2-=E7=AB=99?= =?UTF-8?q?=E7=82=B9=E7=BB=B4=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vd/controller/VdMonitorController.java | 6 + .../qgc_env/vd/service/VdMonitorService.java | 2 + .../vd/service/impl/VdMonitorServiceImpl.java | 159 ++++++++++++++++++ 3 files changed, 167 insertions(+) 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 3bd3f3f0..1c37e616 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 @@ -53,6 +53,12 @@ public class VdMonitorController { return ResponseResult.successData(vdMonitorService.getVdTreeKendoListCust(dataSourceRequest)); } + @PostMapping("/tree/GetKendoListCustSt") + @Operation(summary = "视频站树级结构查询-站点维度") + public ResponseResult getVdTreeKendoListCustSt(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(vdMonitorService.getVdTreeKendoListCustSt(dataSourceRequest)); + } + @PostMapping("/vdpoint/GetKendoListCust") @Operation(summary = "视频站锚点接口") public ResponseResult getVdPointKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/vd/service/VdMonitorService.java b/backend/src/main/java/com/yfd/platform/qgc_env/vd/service/VdMonitorService.java index 58d6e69a..490bd6b7 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/vd/service/VdMonitorService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/vd/service/VdMonitorService.java @@ -16,6 +16,8 @@ public interface VdMonitorService { DataSourceResult getVdTreeKendoListCust(DataSourceRequest dataSourceRequest); + DataSourceResult getVdTreeKendoListCustSt(DataSourceRequest dataSourceRequest); + DataSourceResult getVdPointKendoListCust(DataSourceRequest dataSourceRequest); DataSourceResult getRunDataKendoListCust(DataSourceRequest dataSourceRequest); 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 f13f0ed0..e4b17aca 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 @@ -171,6 +171,55 @@ public class VdMonitorServiceImpl implements VdMonitorService { return result; } + @Override + public DataSourceResult getVdTreeKendoListCustSt(DataSourceRequest dataSourceRequest) { + Map paramMap = new HashMap<>(); + String filterSql = buildVdTreeFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0}); + + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append("t.stcd AS stcd, ") + .append("t.stCode AS stCode, ") + .append("t.stName AS stName, ") + .append("t.stnm AS stnm, ") + .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.url AS url, ") + .append("t.playWay AS playWay, ") + .append("t.baseSort AS baseSort, ") + .append("t.rstcdStepSort AS rstcdStepSort, ") + .append("t.siteStepSort AS siteStepSort, ") + .append("t.deviceSerial AS deviceSerial, ") + .append("t.accessWay AS accessWay, ") + .append("t.protocol AS protocol, ") + .append("t.quality AS quality, ") + .append("t.controlMode AS controlMode, ") + .append("t.status AS status, ") + .append("t.statusTm AS statusTm ") + .append("FROM (") + .append(buildVdTreeCoreSql()) + .append(") t WHERE 1 = 1 "); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + sql.append(" ORDER BY t.baseSort ASC NULLS LAST, t.rstcdStepSort ASC NULLS LAST, t.siteStepSort ASC NULLS LAST, t.stcd ASC"); + + List rows = microservicDynamicSQLMapper.getAllListWithResultType(sql.toString(), paramMap, VdTreeRowVo.class); + boolean baseScoped = containsNonBlankFilterValue(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), "baseId"); + + DataSourceResult result = new DataSourceResult<>(); + List treeData = buildVdTreeNodesByStation(rows, baseScoped); + result.setData(treeData); + result.setTotal((long) treeData.size()); + result.setAggregates(new HashMap<>()); + return result; + } + @Override public DataSourceResult getVdPointKendoListCust(DataSourceRequest dataSourceRequest) { DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); @@ -1388,6 +1437,51 @@ public class VdMonitorServiceImpl implements VdMonitorService { return sortTreeNodes(result); } + private List buildVdTreeNodesByStation(List rows, boolean baseScoped) { + List stationNodes = buildStationCodeTreeNodes(rows, baseScoped); + if (baseScoped) { + return sortTreeNodes(stationNodes); + } + + LinkedHashMap baseNodeMap = new LinkedHashMap<>(); + List topLevelWithoutBase = new ArrayList<>(); + for (VdTreeRowVo row : rows) { + if (row == null || StrUtil.isBlank(row.getBaseId())) { + continue; + } + baseNodeMap.computeIfAbsent(row.getBaseId(), key -> { + VdTreeNodeVo node = new VdTreeNodeVo(); + node.setId(key); + node.setName(StrUtil.blankToDefault(row.getBaseName(), key)); + node.setType("PSB"); + node.setTypeName("基地"); + node.setSort(defaultSort(row.getBaseSort())); + node.setHasChildren(1); + node.setParentId(null); + node.setParentName(null); + return node; + }); + } + + Map> stationByBase = new LinkedHashMap<>(); + for (VdTreeNodeVo stationNode : stationNodes) { + if (StrUtil.isBlank(stationNode.getParentId())) { + topLevelWithoutBase.add(stationNode); + continue; + } + stationByBase.computeIfAbsent(stationNode.getParentId(), key -> new ArrayList<>()).add(stationNode); + } + + List result = new ArrayList<>(); + for (Map.Entry entry : baseNodeMap.entrySet()) { + VdTreeNodeVo baseNode = entry.getValue(); + baseNode.setChildren(sortTreeNodes(stationByBase.get(entry.getKey()))); + result.add(baseNode); + } + result.addAll(topLevelWithoutBase); + return sortTreeNodes(result); + } + private List buildStationTreeNodes(List rows, boolean baseScoped) { LinkedHashMap> stationRowMap = new LinkedHashMap<>(); for (VdTreeRowVo row : rows) { @@ -1453,6 +1547,71 @@ public class VdMonitorServiceImpl implements VdMonitorService { return sortTreeNodes(new ArrayList<>(siteNodeMap.values())); } + private List buildStationCodeTreeNodes(List rows, boolean baseScoped) { + LinkedHashMap> stationRowMap = new LinkedHashMap<>(); + for (VdTreeRowVo row : rows) { + if (row == null || StrUtil.isBlank(row.getStCode())) { + continue; + } + stationRowMap.computeIfAbsent(row.getStCode(), key -> new ArrayList<>()).add(row); + } + + List stationNodes = new ArrayList<>(); + for (Map.Entry> entry : stationRowMap.entrySet()) { + List stationRows = entry.getValue(); + if (CollUtil.isEmpty(stationRows)) { + continue; + } + VdTreeRowVo sample = stationRows.get(0); + VdTreeNodeVo stationNode = new VdTreeNodeVo(); + stationNode.setId(entry.getKey()); + stationNode.setName(StrUtil.blankToDefault(sample.getStName(), entry.getKey())); + stationNode.setType("VD_FB"); + stationNode.setTypeName("鱼类增殖站"); + stationNode.setSort(defaultSort(sample.getRstcdStepSort())); + stationNode.setHasChildren(1); + if (baseScoped) { + stationNode.setParentId(null); + stationNode.setParentName(null); + } else { + stationNode.setParentId(sample.getBaseId()); + stationNode.setParentName(sample.getBaseName()); + } + stationNode.setChildren(buildSiteTreeNodesByStation(stationRows)); + stationNodes.add(stationNode); + } + return sortTreeNodes(stationNodes); + } + + private List buildSiteTreeNodesByStation(List rows) { + LinkedHashMap siteNodeMap = new LinkedHashMap<>(); + for (VdTreeRowVo row : rows) { + if (row == null || StrUtil.isBlank(row.getStcd()) || siteNodeMap.containsKey(row.getStcd())) { + continue; + } + VdTreeNodeVo node = new VdTreeNodeVo(); + node.setId(row.getStcd()); + node.setName(StrUtil.blankToDefault(row.getStnm(), row.getStcd())); + node.setType(row.getSttpCode()); + node.setTypeName(row.getSttpName()); + node.setSort(defaultSort(row.getSiteStepSort())); + node.setHasChildren(0); + node.setParentId(row.getStCode()); + node.setParentName(row.getStName()); + node.setUrl(row.getUrl()); + node.setPlayWay(row.getPlayWay()); + node.setDeviceSerial(row.getDeviceSerial()); + node.setAccessWay(row.getAccessWay()); + node.setProtocol(row.getProtocol()); + node.setQuality(row.getQuality()); + node.setControlMode(row.getControlMode()); + node.setStatus(row.getStatus()); + node.setStatusTm(row.getStatusTm()); + siteNodeMap.put(row.getStcd(), node); + } + return sortTreeNodes(new ArrayList<>(siteNodeMap.values())); + } + private List sortTreeNodes(List nodes) { if (CollUtil.isEmpty(nodes)) { return new ArrayList<>();