From c4b380437fc0ff0ae82511b0de068e48949d2472 Mon Sep 17 00:00:00 2001 From: gaoyutao Date: Thu, 6 Nov 2025 18:09:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=9B=BE=E5=BD=A2=E5=88=86?= =?UTF-8?q?=E6=9E=90=E6=A0=B9=E6=8D=AE=E5=8F=AF=E9=80=89=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E8=A1=A50=E9=80=BB=E8=BE=91=E3=80=81=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=B5=81=E9=87=8F=E5=9B=BE=E5=BD=A2=E5=8D=95=E4=BD=8D=E5=8F=AF?= =?UTF-8?q?=E9=80=89=E5=8A=9F=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/utils/EchartsDataUtils.java | 40 +++++++++++++++++-- .../ruoyi/common/core/utils/SpeedUtils.java | 6 ++- .../EpsInitialTrafficDataServiceImpl.java | 1 + .../InitialSwitchInfoDetailsServiceImpl.java | 10 ++++- .../InitialBandwidthTrafficServiceImpl.java | 10 ++++- .../impl/InitialSwitchInfoServiceImpl.java | 20 ++++++++-- .../rocketmq/RmDeploymentPolicyMapper.xml | 1 + 7 files changed, 77 insertions(+), 11 deletions(-) diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/EchartsDataUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/EchartsDataUtils.java index dc40a92..b36012b 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/EchartsDataUtils.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/EchartsDataUtils.java @@ -52,7 +52,7 @@ public class EchartsDataUtils { return Math.round(microseconds / 1_000_000.0 * 100.0) / 100.0; } /** - * 构建ECharts图表数据(带时间补全和0值填充) + * 构建ECharts图表数据(带时间补全和特殊值处理) * @param list 原始数据列表 * @param timeExtractor 时间字段提取函数 * @param dataExtractors 数据提取器Map @@ -112,6 +112,9 @@ public class EchartsDataUtils { dataExtractors.keySet().forEach(name -> yData.put(name, new ArrayList())); + // 特殊处理:查找percentile95的固定值 + Object fixedPercentile95Value = findFixedValueForPercentile95(sortedList, dataExtractors); + for (Date time : fullTimeSeries) { // X轴数据 xAxisData.add(parseDateToStr(time)); @@ -126,11 +129,13 @@ public class EchartsDataUtils { @SuppressWarnings("unchecked") List seriesData = (List) yData.get(name); + if (item != null) { Object value = extractor.apply(item); - seriesData.add(value != null ? value : 0); + seriesData.add(value != null ? value : getDefaultValue(name, fixedPercentile95Value)); } else { - seriesData.add(0); // 补0 + // 数据补全 + seriesData.add(getDefaultValue(name, fixedPercentile95Value)); } } } @@ -147,6 +152,35 @@ public class EchartsDataUtils { } } + /** + * 查找percentile95的固定值(第一个非零值) + */ + private static Object findFixedValueForPercentile95(List list, Map> dataExtractors) { + if (!dataExtractors.containsKey("percentile95")) { + return 0; + } + + Function extractor = dataExtractors.get("percentile95"); + for (T item : list) { + Object value = extractor.apply(item); + if (value != null && !value.equals(0)) { + return value; + } + } + return 0; + } + + /** + * 根据指标名称获取默认值 + */ + private static Object getDefaultValue(String metricName, Object fixedPercentile95Value) { + if ("percentile95".equals(metricName) && !fixedPercentile95Value.equals(0)) { + return fixedPercentile95Value; // percentile95使用固定值 + } else { + return 0; // 其他指标补0 + } + } + /** * 字符串转日期 */ diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/SpeedUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/SpeedUtils.java index b4466d4..28dacc1 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/SpeedUtils.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/SpeedUtils.java @@ -38,6 +38,10 @@ public class SpeedUtils { public BigDecimal getLastOutSpeedGb() { return lastOutSpeedGb; } public String getRecommendedUnit() { return recommendedUnit; } + public void setRecommendedUnit(String recommendedUnit) { + this.recommendedUnit = recommendedUnit; + } + @Override public String toString() { return String.format( @@ -65,7 +69,7 @@ public class SpeedUtils { BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, - "bit" + "Kb" ); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EpsInitialTrafficDataServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EpsInitialTrafficDataServiceImpl.java index f844f19..6844502 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EpsInitialTrafficDataServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EpsInitialTrafficDataServiceImpl.java @@ -605,6 +605,7 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe String unit = result.getRecommendedUnit(); if(epsInitialTrafficData.getUnit() != null){ unit = epsInitialTrafficData.getUnit(); + result.setRecommendedUnit(unit); } BigDecimal divisor = SpeedUtils.getDivisor(unit); Map> extractors = new LinkedHashMap<>(); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/InitialSwitchInfoDetailsServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/InitialSwitchInfoDetailsServiceImpl.java index c8ce83f..951e607 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/InitialSwitchInfoDetailsServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/InitialSwitchInfoDetailsServiceImpl.java @@ -769,6 +769,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe EpsNodeBandwidth nodeBandwidth = epsNodeBandwidthList.get(0); percentile95 = nodeBandwidth.getBandwidthResult(); } + dailyQuery.setClientId(clientId); dailyQuery.setName(rmEpsTopologyManagement.getInterfaceName()); Map resultMap = switchNetSpeedEcharts(dailyQuery, percentile95); // 查询端口备注信息 @@ -868,6 +869,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe EpsNodeBandwidth nodeBandwidth = epsNodeBandwidthList.get(0); percentile95 = nodeBandwidth.getBandwidthResult(); } + dailyQuery.setClientId(clientId); dailyQuery.setName(rmEpsTopologyManagement.getInterfaceName()); Map resultMap = switchNetSpeedEcharts(dailyQuery, percentile95); // 查询端口备注信息 @@ -923,12 +925,16 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe */ public Map switchNetSpeedEcharts(InitialSwitchInfoDetails initialSwitchInfoDetails, BigDecimal percentile95) { List list = initialSwitchInfoDetailsMapper.getswitchDetailList(initialSwitchInfoDetails); + if(list == null){ + list = new ArrayList<>(); + } try { list.forEach(data -> data.setPercentile95(SpeedUtils.mbitToBit(percentile95))); SpeedUtils.SpeedResult result = SpeedUtils.calculateWithAverageBasedUnit(list, "inSpeed", "outSpeed"); String unit = result.getRecommendedUnit(); if(initialSwitchInfoDetails.getUnit() != null){ unit = initialSwitchInfoDetails.getUnit(); + result.setRecommendedUnit(unit); } BigDecimal divisor = SpeedUtils.getDivisor(unit); Map> extractors = new LinkedHashMap<>(); @@ -945,7 +951,9 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe info != null && info.getPercentile95() != null ? info.getPercentile95().divide(divisor, 2, RoundingMode.HALF_UP) : 0); - Map resultMap = EchartsDataUtils.buildEchartsData(list, InitialSwitchInfoDetails::getCreateTime, extractors); + Map resultMap = EchartsDataUtils.buildEchartsDataAutoPadding( + list, InitialSwitchInfoDetails::getCreateTime, extractors, + initialSwitchInfoDetails.getStartTime(), initialSwitchInfoDetails.getEndTime()); resultMap.put("other", result); resultMap.put("95value", percentile95); return resultMap; diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialBandwidthTrafficServiceImpl.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialBandwidthTrafficServiceImpl.java index 3385fd8..32548ab 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialBandwidthTrafficServiceImpl.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialBandwidthTrafficServiceImpl.java @@ -242,7 +242,10 @@ public class InitialBandwidthTrafficServiceImpl implements IInitialBandwidthTraf info != null && info.getOutSpeed() != null ? new BigDecimal(info.getOutSpeed()).divide(divisor, 2, RoundingMode.HALF_UP) : 0); - Map resultMap = EchartsDataUtils.buildEchartsData(list, InitialBandwidthTraffic::getCreateTime, extractors); + Map resultMap = EchartsDataUtils.buildEchartsDataAutoPadding( + list, InitialBandwidthTraffic::getCreateTime, extractors, + initialBandwidthTraffic.getStartTime(), initialBandwidthTraffic.getEndTime() + ); resultMap.put("unit", unit); return resultMap; } catch (Exception e){ @@ -271,7 +274,10 @@ public class InitialBandwidthTrafficServiceImpl implements IInitialBandwidthTraf extractors.put("inDroppedData", info -> info.getInDropped()); extractors.put("outDroppedData", info -> info.getOutDropped()); - return EchartsDataUtils.buildEchartsData(list, InitialBandwidthTraffic::getCreateTime, extractors); + return EchartsDataUtils.buildEchartsDataAutoPadding( + list, InitialBandwidthTraffic::getCreateTime, extractors, + initialBandwidthTraffic.getStartTime(), initialBandwidthTraffic.getEndTime() + ); } } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialSwitchInfoServiceImpl.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialSwitchInfoServiceImpl.java index e0a787c..5245fa9 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialSwitchInfoServiceImpl.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialSwitchInfoServiceImpl.java @@ -166,7 +166,10 @@ public class InitialSwitchInfoServiceImpl implements IInitialSwitchInfoService info != null && info.getOutSpeed() != null ? info.getOutSpeed().divide(divisor, 2, RoundingMode.HALF_UP) : 0); - Map resultMap = EchartsDataUtils.buildEchartsData(list, InitialSwitchInfo::getCreateTime, extractors); + Map resultMap = EchartsDataUtils.buildEchartsDataAutoPadding( + list, InitialSwitchInfo::getCreateTime, extractors, + initialSwitchInfo.getStartTime(), initialSwitchInfo.getEndTime() + ); resultMap.put("unit", unit); return resultMap; } catch (Exception e){ @@ -186,7 +189,10 @@ public class InitialSwitchInfoServiceImpl implements IInitialSwitchInfoService Map> extractors = new LinkedHashMap<>(); extractors.put("netInDiscardsData", info -> info.getIfInDiscards()); extractors.put("netOutDiscardsData", info -> info.getIfOutDiscards()); - return EchartsDataUtils.buildEchartsData(list, InitialSwitchInfo::getCreateTime, extractors); + return EchartsDataUtils.buildEchartsDataAutoPadding( + list, InitialSwitchInfo::getCreateTime, extractors, + initialSwitchInfo.getStartTime(), initialSwitchInfo.getEndTime() + ); } /** @@ -200,7 +206,10 @@ public class InitialSwitchInfoServiceImpl implements IInitialSwitchInfoService Map> extractors = new LinkedHashMap<>(); extractors.put("netInTotalData", info -> info.getInBytes().multiply(new BigDecimal(8))); extractors.put("netOutTotalData", info -> info.getOutBytes().multiply(new BigDecimal(8))); - return EchartsDataUtils.buildEchartsData(list, InitialSwitchInfo::getCreateTime, extractors); + return EchartsDataUtils.buildEchartsDataAutoPadding( + list, InitialSwitchInfo::getCreateTime, extractors, + initialSwitchInfo.getStartTime(), initialSwitchInfo.getEndTime() + ); } /** @@ -214,6 +223,9 @@ public class InitialSwitchInfoServiceImpl implements IInitialSwitchInfoService Map> extractors = new LinkedHashMap<>(); extractors.put("netInErrDiscardsData", info -> info.getIfInErrors()); extractors.put("netOutErrDiscardsData", info -> info.getIfOutErrors()); - return EchartsDataUtils.buildEchartsData(list, InitialSwitchInfo::getCreateTime, extractors); + return EchartsDataUtils.buildEchartsDataAutoPadding( + list, InitialSwitchInfo::getCreateTime, extractors, + initialSwitchInfo.getStartTime(), initialSwitchInfo.getEndTime() + ); } } diff --git a/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/RmDeploymentPolicyMapper.xml b/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/RmDeploymentPolicyMapper.xml index aaa5d5e..706d1dc 100644 --- a/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/RmDeploymentPolicyMapper.xml +++ b/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/RmDeploymentPolicyMapper.xml @@ -56,6 +56,7 @@ and default_params = #{defaultParams} and task_name like concat('%', #{taskName}, '%') + order by create_time desc