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 0545489..8ef88bb 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 @@ -1,5 +1,7 @@ package com.ruoyi.common.core.utils; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -42,10 +44,244 @@ public class EchartsDataUtils { return result; } + /** * 微秒转秒 */ public static double convertMicrosecondsToSeconds(long microseconds) { return microseconds / 1_000_000.0; } + /** + * 构建ECharts图表数据(带时间补全和0值填充) + * @param list 原始数据列表 + * @param timeExtractor 时间字段提取函数 + * @param dataExtractors 数据提取器Map + * @param startTime 开始时间字符串(格式:yyyy-MM-dd HH:mm:ss) + * @param endTime 结束时间字符串(格式:yyyy-MM-dd HH:mm:ss) + * @param 数据类型泛型 + * @return 包含xData和yData的Map + */ + public static Map buildEchartsDataAutoPadding( + List list, + Function timeExtractor, + Map> dataExtractors, + String startTime, + String endTime) { + + try { + // 解析时间字符串 + Date startDate = parseStringToDate(startTime); + Date endDate = parseStringToDate(endTime); + + if (startDate == null || endDate == null) { + throw new IllegalArgumentException("开始时间或结束时间格式错误"); + } + + if (startDate.after(endDate)) { + throw new IllegalArgumentException("开始时间不能晚于结束时间"); + } + + if (list == null || list.isEmpty()) { + return createEmptyResult(dataExtractors.keySet(), startTime, endTime); + } + + // 按时间排序 + List sortedList = list.stream() + .sorted(Comparator.comparing(timeExtractor)) + .collect(Collectors.toList()); + + // 自动检测时间间隔 + long timeInterval = detectTimeInterval(sortedList, timeExtractor); + + // 生成完整的时间序列 + List fullTimeSeries = generateTimeSeries(startDate, endDate, timeInterval); + + // 创建时间到数据的映射(考虑时间精度) + Map timeDataMap = sortedList.stream() + .collect(Collectors.toMap( + item -> normalizeTime(timeExtractor.apply(item), timeInterval), + Function.identity(), + (a, b) -> a + )); + + // 准备X轴和Y轴数据 + List xAxisData = new ArrayList<>(); + Map yData = new LinkedHashMap<>(); + + // 初始化Y轴数据结构 + dataExtractors.keySet().forEach(name -> + yData.put(name, new ArrayList())); + + for (Date time : fullTimeSeries) { + // X轴数据 + xAxisData.add(parseDateToStr(time)); + + // Y轴数据 + Long normalizedTime = normalizeTime(time, timeInterval); + T item = timeDataMap.get(normalizedTime); + + for (Map.Entry> entry : dataExtractors.entrySet()) { + String name = entry.getKey(); + Function extractor = entry.getValue(); + + @SuppressWarnings("unchecked") + List seriesData = (List) yData.get(name); + if (item != null) { + Object value = extractor.apply(item); + seriesData.add(value != null ? value : 0); + } else { + seriesData.add(0); // 补0 + } + } + } + + Map result = new HashMap<>(); + result.put("xData", xAxisData); + result.put("yData", yData); + return result; + + } catch (Exception e) { + // 记录日志 + System.err.println("构建图表数据失败: " + e.getMessage()); + return createEmptyResult(dataExtractors.keySet(), startTime, endTime); + } + } + + /** + * 字符串转日期 + */ + private static Date parseStringToDate(String dateStr) { + if (dateStr == null || dateStr.trim().isEmpty()) { + return null; + } + try { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + sdf.setLenient(false); // 严格模式 + return sdf.parse(dateStr); + } catch (ParseException e) { + System.err.println("日期解析失败: " + dateStr); + return null; + } + } + + /** + * 日期转字符串 + */ + private static String parseDateToStr(Date date) { + if (date == null) { + return ""; + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + return sdf.format(date); + } + + /** + * 生成完整的时间序列 + */ + private static List generateTimeSeries(Date start, Date end, long interval) { + List timeSeries = new ArrayList<>(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(start); + + // 确保开始时间对齐到时间间隔 + long startMillis = normalizeTime(start, interval); + calendar.setTimeInMillis(startMillis); + + while (!calendar.getTime().after(end)) { + timeSeries.add(calendar.getTime()); + calendar.setTimeInMillis(calendar.getTimeInMillis() + interval); + } + return timeSeries; + } + + /** + * 自动检测时间间隔 + */ + private static long detectTimeInterval(List list, Function timeExtractor) { + if (list.size() < 2) { + return 300000; // 默认5分钟 + } + + // 计算时间间隔的众数 + Map intervalCount = new HashMap<>(); + for (int i = 1; i < list.size(); i++) { + long interval = timeExtractor.apply(list.get(i)).getTime() - + timeExtractor.apply(list.get(i - 1)).getTime(); + if (interval > 0) { + intervalCount.merge(interval, 1, Integer::sum); + } + } + + // 如果没有有效间隔,使用默认值 + if (intervalCount.isEmpty()) { + return 300000L; + } + + return intervalCount.entrySet().stream() + .max(Map.Entry.comparingByValue()) + .map(Map.Entry::getKey) + .orElse(300000L); + } + + /** + * 时间标准化(对齐到时间间隔) + */ + private static long normalizeTime(Date time, long interval) { + long timeMillis = time.getTime(); + return (timeMillis / interval) * interval; + } + + /** + * 创建空结果(包含完整的时间序列) + */ + private static Map createEmptyResult(Set dataNames, String startTime, String endTime) { + Map result = new HashMap<>(); + + try { + // 解析时间范围 + Date startDate = parseStringToDate(startTime); + Date endDate = parseStringToDate(endTime); + + if (startDate != null && endDate != null && !startDate.after(endDate)) { + // 使用默认时间间隔生成完整时间序列 + long defaultInterval = 300000L; // 5分钟 + List fullTimeSeries = generateTimeSeries(startDate, endDate, defaultInterval); + + // 构建x轴数据 + List xAxisData = new ArrayList<>(); + for (Date date : fullTimeSeries) { + xAxisData.add(parseDateToStr(date)); + } + result.put("xData", xAxisData); + + // 构建y轴数据(全部补0) + Map yData = new LinkedHashMap<>(); + int dataSize = xAxisData.size(); + dataNames.forEach(name -> { + List zeroData = new ArrayList<>(); + for (int i = 0; i < dataSize; i++) { + zeroData.add(0); + } + yData.put(name, zeroData); + }); + result.put("yData", yData); + + } else { + // 时间解析失败时返回空数据 + result.put("xData", new ArrayList<>()); + Map yData = new LinkedHashMap<>(); + dataNames.forEach(name -> yData.put(name, new ArrayList<>())); + result.put("yData", yData); + } + + } catch (Exception e) { + // 异常时返回空数据 + result.put("xData", new ArrayList<>()); + Map yData = new LinkedHashMap<>(); + dataNames.forEach(name -> yData.put(name, new ArrayList<>())); + result.put("yData", yData); + } + + return result; + } } \ No newline at end of file diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/UnitChangeUtil.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/UnitChangeUtil.java new file mode 100644 index 0000000..18e5f54 --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/UnitChangeUtil.java @@ -0,0 +1,19 @@ +package com.ruoyi.common.core.utils; + +public class UnitChangeUtil { + + private static final double GB = 1024.0 * 1024.0 * 1024.0; + + public static double bytesToGb(long bytes) { + return bytes / GB; + } + public static double convertKbToGb(String kbValue) { + if (kbValue == null || kbValue.trim().isEmpty()) { + throw new IllegalArgumentException("KB值不能为空"); + } + + double kb = Double.parseDouble(kbValue.trim()); + return kb / (1024.0 * 1024.0); + } + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/EpsInitialTrafficData.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/EpsInitialTrafficData.java index bae85e1..b3bff65 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/EpsInitialTrafficData.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/EpsInitialTrafficData.java @@ -120,6 +120,8 @@ public class EpsInitialTrafficData extends BaseEntity { private String calculationMode; /** 95值 */ private BigDecimal percentile95; + /** 单位 */ + private String unit; } \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/InitialSwitchInfoDetails.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/InitialSwitchInfoDetails.java index 96a5f59..cfc56bd 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/InitialSwitchInfoDetails.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/InitialSwitchInfoDetails.java @@ -124,4 +124,6 @@ public class InitialSwitchInfoDetails extends BaseEntity private String interfaceNameRemark; /** 95值 */ private BigDecimal percentile95; + /** 单位 */ + private String unit; } 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 6e1702a..31776ee 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 @@ -496,9 +496,11 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe joiner.add("【" + businessName + "】"); } String name = joiner.toString(); - resultMap.put("name", name); - resultMap.put("timeRange", timeRange); - resultList.add(resultMap); + if(resultMap != null){ + resultMap.put("name", name); + resultMap.put("timeRange", timeRange); + resultList.add(resultMap); + } } catch (Exception e){ e.printStackTrace(); } @@ -574,9 +576,11 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe joiner.add("【" + businessName + "】"); } String name = joiner.toString(); - resultMap.put("name", name); - resultMap.put("timeRange", timeRange); - resultList.add(resultMap); + if(resultMap != null){ + resultMap.put("name", name); + resultMap.put("timeRange", timeRange); + resultList.add(resultMap); + } } catch (Exception e){ e.printStackTrace(); } @@ -592,34 +596,41 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe */ public Map serverNetSpeedEcharts(EpsInitialTrafficData epsInitialTrafficData, BigDecimal percentile95) { List list = getTrafficListByClientIds(epsInitialTrafficData); - if(!list.isEmpty()){ - try { - list.forEach(data -> data.setPercentile95(SpeedUtils.mbitToBit(percentile95))); - SpeedUtils.SpeedResult result = SpeedUtils.calculateWithStringTraffic(list, "inSpeed", "outSpeed"); - BigDecimal divisor = SpeedUtils.getDivisor(result.getRecommendedUnit()); - Map> extractors = new LinkedHashMap<>(); - - extractors.put("netOutSpeedData", info -> - info != null && info.getOutSpeed() != null ? - new BigDecimal(info.getOutSpeed()).divide(divisor, 2, RoundingMode.HALF_UP) : - 0); - extractors.put("netMachineFlowData", info -> - info != null && info.getMachineFlow() != null ? - new BigDecimal(info.getMachineFlow()).divide(divisor, 2, RoundingMode.HALF_UP) : - 0); - extractors.put("percentile95", info -> - info != null && info.getPercentile95() != null ? - info.getPercentile95().divide(divisor, 2, RoundingMode.HALF_UP) : - 0); - Map resultMap = EchartsDataUtils.buildEchartsData(list, EpsInitialTrafficData::getCreateTime, extractors); - resultMap.put("other", result); - resultMap.put("95value", percentile95); - return resultMap; - } catch (Exception e){ - e.printStackTrace(); - } + if(list == null){ + list = new ArrayList<>(); } - return new HashMap<>(); + try { + list.forEach(data -> data.setPercentile95(SpeedUtils.mbitToBit(percentile95))); + SpeedUtils.SpeedResult result = SpeedUtils.calculateWithStringTraffic(list, "inSpeed", "outSpeed"); + String unit = result.getRecommendedUnit(); + if(epsInitialTrafficData.getUnit() != null){ + unit = epsInitialTrafficData.getUnit(); + } + BigDecimal divisor = SpeedUtils.getDivisor(unit); + Map> extractors = new LinkedHashMap<>(); + + extractors.put("netOutSpeedData", info -> + info != null && info.getOutSpeed() != null ? + new BigDecimal(info.getOutSpeed()).divide(divisor, 2, RoundingMode.HALF_UP) : + 0); + extractors.put("netMachineFlowData", info -> + info != null && info.getMachineFlow() != null ? + new BigDecimal(info.getMachineFlow()).divide(divisor, 2, RoundingMode.HALF_UP) : + 0); + extractors.put("percentile95", info -> + info != null && info.getPercentile95() != null ? + info.getPercentile95().divide(divisor, 2, RoundingMode.HALF_UP) : + 0); + Map resultMap = EchartsDataUtils.buildEchartsDataAutoPadding( + list, EpsInitialTrafficData::getCreateTime, extractors, epsInitialTrafficData.getStartTime(), epsInitialTrafficData.getEndTime() + ); + resultMap.put("other", result); + resultMap.put("95value", percentile95); + return resultMap; + } catch (Exception e){ + e.printStackTrace(); + } + return null; } /** * 提取公共方法 diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EpsTaskStatisticsServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EpsTaskStatisticsServiceImpl.java index 217a0e5..f51e0d3 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EpsTaskStatisticsServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EpsTaskStatisticsServiceImpl.java @@ -85,6 +85,14 @@ public class EpsTaskStatisticsServiceImpl implements IEpsTaskStatisticsService timeRange = startTime + "~" + endTime; } taskStatistics.setTimeRange(timeRange); + // 处理包含资源 + String resources = taskStatistics.getIncludedResources(); + String result = Arrays.stream(resources.split(",")) + .map(msg -> msg.split(";")) + .filter(resource -> resource.length >= 4) + .map(resource -> "[" + resource[3] + "].[" + resource[2] + "]") + .collect(Collectors.joining("\n")); + taskStatistics.setIncludedResources(result); } return epsTaskStatisticsList; } @@ -437,15 +445,38 @@ public class EpsTaskStatisticsServiceImpl implements IEpsTaskStatisticsService Long taskId = epsTaskStatistics.getId(); EpsTaskStatistics taskMsg = epsTaskStatisticsMapper.selectEpsTaskStatisticsById(taskId); if(StringUtils.equals("1", taskMsg.getResourceType())){ - EpsInitialTrafficData epsInitialTrafficData = new EpsInitialTrafficData(); - epsInitialTrafficData.setOutSpeed(epsTaskStatistics.getNeedSpeed().toString()); - epsInitialTrafficData.setCreateTime(DateUtils.parseDate(epsTaskStatistics.getNeedTime())); - trafficRedisHashUtil.updateItemInHash(taskId.toString(), epsInitialTrafficData, epsTaskStatistics.getNeedTime()); + trafficRedisHashUtil.updateItemPropertyInHash(taskId.toString(), epsTaskStatistics.getNeedTime(), + item -> { + if (item instanceof EpsInitialTrafficData) { + EpsInitialTrafficData trafficItem = (EpsInitialTrafficData) item; + trafficItem.setOutSpeed(epsTaskStatistics.getNeedSpeed().toString()); // 只修改outSpeed属性 + } + }, + Comparator.comparing( + (EpsInitialTrafficData item) -> { + String speed = item.getOutSpeed(); + return speed != null ? Double.parseDouble(speed) : 0.0; + }, + Comparator.reverseOrder() // 倒序 + ) + ); }else{ InitialSwitchInfoDetails initialSwitchInfoDetails = new InitialSwitchInfoDetails(); initialSwitchInfoDetails.setMaxSpeed(epsTaskStatistics.getNeedSpeed()); initialSwitchInfoDetails.setCreateTime(DateUtils.parseDate(epsTaskStatistics.getNeedTime())); - trafficRedisHashUtil.updateItemInHash(taskId.toString(), initialSwitchInfoDetails, epsTaskStatistics.getNeedTime()); + trafficRedisHashUtil.updateItemPropertyInHash(taskId.toString(), epsTaskStatistics.getNeedTime(), + item -> { + if (item instanceof InitialSwitchInfoDetails) { + InitialSwitchInfoDetails trafficItem = (InitialSwitchInfoDetails) item; + trafficItem.setMaxSpeed(epsTaskStatistics.getNeedSpeed()); // 只修改outSpeed属性 + } + }, + Comparator.comparing( + (InitialSwitchInfoDetails item) -> + item.getMaxSpeed() != null ? item.getMaxSpeed() : BigDecimal.ZERO, + Comparator.reverseOrder() // 倒序 + ) + ); } return 1; } 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 fb5cb78..c8ce83f 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 @@ -803,9 +803,11 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe joiner.add("【" + businessName + "】"); } String name = joiner.toString(); - resultMap.put("name", name); - resultMap.put("timeRange", timeRange); - resultList.add(resultMap); + if(resultMap != null){ + resultMap.put("name", name); + resultMap.put("timeRange", timeRange); + resultList.add(resultMap); + } } catch (Exception e){ e.printStackTrace(); } @@ -900,9 +902,11 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe joiner.add("【" + businessName + "】"); } String name = joiner.toString(); - resultMap.put("name", name); - resultMap.put("timeRange", timeRange); - resultList.add(resultMap); + if(resultMap != null){ + resultMap.put("name", name); + resultMap.put("timeRange", timeRange); + resultList.add(resultMap); + } } catch (Exception e){ e.printStackTrace(); } @@ -922,7 +926,11 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe try { list.forEach(data -> data.setPercentile95(SpeedUtils.mbitToBit(percentile95))); SpeedUtils.SpeedResult result = SpeedUtils.calculateWithAverageBasedUnit(list, "inSpeed", "outSpeed"); - BigDecimal divisor = SpeedUtils.getDivisor(result.getRecommendedUnit()); + String unit = result.getRecommendedUnit(); + if(initialSwitchInfoDetails.getUnit() != null){ + unit = initialSwitchInfoDetails.getUnit(); + } + BigDecimal divisor = SpeedUtils.getDivisor(unit); Map> extractors = new LinkedHashMap<>(); extractors.put("netInSpeedData", info -> info != null && info.getInSpeed() != null ? @@ -944,6 +952,6 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe } catch (Exception e){ e.printStackTrace(); } - return new HashMap<>(); + return null; } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/util/CalculateUtil.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/util/CalculateUtil.java index 1fecceb..8338e54 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/util/CalculateUtil.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/util/CalculateUtil.java @@ -8,7 +8,7 @@ import java.util.regex.Pattern; public class CalculateUtil { - private static final Pattern SPEED_PATTERN = Pattern.compile("(\\d+\\.?\\d*)\\s*(\\S*)"); + private static final Pattern SPEED_PATTERN = Pattern.compile("^\\s*([-+]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][-+]?\\d+)?)\\s*([a-zA-Z/]*)?\\s*$"); /** * 单位换算 * @param speedWithUnit diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/util/TrafficRedisHashUtil.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/util/TrafficRedisHashUtil.java index 07e4266..7aafaac 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/util/TrafficRedisHashUtil.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/util/TrafficRedisHashUtil.java @@ -77,6 +77,38 @@ public class TrafficRedisHashUtil { saveListToHash(taskId, dataList); } } + /** + * 修改列表中某条数据的特定属性值,并重新排序 + * @param taskId 任务ID + * @param createTime 用于匹配的时间 + * @param propertyUpdater 属性修改器 + * @param comparator 排序比较器(用于重新排序) + */ + public void updateItemPropertyInHash(String taskId, String createTime, + java.util.function.Consumer propertyUpdater, + java.util.Comparator comparator) { + List dataList = (List) getListFromHash(taskId); + + if (dataList != null) { + boolean modified = false; + for (int i = 0; i < dataList.size(); i++) { + T item = dataList.get(i); + String itemCreateTime = getCreateTimeFromObject(item); + if (itemCreateTime != null && itemCreateTime.equals(createTime)) { + // 只修改匹配项的属性 + propertyUpdater.accept(item); + modified = true; + break; + } + } + + if (modified) { + // 重新排序(从大到小) + dataList.sort(comparator); + saveListToHash(taskId, dataList); + } + } + } /** * 更新Hash中的特定项(使用自定义匹配器) diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/UserTableColumnConfigMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/UserTableColumnConfigMapper.xml index d62747a..3f159c7 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/UserTableColumnConfigMapper.xml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/UserTableColumnConfigMapper.xml @@ -76,6 +76,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and user_id = #{userId} + + and page_route = #{pageRoute} + and 1=0 diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/domain/InitialBandwidthTraffic.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/domain/InitialBandwidthTraffic.java index f185eb8..40551ec 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/domain/InitialBandwidthTraffic.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/domain/InitialBandwidthTraffic.java @@ -72,5 +72,7 @@ public class InitialBandwidthTraffic extends BaseEntity private String startTime; /** 结束时间 */ private String endTime; + /** 单位 */ + private String unit; } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/domain/InitialSwitchInfo.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/domain/InitialSwitchInfo.java index 1cd27aa..c3419fa 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/domain/InitialSwitchInfo.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/domain/InitialSwitchInfo.java @@ -67,6 +67,8 @@ public class InitialSwitchInfo extends BaseEntity private String endTime; /** 计算方式 */ private String calculationMode; + /* 单位 */ + private String unit; } 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 dbb324e..3385fd8 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 @@ -228,6 +228,9 @@ public class InitialBandwidthTrafficServiceImpl implements IInitialBandwidthTraf List list = getListByTableName(initialBandwidthTraffic); try { String unit = SpeedUtils.calculateUnitWithStringTraffic(list, "inSpeed", "outSpeed"); + if(initialBandwidthTraffic.getUnit() != null){ + unit = initialBandwidthTraffic.getUnit(); + } BigDecimal divisor = SpeedUtils.getDivisor(unit); Map> extractors = new LinkedHashMap<>(); extractors.put("netInSpeedData", info -> diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialMountPointInfoServiceImpl.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialMountPointInfoServiceImpl.java index df56a8f..2f881c3 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialMountPointInfoServiceImpl.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialMountPointInfoServiceImpl.java @@ -2,6 +2,7 @@ package com.ruoyi.rocketmq.service.impl; import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.utils.EchartsDataUtils; +import com.ruoyi.common.core.utils.UnitChangeUtil; import com.ruoyi.rocketmq.domain.InitialMountPointInfo; import com.ruoyi.rocketmq.mapper.InitialMountPointInfoMapper; import com.ruoyi.rocketmq.service.IInitialMountPointInfoService; @@ -133,8 +134,8 @@ public class InitialMountPointInfoServiceImpl implements IInitialMountPointInfoS public Map spaceEcharts(InitialMountPointInfo initialMountPointInfo) { List list = initialMountPointInfoMapper.selectInitialMountPointInfoList(initialMountPointInfo); Map> extractors = new LinkedHashMap<>(); - extractors.put("vfsFreeData", info -> info.getVfsFree() / 1024.0); - extractors.put("vfsTotalData", info -> info.getVfsTotal() / 1024.0); + extractors.put("vfsFreeData", info -> UnitChangeUtil.bytesToGb(info.getVfsFree())); + extractors.put("vfsTotalData", info -> UnitChangeUtil.bytesToGb(info.getVfsTotal())); return EchartsDataUtils.buildEchartsData(list,InitialMountPointInfo::getCreateTime, extractors); } 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 e4f4248..e0a787c 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 @@ -136,7 +136,7 @@ public class InitialSwitchInfoServiceImpl implements IInitialSwitchInfoService @Override public InitialSwitchInfo getSwitchNetDetailsMsg(InitialSwitchInfo initialSwitchInfo) { InitialSwitchInfo info = initialSwitchInfoMapper.getSwitchNetDetailsMsg(initialSwitchInfo); - if(info.getType()!=null){ + if(info != null && info.getType()!=null){ info.setType(ConvertOtherTypeUtil.getInterfaceTypeName(Integer.parseInt(info.getType()))); } return info; @@ -152,6 +152,9 @@ public class InitialSwitchInfoServiceImpl implements IInitialSwitchInfoService List list = initialSwitchInfoMapper.selectInitialSwitchInfoList(initialSwitchInfo); try { String unit = SpeedUtils.calculateUnit(list, "inSpeed", "outSpeed"); + if(initialSwitchInfo.getUnit() != null){ + unit = initialSwitchInfo.getUnit(); + } BigDecimal divisor = SpeedUtils.getDivisor(unit); Map> extractors = new LinkedHashMap<>(); extractors.put("netInSpeedData", info -> diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialSystemOtherCollectDataServiceImpl.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialSystemOtherCollectDataServiceImpl.java index e9106f4..11e3e52 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialSystemOtherCollectDataServiceImpl.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialSystemOtherCollectDataServiceImpl.java @@ -2,6 +2,7 @@ package com.ruoyi.rocketmq.service.impl; import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.utils.EchartsDataUtils; +import com.ruoyi.common.core.utils.UnitChangeUtil; import com.ruoyi.rocketmq.domain.InitialCpuInfo; import com.ruoyi.rocketmq.domain.InitialSystemOtherCollectData; import com.ruoyi.rocketmq.enums.ServerLogoEnum; @@ -199,7 +200,14 @@ public class InitialSystemOtherCollectDataServiceImpl implements IInitialSystemO List list = initialSystemOtherCollectDataMapper.selectInitialSystemOtherCollectDataList(initialSystemOtherCollectData); Map> extractors = new LinkedHashMap<>(); - extractors.put("memorySizeAvailableData", InitialSystemOtherCollectData::getCollectValue); + extractors.put("memorySizeAvailableData", data -> { + try { + String kbValue = data.getCollectValue(); + return kbValue == null ? "0.00" : UnitChangeUtil.convertKbToGb(kbValue); + } catch (Exception e) { + return "0.00"; + } + }); return EchartsDataUtils.buildEchartsData(list, InitialSystemOtherCollectData::getCreateTime, extractors); } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/RmMonitorPolicyServiceImpl.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/RmMonitorPolicyServiceImpl.java index 89e4db2..436de82 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/RmMonitorPolicyServiceImpl.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/RmMonitorPolicyServiceImpl.java @@ -1,6 +1,8 @@ package com.ruoyi.rocketmq.service.impl; import com.alibaba.fastjson.JSONObject; +import com.ruoyi.common.core.constant.SecurityConstants; +import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.enums.MsgEnum; import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.utils.StringUtils; @@ -14,6 +16,7 @@ import com.ruoyi.rocketmq.service.IRmMonitorPolicyService; import com.ruoyi.rocketmq.snmp.scheduler.MultiSwitchCollectionScheduler; import com.ruoyi.rocketmq.utils.DataProcessUtil; import com.ruoyi.rocketmq.utils.FieldNameConverterUtil; +import com.ruoyi.system.api.RemoteRevenueConfigService; import com.ruoyi.system.api.domain.RmResourceRegistrationRemote; import com.ruoyi.system.api.domain.RmSwitchManagementRemote; import lombok.extern.slf4j.Slf4j; @@ -53,6 +56,8 @@ public class RmMonitorPolicyServiceImpl implements IRmMonitorPolicyService private RmInitialMonitorItemMapper rmInitialMonitorItemMapper; @Autowired private DataProcessUtil dataProcessUtil; + @Autowired + private RemoteRevenueConfigService remoteRevenueConfigService; private final MultiSwitchCollectionScheduler scheduler; @@ -82,6 +87,21 @@ public class RmMonitorPolicyServiceImpl implements IRmMonitorPolicyService @Override public List selectRmMonitorPolicyList(RmMonitorPolicy rmMonitorPolicy) { + if("switch".equals(rmMonitorPolicy.getResourceType()) && rmMonitorPolicy.getQueryName() != null){ + // 查询交换机clientId + String queryName = rmMonitorPolicy.getQueryName(); + RmSwitchManagementRemote rmSwitchManagementRemote = new RmSwitchManagementRemote(); + rmSwitchManagementRemote.setSwitchName(queryName); + R> switchMsgR = remoteRevenueConfigService.getSwitchNameByClientId(rmSwitchManagementRemote, SecurityConstants.INNER); + if(switchMsgR != null && !switchMsgR.getData().isEmpty()){ + StringJoiner joiner = new StringJoiner(","); + for (RmSwitchManagementRemote switchMsg : switchMsgR.getData()) { + joiner.add(switchMsg.getClientId()); + } + rmMonitorPolicy.setQueryName(joiner.toString()); + } + + } List list = rmMonitorPolicyMapper.selectRmMonitorPolicyList(rmMonitorPolicy); for (RmMonitorPolicy monitorPolicy : list) { // 资源组名称 diff --git a/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/RmMonitorPolicyMapper.xml b/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/RmMonitorPolicyMapper.xml index adcf26e..a8c3c62 100644 --- a/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/RmMonitorPolicyMapper.xml +++ b/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/RmMonitorPolicyMapper.xml @@ -39,8 +39,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and priority = #{priority} and (policy_name like concat('%', #{queryName}, '%') - or template_id in (select id from rm_monitor_template where template_name like concat('%', #{queryName}, '%')) - or resource_group_id in (select id from rm_resource_group where group_name like concat('%', #{queryName}, '%')) + or + + FIND_IN_SET(#{item}, REPLACE(deploy_device, '\n', ',')) > 0 + )