95值计算方式新增1024
This commit is contained in:
		@@ -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<List<RmResourceRegistrationRemote>> getRegistrationByIds(String[] ids, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 | 
			
		||||
    public R<List<RmResourceRegistrationRemote>> getRegistrationByIds(@RequestBody String[] ids, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取资源注册列表
 | 
			
		||||
     * @param rmResourceRegistrationRemote
 | 
			
		||||
     * @param source
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    @PostMapping("/registration/list")
 | 
			
		||||
    public R<TableDataInfo> getRegistrationList(@RequestBody RmResourceRegistrationRemote rmResourceRegistrationRemote, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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<Remot
 | 
			
		||||
            public R<List<RmResourceRegistrationRemote>> getRegistrationByIds(String[] ids, String source) {
 | 
			
		||||
                return R.fail("获取资源注册信息失败:" + throwable.getMessage());
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            @Override
 | 
			
		||||
            public R<TableDataInfo> getRegistrationList(RmResourceRegistrationRemote rmResourceRegistrationRemote, String source) {
 | 
			
		||||
                return R.fail("获取资源注册列表信息失败" + throwable.getMessage());
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
 
 | 
			
		||||
@@ -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();
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -136,5 +136,7 @@ public class EpsNodeBandwidth extends BaseEntity
 | 
			
		||||
    private List<String> nodeNames;
 | 
			
		||||
 | 
			
		||||
    private List<String> switchNames;
 | 
			
		||||
    /** 计算方式 */
 | 
			
		||||
    private String calculationMode;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -56,5 +56,9 @@ public class RmResourceGroup extends BaseEntity
 | 
			
		||||
 | 
			
		||||
    /** 修改人名称 */
 | 
			
		||||
    private String updaterName;
 | 
			
		||||
    /** 监控项 */
 | 
			
		||||
    private String monitorItems;
 | 
			
		||||
    /** 自动发现项 */
 | 
			
		||||
    private String discoveryRules;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -118,5 +118,9 @@ public class RmResourceRegistration extends BaseEntity
 | 
			
		||||
 | 
			
		||||
    /** 修改人名称 */
 | 
			
		||||
    private String updaterName;
 | 
			
		||||
    /** 监控项 */
 | 
			
		||||
    private String monitorItems;
 | 
			
		||||
    /** 自动发现项 */
 | 
			
		||||
    private String discoveryRules;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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<String, Object> trafficRateByServer();
 | 
			
		||||
    /**
 | 
			
		||||
     * 当前在线服务器发送带宽总流量
 | 
			
		||||
     * @return
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取交换机相关数据
 | 
			
		||||
 
 | 
			
		||||
@@ -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<RmResourceRegistration> getRegisterList(RmResourceGroup rmResourceGroup);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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<AllInterfaceName> 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<BigDecimal> 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<String, Object> trafficRateByServer() {
 | 
			
		||||
        Map<String, Object> resultMap = new HashMap<>(3);
 | 
			
		||||
 | 
			
		||||
        // 初始化默认值
 | 
			
		||||
        resultMap.put("outSpeedTotal", BigDecimal.ZERO);
 | 
			
		||||
        resultMap.put("speedTotal", BigDecimal.ZERO);
 | 
			
		||||
        resultMap.put("outSpeedRate", BigDecimal.ZERO);
 | 
			
		||||
 | 
			
		||||
        // 获取近5分钟的流量数据
 | 
			
		||||
        List<EpsInitialTrafficData> 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<EpsInitialTrafficData> 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<EpsInitialTrafficData> 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<EpsInitialTrafficData> 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<EpsInitialTrafficData> dataList = query(queryParam);
 | 
			
		||||
 | 
			
		||||
        if (!dataList.isEmpty()) {
 | 
			
		||||
            calculateAndSave95Bandwidth(dataList, dailyStartTime, queryParam.getDayOrMonth());
 | 
			
		||||
            calculateAndSave95Bandwidth(dataList, dailyStartTime, queryParam.getDayOrMonth(), calculationMode);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    /**
 | 
			
		||||
     * 计算并保存95带宽值
 | 
			
		||||
     */
 | 
			
		||||
    private void calculateAndSave95Bandwidth(List<EpsInitialTrafficData> dataList, String dateTime, String dayOrMonth) {
 | 
			
		||||
    private void calculateAndSave95Bandwidth(List<EpsInitialTrafficData> 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<BigDecimal> 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<EpsMethodChangeRecord> 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<EpsInitialTrafficData> 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<EpsInitialTrafficData> dataList, String startTime, String dayOrMonth){
 | 
			
		||||
    private void calculate95BandwidthDaily(List<EpsInitialTrafficData> dataList, String startTime, String dayOrMonth, String calculationMode){
 | 
			
		||||
        // 1. 提取 outSpeed 并转换为 Mbps
 | 
			
		||||
        List<BigDecimal> 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());
 | 
			
		||||
 
 | 
			
		||||
@@ -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<AllInterfaceName> 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<InitialSwitchInfoDetails> dataList = initialSwitchInfoDetailsMapper
 | 
			
		||||
                .selectInitialSwitchInfoDetailsList(queryParam);
 | 
			
		||||
 | 
			
		||||
        if (!dataList.isEmpty()) {
 | 
			
		||||
            calculateAndSaveSwitch95Bandwidth(dataList, dailyStartTime, queryParam.getDayOrMonth());
 | 
			
		||||
            calculateAndSaveSwitch95Bandwidth(dataList, dailyStartTime, queryParam.getDayOrMonth(), calculationMode);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 计算并保存交换机95带宽值
 | 
			
		||||
     */
 | 
			
		||||
    private void calculateAndSaveSwitch95Bandwidth(List<InitialSwitchInfoDetails> dataList, String dateTime, String dayOrMonth) {
 | 
			
		||||
    private void calculateAndSaveSwitch95Bandwidth(List<InitialSwitchInfoDetails> 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<EpsMethodChangeRecord> 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<InitialSwitchInfoDetails> dataList = initialSwitchInfoDetailsMapper
 | 
			
		||||
                .selectInitialSwitchInfoDetailsList(queryParam);
 | 
			
		||||
        if (!dataList.isEmpty()) {
 | 
			
		||||
            calculateSwitch95BandwidthDaily(dataList, startTime, queryParam.getDayOrMonth());
 | 
			
		||||
            calculateSwitch95BandwidthDaily(dataList, startTime, queryParam.getDayOrMonth(), calculationMode);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 计算交换机日95带宽值
 | 
			
		||||
     */
 | 
			
		||||
    private void calculateSwitch95BandwidthDaily(List<InitialSwitchInfoDetails> dataList, String startTime, String dayOrMonth) {
 | 
			
		||||
    private void calculateSwitch95BandwidthDaily(List<InitialSwitchInfoDetails> dataList,
 | 
			
		||||
                                                 String startTime, String dayOrMonth, String calculationMode) {
 | 
			
		||||
        // 1. 提取并转换带宽值
 | 
			
		||||
        List<BigDecimal> 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());
 | 
			
		||||
 
 | 
			
		||||
@@ -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<RmResourceRegistration> getRegisterList(RmResourceGroup rmResourceGroup) {
 | 
			
		||||
        if(rmResourceGroup.getId() == null){
 | 
			
		||||
            RmResourceRegistration queryParam = new RmResourceRegistration();
 | 
			
		||||
            List<RmResourceRegistration> 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<RmResourceRegistration> rmResourceRegistrationList = rmResourceRegistrationMapper.getRegistrationByIds(resourceIds);
 | 
			
		||||
            for (RmResourceRegistration rmResourceRegistration : rmResourceRegistrationList) {
 | 
			
		||||
                RmResourceGroup item = rmResourceGroupMapper.selectMonitorMsgAndGroupMsg(rmResourceRegistration.getId());
 | 
			
		||||
                rmResourceRegistration.setMonitorItems(item.getMonitorItems());
 | 
			
		||||
                rmResourceRegistration.setDiscoveryRules(item.getDiscoveryRules());
 | 
			
		||||
            }
 | 
			
		||||
            return rmResourceRegistrationList;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 | 
			
		||||
        <result property="id"    column="id"    />
 | 
			
		||||
        <result property="nodeName"    column="node_name"    />
 | 
			
		||||
        <result property="hardwareSn"    column="hardware_sn"    />
 | 
			
		||||
        <result property="calculationMode"    column="calculation_mode"    />
 | 
			
		||||
        <result property="bandwidthType"    column="bandwidth_type"    />
 | 
			
		||||
        <result property="bandwidthResult"    column="bandwidth_result"    />
 | 
			
		||||
        <result property="bandwidth95Daily"    column="bandwidth_95_daily"    />
 | 
			
		||||
@@ -36,7 +37,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 | 
			
		||||
    </resultMap>
 | 
			
		||||
 | 
			
		||||
    <sql id="selectEpsNodeBandwidthVo">
 | 
			
		||||
        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
 | 
			
		||||
    </sql>
 | 
			
		||||
 | 
			
		||||
    <select id="selectEpsNodeBandwidthList" parameterType="EpsNodeBandwidth" resultMap="EpsNodeBandwidthResult">
 | 
			
		||||
@@ -44,6 +45,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 | 
			
		||||
        <where>
 | 
			
		||||
            <if test="nodeName != null  and nodeName != ''"> and node_name like concat('%', #{nodeName}, '%')</if>
 | 
			
		||||
            <if test="hardwareSn != null  and hardwareSn != ''"> and hardware_sn = #{hardwareSn}</if>
 | 
			
		||||
            <if test="calculationMode != null  and calculationMode != ''"> and calculation_mode = #{calculationMode}</if>
 | 
			
		||||
            <if test="bandwidthType != null  and bandwidthType != ''"> and bandwidth_type = #{bandwidthType}</if>
 | 
			
		||||
            <if test="bandwidthResult != null "> and bandwidth_result = #{bandwidthResult}</if>
 | 
			
		||||
            <if test="bandwidth95Daily != null "> and bandwidth_95_daily = #{bandwidth95Daily}</if>
 | 
			
		||||
@@ -95,6 +97,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 | 
			
		||||
        <trim prefix="(" suffix=")" suffixOverrides=",">
 | 
			
		||||
            <if test="nodeName != null">node_name,</if>
 | 
			
		||||
            <if test="hardwareSn != null">hardware_sn,</if>
 | 
			
		||||
            <if test="calculationMode != null">calculation_mode,</if>
 | 
			
		||||
            <if test="bandwidthType != null">bandwidth_type,</if>
 | 
			
		||||
            <if test="bandwidthResult != null">bandwidth_result,</if>
 | 
			
		||||
            <if test="bandwidth95Daily != null">bandwidth_95_daily,</if>
 | 
			
		||||
@@ -124,6 +127,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 | 
			
		||||
        <trim prefix="values (" suffix=")" suffixOverrides=",">
 | 
			
		||||
            <if test="nodeName != null">#{nodeName},</if>
 | 
			
		||||
            <if test="hardwareSn != null">#{hardwareSn},</if>
 | 
			
		||||
            <if test="calculationMode != null">#{calculationMode},</if>
 | 
			
		||||
            <if test="bandwidthType != null">#{bandwidthType},</if>
 | 
			
		||||
            <if test="bandwidthResult != null">#{bandwidthResult},</if>
 | 
			
		||||
            <if test="bandwidth95Daily != null">#{bandwidth95Daily},</if>
 | 
			
		||||
@@ -157,6 +161,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 | 
			
		||||
        <trim prefix="SET" suffixOverrides=",">
 | 
			
		||||
            <if test="nodeName != null">node_name = #{nodeName},</if>
 | 
			
		||||
            <if test="hardwareSn != null">hardware_sn = #{hardwareSn},</if>
 | 
			
		||||
            <if test="calculationMode != null">calculation_mode = #{calculationMode},</if>
 | 
			
		||||
            <if test="bandwidthType != null">bandwidth_type = #{bandwidthType},</if>
 | 
			
		||||
            <if test="bandwidthResult != null">bandwidth_result = #{bandwidthResult},</if>
 | 
			
		||||
            <if test="bandwidth95Daily != null">bandwidth_95_daily = #{bandwidth95Daily},</if>
 | 
			
		||||
 
 | 
			
		||||
@@ -96,4 +96,9 @@
 | 
			
		||||
            #{id}
 | 
			
		||||
        </foreach>
 | 
			
		||||
    </delete>
 | 
			
		||||
 | 
			
		||||
    <select id="selectMonitorMsgAndGroupMsg" parameterType="Long" resultType="RmResourceGroup">
 | 
			
		||||
        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
 | 
			
		||||
    </select>
 | 
			
		||||
</mapper>
 | 
			
		||||
@@ -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<InitialCpuInfo> list = initialCpuInfoService.selectInitialCpuInfoList(initialCpuInfo)
 | 
			
		||||
                .stream()
 | 
			
		||||
                .sorted(Comparator.comparing(InitialCpuInfo::getCreateTime))
 | 
			
		||||
                .collect(Collectors.toList());
 | 
			
		||||
 | 
			
		||||
        // 2. 封装为ECharts图表数据格式
 | 
			
		||||
        Map<String, Object> echartsData = new HashMap<>();
 | 
			
		||||
 | 
			
		||||
        // 确保X轴和Y轴数据顺序一致的处理
 | 
			
		||||
        List<String> xAxisData = new ArrayList<>();
 | 
			
		||||
        List<Long> load1Data = new ArrayList<>();
 | 
			
		||||
        List<Long> load5Data = new ArrayList<>();
 | 
			
		||||
        List<Long> load15Data = new ArrayList<>();
 | 
			
		||||
        List<Long> 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<String, Object> 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);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -69,4 +69,8 @@ public class InitialCpuInfo extends BaseEntity
 | 
			
		||||
    /** CPU用户进程所花费的时间(秒) */
 | 
			
		||||
    @Excel(name = "CPU用户进程所花费的时间")
 | 
			
		||||
    private Long user;
 | 
			
		||||
    /** 开始时间 */
 | 
			
		||||
    private String startTime;
 | 
			
		||||
    /** 结束时间 */
 | 
			
		||||
    private String endTime;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -33,6 +33,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 | 
			
		||||
        <include refid="selectInitialCpuInfoVo"/>
 | 
			
		||||
        <where>  
 | 
			
		||||
            <if test="clientId != null  and clientId != ''"> and client_id = #{clientId}</if>
 | 
			
		||||
            <if test="startTime != null  and startTime != ''"> and create_time >= #{startTime}</if>
 | 
			
		||||
            <if test="endTime != null  and endTime != ''"> and create_time <= #{endTime}</if>
 | 
			
		||||
        </where>
 | 
			
		||||
        order by create_time desc
 | 
			
		||||
    </select>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user