95值计算方式新增1024

This commit is contained in:
gaoyutao
2025-09-16 09:47:39 +08:00
parent bdfecb7852
commit f9d4835d4c
21 changed files with 383 additions and 119 deletions

View File

@@ -3,6 +3,7 @@ package com.ruoyi.system.api;
import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R; 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.domain.*;
import com.ruoyi.system.api.factory.RemoteRevenueConfigFallbackFactory; import com.ruoyi.system.api.factory.RemoteRevenueConfigFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
@@ -70,5 +71,15 @@ public interface RemoteRevenueConfigService
* @return * @return
*/ */
@PostMapping("/registration/getRegistrationByIds") @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);
} }

View File

@@ -1,6 +1,7 @@
package com.ruoyi.system.api.factory; package com.ruoyi.system.api.factory;
import com.ruoyi.common.core.domain.R; 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.RemoteRevenueConfigService;
import com.ruoyi.system.api.domain.*; import com.ruoyi.system.api.domain.*;
import org.slf4j.Logger; import org.slf4j.Logger;
@@ -55,6 +56,11 @@ public class RemoteRevenueConfigFallbackFactory implements FallbackFactory<Remot
public R<List<RmResourceRegistrationRemote>> getRegistrationByIds(String[] ids, String source) { public R<List<RmResourceRegistrationRemote>> getRegistrationByIds(String[] ids, String source) {
return R.fail("获取资源注册信息失败:" + throwable.getMessage()); return R.fail("获取资源注册信息失败:" + throwable.getMessage());
} }
@Override
public R<TableDataInfo> getRegistrationList(RmResourceRegistrationRemote rmResourceRegistrationRemote, String source) {
return R.fail("获取资源注册列表信息失败" + throwable.getMessage());
}
}; };
} }
} }

View File

@@ -14,6 +14,7 @@ import java.time.ZoneId;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -47,7 +48,7 @@ public class TableScheduleConfig {
epsInitialTrafficDataService.createNextMonthTables(); epsInitialTrafficDataService.createNextMonthTables();
} }
// 每天12点执行 计算95带宽值/日 // 每天0点执行 计算95带宽值/日
@Scheduled(cron = "0 4 0 * * ?", zone = "Asia/Shanghai") @Scheduled(cron = "0 4 0 * * ?", zone = "Asia/Shanghai")
public void calculate95BandwidthDaily() { public void calculate95BandwidthDaily() {
// 获取昨天的日期范围(北京时间) // 获取昨天的日期范围(北京时间)
@@ -59,10 +60,17 @@ public class TableScheduleConfig {
// 95带宽值/日 // 95带宽值/日
EpsInitialTrafficData queryParam = new EpsInitialTrafficData(); EpsInitialTrafficData queryParam = new EpsInitialTrafficData();
queryParam.setDayOrMonth(dayOrMonth); queryParam.setDayOrMonth(dayOrMonth);
epsInitialTrafficDataService.calculateBusiness95BandwidthDaily(queryParam, dailyStartTime, dailyEndTime);
InitialSwitchInfoDetails initialSwitchInfoDetails = new InitialSwitchInfoDetails(); InitialSwitchInfoDetails initialSwitchInfoDetails = new InitialSwitchInfoDetails();
initialSwitchInfoDetails.setDayOrMonth(dayOrMonth); 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带宽值/月 // 每月1号0点执行 计算95带宽值/月
@@ -76,38 +84,42 @@ public class TableScheduleConfig {
String monthlyStartTime = firstDayOfMonth.atStartOfDay().format(TIME_FORMAT); String monthlyStartTime = firstDayOfMonth.atStartOfDay().format(TIME_FORMAT);
String monthlyEndTime = lastDayOfMonth.atTime(23, 59, 59).format(TIME_FORMAT); String monthlyEndTime = lastDayOfMonth.atTime(23, 59, 59).format(TIME_FORMAT);
// 顺序执行各任务间隔10分钟 // 链式顺序执行(无额外日志封装)
executeWithDelay(() -> calculateServerMonthlyBandwidth(monthlyStartTime, monthlyEndTime), 0); CompletableFuture.runAsync(() -> calculateServerMonthlyBandwidth(monthlyStartTime, monthlyEndTime, "1000"))
executeWithDelay(() -> calculateSwitchMonthlyBandwidth(monthlyStartTime, monthlyEndTime), 10); .thenRun(() -> calculateServerMonthlyBandwidth(monthlyStartTime, monthlyEndTime, "1024"))
executeWithDelay(() -> calculateServerAvgMonthlyBandwidth(monthlyStartTime, monthlyEndTime), 10); .thenRun(() -> calculateSwitchMonthlyBandwidth(monthlyStartTime, monthlyEndTime, "1000"))
executeWithDelay(() -> calculateSwitchAvgMonthlyBandwidth(monthlyStartTime, monthlyEndTime), 10); .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 { try {
if (delayMinutes > 0) {
Thread.sleep(delayMinutes * 60 * 1000);
}
task.run(); task.run();
} catch (InterruptedException e) { } catch (Exception e) {
Thread.currentThread().interrupt(); log.error("{} 执行失败", taskName, e);
log.error("任务执行被中断", e); throw e; // 可选:是否终止后续任务
} }
log.info("{} 执行完成", taskName);
} }
/** /**
* 计算服务器月95带宽值 * 计算服务器月95带宽值
*/ */
private void calculateServerMonthlyBandwidth(String monthlyStartTime, String monthlyEndTime) { private void calculateServerMonthlyBandwidth(String monthlyStartTime, String monthlyEndTime, String calculationMode) {
log.info("开始计算服务器月95带宽值..."); log.info("开始计算服务器月95带宽值...");
try { try {
String dayOrMonth = "2"; String dayOrMonth = "2";
EpsInitialTrafficData queryParam = new EpsInitialTrafficData(); EpsInitialTrafficData queryParam = new EpsInitialTrafficData();
queryParam.setDayOrMonth(dayOrMonth); queryParam.setDayOrMonth(dayOrMonth);
epsInitialTrafficDataService.calculateBusiness95BandwidthDaily(queryParam, monthlyStartTime, monthlyEndTime); epsInitialTrafficDataService.calculateBusiness95BandwidthDaily(queryParam, monthlyStartTime, monthlyEndTime, calculationMode);
log.info("服务器月95带宽值计算完成"); log.info("服务器月95带宽值计算完成");
} catch (Exception e) { } catch (Exception e) {
log.error("计算服务器月95带宽值失败", e); log.error("计算服务器月95带宽值失败", e);
@@ -117,13 +129,13 @@ public class TableScheduleConfig {
/** /**
* 计算交换机月95带宽值 * 计算交换机月95带宽值
*/ */
private void calculateSwitchMonthlyBandwidth(String monthlyStartTime, String monthlyEndTime) { private void calculateSwitchMonthlyBandwidth(String monthlyStartTime, String monthlyEndTime, String calculationMode) {
log.info("开始计算交换机月95带宽值..."); log.info("开始计算交换机月95带宽值...");
try { try {
String dayOrMonth = "2"; String dayOrMonth = "2";
InitialSwitchInfoDetails queryParam = new InitialSwitchInfoDetails(); InitialSwitchInfoDetails queryParam = new InitialSwitchInfoDetails();
queryParam.setDayOrMonth(dayOrMonth); queryParam.setDayOrMonth(dayOrMonth);
initialSwitchInfoDetailsService.calculateSwitch95BandwidthDaily(queryParam, monthlyStartTime, monthlyEndTime); initialSwitchInfoDetailsService.calculateSwitch95BandwidthDaily(queryParam, monthlyStartTime, monthlyEndTime, calculationMode);
log.info("交换机月95带宽值计算完成"); log.info("交换机月95带宽值计算完成");
} catch (Exception e) { } catch (Exception e) {
log.error("计算交换机月95带宽值失败", e); log.error("计算交换机月95带宽值失败", e);

View File

@@ -145,10 +145,10 @@ public class EpsNodeBandwidthController extends BaseController
String dailyEndTime = timeRange.getEnd(); String dailyEndTime = timeRange.getEnd();
if("1".equals(epsNodeBandwidth.getResourceType())){ if("1".equals(epsNodeBandwidth.getResourceType())){
// 重新计算服务器95带宽值 // 重新计算服务器95带宽值
epsInitialTrafficDataService.recalculateServer95Bandwidth(epsNodeBandwidth, dailyStartTime, dailyEndTime); epsInitialTrafficDataService.recalculateServer95Bandwidth(epsNodeBandwidth, dailyStartTime, dailyEndTime, epsNodeBandwidth.getCalculationMode());
}else{ }else{
// 重新计算交换机95带宽值 // 重新计算交换机95带宽值
initialSwitchInfoDetailsService.recalculateSwitch95Bandwidth(epsNodeBandwidth, dailyStartTime, dailyEndTime); initialSwitchInfoDetailsService.recalculateSwitch95Bandwidth(epsNodeBandwidth, dailyStartTime, dailyEndTime, epsNodeBandwidth.getCalculationMode());
} }
return success(); return success();
} }

View File

@@ -136,5 +136,7 @@ public class EpsNodeBandwidth extends BaseEntity
private List<String> nodeNames; private List<String> nodeNames;
private List<String> switchNames; private List<String> switchNames;
/** 计算方式 */
private String calculationMode;
} }

View File

@@ -56,5 +56,9 @@ public class RmResourceGroup extends BaseEntity
/** 修改人名称 */ /** 修改人名称 */
private String updaterName; private String updaterName;
/** 监控项 */
private String monitorItems;
/** 自动发现项 */
private String discoveryRules;
} }

View File

@@ -118,5 +118,9 @@ public class RmResourceRegistration extends BaseEntity
/** 修改人名称 */ /** 修改人名称 */
private String updaterName; private String updaterName;
/** 监控项 */
private String monitorItems;
/** 自动发现项 */
private String discoveryRules;
} }

View File

@@ -1,8 +1,9 @@
package com.ruoyi.system.mapper; package com.ruoyi.system.mapper;
import java.util.List;
import com.ruoyi.system.domain.RmResourceGroup; import com.ruoyi.system.domain.RmResourceGroup;
import java.util.List;
/** /**
* 资源分组Mapper接口 * 资源分组Mapper接口
* *
@@ -58,4 +59,11 @@ public interface RmResourceGroupMapper
* @return 结果 * @return 结果
*/ */
public int deleteRmResourceGroupByIds(Long[] ids); public int deleteRmResourceGroupByIds(Long[] ids);
/**
* 查询资源分组信息和监控项
* @param id
* @return
*/
public RmResourceGroup selectMonitorMsgAndGroupMsg(Long id);
} }

View File

@@ -5,6 +5,7 @@ import com.ruoyi.system.domain.EpsNodeBandwidth;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* EPS表创建服务接口 * EPS表创建服务接口
@@ -46,7 +47,7 @@ public interface EpsInitialTrafficDataService {
* @param queryParam 查询参数实体 * @param queryParam 查询参数实体
* @return 流量数据列表 * @return 流量数据列表
*/ */
void calculateBusiness95BandwidthDaily(EpsInitialTrafficData queryParam, String dailyStartTime, String dailyEndTime); void calculateBusiness95BandwidthDaily(EpsInitialTrafficData queryParam, String dailyStartTime, String dailyEndTime, String calculationMode);
/** /**
* 重新计算服务器95带宽值 * 重新计算服务器95带宽值
@@ -54,8 +55,13 @@ public interface EpsInitialTrafficDataService {
* @param dailyStartTime 开始时间 * @param dailyStartTime 开始时间
* @param dailyEndTime 结束时间 * @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 * @return

View File

@@ -73,7 +73,7 @@ public interface IInitialSwitchInfoDetailsService
* @param queryParam 查询参数实体 * @param queryParam 查询参数实体
* @return 流量数据列表 * @return 流量数据列表
*/ */
void calculateSwitch95BandwidthDaily(InitialSwitchInfoDetails queryParam, String dailyStartTime, String dailyEndTime); void calculateSwitch95BandwidthDaily(InitialSwitchInfoDetails queryParam, String dailyStartTime, String dailyEndTime, String calculationMode);
/** /**
* 重新计算交换机95带宽值 * 重新计算交换机95带宽值
@@ -81,7 +81,7 @@ public interface IInitialSwitchInfoDetailsService
* @param dailyStartTime 开始时间 * @param dailyStartTime 开始时间
* @param dailyEndTime 结束时间 * @param dailyEndTime 结束时间
*/ */
void recalculateSwitch95Bandwidth(EpsNodeBandwidth epsNodeBandwidth, String dailyStartTime, String dailyEndTime); void recalculateSwitch95Bandwidth(EpsNodeBandwidth epsNodeBandwidth, String dailyStartTime, String dailyEndTime, String calculationMode);
/** /**
* 获取交换机相关数据 * 获取交换机相关数据

View File

@@ -1,7 +1,9 @@
package com.ruoyi.system.service; package com.ruoyi.system.service;
import java.util.List;
import com.ruoyi.system.domain.RmResourceGroup; import com.ruoyi.system.domain.RmResourceGroup;
import com.ruoyi.system.domain.RmResourceRegistration;
import java.util.List;
/** /**
* 资源分组Service接口 * 资源分组Service接口
@@ -58,4 +60,6 @@ public interface IRmResourceGroupService
* @return 结果 * @return 结果
*/ */
public int deleteRmResourceGroupById(Long id); public int deleteRmResourceGroupById(Long id);
List<RmResourceRegistration> getRegisterList(RmResourceGroup rmResourceGroup);
} }

View File

@@ -13,6 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
@@ -215,13 +216,14 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
* @param queryParam * @param queryParam
*/ */
@Override @Override
public void calculateBusiness95BandwidthDaily(EpsInitialTrafficData queryParam, String dailyStartTime, String dailyEndTime) { public void calculateBusiness95BandwidthDaily(EpsInitialTrafficData queryParam,
String dailyStartTime, String dailyEndTime, String calculationMode) {
// 获取所有设备SN列表 // 获取所有设备SN列表
List<AllInterfaceName> snList = allInterfaceNameMapper.getAllDeviceSn(new AllInterfaceName()); List<AllInterfaceName> snList = allInterfaceNameMapper.getAllDeviceSn(new AllInterfaceName());
// 遍历处理每个设备 // 遍历处理每个设备
snList.forEach(interfaceName -> { snList.forEach(interfaceName -> {
queryParam.setServiceSn(interfaceName.getDeviceSn()); queryParam.setServiceSn(interfaceName.getDeviceSn());
processDeviceBandwidth(queryParam, dailyStartTime, dailyEndTime); processDeviceBandwidth(queryParam, dailyStartTime, dailyEndTime, calculationMode);
}); });
} }
@@ -232,7 +234,7 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
* @param dailyEndTime 结束时间 * @param dailyEndTime 结束时间
*/ */
@Override @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 epsInitialTrafficData = new EpsInitialTrafficData();
epsInitialTrafficData.setStartTime(dailyStartTime); epsInitialTrafficData.setStartTime(dailyStartTime);
epsInitialTrafficData.setEndTime(dailyEndTime); epsInitialTrafficData.setEndTime(dailyEndTime);
@@ -244,7 +246,7 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
if(!dataList.isEmpty()){ if(!dataList.isEmpty()){
// 1. 提取并转换带宽值 // 1. 提取并转换带宽值
List<BigDecimal> speedsInMbps = dataList.stream() List<BigDecimal> speedsInMbps = dataList.stream()
.map(data -> CalculateUtil.parseSpeedToMbps(data.getOutSpeed())) .map(data -> CalculateUtil.parseSpeedToMbps(data.getOutSpeed(), calculationMode))
.sorted() .sorted()
.collect(Collectors.toList()); .collect(Collectors.toList());
@@ -255,16 +257,97 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
EpsInitialTrafficData initialTrafficData = dataList.get(0); EpsInitialTrafficData initialTrafficData = dataList.get(0);
initialTrafficData.setResourceType("1"); initialTrafficData.setResourceType("1");
initialTrafficData.setBandwidthType(epsNodeBandwidth.getBandwidthType()); 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 * @return
*/ */
@Override @Override
public BigDecimal sumTrafficByServer() { 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(); LocalDateTime now = LocalDateTime.now();
// 结束时间 // 结束时间
@@ -276,19 +359,11 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
// 格式化为字符串 // 格式化为字符串
String dailyStartTime = startTime.format(formatter); String dailyStartTime = startTime.format(formatter);
String dailyEndTime = endTime.format(formatter); String dailyEndTime = endTime.format(formatter);
BigDecimal total = BigDecimal.ZERO;
EpsInitialTrafficData epsInitialTrafficData = new EpsInitialTrafficData(); EpsInitialTrafficData epsInitialTrafficData = new EpsInitialTrafficData();
epsInitialTrafficData.setStartTime(dailyStartTime); epsInitialTrafficData.setStartTime(dailyStartTime);
epsInitialTrafficData.setEndTime(dailyEndTime); epsInitialTrafficData.setEndTime(dailyEndTime);
List<EpsInitialTrafficData> dataList = query(epsInitialTrafficData); List<EpsInitialTrafficData> dataList = query(epsInitialTrafficData);
if(!dataList.isEmpty()){ return dataList;
for (EpsInitialTrafficData initialTrafficData : dataList) {
// 服务器发送带宽流量
BigDecimal outSpeed = CalculateUtil.parseSpeedToMbps(initialTrafficData.getOutSpeed());
total = total.add(outSpeed);
}
}
return total.setScale(0, RoundingMode.HALF_UP);
} }
/** /**
@@ -296,7 +371,7 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
*/ */
private void processDeviceBandwidth(EpsInitialTrafficData queryParam, private void processDeviceBandwidth(EpsInitialTrafficData queryParam,
String dailyStartTime, String dailyStartTime,
String dailyEndTime) { String dailyEndTime, String calculationMode) {
// 1. 检查设备是否有业务变更 // 1. 检查设备是否有业务变更
EpsServerRevenueConfig revenueConfig = new EpsServerRevenueConfig(); EpsServerRevenueConfig revenueConfig = new EpsServerRevenueConfig();
revenueConfig.setHardwareSn(queryParam.getServiceSn()); revenueConfig.setHardwareSn(queryParam.getServiceSn());
@@ -305,9 +380,9 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
// 2. 根据业务变更情况选择计算方式 // 2. 根据业务变更情况选择计算方式
if (hasTrafficMethodChanged(changedList)) { if (hasTrafficMethodChanged(changedList)) {
calculateChangedDeviceBandwidth(queryParam, dailyStartTime, dailyEndTime); calculateChangedDeviceBandwidth(queryParam, dailyStartTime, dailyEndTime, calculationMode);
} else { } else {
calculateNormalDeviceBandwidth(queryParam, dailyStartTime, dailyEndTime); calculateNormalDeviceBandwidth(queryParam, dailyStartTime, dailyEndTime, calculationMode);
} }
} }
/** /**
@@ -323,7 +398,7 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
*/ */
private void calculateChangedDeviceBandwidth(EpsInitialTrafficData queryParam, private void calculateChangedDeviceBandwidth(EpsInitialTrafficData queryParam,
String dailyStartTime, String dailyStartTime,
String dailyEndTime) { String dailyEndTime, String calculationMode) {
// 1. 获取业务变更记录(按时间降序) // 1. 获取业务变更记录(按时间降序)
EpsMethodChangeRecord changeQuery = new EpsMethodChangeRecord(); EpsMethodChangeRecord changeQuery = new EpsMethodChangeRecord();
changeQuery.setHardwareSn(queryParam.getServiceSn()); changeQuery.setHardwareSn(queryParam.getServiceSn());
@@ -337,9 +412,9 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
records.sort((r1, r2) -> r2.getCreateTime().compareTo(r1.getCreateTime())); records.sort((r1, r2) -> r2.getCreateTime().compareTo(r1.getCreateTime()));
// 3. 计算各时间段95值 // 3. 计算各时间段95值
calculateTimeSegments95(queryParam, records, dailyStartTime, dailyEndTime); calculateTimeSegments95(queryParam, records, dailyStartTime, dailyEndTime, calculationMode);
}else{ }else{
calculateNormalDeviceBandwidth(queryParam, dailyStartTime, dailyEndTime); calculateNormalDeviceBandwidth(queryParam, dailyStartTime, dailyEndTime, calculationMode);
} }
} }
/** /**
@@ -347,19 +422,19 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
*/ */
private void calculateNormalDeviceBandwidth(EpsInitialTrafficData queryParam, private void calculateNormalDeviceBandwidth(EpsInitialTrafficData queryParam,
String dailyStartTime, String dailyStartTime,
String dailyEndTime) { String dailyEndTime, String calculationMode) {
queryParam.setStartTime(dailyStartTime); queryParam.setStartTime(dailyStartTime);
queryParam.setEndTime(dailyEndTime); queryParam.setEndTime(dailyEndTime);
List<EpsInitialTrafficData> dataList = query(queryParam); List<EpsInitialTrafficData> dataList = query(queryParam);
if (!dataList.isEmpty()) { if (!dataList.isEmpty()) {
calculateAndSave95Bandwidth(dataList, dailyStartTime, queryParam.getDayOrMonth()); calculateAndSave95Bandwidth(dataList, dailyStartTime, queryParam.getDayOrMonth(), calculationMode);
} }
} }
/** /**
* 计算并保存95带宽值 * 计算并保存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; boolean eff = false;
if(!dataList.isEmpty()){ if(!dataList.isEmpty()){
if(dataList.size()<288){ if(dataList.size()<288){
@@ -367,7 +442,7 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
} }
// 1. 提取并转换带宽值 // 1. 提取并转换带宽值
List<BigDecimal> speedsInMbps = dataList.stream() List<BigDecimal> speedsInMbps = dataList.stream()
.map(data -> CalculateUtil.parseSpeedToMbps(data.getOutSpeed())) .map(data -> CalculateUtil.parseSpeedToMbps(data.getOutSpeed(), calculationMode))
.sorted() .sorted()
.collect(Collectors.toList()); .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, private void calculateTimeSegments95(EpsInitialTrafficData queryParam,
List<EpsMethodChangeRecord> records, List<EpsMethodChangeRecord> records,
String dailyStartTime, String dailyStartTime,
String dailyEndTime) { String dailyEndTime, String calculationMode) {
// 1. 处理变更时间段(从最新到最早) // 1. 处理变更时间段(从最新到最早)
String endTime = records.get(0).getCreateTime() + ""; String endTime = records.get(0).getCreateTime() + "";
for (int i = 1; i < records.size(); i++) { for (int i = 1; i < records.size(); i++) {
String startTime = records.get(i).getCreateTime() + ""; String startTime = records.get(i).getCreateTime() + "";
calculateSegment95(queryParam, startTime, endTime); calculateSegment95(queryParam, startTime, endTime, calculationMode);
endTime = startTime; // 移动时间窗口 endTime = startTime; // 移动时间窗口
} }
// 2. 处理最早变更前的时间段昨天00:00:00 ~ 最早变更时间) // 2. 处理最早变更前的时间段昨天00:00:00 ~ 最早变更时间)
String earliestChangeTime = records.get(records.size()-1).getCreateTime() + ""; String earliestChangeTime = records.get(records.size()-1).getCreateTime() + "";
calculateSegment95(queryParam, dailyStartTime, earliestChangeTime); calculateSegment95(queryParam, dailyStartTime, earliestChangeTime, calculationMode);
// 3. 处理最后变更后的时间段(最新变更时间 ~ 昨天23:59:59 // 3. 处理最后变更后的时间段(最新变更时间 ~ 昨天23:59:59
calculateSegment95(queryParam, endTime, dailyEndTime); calculateSegment95(queryParam, endTime, dailyEndTime, calculationMode);
} }
/** /**
* 计算单个时间段的95带宽值 * 计算单个时间段的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.setStartTime(startTime);
queryParam.setEndTime(endTime); queryParam.setEndTime(endTime);
List<EpsInitialTrafficData> dataList = query(queryParam); List<EpsInitialTrafficData> dataList = query(queryParam);
if (!dataList.isEmpty()) { if (!dataList.isEmpty()) {
calculate95BandwidthDaily(dataList, startTime, queryParam.getDayOrMonth()); calculate95BandwidthDaily(dataList, startTime, queryParam.getDayOrMonth(), calculationMode);
} }
} }
@@ -439,10 +514,10 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
* 计算日95带宽值 * 计算日95带宽值
* @param dataList * @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 // 1. 提取 outSpeed 并转换为 Mbps
List<BigDecimal> speedsInMbps = dataList.stream() List<BigDecimal> speedsInMbps = dataList.stream()
.map(data -> CalculateUtil.parseSpeedToMbps(data.getOutSpeed())) .map(data -> CalculateUtil.parseSpeedToMbps(data.getOutSpeed(), calculationMode))
.sorted() .sorted()
.collect(Collectors.toList()); .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, private void saveBandwidthResult(EpsInitialTrafficData data,
BigDecimal result, BigDecimal result,
String dateTime) { String dateTime, String calculationMode) {
EpsNodeBandwidth bandwidth = new EpsNodeBandwidth(); EpsNodeBandwidth bandwidth = new EpsNodeBandwidth();
bandwidth.setHardwareSn(data.getServiceSn()); bandwidth.setHardwareSn(data.getServiceSn());
bandwidth.setCalculationMode(calculationMode);
bandwidth.setNodeName(data.getNodeName()); bandwidth.setNodeName(data.getNodeName());
bandwidth.setBusinessId(data.getBusinessId()); bandwidth.setBusinessId(data.getBusinessId());
bandwidth.setBusinessName(data.getBusinessName()); bandwidth.setBusinessName(data.getBusinessName());

View File

@@ -306,7 +306,8 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
!Objects.equals(oldRecord.getSwitchIp(), newRecord.getSwitchIp()); !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列表 // 查询所有的交换机SN列表
AllInterfaceName allInterfaceName = new AllInterfaceName(); AllInterfaceName allInterfaceName = new AllInterfaceName();
List<AllInterfaceName> switchSnList = allInterfaceNameMapper.getAllSwitchSn(allInterfaceName); List<AllInterfaceName> switchSnList = allInterfaceNameMapper.getAllSwitchSn(allInterfaceName);
@@ -315,7 +316,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
switchSnList.forEach(interfaceName -> { switchSnList.forEach(interfaceName -> {
queryParam.setSwitchSn(interfaceName.getSwitchSn()); queryParam.setSwitchSn(interfaceName.getSwitchSn());
queryParam.setSwitchIp(interfaceName.getSwitchIp()); queryParam.setSwitchIp(interfaceName.getSwitchIp());
processSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime); processSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime, calculationMode);
}); });
} }
@@ -326,7 +327,8 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
* @param dailyEndTime 结束时间 * @param dailyEndTime 结束时间
*/ */
@Override @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(); InitialSwitchInfoDetails switchInfoDetails = new InitialSwitchInfoDetails();
switchInfoDetails.setStartTime(dailyStartTime); switchInfoDetails.setStartTime(dailyStartTime);
switchInfoDetails.setEndTime(dailyEndTime); switchInfoDetails.setEndTime(dailyEndTime);
@@ -351,7 +353,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
if (speed.matches("^\\d+(\\.\\d+)?$")) { if (speed.matches("^\\d+(\\.\\d+)?$")) {
speed += " B/S"; speed += " B/S";
} }
return CalculateUtil.parseSpeedToMbps(speed); return CalculateUtil.parseSpeedToMbps(speed, calculationMode);
}) })
.sorted() .sorted()
.collect(Collectors.toList()); .collect(Collectors.toList());
@@ -363,7 +365,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
InitialSwitchInfoDetails switchInfo = dataList.get(0); InitialSwitchInfoDetails switchInfo = dataList.get(0);
switchInfo.setResourceType("2"); switchInfo.setResourceType("2");
switchInfo.setBandwidthType(epsNodeBandwidth.getBandwidthType()); 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+)?$")) { if (speed.matches("^\\d+(\\.\\d+)?$")) {
speed += " B/S"; speed += " B/S";
} }
BigDecimal inSpeed = CalculateUtil.parseSpeedToMbps(speed); BigDecimal inSpeed = CalculateUtil.parseSpeedToMbps(speed, "1000");
total = total.add(inSpeed); total = total.add(inSpeed);
} }
} }
@@ -431,7 +433,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
*/ */
private void processSwitchBandwidth(InitialSwitchInfoDetails queryParam, private void processSwitchBandwidth(InitialSwitchInfoDetails queryParam,
String dailyStartTime, String dailyStartTime,
String dailyEndTime) { String dailyEndTime, String calculationMode) {
// 根据交换机sn查询连接的服务器sn // 根据交换机sn查询连接的服务器sn
RmEpsTopologyManagement management = new RmEpsTopologyManagement(); RmEpsTopologyManagement management = new RmEpsTopologyManagement();
management.setSwitchSn(queryParam.getSwitchSn()); management.setSwitchSn(queryParam.getSwitchSn());
@@ -449,13 +451,13 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
.selectEpsServerRevenueConfigList(revenueConfig); .selectEpsServerRevenueConfigList(revenueConfig);
// 根据业务变更情况选择计算方式 // 根据业务变更情况选择计算方式
if (hasTrafficMethodChanged(changedList)) { if (hasTrafficMethodChanged(changedList)) {
calculateChangedSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime); calculateChangedSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime, calculationMode);
} else { } else {
calculateNormalSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime); calculateNormalSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime, calculationMode);
} }
} }
if("2".equals(rmEpsTopologyManagement.getConnectedDeviceType())){ 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, private void calculateChangedSwitchBandwidth(InitialSwitchInfoDetails queryParam,
String dailyStartTime, String dailyStartTime,
String dailyEndTime) { String dailyEndTime, String calculationMode) {
// 获取业务变更记录(按时间降序) // 获取业务变更记录(按时间降序)
EpsMethodChangeRecord changeQuery = new EpsMethodChangeRecord(); EpsMethodChangeRecord changeQuery = new EpsMethodChangeRecord();
changeQuery.setHardwareSn(queryParam.getServerSn()); changeQuery.setHardwareSn(queryParam.getServerSn());
@@ -488,9 +490,9 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
records.sort((r1, r2) -> r2.getCreateTime().compareTo(r1.getCreateTime())); records.sort((r1, r2) -> r2.getCreateTime().compareTo(r1.getCreateTime()));
// 计算各时间段95值 // 计算各时间段95值
calculateSwitchTimeSegments95(queryParam, records, dailyStartTime, dailyEndTime); calculateSwitchTimeSegments95(queryParam, records, dailyStartTime, dailyEndTime, calculationMode);
}else { }else {
calculateNormalSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime); calculateNormalSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime, calculationMode);
} }
} }
@@ -499,21 +501,22 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
*/ */
private void calculateNormalSwitchBandwidth(InitialSwitchInfoDetails queryParam, private void calculateNormalSwitchBandwidth(InitialSwitchInfoDetails queryParam,
String dailyStartTime, String dailyStartTime,
String dailyEndTime) { String dailyEndTime, String calculationMode) {
queryParam.setStartTime(dailyStartTime); queryParam.setStartTime(dailyStartTime);
queryParam.setEndTime(dailyEndTime); queryParam.setEndTime(dailyEndTime);
List<InitialSwitchInfoDetails> dataList = initialSwitchInfoDetailsMapper List<InitialSwitchInfoDetails> dataList = initialSwitchInfoDetailsMapper
.selectInitialSwitchInfoDetailsList(queryParam); .selectInitialSwitchInfoDetailsList(queryParam);
if (!dataList.isEmpty()) { if (!dataList.isEmpty()) {
calculateAndSaveSwitch95Bandwidth(dataList, dailyStartTime, queryParam.getDayOrMonth()); calculateAndSaveSwitch95Bandwidth(dataList, dailyStartTime, queryParam.getDayOrMonth(), calculationMode);
} }
} }
/** /**
* 计算并保存交换机95带宽值 * 计算并保存交换机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; boolean eff = false;
if(!dataList.isEmpty()){ if(!dataList.isEmpty()){
if(dataList.size()<288){ if(dataList.size()<288){
@@ -530,7 +533,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
if (speed.matches("^\\d+(\\.\\d+)?$")) { if (speed.matches("^\\d+(\\.\\d+)?$")) {
speed += " B/S"; speed += " B/S";
} }
return CalculateUtil.parseSpeedToMbps(speed); return CalculateUtil.parseSpeedToMbps(speed, calculationMode);
}) })
.sorted() .sorted()
.collect(Collectors.toList()); .collect(Collectors.toList());
@@ -555,7 +558,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
switchInfo.setBandwidthType("2"); 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, private void calculateSwitchTimeSegments95(InitialSwitchInfoDetails queryParam,
List<EpsMethodChangeRecord> records, List<EpsMethodChangeRecord> records,
String dailyStartTime, String dailyStartTime,
String dailyEndTime) { String dailyEndTime, String calculationMode) {
// 1. 处理变更时间段(从最新到最早) // 1. 处理变更时间段(从最新到最早)
String endTime = records.get(0).getCreateTime() + ""; String endTime = records.get(0).getCreateTime() + "";
for (int i = 1; i < records.size(); i++) { for (int i = 1; i < records.size(); i++) {
String startTime = records.get(i).getCreateTime() + ""; String startTime = records.get(i).getCreateTime() + "";
calculateSwitchSegment95(queryParam, startTime, endTime); calculateSwitchSegment95(queryParam, startTime, endTime, calculationMode);
endTime = startTime; // 移动时间窗口 endTime = startTime; // 移动时间窗口
} }
// 2. 处理最早变更前的时间段昨天00:00:00 ~ 最早变更时间) // 2. 处理最早变更前的时间段昨天00:00:00 ~ 最早变更时间)
String earliestChangeTime = records.get(records.size()-1).getCreateTime() + ""; String earliestChangeTime = records.get(records.size()-1).getCreateTime() + "";
calculateSwitchSegment95(queryParam, dailyStartTime, earliestChangeTime); calculateSwitchSegment95(queryParam, dailyStartTime, earliestChangeTime, calculationMode);
// 3. 处理最后变更后的时间段(最新变更时间 ~ 昨天23:59:59 // 3. 处理最后变更后的时间段(最新变更时间 ~ 昨天23:59:59
calculateSwitchSegment95(queryParam, endTime, dailyEndTime); calculateSwitchSegment95(queryParam, endTime, dailyEndTime, calculationMode);
} }
/** /**
* 计算交换机单个时间段的95带宽值 * 计算交换机单个时间段的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.setStartTime(startTime);
queryParam.setEndTime(endTime); queryParam.setEndTime(endTime);
List<InitialSwitchInfoDetails> dataList = initialSwitchInfoDetailsMapper List<InitialSwitchInfoDetails> dataList = initialSwitchInfoDetailsMapper
.selectInitialSwitchInfoDetailsList(queryParam); .selectInitialSwitchInfoDetailsList(queryParam);
if (!dataList.isEmpty()) { if (!dataList.isEmpty()) {
calculateSwitch95BandwidthDaily(dataList, startTime, queryParam.getDayOrMonth()); calculateSwitch95BandwidthDaily(dataList, startTime, queryParam.getDayOrMonth(), calculationMode);
} }
} }
/** /**
* 计算交换机日95带宽值 * 计算交换机日95带宽值
*/ */
private void calculateSwitch95BandwidthDaily(List<InitialSwitchInfoDetails> dataList, String startTime, String dayOrMonth) { private void calculateSwitch95BandwidthDaily(List<InitialSwitchInfoDetails> dataList,
String startTime, String dayOrMonth, String calculationMode) {
// 1. 提取并转换带宽值 // 1. 提取并转换带宽值
List<BigDecimal> speedsInMbps = dataList.stream() List<BigDecimal> speedsInMbps = dataList.stream()
.map(data -> { .map(data -> {
@@ -609,7 +613,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
if (speed.matches("^\\d+(\\.\\d+)?$")) { if (speed.matches("^\\d+(\\.\\d+)?$")) {
speed += " B/S"; speed += " B/S";
} }
return CalculateUtil.parseSpeedToMbps(speed); return CalculateUtil.parseSpeedToMbps(speed, calculationMode);
}) })
.sorted() .sorted()
.collect(Collectors.toList()); .collect(Collectors.toList());
@@ -636,7 +640,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
switchInfo.setBandwidthType("2"); 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, private void saveSwitchBandwidthResult(InitialSwitchInfoDetails data,
BigDecimal result, BigDecimal result,
String dateTime) { String dateTime, String calculationMode) {
EpsNodeBandwidth bandwidth = new EpsNodeBandwidth(); EpsNodeBandwidth bandwidth = new EpsNodeBandwidth();
bandwidth.setBusinessName(data.getBusinessName()); bandwidth.setBusinessName(data.getBusinessName());
bandwidth.setBusinessId(data.getBusinessCode()); bandwidth.setBusinessId(data.getBusinessCode());
bandwidth.setHardwareSn(data.getServerSn()); bandwidth.setHardwareSn(data.getServerSn());
bandwidth.setCalculationMode(calculationMode);
bandwidth.setSwitchSn(data.getSwitchSn()); bandwidth.setSwitchSn(data.getSwitchSn());
bandwidth.setNodeName(data.getServerName()); bandwidth.setNodeName(data.getServerName());
bandwidth.setUplinkSwitch(data.getSwitchName()); bandwidth.setUplinkSwitch(data.getSwitchName());

View File

@@ -1,12 +1,15 @@
package com.ruoyi.system.service.impl; package com.ruoyi.system.service.impl;
import java.util.List;
import com.ruoyi.common.core.utils.DateUtils; 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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.RmResourceGroupMapper;
import com.ruoyi.system.domain.RmResourceGroup; import java.util.List;
import com.ruoyi.system.service.IRmResourceGroupService;
/** /**
* 资源分组Service业务层处理 * 资源分组Service业务层处理
@@ -19,6 +22,8 @@ public class RmResourceGroupServiceImpl implements IRmResourceGroupService
{ {
@Autowired @Autowired
private RmResourceGroupMapper rmResourceGroupMapper; private RmResourceGroupMapper rmResourceGroupMapper;
@Autowired
private RmResourceRegistrationMapper rmResourceRegistrationMapper;
/** /**
* 查询资源分组 * 查询资源分组
@@ -93,4 +98,30 @@ public class RmResourceGroupServiceImpl implements IRmResourceGroupService
{ {
return rmResourceGroupMapper.deleteRmResourceGroupById(id); 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;
}
}
} }

View File

@@ -14,7 +14,7 @@ public class CalculateUtil {
* @param speedWithUnit * @param speedWithUnit
* @return * @return
*/ */
public static BigDecimal parseSpeedToMbps(String speedWithUnit) { public static BigDecimal parseSpeedToMbps(String speedWithUnit, String mode) {
if (speedWithUnit == null || speedWithUnit.trim().isEmpty()) { if (speedWithUnit == null || speedWithUnit.trim().isEmpty()) {
return BigDecimal.ZERO; return BigDecimal.ZERO;
} }
@@ -31,31 +31,56 @@ public class CalculateUtil {
if (unit.isEmpty()) { if (unit.isEmpty()) {
unit = "B/S"; // 默认单位: Bytes/s 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) { switch (unit) {
case "B/S": case "B/S":
return value.multiply(new BigDecimal("0.000008")); return value.multiply(new BigDecimal("0.000008")) // 8/1000000
case "KBPS": .setScale(2, RoundingMode.HALF_UP);
case "KB/S": case "KB/S":
return value.divide(new BigDecimal("1000"), 10, RoundingMode.HALF_UP); return value.multiply(new BigDecimal("0.008")) // 8/1000
case "MBPS": .setScale(2, RoundingMode.HALF_UP);
case "MB/S": case "MB/S":
return value; return value.setScale(2, RoundingMode.HALF_UP);
case "GBPS":
case "GB/S": case "GB/S":
return value.multiply(new BigDecimal("1000")); return value.multiply(new BigDecimal("8000")) // 1000 * 8
case "TBPS": .setScale(2, RoundingMode.HALF_UP);
case "TB/S": case "TB/S":
return value.multiply(new BigDecimal("1000000")); return value.multiply(new BigDecimal("8000000")) // 1000 * 1000 * 8
case "KIB/S": .setScale(2, RoundingMode.HALF_UP);
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"));
default: 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);
} }
} }

View File

@@ -8,6 +8,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="id" column="id" /> <result property="id" column="id" />
<result property="nodeName" column="node_name" /> <result property="nodeName" column="node_name" />
<result property="hardwareSn" column="hardware_sn" /> <result property="hardwareSn" column="hardware_sn" />
<result property="calculationMode" column="calculation_mode" />
<result property="bandwidthType" column="bandwidth_type" /> <result property="bandwidthType" column="bandwidth_type" />
<result property="bandwidthResult" column="bandwidth_result" /> <result property="bandwidthResult" column="bandwidth_result" />
<result property="bandwidth95Daily" column="bandwidth_95_daily" /> <result property="bandwidth95Daily" column="bandwidth_95_daily" />
@@ -36,7 +37,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap> </resultMap>
<sql id="selectEpsNodeBandwidthVo"> <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> </sql>
<select id="selectEpsNodeBandwidthList" parameterType="EpsNodeBandwidth" resultMap="EpsNodeBandwidthResult"> <select id="selectEpsNodeBandwidthList" parameterType="EpsNodeBandwidth" resultMap="EpsNodeBandwidthResult">
@@ -44,6 +45,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<where> <where>
<if test="nodeName != null and nodeName != ''"> and node_name like concat('%', #{nodeName}, '%')</if> <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="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="bandwidthType != null and bandwidthType != ''"> and bandwidth_type = #{bandwidthType}</if>
<if test="bandwidthResult != null "> and bandwidth_result = #{bandwidthResult}</if> <if test="bandwidthResult != null "> and bandwidth_result = #{bandwidthResult}</if>
<if test="bandwidth95Daily != null "> and bandwidth_95_daily = #{bandwidth95Daily}</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=","> <trim prefix="(" suffix=")" suffixOverrides=",">
<if test="nodeName != null">node_name,</if> <if test="nodeName != null">node_name,</if>
<if test="hardwareSn != null">hardware_sn,</if> <if test="hardwareSn != null">hardware_sn,</if>
<if test="calculationMode != null">calculation_mode,</if>
<if test="bandwidthType != null">bandwidth_type,</if> <if test="bandwidthType != null">bandwidth_type,</if>
<if test="bandwidthResult != null">bandwidth_result,</if> <if test="bandwidthResult != null">bandwidth_result,</if>
<if test="bandwidth95Daily != null">bandwidth_95_daily,</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=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="nodeName != null">#{nodeName},</if> <if test="nodeName != null">#{nodeName},</if>
<if test="hardwareSn != null">#{hardwareSn},</if> <if test="hardwareSn != null">#{hardwareSn},</if>
<if test="calculationMode != null">#{calculationMode},</if>
<if test="bandwidthType != null">#{bandwidthType},</if> <if test="bandwidthType != null">#{bandwidthType},</if>
<if test="bandwidthResult != null">#{bandwidthResult},</if> <if test="bandwidthResult != null">#{bandwidthResult},</if>
<if test="bandwidth95Daily != null">#{bandwidth95Daily},</if> <if test="bandwidth95Daily != null">#{bandwidth95Daily},</if>
@@ -157,6 +161,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<trim prefix="SET" suffixOverrides=","> <trim prefix="SET" suffixOverrides=",">
<if test="nodeName != null">node_name = #{nodeName},</if> <if test="nodeName != null">node_name = #{nodeName},</if>
<if test="hardwareSn != null">hardware_sn = #{hardwareSn},</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="bandwidthType != null">bandwidth_type = #{bandwidthType},</if>
<if test="bandwidthResult != null">bandwidth_result = #{bandwidthResult},</if> <if test="bandwidthResult != null">bandwidth_result = #{bandwidthResult},</if>
<if test="bandwidth95Daily != null">bandwidth_95_daily = #{bandwidth95Daily},</if> <if test="bandwidth95Daily != null">bandwidth_95_daily = #{bandwidth95Daily},</if>

View File

@@ -96,4 +96,9 @@
#{id} #{id}
</foreach> </foreach>
</delete> </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> </mapper>

View File

@@ -1,5 +1,6 @@
package com.ruoyi.rocketmq.controller; 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.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult; 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 org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.List; import java.util.*;
import java.util.stream.Collectors;
/** /**
* CPU监控信息Controller * CPU监控信息Controller
@@ -99,4 +101,47 @@ public class InitialCpuInfoController extends BaseController
{ {
return toAjax(initialCpuInfoService.deleteInitialCpuInfoByIds(ids)); 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);
}
} }

View File

@@ -69,4 +69,8 @@ public class InitialCpuInfo extends BaseEntity
/** CPU用户进程所花费的时间(秒) */ /** CPU用户进程所花费的时间(秒) */
@Excel(name = "CPU用户进程所花费的时间") @Excel(name = "CPU用户进程所花费的时间")
private Long user; private Long user;
/** 开始时间 */
private String startTime;
/** 结束时间 */
private String endTime;
} }

View File

@@ -1,6 +1,11 @@
package com.ruoyi.rocketmq.service.impl; 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.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.RmInitialMonitorItem;
import com.ruoyi.rocketmq.domain.RmMonitorTemplate; import com.ruoyi.rocketmq.domain.RmMonitorTemplate;
import com.ruoyi.rocketmq.domain.RmTemplateLinux; 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.mapper.RmTemplateSwitchMapper;
import com.ruoyi.rocketmq.service.IRmMonitorTemplateService; import com.ruoyi.rocketmq.service.IRmMonitorTemplateService;
import com.ruoyi.rocketmq.utils.DataProcessUtil; 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.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -22,6 +29,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.ruoyi.common.core.utils.PageUtils.startPage;
/** /**
* 监控模板Service业务层处理 * 监控模板Service业务层处理
* *
@@ -39,6 +47,8 @@ public class RmMonitorTemplateServiceImpl implements IRmMonitorTemplateService
private RmTemplateSwitchMapper rmTemplateSwitchMapper; private RmTemplateSwitchMapper rmTemplateSwitchMapper;
@Autowired @Autowired
private RmInitialMonitorItemMapper rmInitialMonitorItemMapper; private RmInitialMonitorItemMapper rmInitialMonitorItemMapper;
@Autowired
private RemoteRevenueConfigService remoteRevenueConfigService;
/** /**
* 查询监控模板 * 查询监控模板
* *
@@ -210,5 +220,4 @@ public class RmMonitorTemplateServiceImpl implements IRmMonitorTemplateService
return result; return result;
} }
} }

View File

@@ -33,6 +33,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="selectInitialCpuInfoVo"/> <include refid="selectInitialCpuInfoVo"/>
<where> <where>
<if test="clientId != null and clientId != ''"> and client_id = #{clientId}</if> <if test="clientId != null and clientId != ''"> and client_id = #{clientId}</if>
<if test="startTime != null and startTime != ''"> and create_time &gt;= #{startTime}</if>
<if test="endTime != null and endTime != ''"> and create_time &lt;= #{endTime}</if>
</where> </where>
order by create_time desc order by create_time desc
</select> </select>