From fcd392ec102a593f07b5544d30701f180830549e Mon Sep 17 00:00:00 2001 From: gaoyutao Date: Thu, 19 Mar 2026 17:56:32 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E4=BC=98=E5=8C=96ipv6=E5=88=A4?= =?UTF-8?q?=E6=96=AD.=202=E3=80=81=E4=BC=98=E5=8C=96=E4=B8=9A=E5=8A=A1?= =?UTF-8?q?=E6=B5=81=E9=87=8F=E6=95=B0=E6=8D=AE=E7=BB=9F=E8=AE=A1=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rocketmq/handler/MessageHandler.java | 52 ++---- .../InitialBandwidthTrafficServiceImpl.java | 153 ++++-------------- .../InitialNetBusinessTrafficServiceImpl.java | 20 +-- 3 files changed, 52 insertions(+), 173 deletions(-) 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 7c12aff..c8ef3d5 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 @@ -42,6 +42,7 @@ import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.math.BigDecimal; import java.math.RoundingMode; +import java.net.InetAddress; import java.util.*; import java.util.concurrent.*; import java.util.function.Consumer; @@ -482,7 +483,7 @@ public class MessageHandler { BigDecimal totalRate = BigDecimal.ZERO; // 处理IPv4统计 if (!ipTypeMap.get("IPv4").isEmpty()) { - content.append("##### V4 统计 ##### ##\n"); + content.append("##### V4 统计 #####\n"); // 按省份运营商分组统计(过滤本地省份) Map v4StatMap = new HashMap<>(); @@ -525,7 +526,7 @@ public class MessageHandler { // 处理IPv6统计 if (!ipTypeMap.get("IPv6").isEmpty()) { - content.append("##### V6 统计 ##### ##\n"); + content.append("##### V6 统计 #####\n"); // 按省份运营商分组统计(过滤本地省份) Map v6StatMap = new HashMap<>(); @@ -2286,47 +2287,16 @@ public class MessageHandler { } } public String checkIPVersion(String ipAddress) { - // 检查是否为 IPv4 地址 - if (ipAddress.contains(".")) { - // 简单的格式验证:IPv4 应该有 4 个部分,每个部分用点分隔 - String[] parts = ipAddress.split("\\."); - if (parts.length == 4) { - try { - // 验证每个部分是否在 0-255 范围内 - for (String part : parts) { - int num = Integer.parseInt(part); - if (num < 0 || num > 255) { - return "Invalid IP Address"; - } - } - return "IPv4"; - } catch (NumberFormatException e) { - return "Invalid IP Address"; - } + try { + InetAddress addr = InetAddress.getByName(ipAddress); + if (addr.getHostAddress().contains(":")) { + return "IPv6"; + } else { + return "IPv4"; } + } catch (Exception e) { + return "Invalid IP Address"; } - - // 检查是否为 IPv6 地址 - if (ipAddress.contains(":")) { - // 简单的格式验证:IPv6 应该包含冒号分隔的十六进制数 - String[] parts = ipAddress.split(":"); - if (parts.length >= 3 && parts.length <= 8) { - try { - // 验证每个部分是否为有效的十六进制数 - for (String part : parts) { - if (!part.isEmpty()) { - // 允许空的部分(表示连续的零) - Integer.parseInt(part, 16); - } - } - return "IPv6"; - } catch (NumberFormatException e) { - return "Invalid IP Address"; - } - } - } - - return "Invalid IP Address"; } /** * 查询IP地址归属地信息,返回运营商和省份 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 aa9187a..bde32a7 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 @@ -588,7 +588,7 @@ public class InitialBandwidthTrafficServiceImpl implements IInitialBandwidthTraf try { // 根据业务名称查询业务进程名 String businessName = initialBandwidthTraffic.getBusinessName(); - if(businessName != null){ + if(businessName != null && !businessName.isEmpty()){ List allBusinessNetNameList = allBusinessNetNameService.selectAllBusinessNetNameList(new AllBusinessNetName()); // 第一步:过滤 @@ -604,8 +604,6 @@ public class InitialBandwidthTrafficServiceImpl implements IInitialBandwidthTraf List result = new ArrayList<>(uniqueMap.values()); - // 用于存储所有业务的单位,用于后续统一单位处理 - Map businessUnits = new HashMap<>(); // 用于存储业务的显示名称 Map businessDisplayNames = new HashMap<>(); @@ -616,7 +614,7 @@ public class InitialBandwidthTrafficServiceImpl implements IInitialBandwidthTraf businessTrafficQuery.setProcessName(allBusinessNetName.getProcessName()); businessTrafficQuery.setStartTime(initialBandwidthTraffic.getStartTime()); businessTrafficQuery.setEndTime(initialBandwidthTraffic.getEndTime()); - // 获取业务流量图表数据 + // 获取业务流量图表数据(返回的是bit单位) Map businessResult = initialNetBusinessTrafficService.businessTrafficEcharts(businessTrafficQuery); if (businessResult != null && !businessResult.isEmpty()) { @@ -631,23 +629,34 @@ public class InitialBandwidthTrafficServiceImpl implements IInitialBandwidthTraf // 获取主Map的yData Map mainYData = (Map) resultMap.get("yData"); - // 将业务流量数据合并到主yData中 + // 将业务流量数据合并到主yData中,直接除以divisor for (Map.Entry entry : businessYData.entrySet()) { String businessKey = entry.getKey(); Object businessValue = entry.getValue(); // 添加业务前缀避免key冲突,格式:business_{进程名}_{数据类型} String newKey = "business_" + businessPrefix + "_" + businessKey; - mainYData.put(newKey, businessValue); + + // 直接除以divisor进行单位转换 + if (businessValue instanceof List) { + List originalList = (List) businessValue; + List convertedList = new ArrayList<>(); + for (BigDecimal value : originalList) { + if (value != null) { + convertedList.add(value.divide(divisor, 2, RoundingMode.HALF_UP)); + } else { + convertedList.add(null); + } + } + mainYData.put(newKey, convertedList); + } else { + mainYData.put(newKey, businessValue); + } } resultMap.put("yData", mainYData); } - // 获取业务流量的单位 - String businessUnit = (String) businessResult.get("unit"); - businessUnits.put(businessPrefix, businessUnit); - // 构建业务的显示名称 String displayName = allBusinessNetName.getProcessName(); if (allBusinessNetName.getRemark() != null && !allBusinessNetName.getRemark().isEmpty()) { @@ -657,40 +666,23 @@ public class InitialBandwidthTrafficServiceImpl implements IInitialBandwidthTraf } } - // 在所有业务数据处理完成后,统一进行单位转换 - if (!businessUnits.isEmpty()) { - // 检查是否有业务的单位与主单位不一致 - boolean needUnitConversion = false; - for (String businessUnit : businessUnits.values()) { - if (!unit.equals(businessUnit)) { - needUnitConversion = true; - break; - } - } + // 添加业务流量的展示关系 + for (Map.Entry entry : businessDisplayNames.entrySet()) { + String businessPrefix = entry.getKey(); + String displayName = entry.getValue(); - // 如果需要单位转换,统一处理 - if (needUnitConversion) { - convertAllBusinessDataUnit(resultMap, businessUnits, unit); - } - - // 单位转换完成后,添加业务流量的展示关系(不再包含单位信息) - for (Map.Entry entry : businessDisplayNames.entrySet()) { - String businessPrefix = entry.getKey(); - String displayName = entry.getValue(); - - showRealation.put("business_" + businessPrefix + "_netInSpeedData", - displayName + " 入站流量"); - showRealation.put("business_" + businessPrefix + "_netOutSpeedData", - displayName + " 出站流量"); - showRealation.put("business_" + businessPrefix + "_netIpv4InSpeedData", - displayName + " IPv4入站流量"); - showRealation.put("business_" + businessPrefix + "_netIpv4OutSpeedData", - displayName + " IPv4出站流量"); - showRealation.put("business_" + businessPrefix + "_netIpv6InSpeedData", - displayName + " IPv6入站流量"); - showRealation.put("business_" + businessPrefix + "_netIpv6OutSpeedData", - displayName + " IPv6出站流量"); - } + showRealation.put("business_" + businessPrefix + "_netInSpeedData", + displayName + " 总入站流量"); + showRealation.put("business_" + businessPrefix + "_netOutSpeedData", + displayName + " 总出站流量"); + showRealation.put("business_" + businessPrefix + "_netIpv4InSpeedData", + displayName + " IPv4入站流量"); + showRealation.put("business_" + businessPrefix + "_netIpv4OutSpeedData", + displayName + " IPv4出站流量"); + showRealation.put("business_" + businessPrefix + "_netIpv6InSpeedData", + displayName + " IPv6入站流量"); + showRealation.put("business_" + businessPrefix + "_netIpv6OutSpeedData", + displayName + " IPv6出站流量"); } } } catch (Exception e) { @@ -714,81 +706,6 @@ public class InitialBandwidthTrafficServiceImpl implements IInitialBandwidthTraf } } - /** - * 统一转换所有业务数据的单位 - */ - private void convertAllBusinessDataUnit(Map resultMap, - Map businessUnits, - String targetUnit) { - try { - // 获取主Map的yData - Map mainYData = (Map) resultMap.get("yData"); - if (mainYData == null || mainYData.isEmpty()) { - return; - } - - // 为每个业务计算转换因子 - Map conversionFactors = new HashMap<>(); - for (Map.Entry entry : businessUnits.entrySet()) { - String businessPrefix = entry.getKey(); - String fromUnit = entry.getValue(); - - if (!targetUnit.equals(fromUnit)) { - BigDecimal fromDivisor = SpeedUtils.getDivisor(fromUnit); - BigDecimal toDivisor = SpeedUtils.getDivisor(targetUnit); - BigDecimal conversionFactor = fromDivisor.divide(toDivisor, 10, RoundingMode.HALF_UP); - conversionFactors.put(businessPrefix, conversionFactor); - } - } - - // 遍历所有业务流量相关的数据项进行转换 - for (Map.Entry entry : mainYData.entrySet()) { - String key = entry.getKey(); - - // 检查是否是业务数据 - if (key.startsWith("business_")) { - // 提取业务前缀 - String[] keyParts = key.split("_"); - if (keyParts.length >= 3) { - String businessPrefix = keyParts[1]; - - // 如果该业务需要转换 - if (conversionFactors.containsKey(businessPrefix)) { - BigDecimal conversionFactor = conversionFactors.get(businessPrefix); - Object value = entry.getValue(); - - if (value instanceof List) { - List dataList = (List) value; - List convertedList = new ArrayList<>(); - - for (BigDecimal dataPoint : dataList) { - if (dataPoint != null) { - // 应用转换因子 - BigDecimal converted = dataPoint.multiply(conversionFactor) - .setScale(2, RoundingMode.HALF_UP); - convertedList.add(converted); - } else { - convertedList.add(null); - } - } - - // 更新转换后的数据 - entry.setValue(convertedList); - } - } - } - } - } - - // 更新单位为统一单位 - resultMap.put("unit", targetUnit); - - System.out.println("所有业务数据单位已统一转换为: " + targetUnit); - - } catch (Exception e) { - System.err.println("业务流量单位统一转换失败: " + e.getMessage()); - } - } // 安全转换方法(处理可能的NumberFormatException) private Double safeConvertToKB(String byteValue) { try { diff --git a/tongran-rocketmq/src/main/java/com/tongran/rocketmq/service/impl/InitialNetBusinessTrafficServiceImpl.java b/tongran-rocketmq/src/main/java/com/tongran/rocketmq/service/impl/InitialNetBusinessTrafficServiceImpl.java index a996edd..c6b7d79 100644 --- a/tongran-rocketmq/src/main/java/com/tongran/rocketmq/service/impl/InitialNetBusinessTrafficServiceImpl.java +++ b/tongran-rocketmq/src/main/java/com/tongran/rocketmq/service/impl/InitialNetBusinessTrafficServiceImpl.java @@ -2,7 +2,6 @@ package com.tongran.rocketmq.service.impl; import com.tongran.common.core.utils.DateUtils; import com.tongran.common.core.utils.EchartsDataUtils; -import com.tongran.common.core.utils.SpeedUtils; import com.tongran.common.core.utils.TableSubUtil; import com.tongran.rocketmq.domain.InitialNetBusinessTraffic; import com.tongran.rocketmq.mapper.InitialNetBusinessTrafficMapper; @@ -15,7 +14,6 @@ import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; -import java.math.RoundingMode; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -219,42 +217,36 @@ public class InitialNetBusinessTrafficServiceImpl implements IInitialNetBusiness public Map businessTrafficEcharts(InitialNetBusinessTraffic initialNetBusinessTraffic) { List list = getListByTableName(initialNetBusinessTraffic); try { - String unit = SpeedUtils.calculateUnit(list, "inSpeed", "outSpeed"); - if(initialNetBusinessTraffic.getUnit() != null){ - unit = initialNetBusinessTraffic.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) : + new BigDecimal(info.getInSpeed()) : null); extractors.put("netOutSpeedData", info -> info != null && info.getOutSpeed() != null ? - new BigDecimal(info.getOutSpeed()).divide(divisor, 2, RoundingMode.HALF_UP) : + new BigDecimal(info.getOutSpeed()) : null); extractors.put("netIpv4InSpeedData", info -> info != null && info.getIpv4InSpeed() != null ? - new BigDecimal(info.getIpv4InSpeed()).divide(divisor, 2, RoundingMode.HALF_UP) : + new BigDecimal(info.getIpv4InSpeed()) : null); extractors.put("netIpv4OutSpeedData", info -> info != null && info.getIpv4OutSpeed() != null ? - new BigDecimal(info.getIpv4OutSpeed()).divide(divisor, 2, RoundingMode.HALF_UP) : + new BigDecimal(info.getIpv4OutSpeed()) : null); extractors.put("netIpv6InSpeedData", info -> info != null && info.getIpv6InSpeed() != null ? - new BigDecimal(info.getIpv6InSpeed()).divide(divisor, 2, RoundingMode.HALF_UP) : + new BigDecimal(info.getIpv6InSpeed()) : null); extractors.put("netIpv6OutSpeedData", info -> info != null && info.getIpv6OutSpeed() != null ? - new BigDecimal(info.getIpv6OutSpeed()).divide(divisor, 2, RoundingMode.HALF_UP) : + new BigDecimal(info.getIpv6OutSpeed()) : null); Map resultMap = EchartsDataUtils.buildEchartsDataAutoPadding( list, InitialNetBusinessTraffic::getCreateTime, extractors, initialNetBusinessTraffic.getStartTime(), initialNetBusinessTraffic.getEndTime() ); - resultMap.put("unit", unit); return resultMap; } catch (Exception e){ e.printStackTrace();