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

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

View File

@@ -49,7 +49,7 @@ public class EchartsDataUtils {
* 微秒转秒
*/
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值填充

View File

@@ -2,17 +2,44 @@ package com.ruoyi.common.core.utils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.concurrent.TimeUnit;
public class UnitChangeUtil {
private static final double GB = 1024.0 * 1024.0 * 1024.0;
/**
* long类型字节转化为Gb
* @param bytes
* @return
*/
public static double bytesToGb(long bytes) {
double gb = bytes / GB;
BigDecimal bd = new BigDecimal(gb);
bd = bd.setScale(2, RoundingMode.HALF_UP);
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) {
if (kbValue == null || kbValue.trim().isEmpty()) {
throw new IllegalArgumentException("KB值不能为空");
@@ -26,4 +53,64 @@ public class UnitChangeUtil {
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; // 转换失败返回原字符串
}
}
}

View File

@@ -19,6 +19,13 @@ public interface EpsBusinessMapper
* @return 业务信息
*/
public EpsBusiness selectEpsBusinessById(String id);
/**
* 查询业务代码
*
* @param businessName 业务名称
* @return 业务信息
*/
public EpsBusiness selectEpsBusinessByName(String businessName);
/**
* 查询业务信息列表

View File

@@ -72,6 +72,7 @@ public class EpsNodeBandwidthServiceImpl implements IEpsNodeBandwidthService
public PageInfo<EpsInitialTrafficData> relatedData(EpsNodeBandwidth epsNodeBandwidth, String dailyStartTime, String dailyEndTime) {
// 设置查询条件
EpsInitialTrafficData queryParams = new EpsInitialTrafficData();
queryParams.setClientId(epsNodeBandwidth.getClientId());
queryParams.setServiceSn(epsNodeBandwidth.getHardwareSn());
queryParams.setBusinessId(epsNodeBandwidth.getBusinessId());
queryParams.setStartTime(dailyStartTime);

View File

@@ -4,13 +4,8 @@ import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.domain.AllInterfaceName;
import com.ruoyi.system.domain.EpsInitialTrafficData;
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.domain.*;
import com.ruoyi.system.mapper.*;
import com.ruoyi.system.service.EpsInitialTrafficDataService;
import com.ruoyi.system.service.IEpsServerRevenueConfigService;
import lombok.extern.slf4j.Slf4j;
@@ -18,7 +13,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.*;
/**
@@ -39,6 +33,10 @@ public class EpsServerRevenueConfigServiceImpl implements IEpsServerRevenueConfi
private EpsMethodChangeRecordMapper epsMethodChangeRecordMapper;
@Autowired
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> batchList = new ArrayList<>();
for (EpsInitialTrafficData initialTrafficData : dataList) {
// 根据clientId查询节点名称
Map nodeMsg = epsServerRevenueConfigMapper.getNodeMsgBySn(initialTrafficData.getClientId());
// 赋值
if(nodeMsg != null){
initialTrafficData.setServiceSn(getNullableString(nodeMsg, "hardwareSn"));
initialTrafficData.setNodeName(getNullableString(nodeMsg, "resourceName"));
initialTrafficData.setRevenueMethod(getNullableString(nodeMsg, "revenueMethod"));
initialTrafficData.setBusinessId(getNullableString(nodeMsg, "businessCode"));
initialTrafficData.setBusinessName(getNullableString(nodeMsg, "businessName"));
if("2".equals(nodeMsg.get("revenueMethod") + "")
&& nodeMsg.containsKey("packageBandwidth")){
Object bandwidth = nodeMsg.get("packageBandwidth");
if (bandwidth instanceof BigDecimal) {
initialTrafficData.setPackageBandwidth((BigDecimal) bandwidth);
}
// 根据clientId查询业务名称
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(registerMsg != null){
// 根据业务名称查询业务代码
EpsBusiness epsBusiness = epsBusinessMapper.selectEpsBusinessByName(registerMsg.getBusinessName());
initialTrafficData.setServiceSn(registerMsg.getHardwareSn());
initialTrafficData.setRevenueMethod("1");
initialTrafficData.setBusinessId(epsBusiness.getId());
initialTrafficData.setBusinessName(registerMsg.getBusinessName());
}
}
// id自增

View File

@@ -31,6 +31,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where id = #{id}
</select>
<select id="selectEpsBusinessByName" parameterType="String" resultMap="EpsBusinessResult">
<include refid="selectEpsBusinessVo"/>
where business_name = #{businessName}
limit 1
</select>
<insert id="insertEpsBusiness" parameterType="EpsBusiness">
insert into eps_business
<trim prefix="(" suffix=")" suffixOverrides=",">

View File

@@ -115,6 +115,19 @@ public class InitialSystemOtherCollectDataServiceImpl implements IInitialSystemO
// 如果返回null初始化一个空的Map
if (map == null) {
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数量
InitialCpuInfo cpuInfo = initialCpuInfoMapper.getCpuInfoByClientId(initialSystemOtherCollectData.getClientId());
@@ -168,7 +181,7 @@ public class InitialSystemOtherCollectDataServiceImpl implements IInitialSystemO
List<InitialSystemOtherCollectData> list = initialSystemOtherCollectDataMapper.selectInitialSystemOtherCollectDataList(initialSystemOtherCollectData);
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);
}
@@ -184,7 +197,7 @@ public class InitialSystemOtherCollectDataServiceImpl implements IInitialSystemO
List<InitialSystemOtherCollectData> list = initialSystemOtherCollectDataMapper.selectInitialSystemOtherCollectDataList(initialSystemOtherCollectData);
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);
}
@@ -223,7 +236,7 @@ public class InitialSystemOtherCollectDataServiceImpl implements IInitialSystemO
List<InitialSystemOtherCollectData> list = initialSystemOtherCollectDataMapper.selectInitialSystemOtherCollectDataList(initialSystemOtherCollectData);
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);
}

View File

@@ -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 = 'entPhysicalSoftwareRev' THEN t.collect_value END) as entPhysicalSoftwareRev
FROM `initial_switch_other_collect_data` t
INNER JOIN (
LEFT JOIN (
SELECT client_id, MAX(create_time) as max_time
FROM `initial_switch_other_collect_data`
WHERE client_id = #{clientId}

View File

@@ -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 = 'systemUptimeCollect' THEN t.collect_value END) as systemUptimeCollect
FROM `initial_system_other_collect_data` t
INNER JOIN (
LEFT JOIN (
SELECT client_id, MAX(create_time) as max_time
FROM `initial_system_other_collect_data`
WHERE client_id = #{clientId}