优化95值计算单位、实际流量保留两位小数

This commit is contained in:
gaoyutao
2025-11-04 13:46:05 +08:00
parent b38cd83ee1
commit fe1763386a
13 changed files with 56 additions and 45 deletions
@@ -416,7 +416,7 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
total = total.add(outSpeed);
}
}
return total.setScale(0, RoundingMode.HALF_UP);
return total.setScale(2, RoundingMode.HALF_UP);
}
/**
@@ -601,11 +601,11 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
extractors.put("netOutSpeedData", info ->
info != null && info.getOutSpeed() != null ?
new BigDecimal(info.getOutSpeed()).divide(divisor, 0, RoundingMode.HALF_UP) :
new BigDecimal(info.getOutSpeed()).divide(divisor, 2, RoundingMode.HALF_UP) :
0);
extractors.put("netMachineFlowData", info ->
info != null && info.getMachineFlow() != null ?
new BigDecimal(info.getMachineFlow()).divide(divisor, 0, RoundingMode.HALF_UP) :
new BigDecimal(info.getMachineFlow()).divide(divisor, 2, RoundingMode.HALF_UP) :
0);
extractors.put("percentile95", info ->
info != null && info.getPercentile95() != null ?
@@ -204,7 +204,7 @@ public class EpsTaskStatisticsServiceImpl implements IEpsTaskStatisticsService
EpsTaskStatistics updateData = new EpsTaskStatistics();
updateData.setId(epsTaskStatistics.getId());
updateData.setTaskStatus("2");
updateData.setPercentile95(percentile95.setScale(0, RoundingMode.HALF_UP));
updateData.setPercentile95(percentile95.setScale(2, RoundingMode.HALF_UP));
updateData.setUpdateTime(DateUtils.getNowDate());
epsTaskStatisticsMapper.updateEpsTaskStatistics(updateData);
}
@@ -232,7 +232,7 @@ public class EpsTaskStatisticsServiceImpl implements IEpsTaskStatisticsService
EpsTaskStatistics updateData = new EpsTaskStatistics();
updateData.setId(epsTaskStatistics.getId());
updateData.setTaskStatus("2");
updateData.setPercentile95(percentile95.setScale(0, RoundingMode.HALF_UP));
updateData.setPercentile95(percentile95.setScale(2, RoundingMode.HALF_UP));
updateData.setUpdateTime(DateUtils.getNowDate());
epsTaskStatisticsMapper.updateEpsTaskStatistics(updateData);
}
@@ -262,7 +262,7 @@ public class EpsTaskStatisticsServiceImpl implements IEpsTaskStatisticsService
? epsNodeBandwidth.getStartTime() : epsNodeBandwidth.getMonthTime());
}
// 月均日95值
BigDecimal avgMonthly = sum95Daily.divide(BigDecimal.valueOf(daysInMonth), 0, RoundingMode.HALF_UP);
BigDecimal avgMonthly = sum95Daily.divide(BigDecimal.valueOf(daysInMonth), 2, RoundingMode.HALF_UP);
// 保存计算结果
EpsTaskStatistics updateData = new EpsTaskStatistics();
updateData.setId(epsTaskStatistics.getId());
@@ -506,7 +506,7 @@ public class EpsTaskStatisticsServiceImpl implements IEpsTaskStatisticsService
extractors.put("netOutSpeedData", info ->
info != null && info.getOutSpeed() != null ?
new BigDecimal(info.getOutSpeed()).divide(divisor, 0, RoundingMode.HALF_UP) :
new BigDecimal(info.getOutSpeed()).divide(divisor, 2, RoundingMode.HALF_UP) :
0);
extractors.put("percentile95", info ->
info != null && info.getPercentile95() != null ?
@@ -534,12 +534,12 @@ public class EpsTaskStatisticsServiceImpl implements IEpsTaskStatisticsService
Map<String, Function<InitialSwitchInfoDetails, ?>> extractors = new LinkedHashMap<>();
extractors.put("netInSpeedData", info ->
info != null && info.getInSpeed() != null ?
info.getInSpeed().divide(divisor, 0, RoundingMode.HALF_UP) :
info.getInSpeed().divide(divisor, 2, RoundingMode.HALF_UP) :
0);
extractors.put("netOutSpeedData", info ->
info != null && info.getOutSpeed() != null ?
info.getOutSpeed().divide(divisor, 0, RoundingMode.HALF_UP) :
info.getOutSpeed().divide(divisor, 2, RoundingMode.HALF_UP) :
0);
extractors.put("percentile95", info ->
info != null && info.getPercentile95() != null ?
@@ -470,7 +470,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
total = total.add(inSpeed);
}
}
return total.setScale(0, RoundingMode.HALF_UP);
return total.setScale(2, RoundingMode.HALF_UP);
}
@@ -926,12 +926,12 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
Map<String, Function<InitialSwitchInfoDetails, ?>> extractors = new LinkedHashMap<>();
extractors.put("netInSpeedData", info ->
info != null && info.getInSpeed() != null ?
info.getInSpeed().divide(divisor, 0, RoundingMode.HALF_UP) :
info.getInSpeed().divide(divisor, 2, RoundingMode.HALF_UP) :
0);
extractors.put("netOutSpeedData", info ->
info != null && info.getOutSpeed() != null ?
info.getOutSpeed().divide(divisor, 0, RoundingMode.HALF_UP) :
info.getOutSpeed().divide(divisor, 2, RoundingMode.HALF_UP) :
0);
extractors.put("percentile95", info ->
info != null && info.getPercentile95() != null ?
@@ -40,41 +40,42 @@ public class CalculateUtil {
throw new UnsupportedOperationException("Unknown mode: " + mode);
}
}
// 1000进制换算(最小单位为bit)
// 1000进制换算(最小单位为Mbit
private static BigDecimal convertWithDecimalCoefficients(BigDecimal value, String unit) {
switch (unit) {
case "B/S": // bit per second
return value.divide(new BigDecimal("1000000000"), 2, RoundingMode.HALF_UP); // 10^9
case "KB/S": // Kilobit per second
return value.divide(new BigDecimal("1000000"), 2, RoundingMode.HALF_UP); // 10^6
case "MB/S": // Megabit per second
return value.divide(new BigDecimal("1000"), 2, RoundingMode.HALF_UP); // 10^3
case "GB/S": // Gigabit per second
return value.setScale(2, RoundingMode.HALF_UP); // 10^0
case "TB/S": // Terabit per second
return value.multiply(new BigDecimal("1000")) // 10^3
case "B/S": // bit/s转换为Mbit/s
return value.divide(new BigDecimal("1000000"), 2, RoundingMode.HALF_UP); // 10^6
case "KB/S": // 从Kbit/s转换为Mbit/s
return value.divide(new BigDecimal("1000"), 2, RoundingMode.HALF_UP); // 10^3
case "MB/S": // Mbit/s (基础单位)
return value.setScale(2, RoundingMode.HALF_UP); // 10^0
case "GB/S": // 从Gbit/s转换为Mbit/s
return value.multiply(new BigDecimal("1000")) // 10^3
.setScale(2, RoundingMode.HALF_UP);
case "TB/S": // 从Tbit/s转换为Mbit/s
return value.multiply(new BigDecimal("1000000")) // 10^6
.setScale(2, RoundingMode.HALF_UP);
default:
throw new IllegalArgumentException("Unsupported DECIMAL unit: " + unit);
}
}
// 1024进制换算(最小单位为bit)
// 1024进制换算(最小单位为Mbit
private static BigDecimal convertWithBinaryCoefficients(BigDecimal value, String unit) {
BigDecimal base1024 = new BigDecimal(1024);
BigDecimal base1048576 = base1024.multiply(base1024); // 1024^2 = 1048576
BigDecimal base1073741824 = base1048576.multiply(base1024); // 1024^3 = 1073741824
switch (unit) {
case "B/S": // bit per second
return value.divide(base1073741824, 2, RoundingMode.HALF_UP); // 1024^3
case "KB/S": // Kilobit per second
return value.divide(base1048576, 2, RoundingMode.HALF_UP); // 1024^2
case "MB/S": // Megabit per second
return value.divide(base1024, 2, RoundingMode.HALF_UP); // 1024^1
case "GB/S": // Gigabit per second
return value.setScale(2, RoundingMode.HALF_UP); // 1024^0
case "TB/S": // Terabit per second
return value.multiply(base1024) // 1024^1
case "B/S": // bit/s转换为Mbit/s
return value.divide(base1048576, 2, RoundingMode.HALF_UP); // 1024^2
case "KB/S": // 从Kbit/s转换为Mbit/s
return value.divide(base1024, 2, RoundingMode.HALF_UP); // 1024^1
case "MB/S": // Mbit/s (基础单位)
return value.setScale(2, RoundingMode.HALF_UP); // 1024^0
case "GB/S": // 从Gbit/s转换为Mbit/s
return value.multiply(base1024) // 1024^1
.setScale(2, RoundingMode.HALF_UP);
case "TB/S": // 从Tbit/s转换为Mbit/s
return value.multiply(base1048576) // 1024^2
.setScale(2, RoundingMode.HALF_UP);
default:
throw new IllegalArgumentException("Unsupported BINARY unit: " + unit);
@@ -154,6 +155,7 @@ public class CalculateUtil {
switch (bandwidthType) {
case "1":
case "3":
case "8":
case "5": // 日带宽
return "1";
case "2":