diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/EchartsDataUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/EchartsDataUtils.java index 8ef88bb..dc40a92 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/EchartsDataUtils.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/EchartsDataUtils.java @@ -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值填充) diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/UnitChangeUtil.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/UnitChangeUtil.java index 5103fd6..495d21c 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/UnitChangeUtil.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/UnitChangeUtil.java @@ -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; // 转换失败返回原字符串 + } + } + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/EpsBusinessMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/EpsBusinessMapper.java index b592288..9fb41e2 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/EpsBusinessMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/EpsBusinessMapper.java @@ -19,6 +19,13 @@ public interface EpsBusinessMapper * @return 业务信息 */ public EpsBusiness selectEpsBusinessById(String id); + /** + * 查询业务代码 + * + * @param businessName 业务名称 + * @return 业务信息 + */ + public EpsBusiness selectEpsBusinessByName(String businessName); /** * 查询业务信息列表 diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EpsNodeBandwidthServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EpsNodeBandwidthServiceImpl.java index 6f137c4..4c75923 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EpsNodeBandwidthServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EpsNodeBandwidthServiceImpl.java @@ -72,6 +72,7 @@ public class EpsNodeBandwidthServiceImpl implements IEpsNodeBandwidthService public PageInfo 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); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EpsServerRevenueConfigServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EpsServerRevenueConfigServiceImpl.java index 88c0ca6..7dc1ac8 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EpsServerRevenueConfigServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EpsServerRevenueConfigServiceImpl.java @@ -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 dataList = epsInitialTrafficDataService.getAllTraficMsg(epsInitialTrafficData); List 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 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自增 diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/EpsBusinessMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/EpsBusinessMapper.xml index d7ac33c..63c3033 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/EpsBusinessMapper.xml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/EpsBusinessMapper.xml @@ -31,6 +31,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where id = #{id} + + insert into eps_business diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialSystemOtherCollectDataServiceImpl.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialSystemOtherCollectDataServiceImpl.java index 11e3e52..b12007a 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialSystemOtherCollectDataServiceImpl.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialSystemOtherCollectDataServiceImpl.java @@ -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 list = initialSystemOtherCollectDataMapper.selectInitialSystemOtherCollectDataList(initialSystemOtherCollectData); Map> 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 list = initialSystemOtherCollectDataMapper.selectInitialSystemOtherCollectDataList(initialSystemOtherCollectData); Map> 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 list = initialSystemOtherCollectDataMapper.selectInitialSystemOtherCollectDataList(initialSystemOtherCollectData); Map> extractors = new LinkedHashMap<>(); - extractors.put("memorySizePercentData", InitialSystemOtherCollectData::getCollectValue); + extractors.put("memorySizePercentData", info -> UnitChangeUtil.formatDecimal(info.getCollectValue())); return EchartsDataUtils.buildEchartsData(list, InitialSystemOtherCollectData::getCreateTime, extractors); } diff --git a/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialSwitchOtherCollectDataMapper.xml b/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialSwitchOtherCollectDataMapper.xml index c9ed335..7ee8304 100644 --- a/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialSwitchOtherCollectDataMapper.xml +++ b/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialSwitchOtherCollectDataMapper.xml @@ -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} diff --git a/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialSystemOtherCollectDataMapper.xml b/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialSystemOtherCollectDataMapper.xml index 5c35e42..503a9ac 100644 --- a/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialSystemOtherCollectDataMapper.xml +++ b/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialSystemOtherCollectDataMapper.xml @@ -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}