From e818c0319e259994b6e6d798b5c0b06eb70716b4 Mon Sep 17 00:00:00 2001 From: gaoyutao Date: Tue, 16 Dec 2025 17:56:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=9B=BE=E5=BD=A2x=E8=BD=B4?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E8=B7=A8=E7=95=8C=E9=97=AE=E9=A2=98=E3=80=81?= =?UTF-8?q?=E4=BA=A4=E6=8D=A2=E6=9C=BA=E6=9C=88=E6=94=B6=E7=9B=8A=E4=B8=8D?= =?UTF-8?q?=E5=B1=95=E7=A4=BA95=E5=80=BC=E9=97=AE=E9=A2=98=E3=80=82=20ipv4?= =?UTF-8?q?=20ipv6=E5=A2=9E=E5=8A=A0=E5=AD=90=E7=BD=91=E5=8D=A1=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/utils/EchartsDataUtils.java | 13 +- .../core/utils/EchartsMoreDataUtils.java | 14 +- .../InitialSwitchInfoDetailsServiceImpl.java | 2 +- .../rocketmq/handler/MessageHandler.java | 1 - .../InitialBandwidthTrafficServiceImpl.java | 262 ++++++++++++++---- .../RmNetworkInterfaceChildMapper.xml | 2 +- 6 files changed, 228 insertions(+), 66 deletions(-) diff --git a/tongran-common/tongran-common-core/src/main/java/com/tongran/common/core/utils/EchartsDataUtils.java b/tongran-common/tongran-common-core/src/main/java/com/tongran/common/core/utils/EchartsDataUtils.java index dd43f2b..b4327e4 100644 --- a/tongran-common/tongran-common-core/src/main/java/com/tongran/common/core/utils/EchartsDataUtils.java +++ b/tongran-common/tongran-common-core/src/main/java/com/tongran/common/core/utils/EchartsDataUtils.java @@ -429,7 +429,18 @@ public class EchartsDataUtils { timeSeries.add(calendar.getTime()); calendar.setTimeInMillis(calendar.getTimeInMillis() + interval); } - return timeSeries; + // 在generateFullTimeSeriesForMultiInterface方法的最后添加: + timeSeries.sort(Date::compareTo); + // 去重 + List uniqueSeries = new ArrayList<>(); + Date lastDate = null; + for (Date date : timeSeries) { + if (lastDate == null || !date.equals(lastDate)) { + uniqueSeries.add(date); + lastDate = date; + } + } + return uniqueSeries; } /** diff --git a/tongran-common/tongran-common-core/src/main/java/com/tongran/common/core/utils/EchartsMoreDataUtils.java b/tongran-common/tongran-common-core/src/main/java/com/tongran/common/core/utils/EchartsMoreDataUtils.java index c64385e..7dd3bcd 100644 --- a/tongran-common/tongran-common-core/src/main/java/com/tongran/common/core/utils/EchartsMoreDataUtils.java +++ b/tongran-common/tongran-common-core/src/main/java/com/tongran/common/core/utils/EchartsMoreDataUtils.java @@ -214,8 +214,18 @@ public class EchartsMoreDataUtils { fullTimeSeries.addAll(afterSeries); } } - - return fullTimeSeries; + // 在generateFullTimeSeriesForMultiInterface方法的最后添加: + fullTimeSeries.sort(Date::compareTo); + // 去重 + List uniqueSeries = new ArrayList<>(); + Date lastDate = null; + for (Date date : fullTimeSeries) { + if (lastDate == null || !date.equals(lastDate)) { + uniqueSeries.add(date); + lastDate = date; + } + } + return uniqueSeries; } /** diff --git a/tongran-modules/tongran-system/src/main/java/com/tongran/system/service/impl/InitialSwitchInfoDetailsServiceImpl.java b/tongran-modules/tongran-system/src/main/java/com/tongran/system/service/impl/InitialSwitchInfoDetailsServiceImpl.java index bd13100..48af7e1 100644 --- a/tongran-modules/tongran-system/src/main/java/com/tongran/system/service/impl/InitialSwitchInfoDetailsServiceImpl.java +++ b/tongran-modules/tongran-system/src/main/java/com/tongran/system/service/impl/InitialSwitchInfoDetailsServiceImpl.java @@ -936,7 +936,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe // 查询95值 BigDecimal percentile95 = BigDecimal.ZERO; EpsNodeBandwidth query = new EpsNodeBandwidth(); - query.setBandwidthType("1"); + query.setBandwidthType("2"); query.setCreateTime(DateUtils.parseDate(monthStart)); query.setCalculationMode(initialSwitchInfoDetails.getCalculationMode()); query.setClientId(clientId); diff --git a/tongran-rocketmq/src/main/java/com/tongran/rocketmq/handler/MessageHandler.java b/tongran-rocketmq/src/main/java/com/tongran/rocketmq/handler/MessageHandler.java index 11d30fe..0eea7dd 100644 --- a/tongran-rocketmq/src/main/java/com/tongran/rocketmq/handler/MessageHandler.java +++ b/tongran-rocketmq/src/main/java/com/tongran/rocketmq/handler/MessageHandler.java @@ -674,7 +674,6 @@ public class MessageHandler { // 交换机在线状态改为在线(只在第3次心跳时执行) if(newHeartbeatCount == 3){ - log.info("客户端ID: {} 第3次心跳,更新交换机状态为在线", clientId); RmSwitchManagementRemote rmSwitchManagementRemote = new RmSwitchManagementRemote(); rmSwitchManagementRemote.setClientId(clientId); R> rmSwitchManagementRemoteListR = remoteRevenueConfigService.getSwitchNameByClientId(rmSwitchManagementRemote, SecurityConstants.INNER); diff --git a/tongran-rocketmq/src/main/java/com/tongran/rocketmq/service/impl/InitialBandwidthTrafficServiceImpl.java b/tongran-rocketmq/src/main/java/com/tongran/rocketmq/service/impl/InitialBandwidthTrafficServiceImpl.java index 31903a0..924d352 100644 --- a/tongran-rocketmq/src/main/java/com/tongran/rocketmq/service/impl/InitialBandwidthTrafficServiceImpl.java +++ b/tongran-rocketmq/src/main/java/com/tongran/rocketmq/service/impl/InitialBandwidthTrafficServiceImpl.java @@ -18,7 +18,6 @@ import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; -import java.math.RoundingMode; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.*; @@ -251,7 +250,7 @@ public class InitialBandwidthTrafficServiceImpl implements IInitialBandwidthTraf interfaceDataMap.put(name, mainList); showRealation.put(name+"netInTraffic", name+"入站流量"); showRealation.put(name+"netOutTraffic", name+"出站流量"); - + boolean hasSubInterface = false; // 如果是Ethernet类型,查询子网卡 if(isEthernetInterface(name)){ RmNetworkInterfaceChild query = new RmNetworkInterfaceChild(); @@ -259,6 +258,7 @@ public class InitialBandwidthTrafficServiceImpl implements IInitialBandwidthTraf query.setParentInterface(name); List children = rmNetworkInterfaceChildMapper.selectRmNetworkInterfaceChildList(query); if(children != null && !children.isEmpty()){ + hasSubInterface = true; for (RmNetworkInterfaceChild child : children) { InitialBandwidthTraffic childTraffic = new InitialBandwidthTraffic(); BeanUtils.copyProperties(initialBandwidthTraffic, childTraffic); @@ -294,7 +294,7 @@ public class InitialBandwidthTrafficServiceImpl implements IInitialBandwidthTraf ); resultMap.put("unit", unit); - if(!showRealation.isEmpty()){ + if(!showRealation.isEmpty() && hasSubInterface){ showRealation.put("totalNetInTraffic", name+"总入站流量"); showRealation.put("totalNetOutTraffic", name+"总出站流量"); } @@ -335,66 +335,160 @@ public class InitialBandwidthTrafficServiceImpl implements IInitialBandwidthTraf @Override public Map netInterfaceIpv4TrafficEcharts(InitialBandwidthTraffic initialBandwidthTraffic) { - // 流量信息 - List list = getListByTableName(initialBandwidthTraffic); + // 主网卡IPv4流量信息 + List mainList = getListByTableName(initialBandwidthTraffic); + String originalName = initialBandwidthTraffic.getName(); + String name = originalName; + + if (originalName != null && originalName.contains("(")) { + int index = originalName.indexOf("("); + name = originalName.substring(0, index); + } + + // 存储所有网卡的数据 + Map> interfaceDataMap = new LinkedHashMap<>(); + // 展示关系 + Map showRealation = new HashMap<>(); + interfaceDataMap.put(name, mainList); + showRealation.put(name + "netInSpeedData", name + "IPv4入站流量"); + showRealation.put(name + "netOutSpeedData", name + "IPv4出站流量"); + boolean hasSubInterface = false; + + // 如果是Ethernet类型,查询子网卡 + if (isEthernetInterface(name)) { + RmNetworkInterfaceChild query = new RmNetworkInterfaceChild(); + query.setClientId(initialBandwidthTraffic.getClientId()); + query.setParentInterface(name); + List children = rmNetworkInterfaceChildMapper.selectRmNetworkInterfaceChildList(query); + if (children != null && !children.isEmpty()) { + hasSubInterface = true; + for (RmNetworkInterfaceChild child : children) { + InitialBandwidthTraffic childTraffic = new InitialBandwidthTraffic(); + BeanUtils.copyProperties(initialBandwidthTraffic, childTraffic); + childTraffic.setName(child.getInterfaceName()); + List childTrafficList = getListByTableName(childTraffic); + + if (childTrafficList != null && !childTrafficList.isEmpty()) { + interfaceDataMap.put(child.getInterfaceName(), childTrafficList); + showRealation.put(child.getInterfaceName() + "netInSpeedData", child.getInterfaceName() + "IPv4入站流量"); + showRealation.put(child.getInterfaceName() + "netOutSpeedData", child.getInterfaceName() + "IPv4出站流量"); + } + } + } + } + try { - String unit = SpeedUtils.calculateUnitWithStringTraffic(list, "ipv4InSpeed", "ipv4OutSpeed"); - if(initialBandwidthTraffic.getUnit() != null){ + // 计算单位 + String unit = SpeedUtils.calculateUnitWithStringTraffic(mainList, "ipv4InSpeed", "ipv4OutSpeed"); + if (initialBandwidthTraffic.getUnit() != null) { unit = initialBandwidthTraffic.getUnit(); } BigDecimal divisor = SpeedUtils.getDivisor(unit); - Map> extractors = new LinkedHashMap<>(); - extractors.put("netInSpeedData", info -> - info != null && info.getIpv4InSpeed() != null ? - new BigDecimal(info.getIpv4InSpeed()).divide(divisor, 2, RoundingMode.HALF_UP) : - null); - extractors.put("netOutSpeedData", info -> - info != null && info.getIpv4OutSpeed() != null ? - new BigDecimal(info.getIpv4OutSpeed()).divide(divisor, 2, RoundingMode.HALF_UP) : - null); - Map resultMap = EchartsDataUtils.buildEchartsDataAutoPadding( - list, InitialBandwidthTraffic::getCreateTime, extractors, - initialBandwidthTraffic.getStartTime(), initialBandwidthTraffic.getEndTime() + // 使用工具类构建多网卡图表数据 + Map resultMap = EchartsMoreDataUtils.buildMultiInterfaceEchartsDataWithTotal( + interfaceDataMap, + InitialBandwidthTraffic::getCreateTime, + info -> info != null && info.getIpv4InSpeed() != null ? + new BigDecimal(info.getIpv4InSpeed()) : null, + info -> info != null && info.getIpv4OutSpeed() != null ? + new BigDecimal(info.getIpv4OutSpeed()) : null, + initialBandwidthTraffic.getStartTime(), + initialBandwidthTraffic.getEndTime(), + divisor ); + resultMap.put("unit", unit); + if (!showRealation.isEmpty() && hasSubInterface) { + showRealation.put("totalNetInSpeedData", name + "IPv4总入站流量"); + showRealation.put("totalNetOutSpeedData", name + "IPv4总出站流量"); + } + resultMap.put("showRealation", showRealation); return resultMap; - } catch (Exception e){ + + } catch (Exception e) { e.printStackTrace(); + return new HashMap<>(); } - return new HashMap<>(); } @Override public Map netInterfaceIpv6TrafficEcharts(InitialBandwidthTraffic initialBandwidthTraffic) { - // 流量信息 - List list = getListByTableName(initialBandwidthTraffic); + // 主网卡IPv6流量信息 + List mainList = getListByTableName(initialBandwidthTraffic); + String originalName = initialBandwidthTraffic.getName(); + String name = originalName; + + if (originalName != null && originalName.contains("(")) { + int index = originalName.indexOf("("); + name = originalName.substring(0, index); + } + + // 存储所有网卡的数据 + Map> interfaceDataMap = new LinkedHashMap<>(); + // 展示关系 + Map showRealation = new HashMap<>(); + interfaceDataMap.put(name, mainList); + showRealation.put(name + "netInSpeedData", name + "IPv6入站流量"); + showRealation.put(name + "netOutSpeedData", name + "IPv6出站流量"); + boolean hasSubInterface = false; + + // 如果是Ethernet类型,查询子网卡 + if (isEthernetInterface(name)) { + RmNetworkInterfaceChild query = new RmNetworkInterfaceChild(); + query.setClientId(initialBandwidthTraffic.getClientId()); + query.setParentInterface(name); + List children = rmNetworkInterfaceChildMapper.selectRmNetworkInterfaceChildList(query); + if (children != null && !children.isEmpty()) { + hasSubInterface = true; + for (RmNetworkInterfaceChild child : children) { + InitialBandwidthTraffic childTraffic = new InitialBandwidthTraffic(); + BeanUtils.copyProperties(initialBandwidthTraffic, childTraffic); + childTraffic.setName(child.getInterfaceName()); + List childTrafficList = getListByTableName(childTraffic); + + if (childTrafficList != null && !childTrafficList.isEmpty()) { + interfaceDataMap.put(child.getInterfaceName(), childTrafficList); + showRealation.put(child.getInterfaceName() + "netInSpeedData", child.getInterfaceName() + "IPv6入站流量"); + showRealation.put(child.getInterfaceName() + "netOutSpeedData", child.getInterfaceName() + "IPv6出站流量"); + } + } + } + } + try { - String unit = SpeedUtils.calculateUnitWithStringTraffic(list, "ipv6InSpeed", "ipv6OutSpeed"); - if(initialBandwidthTraffic.getUnit() != null){ + // 计算单位 + String unit = SpeedUtils.calculateUnitWithStringTraffic(mainList, "ipv6InSpeed", "ipv6OutSpeed"); + if (initialBandwidthTraffic.getUnit() != null) { unit = initialBandwidthTraffic.getUnit(); } BigDecimal divisor = SpeedUtils.getDivisor(unit); - Map> extractors = new LinkedHashMap<>(); - extractors.put("netInSpeedData", info -> - info != null && info.getIpv6InSpeed() != null ? - new BigDecimal(info.getIpv6InSpeed()).divide(divisor, 2, RoundingMode.HALF_UP) : - null); - extractors.put("netOutSpeedData", info -> - info != null && info.getIpv6OutSpeed() != null ? - new BigDecimal(info.getIpv6OutSpeed()).divide(divisor, 2, RoundingMode.HALF_UP) : - null); - Map resultMap = EchartsDataUtils.buildEchartsDataAutoPadding( - list, InitialBandwidthTraffic::getCreateTime, extractors, - initialBandwidthTraffic.getStartTime(), initialBandwidthTraffic.getEndTime() + // 使用工具类构建多网卡图表数据 + Map resultMap = EchartsMoreDataUtils.buildMultiInterfaceEchartsDataWithTotal( + interfaceDataMap, + InitialBandwidthTraffic::getCreateTime, + info -> info != null && info.getIpv6InSpeed() != null ? + new BigDecimal(info.getIpv6InSpeed()) : null, + info -> info != null && info.getIpv6OutSpeed() != null ? + new BigDecimal(info.getIpv6OutSpeed()) : null, + initialBandwidthTraffic.getStartTime(), + initialBandwidthTraffic.getEndTime(), + divisor ); + resultMap.put("unit", unit); + if (!showRealation.isEmpty() && hasSubInterface) { + showRealation.put("totalNetInSpeedData", name + "IPv6总入站流量"); + showRealation.put("totalNetOutSpeedData", name + "IPv6总出站流量"); + } + resultMap.put("showRealation", showRealation); return resultMap; - } catch (Exception e){ + + } catch (Exception e) { e.printStackTrace(); + return new HashMap<>(); } - return new HashMap<>(); } @Override @@ -413,7 +507,8 @@ public class InitialBandwidthTrafficServiceImpl implements IInitialBandwidthTraf trafficData.setName(interfaceName); trafficData.setStartTime(initialBandwidthTraffic.getStartTime()); trafficData.setEndTime(initialBandwidthTraffic.getEndTime()); - Map resultMap = getEchartsData(trafficData); + // 修改为新的支持子网卡的方法 + Map resultMap = getBatchEchartsData(trafficData); resultMap.put("interfaceName", interfaceName); resultMap.put("clientId", clientId); resultList.add(resultMap); @@ -423,39 +518,86 @@ public class InitialBandwidthTrafficServiceImpl implements IInitialBandwidthTraf } /** - * 构建echarts图表 + * 构建支持子网卡的批量echarts图表数据 * @param initialBandwidthTraffic * @return */ - public Map getEchartsData(InitialBandwidthTraffic initialBandwidthTraffic){ - // 流量信息 - List list = getListByTableName(initialBandwidthTraffic); + public Map getBatchEchartsData(InitialBandwidthTraffic initialBandwidthTraffic) { + // 主网卡流量信息 + List mainList = getListByTableName(initialBandwidthTraffic); + String originalName = initialBandwidthTraffic.getName(); + String name = originalName; + + if (originalName != null && originalName.contains("(")) { + int index = originalName.indexOf("("); + name = originalName.substring(0, index); + } + + // 存储所有网卡的数据 + Map> interfaceDataMap = new LinkedHashMap<>(); + // 展示关系 + Map showRealation = new HashMap<>(); + interfaceDataMap.put(name, mainList); + showRealation.put(name + "netInSpeedData", name + "入站流量"); + showRealation.put(name + "netOutSpeedData", name + "出站流量"); + boolean hasSubInterface = false; + + // 如果是Ethernet类型,查询子网卡 + if (isEthernetInterface(name)) { + RmNetworkInterfaceChild query = new RmNetworkInterfaceChild(); + query.setClientId(initialBandwidthTraffic.getClientId()); + query.setParentInterface(name); + List children = rmNetworkInterfaceChildMapper.selectRmNetworkInterfaceChildList(query); + if (children != null && !children.isEmpty()) { + hasSubInterface = true; + for (RmNetworkInterfaceChild child : children) { + InitialBandwidthTraffic childTraffic = new InitialBandwidthTraffic(); + BeanUtils.copyProperties(initialBandwidthTraffic, childTraffic); + childTraffic.setName(child.getInterfaceName()); + List childTrafficList = getListByTableName(childTraffic); + + if (childTrafficList != null && !childTrafficList.isEmpty()) { + interfaceDataMap.put(child.getInterfaceName(), childTrafficList); + showRealation.put(child.getInterfaceName() + "netInSpeedData", child.getInterfaceName() + "入站流量"); + showRealation.put(child.getInterfaceName() + "netOutSpeedData", child.getInterfaceName() + "出站流量"); + } + } + } + } + try { - String unit = SpeedUtils.calculateUnitWithStringTraffic(list, "inSpeed", "outSpeed"); - if(initialBandwidthTraffic.getUnit() != null){ + // 计算单位 + String unit = SpeedUtils.calculateUnitWithStringTraffic(mainList, "inSpeed", "outSpeed"); + if (initialBandwidthTraffic.getUnit() != null) { unit = initialBandwidthTraffic.getUnit(); } BigDecimal divisor = SpeedUtils.getDivisor(unit); - Map> extractors = new LinkedHashMap<>(); - extractors.put("netInSpeedData", info -> - info != null && info.getInSpeed() != null ? - new BigDecimal(info.getInSpeed()).divide(divisor, 2, RoundingMode.HALF_UP) : - null); - extractors.put("netOutSpeedData", info -> - info != null && info.getOutSpeed() != null ? - new BigDecimal(info.getOutSpeed()).divide(divisor, 2, RoundingMode.HALF_UP) : - null); - Map resultMap = EchartsDataUtils.buildEchartsDataAutoPadding( - list, InitialBandwidthTraffic::getCreateTime, extractors, - initialBandwidthTraffic.getStartTime(), initialBandwidthTraffic.getEndTime() + // 使用工具类构建多网卡图表数据 + Map resultMap = EchartsMoreDataUtils.buildMultiInterfaceEchartsDataWithTotal( + interfaceDataMap, + InitialBandwidthTraffic::getCreateTime, + info -> info != null && info.getInSpeed() != null ? + new BigDecimal(info.getInSpeed()) : null, + info -> info != null && info.getOutSpeed() != null ? + new BigDecimal(info.getOutSpeed()) : null, + initialBandwidthTraffic.getStartTime(), + initialBandwidthTraffic.getEndTime(), + divisor ); + resultMap.put("unit", unit); + if (!showRealation.isEmpty() && hasSubInterface) { + showRealation.put("totalNetInSpeedData", name + "总入站流量"); + showRealation.put("totalNetOutSpeedData", name + "总出站流量"); + } + resultMap.put("showRealation", showRealation); return resultMap; - } catch (Exception e){ + + } catch (Exception e) { e.printStackTrace(); + return new HashMap<>(); } - return new HashMap<>(); } } diff --git a/tongran-rocketmq/src/main/resources/mapper/rocketmq/RmNetworkInterfaceChildMapper.xml b/tongran-rocketmq/src/main/resources/mapper/rocketmq/RmNetworkInterfaceChildMapper.xml index a40a679..f267b41 100644 --- a/tongran-rocketmq/src/main/resources/mapper/rocketmq/RmNetworkInterfaceChildMapper.xml +++ b/tongran-rocketmq/src/main/resources/mapper/rocketmq/RmNetworkInterfaceChildMapper.xml @@ -56,7 +56,7 @@ - insert into rm_network_interface_child + insert IGNORE into rm_network_interface_child client_id, parent_interface,