From f9d4835d4ce32c55735f907d5bce016260db30e6 Mon Sep 17 00:00:00 2001 From: gaoyutao Date: Tue, 16 Sep 2025 09:47:39 +0800 Subject: [PATCH] =?UTF-8?q?95=E5=80=BC=E8=AE=A1=E7=AE=97=E6=96=B9=E5=BC=8F?= =?UTF-8?q?=E6=96=B0=E5=A2=9E1024?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/RemoteRevenueConfigService.java | 13 +- .../RemoteRevenueConfigFallbackFactory.java | 6 + .../system/config/TableScheduleConfig.java | 54 ++++--- .../EpsNodeBandwidthController.java | 4 +- .../ruoyi/system/domain/EpsNodeBandwidth.java | 2 + .../ruoyi/system/domain/RmResourceGroup.java | 4 + .../system/domain/RmResourceRegistration.java | 4 + .../system/mapper/RmResourceGroupMapper.java | 10 +- .../service/EpsInitialTrafficDataService.java | 10 +- .../IInitialSwitchInfoDetailsService.java | 4 +- .../service/IRmResourceGroupService.java | 6 +- .../EpsInitialTrafficDataServiceImpl.java | 146 +++++++++++++----- .../InitialSwitchInfoDetailsServiceImpl.java | 61 ++++---- .../impl/RmResourceGroupServiceImpl.java | 39 ++++- .../com/ruoyi/system/util/CalculateUtil.java | 63 +++++--- .../mapper/system/EpsNodeBandwidthMapper.xml | 7 +- .../mapper/system/RmResourceGroupMapper.xml | 5 + .../controller/InitialCpuInfoController.java | 47 +++++- .../ruoyi/rocketmq/domain/InitialCpuInfo.java | 4 + .../impl/RmMonitorTemplateServiceImpl.java | 11 +- .../mapper/rocketmq/InitialCpuInfoMapper.xml | 2 + 21 files changed, 383 insertions(+), 119 deletions(-) diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteRevenueConfigService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteRevenueConfigService.java index 4b56c67..4ab2271 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteRevenueConfigService.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteRevenueConfigService.java @@ -3,6 +3,7 @@ package com.ruoyi.system.api; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.web.page.TableDataInfo; import com.ruoyi.system.api.domain.*; import com.ruoyi.system.api.factory.RemoteRevenueConfigFallbackFactory; import org.springframework.cloud.openfeign.FeignClient; @@ -70,5 +71,15 @@ public interface RemoteRevenueConfigService * @return */ @PostMapping("/registration/getRegistrationByIds") - public R> getRegistrationByIds(String[] ids, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + public R> getRegistrationByIds(@RequestBody String[] ids, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + /** + * 获取资源注册列表 + * @param rmResourceRegistrationRemote + * @param source + * @return + */ + @PostMapping("/registration/list") + public R getRegistrationList(@RequestBody RmResourceRegistrationRemote rmResourceRegistrationRemote, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteRevenueConfigFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteRevenueConfigFallbackFactory.java index 5175744..af0f888 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteRevenueConfigFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteRevenueConfigFallbackFactory.java @@ -1,6 +1,7 @@ package com.ruoyi.system.api.factory; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.web.page.TableDataInfo; import com.ruoyi.system.api.RemoteRevenueConfigService; import com.ruoyi.system.api.domain.*; import org.slf4j.Logger; @@ -55,6 +56,11 @@ public class RemoteRevenueConfigFallbackFactory implements FallbackFactory> getRegistrationByIds(String[] ids, String source) { return R.fail("获取资源注册信息失败:" + throwable.getMessage()); } + + @Override + public R getRegistrationList(RmResourceRegistrationRemote rmResourceRegistrationRemote, String source) { + return R.fail("获取资源注册列表信息失败" + throwable.getMessage()); + } }; } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/config/TableScheduleConfig.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/config/TableScheduleConfig.java index 998240b..fb44059 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/config/TableScheduleConfig.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/config/TableScheduleConfig.java @@ -14,6 +14,7 @@ import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.List; import java.util.Map; +import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; /** @@ -47,7 +48,7 @@ public class TableScheduleConfig { epsInitialTrafficDataService.createNextMonthTables(); } - // 每天12点执行 计算95带宽值/日 + // 每天0点执行 计算95带宽值/日 @Scheduled(cron = "0 4 0 * * ?", zone = "Asia/Shanghai") public void calculate95BandwidthDaily() { // 获取昨天的日期范围(北京时间) @@ -59,10 +60,17 @@ public class TableScheduleConfig { // 95带宽值/日 EpsInitialTrafficData queryParam = new EpsInitialTrafficData(); queryParam.setDayOrMonth(dayOrMonth); - epsInitialTrafficDataService.calculateBusiness95BandwidthDaily(queryParam, dailyStartTime, dailyEndTime); InitialSwitchInfoDetails initialSwitchInfoDetails = new InitialSwitchInfoDetails(); initialSwitchInfoDetails.setDayOrMonth(dayOrMonth); - initialSwitchInfoDetailsService.calculateSwitch95BandwidthDaily(initialSwitchInfoDetails, dailyStartTime, dailyEndTime); + // 顺序执行链 + CompletableFuture.runAsync(() -> executeWithLog("业务带宽1000", + () -> epsInitialTrafficDataService.calculateBusiness95BandwidthDaily(queryParam, dailyStartTime, dailyEndTime, "1000"))) + .thenRun(() -> executeWithLog("业务带宽1024", + () -> epsInitialTrafficDataService.calculateBusiness95BandwidthDaily(queryParam, dailyStartTime, dailyEndTime, "1024"))) + .thenRun(() -> executeWithLog("交换机带宽1000", + () -> initialSwitchInfoDetailsService.calculateSwitch95BandwidthDaily(initialSwitchInfoDetails, dailyStartTime, dailyEndTime, "1000"))) + .thenRun(() -> executeWithLog("交换机带宽1024", + () -> initialSwitchInfoDetailsService.calculateSwitch95BandwidthDaily(initialSwitchInfoDetails, dailyStartTime, dailyEndTime, "1024"))); } // 每月1号0点执行 计算95带宽值/月 @@ -76,38 +84,42 @@ public class TableScheduleConfig { String monthlyStartTime = firstDayOfMonth.atStartOfDay().format(TIME_FORMAT); String monthlyEndTime = lastDayOfMonth.atTime(23, 59, 59).format(TIME_FORMAT); - // 顺序执行各任务,间隔10分钟 - executeWithDelay(() -> calculateServerMonthlyBandwidth(monthlyStartTime, monthlyEndTime), 0); - executeWithDelay(() -> calculateSwitchMonthlyBandwidth(monthlyStartTime, monthlyEndTime), 10); - executeWithDelay(() -> calculateServerAvgMonthlyBandwidth(monthlyStartTime, monthlyEndTime), 10); - executeWithDelay(() -> calculateSwitchAvgMonthlyBandwidth(monthlyStartTime, monthlyEndTime), 10); + // 链式顺序执行(无额外日志封装) + CompletableFuture.runAsync(() -> calculateServerMonthlyBandwidth(monthlyStartTime, monthlyEndTime, "1000")) + .thenRun(() -> calculateServerMonthlyBandwidth(monthlyStartTime, monthlyEndTime, "1024")) + .thenRun(() -> calculateSwitchMonthlyBandwidth(monthlyStartTime, monthlyEndTime, "1000")) + .thenRun(() -> calculateSwitchMonthlyBandwidth(monthlyStartTime, monthlyEndTime, "1024")) + .thenRun(() -> calculateServerAvgMonthlyBandwidth(monthlyStartTime, monthlyEndTime)) + .thenRun(() -> calculateSwitchAvgMonthlyBandwidth(monthlyStartTime, monthlyEndTime)) + .exceptionally(e -> { + log.error("月度带宽计算链执行异常", e); // 仅保留最终异常捕获 + return null; + }); } /** - * 延迟执行任务 + * 执行任务日志 */ - private void executeWithDelay(Runnable task, int delayMinutes) { + private void executeWithLog(String taskName, Runnable task) { + log.info("开始执行: {}", taskName); try { - if (delayMinutes > 0) { - Thread.sleep(delayMinutes * 60 * 1000); - } task.run(); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - log.error("任务执行被中断", e); + } catch (Exception e) { + log.error("{} 执行失败", taskName, e); + throw e; // 可选:是否终止后续任务 } + log.info("{} 执行完成", taskName); } - /** * 计算服务器月95带宽值 */ - private void calculateServerMonthlyBandwidth(String monthlyStartTime, String monthlyEndTime) { + private void calculateServerMonthlyBandwidth(String monthlyStartTime, String monthlyEndTime, String calculationMode) { log.info("开始计算服务器月95带宽值..."); try { String dayOrMonth = "2"; EpsInitialTrafficData queryParam = new EpsInitialTrafficData(); queryParam.setDayOrMonth(dayOrMonth); - epsInitialTrafficDataService.calculateBusiness95BandwidthDaily(queryParam, monthlyStartTime, monthlyEndTime); + epsInitialTrafficDataService.calculateBusiness95BandwidthDaily(queryParam, monthlyStartTime, monthlyEndTime, calculationMode); log.info("服务器月95带宽值计算完成"); } catch (Exception e) { log.error("计算服务器月95带宽值失败", e); @@ -117,13 +129,13 @@ public class TableScheduleConfig { /** * 计算交换机月95带宽值 */ - private void calculateSwitchMonthlyBandwidth(String monthlyStartTime, String monthlyEndTime) { + private void calculateSwitchMonthlyBandwidth(String monthlyStartTime, String monthlyEndTime, String calculationMode) { log.info("开始计算交换机月95带宽值..."); try { String dayOrMonth = "2"; InitialSwitchInfoDetails queryParam = new InitialSwitchInfoDetails(); queryParam.setDayOrMonth(dayOrMonth); - initialSwitchInfoDetailsService.calculateSwitch95BandwidthDaily(queryParam, monthlyStartTime, monthlyEndTime); + initialSwitchInfoDetailsService.calculateSwitch95BandwidthDaily(queryParam, monthlyStartTime, monthlyEndTime, calculationMode); log.info("交换机月95带宽值计算完成"); } catch (Exception e) { log.error("计算交换机月95带宽值失败", e); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/EpsNodeBandwidthController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/EpsNodeBandwidthController.java index 953fbdf..674898d 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/EpsNodeBandwidthController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/EpsNodeBandwidthController.java @@ -145,10 +145,10 @@ public class EpsNodeBandwidthController extends BaseController String dailyEndTime = timeRange.getEnd(); if("1".equals(epsNodeBandwidth.getResourceType())){ // 重新计算服务器95带宽值 - epsInitialTrafficDataService.recalculateServer95Bandwidth(epsNodeBandwidth, dailyStartTime, dailyEndTime); + epsInitialTrafficDataService.recalculateServer95Bandwidth(epsNodeBandwidth, dailyStartTime, dailyEndTime, epsNodeBandwidth.getCalculationMode()); }else{ // 重新计算交换机95带宽值 - initialSwitchInfoDetailsService.recalculateSwitch95Bandwidth(epsNodeBandwidth, dailyStartTime, dailyEndTime); + initialSwitchInfoDetailsService.recalculateSwitch95Bandwidth(epsNodeBandwidth, dailyStartTime, dailyEndTime, epsNodeBandwidth.getCalculationMode()); } return success(); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/EpsNodeBandwidth.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/EpsNodeBandwidth.java index f027201..49f7fd4 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/EpsNodeBandwidth.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/EpsNodeBandwidth.java @@ -136,5 +136,7 @@ public class EpsNodeBandwidth extends BaseEntity private List nodeNames; private List switchNames; + /** 计算方式 */ + private String calculationMode; } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/RmResourceGroup.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/RmResourceGroup.java index 4d9cf73..e80300c 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/RmResourceGroup.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/RmResourceGroup.java @@ -56,5 +56,9 @@ public class RmResourceGroup extends BaseEntity /** 修改人名称 */ private String updaterName; + /** 监控项 */ + private String monitorItems; + /** 自动发现项 */ + private String discoveryRules; } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/RmResourceRegistration.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/RmResourceRegistration.java index 73ed9a0..eac3ac3 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/RmResourceRegistration.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/RmResourceRegistration.java @@ -118,5 +118,9 @@ public class RmResourceRegistration extends BaseEntity /** 修改人名称 */ private String updaterName; + /** 监控项 */ + private String monitorItems; + /** 自动发现项 */ + private String discoveryRules; } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/RmResourceGroupMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/RmResourceGroupMapper.java index c0a6c3d..2f1fd1d 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/RmResourceGroupMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/RmResourceGroupMapper.java @@ -1,8 +1,9 @@ package com.ruoyi.system.mapper; -import java.util.List; import com.ruoyi.system.domain.RmResourceGroup; +import java.util.List; + /** * 资源分组Mapper接口 * @@ -58,4 +59,11 @@ public interface RmResourceGroupMapper * @return 结果 */ public int deleteRmResourceGroupByIds(Long[] ids); + + /** + * 查询资源分组信息和监控项 + * @param id + * @return + */ + public RmResourceGroup selectMonitorMsgAndGroupMsg(Long id); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/EpsInitialTrafficDataService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/EpsInitialTrafficDataService.java index eb49455..63d56fd 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/EpsInitialTrafficDataService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/EpsInitialTrafficDataService.java @@ -5,6 +5,7 @@ import com.ruoyi.system.domain.EpsNodeBandwidth; import java.math.BigDecimal; import java.util.List; +import java.util.Map; /** * EPS表创建服务接口 @@ -46,7 +47,7 @@ public interface EpsInitialTrafficDataService { * @param queryParam 查询参数实体 * @return 流量数据列表 */ - void calculateBusiness95BandwidthDaily(EpsInitialTrafficData queryParam, String dailyStartTime, String dailyEndTime); + void calculateBusiness95BandwidthDaily(EpsInitialTrafficData queryParam, String dailyStartTime, String dailyEndTime, String calculationMode); /** * 重新计算服务器95带宽值 @@ -54,8 +55,13 @@ public interface EpsInitialTrafficDataService { * @param dailyStartTime 开始时间 * @param dailyEndTime 结束时间 */ - void recalculateServer95Bandwidth(EpsNodeBandwidth epsNodeBandwidth, String dailyStartTime, String dailyEndTime); + void recalculateServer95Bandwidth(EpsNodeBandwidth epsNodeBandwidth, String dailyStartTime, String dailyEndTime, String calculationMode); + /** + * 计算服务器流量使用率(处理带单位的数据) + * @return 包含总带宽、发送带宽和发送占比的Map + */ + Map trafficRateByServer(); /** * 当前在线服务器发送带宽总流量 * @return diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IInitialSwitchInfoDetailsService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IInitialSwitchInfoDetailsService.java index 3ef2572..a6791ad 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IInitialSwitchInfoDetailsService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IInitialSwitchInfoDetailsService.java @@ -73,7 +73,7 @@ public interface IInitialSwitchInfoDetailsService * @param queryParam 查询参数实体 * @return 流量数据列表 */ - void calculateSwitch95BandwidthDaily(InitialSwitchInfoDetails queryParam, String dailyStartTime, String dailyEndTime); + void calculateSwitch95BandwidthDaily(InitialSwitchInfoDetails queryParam, String dailyStartTime, String dailyEndTime, String calculationMode); /** * 重新计算交换机95带宽值 @@ -81,7 +81,7 @@ public interface IInitialSwitchInfoDetailsService * @param dailyStartTime 开始时间 * @param dailyEndTime 结束时间 */ - void recalculateSwitch95Bandwidth(EpsNodeBandwidth epsNodeBandwidth, String dailyStartTime, String dailyEndTime); + void recalculateSwitch95Bandwidth(EpsNodeBandwidth epsNodeBandwidth, String dailyStartTime, String dailyEndTime, String calculationMode); /** * 获取交换机相关数据 diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IRmResourceGroupService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IRmResourceGroupService.java index 72bcc36..b32a5fe 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IRmResourceGroupService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IRmResourceGroupService.java @@ -1,7 +1,9 @@ package com.ruoyi.system.service; -import java.util.List; import com.ruoyi.system.domain.RmResourceGroup; +import com.ruoyi.system.domain.RmResourceRegistration; + +import java.util.List; /** * 资源分组Service接口 @@ -58,4 +60,6 @@ public interface IRmResourceGroupService * @return 结果 */ public int deleteRmResourceGroupById(Long id); + + List getRegisterList(RmResourceGroup rmResourceGroup); } 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 e2f2297..263f2fb 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 @@ -13,6 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import java.math.RoundingMode; @@ -215,13 +216,14 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe * @param queryParam */ @Override - public void calculateBusiness95BandwidthDaily(EpsInitialTrafficData queryParam, String dailyStartTime, String dailyEndTime) { + public void calculateBusiness95BandwidthDaily(EpsInitialTrafficData queryParam, + String dailyStartTime, String dailyEndTime, String calculationMode) { // 获取所有设备SN列表 List snList = allInterfaceNameMapper.getAllDeviceSn(new AllInterfaceName()); // 遍历处理每个设备 snList.forEach(interfaceName -> { queryParam.setServiceSn(interfaceName.getDeviceSn()); - processDeviceBandwidth(queryParam, dailyStartTime, dailyEndTime); + processDeviceBandwidth(queryParam, dailyStartTime, dailyEndTime, calculationMode); }); } @@ -232,7 +234,7 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe * @param dailyEndTime 结束时间 */ @Override - public void recalculateServer95Bandwidth(EpsNodeBandwidth epsNodeBandwidth, String dailyStartTime, String dailyEndTime) { + public void recalculateServer95Bandwidth(EpsNodeBandwidth epsNodeBandwidth, String dailyStartTime, String dailyEndTime, String calculationMode ) { EpsInitialTrafficData epsInitialTrafficData = new EpsInitialTrafficData(); epsInitialTrafficData.setStartTime(dailyStartTime); epsInitialTrafficData.setEndTime(dailyEndTime); @@ -244,7 +246,7 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe if(!dataList.isEmpty()){ // 1. 提取并转换带宽值 List speedsInMbps = dataList.stream() - .map(data -> CalculateUtil.parseSpeedToMbps(data.getOutSpeed())) + .map(data -> CalculateUtil.parseSpeedToMbps(data.getOutSpeed(), calculationMode)) .sorted() .collect(Collectors.toList()); @@ -255,16 +257,97 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe EpsInitialTrafficData initialTrafficData = dataList.get(0); initialTrafficData.setResourceType("1"); initialTrafficData.setBandwidthType(epsNodeBandwidth.getBandwidthType()); - saveBandwidthResult(initialTrafficData, percentile95, dailyStartTime); + saveBandwidthResult(initialTrafficData, percentile95, dailyStartTime, calculationMode); } } + /** + * 计算服务器流量使用率(处理带单位的数据) + * @return 包含总带宽、发送带宽和发送占比的Map + */ + @Override + public Map trafficRateByServer() { + Map resultMap = new HashMap<>(3); + + // 初始化默认值 + resultMap.put("outSpeedTotal", BigDecimal.ZERO); + resultMap.put("speedTotal", BigDecimal.ZERO); + resultMap.put("outSpeedRate", BigDecimal.ZERO); + + // 获取近5分钟的流量数据 + List dataList = getTrafficData(); + if (CollectionUtils.isEmpty(dataList)) { + return resultMap; + } + + BigDecimal total = BigDecimal.ZERO; + BigDecimal outTotal = BigDecimal.ZERO; + boolean hasValidData = false; + + // 计算总带宽和发送带宽 + for (EpsInitialTrafficData data : dataList) { + // 处理发送带宽(假设outSpeed已经是标准单位) + try { + BigDecimal outSpeed = CalculateUtil.parseSpeedToMbps(data.getOutSpeed(), "1000"); + outTotal = outTotal.add(outSpeed); + } catch (Exception e) { + log.warn("Invalid outSpeed value: {}", data.getOutSpeed()); + continue; + } + + // 处理总带宽(带单位的值如"10000Mb/s") + String speedWithUnit = data.getSpeed(); + if (speedWithUnit != null && !"Unknown!".equalsIgnoreCase(speedWithUnit)) { + try { + // 移除单位部分(如"Mb/s") + String numericPart = speedWithUnit.replaceAll("[^0-9.]", ""); + BigDecimal speedValue = new BigDecimal(numericPart); + total = total.add(speedValue); + hasValidData = true; + } catch (NumberFormatException e) { + log.warn("Invalid speed value format: {}", speedWithUnit); + } + } + } + + // 存储计算结果 + resultMap.put("outSpeedTotal", outTotal.setScale(2, RoundingMode.HALF_UP)); + resultMap.put("speedTotal", total.setScale(2, RoundingMode.HALF_UP)); + + // 计算发送带宽占比(只有存在有效数据时才计算) + if (hasValidData && total.compareTo(BigDecimal.ZERO) != 0) { + BigDecimal outSpeedRate = outTotal.divide(total, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)); + resultMap.put("outSpeedRate", outSpeedRate); + } + + return resultMap; + } + /** * 当前在线服务器发送带宽总流量 * @return */ @Override public BigDecimal sumTrafficByServer() { + // 总带宽 + BigDecimal total = BigDecimal.ZERO; + // 近5分钟的带宽明细 + List dataList = getTrafficData(); + if(!dataList.isEmpty()){ + for (EpsInitialTrafficData initialTrafficData : dataList) { + // 服务器发送带宽流量 + BigDecimal outSpeed = CalculateUtil.parseSpeedToMbps(initialTrafficData.getOutSpeed(), "1000"); + total = total.add(outSpeed); + } + } + return total.setScale(0, RoundingMode.HALF_UP); + } + + /** + * 提取公共方法 + * @return + */ + private List getTrafficData(){ // 获取当前时间 LocalDateTime now = LocalDateTime.now(); // 结束时间 @@ -276,19 +359,11 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe // 格式化为字符串 String dailyStartTime = startTime.format(formatter); String dailyEndTime = endTime.format(formatter); - BigDecimal total = BigDecimal.ZERO; EpsInitialTrafficData epsInitialTrafficData = new EpsInitialTrafficData(); epsInitialTrafficData.setStartTime(dailyStartTime); epsInitialTrafficData.setEndTime(dailyEndTime); List dataList = query(epsInitialTrafficData); - if(!dataList.isEmpty()){ - for (EpsInitialTrafficData initialTrafficData : dataList) { - // 服务器发送带宽流量 - BigDecimal outSpeed = CalculateUtil.parseSpeedToMbps(initialTrafficData.getOutSpeed()); - total = total.add(outSpeed); - } - } - return total.setScale(0, RoundingMode.HALF_UP); + return dataList; } /** @@ -296,7 +371,7 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe */ private void processDeviceBandwidth(EpsInitialTrafficData queryParam, String dailyStartTime, - String dailyEndTime) { + String dailyEndTime, String calculationMode) { // 1. 检查设备是否有业务变更 EpsServerRevenueConfig revenueConfig = new EpsServerRevenueConfig(); revenueConfig.setHardwareSn(queryParam.getServiceSn()); @@ -305,9 +380,9 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe // 2. 根据业务变更情况选择计算方式 if (hasTrafficMethodChanged(changedList)) { - calculateChangedDeviceBandwidth(queryParam, dailyStartTime, dailyEndTime); + calculateChangedDeviceBandwidth(queryParam, dailyStartTime, dailyEndTime, calculationMode); } else { - calculateNormalDeviceBandwidth(queryParam, dailyStartTime, dailyEndTime); + calculateNormalDeviceBandwidth(queryParam, dailyStartTime, dailyEndTime, calculationMode); } } /** @@ -323,7 +398,7 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe */ private void calculateChangedDeviceBandwidth(EpsInitialTrafficData queryParam, String dailyStartTime, - String dailyEndTime) { + String dailyEndTime, String calculationMode) { // 1. 获取业务变更记录(按时间降序) EpsMethodChangeRecord changeQuery = new EpsMethodChangeRecord(); changeQuery.setHardwareSn(queryParam.getServiceSn()); @@ -337,9 +412,9 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe records.sort((r1, r2) -> r2.getCreateTime().compareTo(r1.getCreateTime())); // 3. 计算各时间段95值 - calculateTimeSegments95(queryParam, records, dailyStartTime, dailyEndTime); + calculateTimeSegments95(queryParam, records, dailyStartTime, dailyEndTime, calculationMode); }else{ - calculateNormalDeviceBandwidth(queryParam, dailyStartTime, dailyEndTime); + calculateNormalDeviceBandwidth(queryParam, dailyStartTime, dailyEndTime, calculationMode); } } /** @@ -347,19 +422,19 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe */ private void calculateNormalDeviceBandwidth(EpsInitialTrafficData queryParam, String dailyStartTime, - String dailyEndTime) { + String dailyEndTime, String calculationMode) { queryParam.setStartTime(dailyStartTime); queryParam.setEndTime(dailyEndTime); List dataList = query(queryParam); if (!dataList.isEmpty()) { - calculateAndSave95Bandwidth(dataList, dailyStartTime, queryParam.getDayOrMonth()); + calculateAndSave95Bandwidth(dataList, dailyStartTime, queryParam.getDayOrMonth(), calculationMode); } } /** * 计算并保存95带宽值 */ - private void calculateAndSave95Bandwidth(List dataList, String dateTime, String dayOrMonth) { + private void calculateAndSave95Bandwidth(List dataList, String dateTime, String dayOrMonth, String calculationMode) { boolean eff = false; if(!dataList.isEmpty()){ if(dataList.size()<288){ @@ -367,7 +442,7 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe } // 1. 提取并转换带宽值 List speedsInMbps = dataList.stream() - .map(data -> CalculateUtil.parseSpeedToMbps(data.getOutSpeed())) + .map(data -> CalculateUtil.parseSpeedToMbps(data.getOutSpeed(), calculationMode)) .sorted() .collect(Collectors.toList()); @@ -396,7 +471,7 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe } } } - saveBandwidthResult(epsInitialTrafficData, percentile95, dateTime); + saveBandwidthResult(epsInitialTrafficData, percentile95, dateTime, calculationMode); } } @@ -406,32 +481,32 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe private void calculateTimeSegments95(EpsInitialTrafficData queryParam, List records, String dailyStartTime, - String dailyEndTime) { + String dailyEndTime, String calculationMode) { // 1. 处理变更时间段(从最新到最早) String endTime = records.get(0).getCreateTime() + ""; for (int i = 1; i < records.size(); i++) { String startTime = records.get(i).getCreateTime() + ""; - calculateSegment95(queryParam, startTime, endTime); + calculateSegment95(queryParam, startTime, endTime, calculationMode); endTime = startTime; // 移动时间窗口 } // 2. 处理最早变更前的时间段(昨天00:00:00 ~ 最早变更时间) String earliestChangeTime = records.get(records.size()-1).getCreateTime() + ""; - calculateSegment95(queryParam, dailyStartTime, earliestChangeTime); + calculateSegment95(queryParam, dailyStartTime, earliestChangeTime, calculationMode); // 3. 处理最后变更后的时间段(最新变更时间 ~ 昨天23:59:59) - calculateSegment95(queryParam, endTime, dailyEndTime); + calculateSegment95(queryParam, endTime, dailyEndTime, calculationMode); } /** * 计算单个时间段的95带宽值 */ - private void calculateSegment95(EpsInitialTrafficData queryParam, String startTime, String endTime) { + private void calculateSegment95(EpsInitialTrafficData queryParam, String startTime, String endTime, String calculationMode) { queryParam.setStartTime(startTime); queryParam.setEndTime(endTime); List dataList = query(queryParam); if (!dataList.isEmpty()) { - calculate95BandwidthDaily(dataList, startTime, queryParam.getDayOrMonth()); + calculate95BandwidthDaily(dataList, startTime, queryParam.getDayOrMonth(), calculationMode); } } @@ -439,10 +514,10 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe * 计算日95带宽值 * @param dataList */ - private void calculate95BandwidthDaily(List dataList, String startTime, String dayOrMonth){ + private void calculate95BandwidthDaily(List dataList, String startTime, String dayOrMonth, String calculationMode){ // 1. 提取 outSpeed 并转换为 Mbps List speedsInMbps = dataList.stream() - .map(data -> CalculateUtil.parseSpeedToMbps(data.getOutSpeed())) + .map(data -> CalculateUtil.parseSpeedToMbps(data.getOutSpeed(), calculationMode)) .sorted() .collect(Collectors.toList()); @@ -482,16 +557,17 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe } } } - saveBandwidthResult(epsInitialTrafficData, dailyResult, startTime); + saveBandwidthResult(epsInitialTrafficData, dailyResult, startTime, calculationMode); } /** * 保存带宽结果 */ private void saveBandwidthResult(EpsInitialTrafficData data, BigDecimal result, - String dateTime) { + String dateTime, String calculationMode) { EpsNodeBandwidth bandwidth = new EpsNodeBandwidth(); bandwidth.setHardwareSn(data.getServiceSn()); + bandwidth.setCalculationMode(calculationMode); bandwidth.setNodeName(data.getNodeName()); bandwidth.setBusinessId(data.getBusinessId()); bandwidth.setBusinessName(data.getBusinessName()); 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 822cdf8..7909b5a 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 @@ -306,7 +306,8 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe !Objects.equals(oldRecord.getSwitchIp(), newRecord.getSwitchIp()); } - public void calculateSwitch95BandwidthDaily(InitialSwitchInfoDetails queryParam, String dailyStartTime, String dailyEndTime) { + public void calculateSwitch95BandwidthDaily(InitialSwitchInfoDetails queryParam, String dailyStartTime, + String dailyEndTime, String calculationMode) { // 查询所有的交换机SN列表 AllInterfaceName allInterfaceName = new AllInterfaceName(); List switchSnList = allInterfaceNameMapper.getAllSwitchSn(allInterfaceName); @@ -315,7 +316,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe switchSnList.forEach(interfaceName -> { queryParam.setSwitchSn(interfaceName.getSwitchSn()); queryParam.setSwitchIp(interfaceName.getSwitchIp()); - processSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime); + processSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime, calculationMode); }); } @@ -326,7 +327,8 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe * @param dailyEndTime 结束时间 */ @Override - public void recalculateSwitch95Bandwidth(EpsNodeBandwidth epsNodeBandwidth, String dailyStartTime, String dailyEndTime) { + public void recalculateSwitch95Bandwidth(EpsNodeBandwidth epsNodeBandwidth, String dailyStartTime, + String dailyEndTime, String calculationMode) { InitialSwitchInfoDetails switchInfoDetails = new InitialSwitchInfoDetails(); switchInfoDetails.setStartTime(dailyStartTime); switchInfoDetails.setEndTime(dailyEndTime); @@ -351,7 +353,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe if (speed.matches("^\\d+(\\.\\d+)?$")) { speed += " B/S"; } - return CalculateUtil.parseSpeedToMbps(speed); + return CalculateUtil.parseSpeedToMbps(speed, calculationMode); }) .sorted() .collect(Collectors.toList()); @@ -363,7 +365,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe InitialSwitchInfoDetails switchInfo = dataList.get(0); switchInfo.setResourceType("2"); switchInfo.setBandwidthType(epsNodeBandwidth.getBandwidthType()); - saveSwitchBandwidthResult(switchInfo, percentile95, dailyStartTime); + saveSwitchBandwidthResult(switchInfo, percentile95, dailyStartTime, calculationMode); } } @@ -418,7 +420,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe if (speed.matches("^\\d+(\\.\\d+)?$")) { speed += " B/S"; } - BigDecimal inSpeed = CalculateUtil.parseSpeedToMbps(speed); + BigDecimal inSpeed = CalculateUtil.parseSpeedToMbps(speed, "1000"); total = total.add(inSpeed); } } @@ -431,7 +433,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe */ private void processSwitchBandwidth(InitialSwitchInfoDetails queryParam, String dailyStartTime, - String dailyEndTime) { + String dailyEndTime, String calculationMode) { // 根据交换机sn查询连接的服务器sn RmEpsTopologyManagement management = new RmEpsTopologyManagement(); management.setSwitchSn(queryParam.getSwitchSn()); @@ -449,13 +451,13 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe .selectEpsServerRevenueConfigList(revenueConfig); // 根据业务变更情况选择计算方式 if (hasTrafficMethodChanged(changedList)) { - calculateChangedSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime); + calculateChangedSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime, calculationMode); } else { - calculateNormalSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime); + calculateNormalSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime, calculationMode); } } if("2".equals(rmEpsTopologyManagement.getConnectedDeviceType())){ - calculateNormalSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime); + calculateNormalSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime, calculationMode); } } } @@ -474,7 +476,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe */ private void calculateChangedSwitchBandwidth(InitialSwitchInfoDetails queryParam, String dailyStartTime, - String dailyEndTime) { + String dailyEndTime, String calculationMode) { // 获取业务变更记录(按时间降序) EpsMethodChangeRecord changeQuery = new EpsMethodChangeRecord(); changeQuery.setHardwareSn(queryParam.getServerSn()); @@ -488,9 +490,9 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe records.sort((r1, r2) -> r2.getCreateTime().compareTo(r1.getCreateTime())); // 计算各时间段95值 - calculateSwitchTimeSegments95(queryParam, records, dailyStartTime, dailyEndTime); + calculateSwitchTimeSegments95(queryParam, records, dailyStartTime, dailyEndTime, calculationMode); }else { - calculateNormalSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime); + calculateNormalSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime, calculationMode); } } @@ -499,21 +501,22 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe */ private void calculateNormalSwitchBandwidth(InitialSwitchInfoDetails queryParam, String dailyStartTime, - String dailyEndTime) { + String dailyEndTime, String calculationMode) { queryParam.setStartTime(dailyStartTime); queryParam.setEndTime(dailyEndTime); List dataList = initialSwitchInfoDetailsMapper .selectInitialSwitchInfoDetailsList(queryParam); if (!dataList.isEmpty()) { - calculateAndSaveSwitch95Bandwidth(dataList, dailyStartTime, queryParam.getDayOrMonth()); + calculateAndSaveSwitch95Bandwidth(dataList, dailyStartTime, queryParam.getDayOrMonth(), calculationMode); } } /** * 计算并保存交换机95带宽值 */ - private void calculateAndSaveSwitch95Bandwidth(List dataList, String dateTime, String dayOrMonth) { + private void calculateAndSaveSwitch95Bandwidth(List dataList, String dateTime, + String dayOrMonth, String calculationMode) { boolean eff = false; if(!dataList.isEmpty()){ if(dataList.size()<288){ @@ -530,7 +533,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe if (speed.matches("^\\d+(\\.\\d+)?$")) { speed += " B/S"; } - return CalculateUtil.parseSpeedToMbps(speed); + return CalculateUtil.parseSpeedToMbps(speed, calculationMode); }) .sorted() .collect(Collectors.toList()); @@ -555,7 +558,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe switchInfo.setBandwidthType("2"); } } - saveSwitchBandwidthResult(switchInfo, percentile95, dateTime); + saveSwitchBandwidthResult(switchInfo, percentile95, dateTime, calculationMode); } } @@ -565,40 +568,41 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe private void calculateSwitchTimeSegments95(InitialSwitchInfoDetails queryParam, List records, String dailyStartTime, - String dailyEndTime) { + String dailyEndTime, String calculationMode) { // 1. 处理变更时间段(从最新到最早) String endTime = records.get(0).getCreateTime() + ""; for (int i = 1; i < records.size(); i++) { String startTime = records.get(i).getCreateTime() + ""; - calculateSwitchSegment95(queryParam, startTime, endTime); + calculateSwitchSegment95(queryParam, startTime, endTime, calculationMode); endTime = startTime; // 移动时间窗口 } // 2. 处理最早变更前的时间段(昨天00:00:00 ~ 最早变更时间) String earliestChangeTime = records.get(records.size()-1).getCreateTime() + ""; - calculateSwitchSegment95(queryParam, dailyStartTime, earliestChangeTime); + calculateSwitchSegment95(queryParam, dailyStartTime, earliestChangeTime, calculationMode); // 3. 处理最后变更后的时间段(最新变更时间 ~ 昨天23:59:59) - calculateSwitchSegment95(queryParam, endTime, dailyEndTime); + calculateSwitchSegment95(queryParam, endTime, dailyEndTime, calculationMode); } /** * 计算交换机单个时间段的95带宽值 */ - private void calculateSwitchSegment95(InitialSwitchInfoDetails queryParam, String startTime, String endTime) { + private void calculateSwitchSegment95(InitialSwitchInfoDetails queryParam, String startTime, String endTime, String calculationMode) { queryParam.setStartTime(startTime); queryParam.setEndTime(endTime); List dataList = initialSwitchInfoDetailsMapper .selectInitialSwitchInfoDetailsList(queryParam); if (!dataList.isEmpty()) { - calculateSwitch95BandwidthDaily(dataList, startTime, queryParam.getDayOrMonth()); + calculateSwitch95BandwidthDaily(dataList, startTime, queryParam.getDayOrMonth(), calculationMode); } } /** * 计算交换机日95带宽值 */ - private void calculateSwitch95BandwidthDaily(List dataList, String startTime, String dayOrMonth) { + private void calculateSwitch95BandwidthDaily(List dataList, + String startTime, String dayOrMonth, String calculationMode) { // 1. 提取并转换带宽值 List speedsInMbps = dataList.stream() .map(data -> { @@ -609,7 +613,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe if (speed.matches("^\\d+(\\.\\d+)?$")) { speed += " B/S"; } - return CalculateUtil.parseSpeedToMbps(speed); + return CalculateUtil.parseSpeedToMbps(speed, calculationMode); }) .sorted() .collect(Collectors.toList()); @@ -636,7 +640,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe switchInfo.setBandwidthType("2"); } } - saveSwitchBandwidthResult(switchInfo, dailyResult, startTime); + saveSwitchBandwidthResult(switchInfo, dailyResult, startTime, calculationMode); } /** @@ -644,11 +648,12 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe */ private void saveSwitchBandwidthResult(InitialSwitchInfoDetails data, BigDecimal result, - String dateTime) { + String dateTime, String calculationMode) { EpsNodeBandwidth bandwidth = new EpsNodeBandwidth(); bandwidth.setBusinessName(data.getBusinessName()); bandwidth.setBusinessId(data.getBusinessCode()); bandwidth.setHardwareSn(data.getServerSn()); + bandwidth.setCalculationMode(calculationMode); bandwidth.setSwitchSn(data.getSwitchSn()); bandwidth.setNodeName(data.getServerName()); bandwidth.setUplinkSwitch(data.getSwitchName()); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RmResourceGroupServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RmResourceGroupServiceImpl.java index 61a27a0..c8d46fd 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RmResourceGroupServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RmResourceGroupServiceImpl.java @@ -1,12 +1,15 @@ package com.ruoyi.system.service.impl; -import java.util.List; import com.ruoyi.common.core.utils.DateUtils; +import com.ruoyi.system.domain.RmResourceGroup; +import com.ruoyi.system.domain.RmResourceRegistration; +import com.ruoyi.system.mapper.RmResourceGroupMapper; +import com.ruoyi.system.mapper.RmResourceRegistrationMapper; +import com.ruoyi.system.service.IRmResourceGroupService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.ruoyi.system.mapper.RmResourceGroupMapper; -import com.ruoyi.system.domain.RmResourceGroup; -import com.ruoyi.system.service.IRmResourceGroupService; + +import java.util.List; /** * 资源分组Service业务层处理 @@ -19,6 +22,8 @@ public class RmResourceGroupServiceImpl implements IRmResourceGroupService { @Autowired private RmResourceGroupMapper rmResourceGroupMapper; + @Autowired + private RmResourceRegistrationMapper rmResourceRegistrationMapper; /** * 查询资源分组 @@ -93,4 +98,30 @@ public class RmResourceGroupServiceImpl implements IRmResourceGroupService { return rmResourceGroupMapper.deleteRmResourceGroupById(id); } + + @Override + public List getRegisterList(RmResourceGroup rmResourceGroup) { + if(rmResourceGroup.getId() == null){ + RmResourceRegistration queryParam = new RmResourceRegistration(); + List rmResourceRegistrationList = rmResourceRegistrationMapper.selectRmResourceRegistrationList(queryParam); + for (RmResourceRegistration rmResourceRegistration : rmResourceRegistrationList) { + RmResourceGroup item = rmResourceGroupMapper.selectMonitorMsgAndGroupMsg(rmResourceRegistration.getId()); + rmResourceRegistration.setMonitorItems(item.getMonitorItems()); + rmResourceRegistration.setDiscoveryRules(item.getDiscoveryRules()); + } + return rmResourceRegistrationList; + }else{ + RmResourceGroup group = rmResourceGroupMapper.selectRmResourceGroupById(rmResourceGroup.getId()); + String ids = group.getIncludedDevicesId(); + String[] resourceIds = ids.split(","); + // 拿到资源信息 + List rmResourceRegistrationList = rmResourceRegistrationMapper.getRegistrationByIds(resourceIds); + for (RmResourceRegistration rmResourceRegistration : rmResourceRegistrationList) { + RmResourceGroup item = rmResourceGroupMapper.selectMonitorMsgAndGroupMsg(rmResourceRegistration.getId()); + rmResourceRegistration.setMonitorItems(item.getMonitorItems()); + rmResourceRegistration.setDiscoveryRules(item.getDiscoveryRules()); + } + return rmResourceRegistrationList; + } + } } 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 19b37e9..6f05630 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 @@ -14,7 +14,7 @@ public class CalculateUtil { * @param speedWithUnit * @return */ - public static BigDecimal parseSpeedToMbps(String speedWithUnit) { + public static BigDecimal parseSpeedToMbps(String speedWithUnit, String mode) { if (speedWithUnit == null || speedWithUnit.trim().isEmpty()) { return BigDecimal.ZERO; } @@ -31,31 +31,56 @@ public class CalculateUtil { if (unit.isEmpty()) { unit = "B/S"; // 默认单位: Bytes/s } - - // 单位换算逻辑(保持不变) + switch (mode) { + case "1000": + return convertWithDecimalCoefficients(value, unit); + case "1024": + return convertWithBinaryCoefficients(value, unit); + default: + throw new UnsupportedOperationException("Unknown mode: " + mode); + } + } + // 1000进制换算 + private static BigDecimal convertWithDecimalCoefficients(BigDecimal value, String unit) { switch (unit) { case "B/S": - return value.multiply(new BigDecimal("0.000008")); - case "KBPS": + return value.multiply(new BigDecimal("0.000008")) // 8/1000000 + .setScale(2, RoundingMode.HALF_UP); case "KB/S": - return value.divide(new BigDecimal("1000"), 10, RoundingMode.HALF_UP); - case "MBPS": + return value.multiply(new BigDecimal("0.008")) // 8/1000 + .setScale(2, RoundingMode.HALF_UP); case "MB/S": - return value; - case "GBPS": + return value.setScale(2, RoundingMode.HALF_UP); case "GB/S": - return value.multiply(new BigDecimal("1000")); - case "TBPS": + return value.multiply(new BigDecimal("8000")) // 1000 * 8 + .setScale(2, RoundingMode.HALF_UP); case "TB/S": - return value.multiply(new BigDecimal("1000000")); - case "KIB/S": - return value.multiply(new BigDecimal("0.008192")); - case "MIB/S": - return value.multiply(new BigDecimal("8.388608")); - case "GIB/S": - return value.multiply(new BigDecimal("8589.934592")); + return value.multiply(new BigDecimal("8000000")) // 1000 * 1000 * 8 + .setScale(2, RoundingMode.HALF_UP); default: - throw new IllegalArgumentException("Unknown speed unit: " + unit); + throw new IllegalArgumentException("Unsupported DECIMAL unit: " + unit); + } + } + + // 1024进制换算 + private static BigDecimal convertWithBinaryCoefficients(BigDecimal value, String unit) { + switch (unit) { + case "B/S": + return value.multiply(new BigDecimal("0.00000762939")) // 8/1048576 + .setScale(2, RoundingMode.HALF_UP); + case "KB/S": + return value.multiply(new BigDecimal("0.0078125")) // 8/1024 + .setScale(2, RoundingMode.HALF_UP); + case "MB/S": + return value.setScale(2, RoundingMode.HALF_UP); + case "GB/S": + return value.multiply(new BigDecimal("8192")) // 1024 * 8 + .setScale(2, RoundingMode.HALF_UP); + case "TB/S": + return value.multiply(new BigDecimal("8388608")) // 1024 * 1024 * 8 + .setScale(2, RoundingMode.HALF_UP); + default: + throw new IllegalArgumentException("Unsupported BINARY unit: " + unit); } } diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/EpsNodeBandwidthMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/EpsNodeBandwidthMapper.xml index d3cb35a..cdf9fee 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/EpsNodeBandwidthMapper.xml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/EpsNodeBandwidthMapper.xml @@ -8,6 +8,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -36,7 +37,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select id, node_name, hardware_sn, bandwidth_type, bandwidth_result, bandwidth_95_daily, bandwidth_95_monthly, avg_monthly_bandwidth_95, package_bandwidth_daily, customer_id, customer_name, service_number, uplink_switch, create_time, update_time, creator_id, creator_name, switch_sn, interface_name, resource_type, interface_link_device_type, effective_bandwidth_95_daily, effective_bandwidth_95_monthly, effective_avg_monthly_bandwidth_95, business_name, business_id, remark1, create_datetime from eps_node_bandwidth + select id, node_name, hardware_sn, calculation_mode, bandwidth_type, bandwidth_result, bandwidth_95_daily, bandwidth_95_monthly, avg_monthly_bandwidth_95, package_bandwidth_daily, customer_id, customer_name, service_number, uplink_switch, create_time, update_time, creator_id, creator_name, switch_sn, interface_name, resource_type, interface_link_device_type, effective_bandwidth_95_daily, effective_bandwidth_95_monthly, effective_avg_monthly_bandwidth_95, business_name, business_id, remark1, create_datetime from eps_node_bandwidth + select b.monitor_items monitorItems,b.discovery_rules discoveryRules from rm_resource_group a left join rm_monitor_template b on a.id=b.resource_group_id + where FIND_IN_SET(#{id}, a.included_devices_id) > 0 + \ No newline at end of file diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/InitialCpuInfoController.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/InitialCpuInfoController.java index 7271dbd..dd0f25e 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/InitialCpuInfoController.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/InitialCpuInfoController.java @@ -1,5 +1,6 @@ package com.ruoyi.rocketmq.controller; +import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.utils.poi.ExcelUtil; import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.domain.AjaxResult; @@ -14,7 +15,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * CPU监控信息Controller @@ -99,4 +101,47 @@ public class InitialCpuInfoController extends BaseController { return toAjax(initialCpuInfoService.deleteInitialCpuInfoByIds(ids)); } + + /** + * 查询CPU监控信息列表并封装为多折线ECharts图表数据 + */ + @RequiresPermissions("rocketmq:cpuInfo:list") + @PostMapping("/cpuLoadEcharts") + public AjaxResult cpuLoadEcharts(@RequestBody InitialCpuInfo initialCpuInfo) { + // 1. 查询原始CPU监控数据并按时间排序 + List list = initialCpuInfoService.selectInitialCpuInfoList(initialCpuInfo) + .stream() + .sorted(Comparator.comparing(InitialCpuInfo::getCreateTime)) + .collect(Collectors.toList()); + + // 2. 封装为ECharts图表数据格式 + Map echartsData = new HashMap<>(); + + // 确保X轴和Y轴数据顺序一致的处理 + List xAxisData = new ArrayList<>(); + List load1Data = new ArrayList<>(); + List load5Data = new ArrayList<>(); + List load15Data = new ArrayList<>(); + List utiData = new ArrayList<>(); + + for (InitialCpuInfo info : list) { + xAxisData.add(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", info.getCreateTime())); + load1Data.add(info.getAvg1()); + load5Data.add(info.getAvg5()); + load15Data.add(info.getAvg15()); + utiData.add(info.getUti()); + } + + // 构建Y轴数据 + Map yData = new HashMap<>(); + yData.put("load1Data", load1Data); + yData.put("load5Data", load5Data); + yData.put("load15Data", load15Data); + yData.put("utiData", utiData); + + echartsData.put("xData", xAxisData); + echartsData.put("yData", yData); + + return success(echartsData); + } } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/domain/InitialCpuInfo.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/domain/InitialCpuInfo.java index aceceec..8ee76f3 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/domain/InitialCpuInfo.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/domain/InitialCpuInfo.java @@ -69,4 +69,8 @@ public class InitialCpuInfo extends BaseEntity /** CPU用户进程所花费的时间(秒) */ @Excel(name = "CPU用户进程所花费的时间") private Long user; + /** 开始时间 */ + private String startTime; + /** 结束时间 */ + private String endTime; } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/RmMonitorTemplateServiceImpl.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/RmMonitorTemplateServiceImpl.java index 90e0fbf..d7195c9 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/RmMonitorTemplateServiceImpl.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/RmMonitorTemplateServiceImpl.java @@ -1,6 +1,11 @@ package com.ruoyi.rocketmq.service.impl; +import com.github.pagehelper.PageInfo; +import com.ruoyi.common.core.constant.SecurityConstants; +import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.DateUtils; +import com.ruoyi.common.core.web.page.PageDomain; +import com.ruoyi.common.core.web.page.TableDataInfo; import com.ruoyi.rocketmq.domain.RmInitialMonitorItem; import com.ruoyi.rocketmq.domain.RmMonitorTemplate; import com.ruoyi.rocketmq.domain.RmTemplateLinux; @@ -12,6 +17,8 @@ import com.ruoyi.rocketmq.mapper.RmTemplateLinuxMapper; import com.ruoyi.rocketmq.mapper.RmTemplateSwitchMapper; import com.ruoyi.rocketmq.service.IRmMonitorTemplateService; import com.ruoyi.rocketmq.utils.DataProcessUtil; +import com.ruoyi.system.api.RemoteRevenueConfigService; +import com.ruoyi.system.api.domain.RmResourceRegistrationRemote; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -22,6 +29,7 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import static com.ruoyi.common.core.utils.PageUtils.startPage; /** * 监控模板Service业务层处理 * @@ -39,6 +47,8 @@ public class RmMonitorTemplateServiceImpl implements IRmMonitorTemplateService private RmTemplateSwitchMapper rmTemplateSwitchMapper; @Autowired private RmInitialMonitorItemMapper rmInitialMonitorItemMapper; + @Autowired + private RemoteRevenueConfigService remoteRevenueConfigService; /** * 查询监控模板 * @@ -210,5 +220,4 @@ public class RmMonitorTemplateServiceImpl implements IRmMonitorTemplateService return result; } - } diff --git a/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialCpuInfoMapper.xml b/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialCpuInfoMapper.xml index d647a6f..5ec803e 100644 --- a/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialCpuInfoMapper.xml +++ b/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialCpuInfoMapper.xml @@ -33,6 +33,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and client_id = #{clientId} + and create_time >= #{startTime} + and create_time <= #{endTime} order by create_time desc