Răsfoiți Sursa

运行部分修正

lisonglin 2 săptămâni în urmă
părinte
comite
95ff5dbbb1

+ 36 - 36
services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/service/impl/SeIndicatorServiceImpl.java

@@ -153,7 +153,7 @@ public class SeIndicatorServiceImpl implements SeIndicatorService {
      * 返回 int[2]: [0]=重载事件数, [1]=过载事件数
      */
     private int[] countCurrentEvents(String id, Integer type,
-                                      LocalDateTime start, LocalDateTime end) {
+                                     LocalDateTime start, LocalDateTime end) {
         LambdaQueryWrapper<FhzgSeCurrentEvent> wrapper = new LambdaQueryWrapper<FhzgSeCurrentEvent>()
                 .ge(FhzgSeCurrentEvent::getFirstOverTime, start)
                 .lt(FhzgSeCurrentEvent::getFirstOverTime, end)
@@ -209,23 +209,23 @@ public class SeIndicatorServiceImpl implements SeIndicatorService {
         // 一条 SQL 聚合 16个count字段 + total_over_limit_hours
         QueryWrapper<FhzgDwmVoltageOverLimitDaily> qw = new QueryWrapper<>();
         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)
                 .ge("over_date", startDate.format(DATE_FMT))
                 .le("over_date", endDate.format(DATE_FMT));
@@ -399,6 +399,8 @@ public class SeIndicatorServiceImpl implements SeIndicatorService {
         } else {
             BigDecimal maxLoadRate = BigDecimal.ZERO;
             BigDecimal sumAvg = BigDecimal.ZERO;
+            long sumHeavy = 0;
+            long sumOverload = 0;
             for (FhzgSeCapacityDaily d : dailyRecords) {
                 if (d.getMaxLoadRate() != null && d.getMaxLoadRate().compareTo(maxLoadRate) > 0) {
                     maxLoadRate = d.getMaxLoadRate();
@@ -406,33 +408,31 @@ public class SeIndicatorServiceImpl implements SeIndicatorService {
                 if (d.getAvgLoadRate() != null) {
                     sumAvg = sumAvg.add(d.getAvgLoadRate());
                 }
+                if (d.getHeavyCount() != null) sumHeavy += d.getHeavyCount();
+                if (d.getOverloadCount() != null) sumOverload += d.getOverloadCount();
             }
             BigDecimal avgLoadRate = !dailyRecords.isEmpty()
                     ? sumAvg.divide(BigDecimal.valueOf(dailyRecords.size()), 2, RoundingMode.HALF_UP)
                     : BigDecimal.ZERO;
+            int totalEvents = (int) (sumHeavy + sumOverload);
             vo = SeCapacityDashboardVO.builder()
                     .maxLoadRate(maxLoadRate)
                     .avgLoadRate(avgLoadRate)
+                    .heavyLoadEventCount((int) sumHeavy)
+                    .overloadEventCount((int) sumOverload)
+                    .totalEventCount(totalEvents)
                     .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;
     }
 
@@ -520,4 +520,4 @@ public class SeIndicatorServiceImpl implements SeIndicatorService {
     private int safeInt(Integer v) {
         return v == null ? 0 : v;
     }
-}
+}