优化图形分析单位、服务器流量业务表逻辑

This commit is contained in:
gaoyutao
2025-11-05 13:02:51 +08:00
parent 1dc32ec24e
commit e9970b94a9
9 changed files with 140 additions and 29 deletions
@@ -49,7 +49,7 @@ public class EchartsDataUtils {
* 微秒转秒 * 微秒转秒
*/ */
public static double convertMicrosecondsToSeconds(long microseconds) { public static double convertMicrosecondsToSeconds(long microseconds) {
return microseconds / 1_000_000.0; return Math.round(microseconds / 1_000_000.0 * 100.0) / 100.0;
} }
/** /**
* 构建ECharts图表数据(带时间补全和0值填充) * 构建ECharts图表数据(带时间补全和0值填充)
@@ -2,17 +2,44 @@ package com.ruoyi.common.core.utils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.util.concurrent.TimeUnit;
public class UnitChangeUtil { public class UnitChangeUtil {
private static final double GB = 1024.0 * 1024.0 * 1024.0; private static final double GB = 1024.0 * 1024.0 * 1024.0;
/**
* long类型字节转化为Gb
* @param bytes
* @return
*/
public static double bytesToGb(long bytes) { public static double bytesToGb(long bytes) {
double gb = bytes / GB; double gb = bytes / GB;
BigDecimal bd = new BigDecimal(gb); BigDecimal bd = new BigDecimal(gb);
bd = bd.setScale(2, RoundingMode.HALF_UP); bd = bd.setScale(2, RoundingMode.HALF_UP);
return bd.doubleValue(); return bd.doubleValue();
} }
/**
* String类型字节转化为Gb
* @param bytes
* @return
*/
public static BigDecimal bytesToGb(String bytes) {
// 参数校验
if (bytes == null || bytes.trim().isEmpty()) {
return BigDecimal.ZERO;
}
BigDecimal bytesValue = new BigDecimal(bytes);
BigDecimal bd = bytesValue.divide(BigDecimal.valueOf(GB), 2, RoundingMode.HALF_UP);
return bd;
}
/**
* Kb转化为Gb
* @param kbValue
* @return
*/
public static double convertKbToGb(String kbValue) { public static double convertKbToGb(String kbValue) {
if (kbValue == null || kbValue.trim().isEmpty()) { if (kbValue == null || kbValue.trim().isEmpty()) {
throw new IllegalArgumentException("KB值不能为空"); throw new IllegalArgumentException("KB值不能为空");
@@ -26,4 +53,64 @@ public class UnitChangeUtil {
return bd.doubleValue(); return bd.doubleValue();
} }
/**
* 工具方法:将毫秒值转换为运行时长
* @param uptimeMillis
* @return
*/
public static String formatUptime(long uptimeMillis) {
if (uptimeMillis <= 0) {
return "0秒";
}
long days = TimeUnit.MILLISECONDS.toDays(uptimeMillis);
long hours = TimeUnit.MILLISECONDS.toHours(uptimeMillis) % 24;
long minutes = TimeUnit.MILLISECONDS.toMinutes(uptimeMillis) % 60;
long seconds = TimeUnit.MILLISECONDS.toSeconds(uptimeMillis) % 60;
long months = days / 30;
days = days % 30;
return String.format("%d个月%d天%d小时%d分%d秒", months, days, hours, minutes, seconds);
}
/**
* 工具方法- 将秒值转换为运行时长
* @param uptimeSeconds
* @return
*/
public static String formatUptimeSeconds(long uptimeSeconds) {
if (uptimeSeconds <= 0) {
return "0秒";
}
long days = TimeUnit.SECONDS.toDays(uptimeSeconds);
long hours = TimeUnit.SECONDS.toHours(uptimeSeconds) % 24;
long minutes = TimeUnit.SECONDS.toMinutes(uptimeSeconds) % 60;
long seconds = uptimeSeconds % 60;
long months = days / 30;
days = days % 30;
return String.format("%d个月%d天%d小时%d分%d秒", months, days, hours, minutes, seconds);
}
/**
* 将字符串小数值格式化为保留两位小数(高精度)
* @param numberStr 数字字符串
* @return 保留两位小数的字符串,如果转换失败返回原字符串
*/
public static String formatDecimal(String numberStr) {
if (numberStr == null || numberStr.trim().isEmpty()) {
return numberStr;
}
try {
BigDecimal number = new BigDecimal(numberStr);
return number.setScale(1, RoundingMode.HALF_UP).toString();
} catch (NumberFormatException e) {
return numberStr; // 转换失败返回原字符串
}
}
} }
@@ -19,6 +19,13 @@ public interface EpsBusinessMapper
* @return 业务信息 * @return 业务信息
*/ */
public EpsBusiness selectEpsBusinessById(String id); public EpsBusiness selectEpsBusinessById(String id);
/**
* 查询业务代码
*
* @param businessName 业务名称
* @return 业务信息
*/
public EpsBusiness selectEpsBusinessByName(String businessName);
/** /**
* 查询业务信息列表 * 查询业务信息列表
@@ -72,6 +72,7 @@ public class EpsNodeBandwidthServiceImpl implements IEpsNodeBandwidthService
public PageInfo<EpsInitialTrafficData> relatedData(EpsNodeBandwidth epsNodeBandwidth, String dailyStartTime, String dailyEndTime) { public PageInfo<EpsInitialTrafficData> relatedData(EpsNodeBandwidth epsNodeBandwidth, String dailyStartTime, String dailyEndTime) {
// 设置查询条件 // 设置查询条件
EpsInitialTrafficData queryParams = new EpsInitialTrafficData(); EpsInitialTrafficData queryParams = new EpsInitialTrafficData();
queryParams.setClientId(epsNodeBandwidth.getClientId());
queryParams.setServiceSn(epsNodeBandwidth.getHardwareSn()); queryParams.setServiceSn(epsNodeBandwidth.getHardwareSn());
queryParams.setBusinessId(epsNodeBandwidth.getBusinessId()); queryParams.setBusinessId(epsNodeBandwidth.getBusinessId());
queryParams.setStartTime(dailyStartTime); queryParams.setStartTime(dailyStartTime);
@@ -4,13 +4,8 @@ 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.utils.StringUtils; import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.domain.AllInterfaceName; import com.ruoyi.system.domain.*;
import com.ruoyi.system.domain.EpsInitialTrafficData; import com.ruoyi.system.mapper.*;
import com.ruoyi.system.domain.EpsMethodChangeRecord;
import com.ruoyi.system.domain.EpsServerRevenueConfig;
import com.ruoyi.system.mapper.AllInterfaceNameMapper;
import com.ruoyi.system.mapper.EpsMethodChangeRecordMapper;
import com.ruoyi.system.mapper.EpsServerRevenueConfigMapper;
import com.ruoyi.system.service.EpsInitialTrafficDataService; import com.ruoyi.system.service.EpsInitialTrafficDataService;
import com.ruoyi.system.service.IEpsServerRevenueConfigService; import com.ruoyi.system.service.IEpsServerRevenueConfigService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -18,7 +13,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException; import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.*; import java.util.*;
/** /**
@@ -39,6 +33,10 @@ public class EpsServerRevenueConfigServiceImpl implements IEpsServerRevenueConfi
private EpsMethodChangeRecordMapper epsMethodChangeRecordMapper; private EpsMethodChangeRecordMapper epsMethodChangeRecordMapper;
@Autowired @Autowired
private AllInterfaceNameMapper allInterfaceNameMapper; private AllInterfaceNameMapper allInterfaceNameMapper;
@Autowired
private RmResourceRegistrationMapper rmResourceRegistrationMapper;
@Autowired
private EpsBusinessMapper epsBusinessMapper;
/** /**
* 查询服务器收益方式配置 * 查询服务器收益方式配置
@@ -173,21 +171,20 @@ public class EpsServerRevenueConfigServiceImpl implements IEpsServerRevenueConfi
List<EpsInitialTrafficData> dataList = epsInitialTrafficDataService.getAllTraficMsg(epsInitialTrafficData); List<EpsInitialTrafficData> dataList = epsInitialTrafficDataService.getAllTraficMsg(epsInitialTrafficData);
List<EpsInitialTrafficData> batchList = new ArrayList<>(); List<EpsInitialTrafficData> batchList = new ArrayList<>();
for (EpsInitialTrafficData initialTrafficData : dataList) { for (EpsInitialTrafficData initialTrafficData : dataList) {
// 根据clientId查询节点名称 // 根据clientId查询业务名称
Map nodeMsg = epsServerRevenueConfigMapper.getNodeMsgBySn(initialTrafficData.getClientId()); RmResourceRegistration rmResourceRegistration = new RmResourceRegistration();
rmResourceRegistration.setClientId(initialTrafficData.getClientId());
List<RmResourceRegistration> registerLst = rmResourceRegistrationMapper.selectRmResourceRegistrationList(rmResourceRegistration);
if(registerLst != null && !registerLst.isEmpty()){
RmResourceRegistration registerMsg = registerLst.get(0);
// 赋值 // 赋值
if(nodeMsg != null){ if(registerMsg != null){
initialTrafficData.setServiceSn(getNullableString(nodeMsg, "hardwareSn")); // 根据业务名称查询业务代码
initialTrafficData.setNodeName(getNullableString(nodeMsg, "resourceName")); EpsBusiness epsBusiness = epsBusinessMapper.selectEpsBusinessByName(registerMsg.getBusinessName());
initialTrafficData.setRevenueMethod(getNullableString(nodeMsg, "revenueMethod")); initialTrafficData.setServiceSn(registerMsg.getHardwareSn());
initialTrafficData.setBusinessId(getNullableString(nodeMsg, "businessCode")); initialTrafficData.setRevenueMethod("1");
initialTrafficData.setBusinessName(getNullableString(nodeMsg, "businessName")); initialTrafficData.setBusinessId(epsBusiness.getId());
if("2".equals(nodeMsg.get("revenueMethod") + "") initialTrafficData.setBusinessName(registerMsg.getBusinessName());
&& nodeMsg.containsKey("packageBandwidth")){
Object bandwidth = nodeMsg.get("packageBandwidth");
if (bandwidth instanceof BigDecimal) {
initialTrafficData.setPackageBandwidth((BigDecimal) bandwidth);
}
} }
} }
// id自增 // id自增
@@ -31,6 +31,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where id = #{id} where id = #{id}
</select> </select>
<select id="selectEpsBusinessByName" parameterType="String" resultMap="EpsBusinessResult">
<include refid="selectEpsBusinessVo"/>
where business_name = #{businessName}
limit 1
</select>
<insert id="insertEpsBusiness" parameterType="EpsBusiness"> <insert id="insertEpsBusiness" parameterType="EpsBusiness">
insert into eps_business insert into eps_business
<trim prefix="(" suffix=")" suffixOverrides=","> <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -115,6 +115,19 @@ public class InitialSystemOtherCollectDataServiceImpl implements IInitialSystemO
// 如果返回null,初始化一个空的Map // 如果返回null,初始化一个空的Map
if (map == null) { if (map == null) {
map = new HashMap<>(); map = new HashMap<>();
}else{
String totalMem = String.valueOf(map.getOrDefault("memorySizeTotalCollect", "0"));
map.put("memorySizeTotalCollect",
"0".equals(totalMem) ? null : UnitChangeUtil.convertKbToGb(totalMem));
String freeMem = String.valueOf(map.getOrDefault("systemDiskSizeTotalCollect", "0"));
map.put("systemDiskSizeTotalCollect",
"0".equals(freeMem) ? null : UnitChangeUtil.bytesToGb(freeMem));
String boottime = String.valueOf(map.getOrDefault("systemBoottimeCollect", "0"));
map.put("systemBoottimeCollect",
"0".equals(boottime) ? null : UnitChangeUtil.formatUptime(Long.parseLong(boottime)));
String uptime = String.valueOf(map.getOrDefault("systemUptimeCollect", "0"));
map.put("systemUptimeCollect",
"0".equals(uptime) ? null : UnitChangeUtil.formatUptimeSeconds(Long.parseLong(uptime)));
} }
// 获取cpu数量 // 获取cpu数量
InitialCpuInfo cpuInfo = initialCpuInfoMapper.getCpuInfoByClientId(initialSystemOtherCollectData.getClientId()); InitialCpuInfo cpuInfo = initialCpuInfoMapper.getCpuInfoByClientId(initialSystemOtherCollectData.getClientId());
@@ -168,7 +181,7 @@ public class InitialSystemOtherCollectDataServiceImpl implements IInitialSystemO
List<InitialSystemOtherCollectData> list = initialSystemOtherCollectDataMapper.selectInitialSystemOtherCollectDataList(initialSystemOtherCollectData); List<InitialSystemOtherCollectData> list = initialSystemOtherCollectDataMapper.selectInitialSystemOtherCollectDataList(initialSystemOtherCollectData);
Map<String, Function<InitialSystemOtherCollectData, ?>> extractors = new LinkedHashMap<>(); Map<String, Function<InitialSystemOtherCollectData, ?>> extractors = new LinkedHashMap<>();
extractors.put("memoryUtilizationData", InitialSystemOtherCollectData::getCollectValue); extractors.put("memoryUtilizationData", info -> UnitChangeUtil.formatDecimal(info.getCollectValue()));
return EchartsDataUtils.buildEchartsData(list, InitialSystemOtherCollectData::getCreateTime, extractors); return EchartsDataUtils.buildEchartsData(list, InitialSystemOtherCollectData::getCreateTime, extractors);
} }
@@ -184,7 +197,7 @@ public class InitialSystemOtherCollectDataServiceImpl implements IInitialSystemO
List<InitialSystemOtherCollectData> list = initialSystemOtherCollectDataMapper.selectInitialSystemOtherCollectDataList(initialSystemOtherCollectData); List<InitialSystemOtherCollectData> list = initialSystemOtherCollectDataMapper.selectInitialSystemOtherCollectDataList(initialSystemOtherCollectData);
Map<String, Function<InitialSystemOtherCollectData, ?>> extractors = new LinkedHashMap<>(); Map<String, Function<InitialSystemOtherCollectData, ?>> extractors = new LinkedHashMap<>();
extractors.put("swapSizePercentData", InitialSystemOtherCollectData::getCollectValue); extractors.put("swapSizePercentData", info -> UnitChangeUtil.formatDecimal(info.getCollectValue()));
return EchartsDataUtils.buildEchartsData(list, InitialSystemOtherCollectData::getCreateTime, extractors); return EchartsDataUtils.buildEchartsData(list, InitialSystemOtherCollectData::getCreateTime, extractors);
} }
@@ -223,7 +236,7 @@ public class InitialSystemOtherCollectDataServiceImpl implements IInitialSystemO
List<InitialSystemOtherCollectData> list = initialSystemOtherCollectDataMapper.selectInitialSystemOtherCollectDataList(initialSystemOtherCollectData); List<InitialSystemOtherCollectData> list = initialSystemOtherCollectDataMapper.selectInitialSystemOtherCollectDataList(initialSystemOtherCollectData);
Map<String, Function<InitialSystemOtherCollectData, ?>> extractors = new LinkedHashMap<>(); Map<String, Function<InitialSystemOtherCollectData, ?>> extractors = new LinkedHashMap<>();
extractors.put("memorySizePercentData", InitialSystemOtherCollectData::getCollectValue); extractors.put("memorySizePercentData", info -> UnitChangeUtil.formatDecimal(info.getCollectValue()));
return EchartsDataUtils.buildEchartsData(list, InitialSystemOtherCollectData::getCreateTime, extractors); return EchartsDataUtils.buildEchartsData(list, InitialSystemOtherCollectData::getCreateTime, extractors);
} }
@@ -94,7 +94,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
MAX(CASE WHEN t.collect_type = 'entPhysicalName' THEN t.collect_value END) as entPhysicalName, MAX(CASE WHEN t.collect_type = 'entPhysicalName' THEN t.collect_value END) as entPhysicalName,
MAX(CASE WHEN t.collect_type = 'entPhysicalSoftwareRev' THEN t.collect_value END) as entPhysicalSoftwareRev MAX(CASE WHEN t.collect_type = 'entPhysicalSoftwareRev' THEN t.collect_value END) as entPhysicalSoftwareRev
FROM `initial_switch_other_collect_data` t FROM `initial_switch_other_collect_data` t
INNER JOIN ( LEFT JOIN (
SELECT client_id, MAX(create_time) as max_time SELECT client_id, MAX(create_time) as max_time
FROM `initial_switch_other_collect_data` FROM `initial_switch_other_collect_data`
WHERE client_id = #{clientId} WHERE client_id = #{clientId}
@@ -93,7 +93,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
MAX(CASE WHEN t.collect_type = 'systemLocaltimeCollect' THEN t.collect_value END) as systemLocaltimeCollect, MAX(CASE WHEN t.collect_type = 'systemLocaltimeCollect' THEN t.collect_value END) as systemLocaltimeCollect,
MAX(CASE WHEN t.collect_type = 'systemUptimeCollect' THEN t.collect_value END) as systemUptimeCollect MAX(CASE WHEN t.collect_type = 'systemUptimeCollect' THEN t.collect_value END) as systemUptimeCollect
FROM `initial_system_other_collect_data` t FROM `initial_system_other_collect_data` t
INNER JOIN ( LEFT JOIN (
SELECT client_id, MAX(create_time) as max_time SELECT client_id, MAX(create_time) as max_time
FROM `initial_system_other_collect_data` FROM `initial_system_other_collect_data`
WHERE client_id = #{clientId} WHERE client_id = #{clientId}