|
@@ -153,7 +153,7 @@ public class SeIndicatorServiceImpl implements SeIndicatorService {
|
|
|
* 返回 int[2]: [0]=重载事件数, [1]=过载事件数
|
|
* 返回 int[2]: [0]=重载事件数, [1]=过载事件数
|
|
|
*/
|
|
*/
|
|
|
private int[] countCurrentEvents(String id, Integer type,
|
|
private int[] countCurrentEvents(String id, Integer type,
|
|
|
- LocalDateTime start, LocalDateTime end) {
|
|
|
|
|
|
|
+ LocalDateTime start, LocalDateTime end) {
|
|
|
LambdaQueryWrapper<FhzgSeCurrentEvent> wrapper = new LambdaQueryWrapper<FhzgSeCurrentEvent>()
|
|
LambdaQueryWrapper<FhzgSeCurrentEvent> wrapper = new LambdaQueryWrapper<FhzgSeCurrentEvent>()
|
|
|
.ge(FhzgSeCurrentEvent::getFirstOverTime, start)
|
|
.ge(FhzgSeCurrentEvent::getFirstOverTime, start)
|
|
|
.lt(FhzgSeCurrentEvent::getFirstOverTime, end)
|
|
.lt(FhzgSeCurrentEvent::getFirstOverTime, end)
|
|
@@ -209,23 +209,23 @@ public class SeIndicatorServiceImpl implements SeIndicatorService {
|
|
|
// 一条 SQL 聚合 16个count字段 + total_over_limit_hours
|
|
// 一条 SQL 聚合 16个count字段 + total_over_limit_hours
|
|
|
QueryWrapper<FhzgDwmVoltageOverLimitDaily> qw = new QueryWrapper<>();
|
|
QueryWrapper<FhzgDwmVoltageOverLimitDaily> qw = new QueryWrapper<>();
|
|
|
qw.select(
|
|
qw.select(
|
|
|
- "COALESCE(SUM(over_upper_severe_tg_count),0) AS over_upper_severe_tg_count",
|
|
|
|
|
- "COALESCE(SUM(over_upper_severe_cust_count),0) AS over_upper_severe_cust_count",
|
|
|
|
|
- "COALESCE(SUM(over_upper_severe_feeder_count),0) AS over_upper_severe_feeder_count",
|
|
|
|
|
- "COALESCE(SUM(over_upper_severe_generatrix_count),0) AS over_upper_severe_generatrix_count",
|
|
|
|
|
- "COALESCE(SUM(over_upper_mild_tg_count),0) AS over_upper_mild_tg_count",
|
|
|
|
|
- "COALESCE(SUM(over_upper_mild_cust_count),0) AS over_upper_mild_cust_count",
|
|
|
|
|
- "COALESCE(SUM(over_upper_mild_feeder_count),0) AS over_upper_mild_feeder_count",
|
|
|
|
|
- "COALESCE(SUM(over_upper_mild_generatrix_count),0) AS over_upper_mild_generatrix_count",
|
|
|
|
|
- "COALESCE(SUM(over_lower_severe_tg_count),0) AS over_lower_severe_tg_count",
|
|
|
|
|
- "COALESCE(SUM(over_lower_severe_cust_count),0) AS over_lower_severe_cust_count",
|
|
|
|
|
- "COALESCE(SUM(over_lower_severe_feeder_count),0) AS over_lower_severe_feeder_count",
|
|
|
|
|
- "COALESCE(SUM(over_lower_severe_generatrix_count),0) AS over_lower_severe_generatrix_count",
|
|
|
|
|
- "COALESCE(SUM(over_lower_mild_tg_count),0) AS over_lower_mild_tg_count",
|
|
|
|
|
- "COALESCE(SUM(over_lower_mild_cust_count),0) AS over_lower_mild_cust_count",
|
|
|
|
|
- "COALESCE(SUM(over_lower_mild_feeder_count),0) AS over_lower_mild_feeder_count",
|
|
|
|
|
- "COALESCE(SUM(over_lower_mild_generatrix_count),0) AS over_lower_mild_generatrix_count",
|
|
|
|
|
- "COALESCE(SUM(total_over_limit_hours),0) AS total_over_limit_hours")
|
|
|
|
|
|
|
+ "COALESCE(SUM(over_upper_severe_tg_count),0) AS over_upper_severe_tg_count",
|
|
|
|
|
+ "COALESCE(SUM(over_upper_severe_cust_count),0) AS over_upper_severe_cust_count",
|
|
|
|
|
+ "COALESCE(SUM(over_upper_severe_feeder_count),0) AS over_upper_severe_feeder_count",
|
|
|
|
|
+ "COALESCE(SUM(over_upper_severe_generatrix_count),0) AS over_upper_severe_generatrix_count",
|
|
|
|
|
+ "COALESCE(SUM(over_upper_mild_tg_count),0) AS over_upper_mild_tg_count",
|
|
|
|
|
+ "COALESCE(SUM(over_upper_mild_cust_count),0) AS over_upper_mild_cust_count",
|
|
|
|
|
+ "COALESCE(SUM(over_upper_mild_feeder_count),0) AS over_upper_mild_feeder_count",
|
|
|
|
|
+ "COALESCE(SUM(over_upper_mild_generatrix_count),0) AS over_upper_mild_generatrix_count",
|
|
|
|
|
+ "COALESCE(SUM(over_lower_severe_tg_count),0) AS over_lower_severe_tg_count",
|
|
|
|
|
+ "COALESCE(SUM(over_lower_severe_cust_count),0) AS over_lower_severe_cust_count",
|
|
|
|
|
+ "COALESCE(SUM(over_lower_severe_feeder_count),0) AS over_lower_severe_feeder_count",
|
|
|
|
|
+ "COALESCE(SUM(over_lower_severe_generatrix_count),0) AS over_lower_severe_generatrix_count",
|
|
|
|
|
+ "COALESCE(SUM(over_lower_mild_tg_count),0) AS over_lower_mild_tg_count",
|
|
|
|
|
+ "COALESCE(SUM(over_lower_mild_cust_count),0) AS over_lower_mild_cust_count",
|
|
|
|
|
+ "COALESCE(SUM(over_lower_mild_feeder_count),0) AS over_lower_mild_feeder_count",
|
|
|
|
|
+ "COALESCE(SUM(over_lower_mild_generatrix_count),0) AS over_lower_mild_generatrix_count",
|
|
|
|
|
+ "COALESCE(SUM(total_over_limit_hours),0) AS total_over_limit_hours")
|
|
|
.eq("dim_level", dimLevel)
|
|
.eq("dim_level", dimLevel)
|
|
|
.ge("over_date", startDate.format(DATE_FMT))
|
|
.ge("over_date", startDate.format(DATE_FMT))
|
|
|
.le("over_date", endDate.format(DATE_FMT));
|
|
.le("over_date", endDate.format(DATE_FMT));
|
|
@@ -399,6 +399,8 @@ public class SeIndicatorServiceImpl implements SeIndicatorService {
|
|
|
} else {
|
|
} else {
|
|
|
BigDecimal maxLoadRate = BigDecimal.ZERO;
|
|
BigDecimal maxLoadRate = BigDecimal.ZERO;
|
|
|
BigDecimal sumAvg = BigDecimal.ZERO;
|
|
BigDecimal sumAvg = BigDecimal.ZERO;
|
|
|
|
|
+ long sumHeavy = 0;
|
|
|
|
|
+ long sumOverload = 0;
|
|
|
for (FhzgSeCapacityDaily d : dailyRecords) {
|
|
for (FhzgSeCapacityDaily d : dailyRecords) {
|
|
|
if (d.getMaxLoadRate() != null && d.getMaxLoadRate().compareTo(maxLoadRate) > 0) {
|
|
if (d.getMaxLoadRate() != null && d.getMaxLoadRate().compareTo(maxLoadRate) > 0) {
|
|
|
maxLoadRate = d.getMaxLoadRate();
|
|
maxLoadRate = d.getMaxLoadRate();
|
|
@@ -406,33 +408,31 @@ public class SeIndicatorServiceImpl implements SeIndicatorService {
|
|
|
if (d.getAvgLoadRate() != null) {
|
|
if (d.getAvgLoadRate() != null) {
|
|
|
sumAvg = sumAvg.add(d.getAvgLoadRate());
|
|
sumAvg = sumAvg.add(d.getAvgLoadRate());
|
|
|
}
|
|
}
|
|
|
|
|
+ if (d.getHeavyCount() != null) sumHeavy += d.getHeavyCount();
|
|
|
|
|
+ if (d.getOverloadCount() != null) sumOverload += d.getOverloadCount();
|
|
|
}
|
|
}
|
|
|
BigDecimal avgLoadRate = !dailyRecords.isEmpty()
|
|
BigDecimal avgLoadRate = !dailyRecords.isEmpty()
|
|
|
? sumAvg.divide(BigDecimal.valueOf(dailyRecords.size()), 2, RoundingMode.HALF_UP)
|
|
? sumAvg.divide(BigDecimal.valueOf(dailyRecords.size()), 2, RoundingMode.HALF_UP)
|
|
|
: BigDecimal.ZERO;
|
|
: BigDecimal.ZERO;
|
|
|
|
|
+ int totalEvents = (int) (sumHeavy + sumOverload);
|
|
|
vo = SeCapacityDashboardVO.builder()
|
|
vo = SeCapacityDashboardVO.builder()
|
|
|
.maxLoadRate(maxLoadRate)
|
|
.maxLoadRate(maxLoadRate)
|
|
|
.avgLoadRate(avgLoadRate)
|
|
.avgLoadRate(avgLoadRate)
|
|
|
|
|
+ .heavyLoadEventCount((int) sumHeavy)
|
|
|
|
|
+ .overloadEventCount((int) sumOverload)
|
|
|
|
|
+ .totalEventCount(totalEvents)
|
|
|
.build();
|
|
.build();
|
|
|
|
|
+ if (totalEvents > 0) {
|
|
|
|
|
+ vo.setHeavyLoadRate(new BigDecimal(sumHeavy * 100)
|
|
|
|
|
+ .divide(BigDecimal.valueOf(totalEvents), 2, RoundingMode.HALF_UP));
|
|
|
|
|
+ vo.setOverloadRate(new BigDecimal(sumOverload * 100)
|
|
|
|
|
+ .divide(BigDecimal.valueOf(totalEvents), 2, RoundingMode.HALF_UP));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ vo.setHeavyLoadRate(BigDecimal.ZERO);
|
|
|
|
|
+ vo.setOverloadRate(BigDecimal.ZERO);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 2. 重过载事件次数:从事件表统计
|
|
|
|
|
- LocalDateTime rangeStart = startDate.atStartOfDay();
|
|
|
|
|
- LocalDateTime rangeEnd = endDate.atTime(23, 59, 59);
|
|
|
|
|
- int[] eventCounts = countCurrentEvents(id, type, rangeStart, rangeEnd);
|
|
|
|
|
- vo.setHeavyLoadEventCount(eventCounts[0]);
|
|
|
|
|
- vo.setOverloadEventCount(eventCounts[1]);
|
|
|
|
|
- int totalEvents = eventCounts[0] + eventCounts[1];
|
|
|
|
|
- vo.setTotalEventCount(totalEvents);
|
|
|
|
|
- if (totalEvents > 0) {
|
|
|
|
|
- vo.setHeavyLoadRate(new BigDecimal(eventCounts[0] * 100)
|
|
|
|
|
- .divide(BigDecimal.valueOf(totalEvents), 2, RoundingMode.HALF_UP));
|
|
|
|
|
- vo.setOverloadRate(new BigDecimal(eventCounts[1] * 100)
|
|
|
|
|
- .divide(BigDecimal.valueOf(totalEvents), 2, RoundingMode.HALF_UP));
|
|
|
|
|
- } else {
|
|
|
|
|
- vo.setHeavyLoadRate(BigDecimal.ZERO);
|
|
|
|
|
- vo.setOverloadRate(BigDecimal.ZERO);
|
|
|
|
|
- }
|
|
|
|
|
return vo;
|
|
return vo;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -520,4 +520,4 @@ public class SeIndicatorServiceImpl implements SeIndicatorService {
|
|
|
private int safeInt(Integer v) {
|
|
private int safeInt(Integer v) {
|
|
|
return v == null ? 0 : v;
|
|
return v == null ? 0 : v;
|
|
|
}
|
|
}
|
|
|
-}
|
|
|
|
|
|
|
+}
|