Explorar el Código

优化元数据报告请求、实时数据报告请求和曲线数据报告请求三个接口,调整元数据报告请求和曲线数据报告请求的数据项

james hace 4 días
padre
commit
35baedb490

+ 23 - 0
service-vpp/service-vpp-biz/src/main/java/com/usky/vpp/util/VppUnRegisterMetricDefinitions.java

@@ -2,7 +2,9 @@ package com.usky.vpp.util;
 
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Set;
 
 /**
  * 虚拟电厂 RegisterReport 量测点定义(DL/T 1867—2024 表31 MetricName)。
@@ -60,10 +62,31 @@ public final class VppUnRegisterMetricDefinitions {
             LOAD_FORECAST
     ));
 
+    /** MomentData 虚拟电厂维度:实时类 8 项(不含日前申报与负荷预测)。 */
+    public static final Set<String> VPP_MOMENT_METRIC_NAMES = Collections.unmodifiableSet(new LinkedHashSet<>(Arrays.asList(
+            "AP", "AP_E", "AP_PE",
+            "REGULATE_UP", "REGULATE_DOWN", "RESPONSE_TIME", "CONTROL_RATE", "DURATION"
+    )));
+
+    /** IntervalData 虚拟电厂维度:基础 3 项 + 日前申报 5 项 + 负荷预测。 */
+    public static final Set<String> VPP_INTERVAL_METRIC_NAMES = Collections.unmodifiableSet(new LinkedHashSet<>(Arrays.asList(
+            "AP", "AP_E", "AP_PE",
+            "F_REGULATE_UP", "F_REGULATE_DOWN", "F_RESPONSE_TIME", "F_CONTROL_RATE", "F_DURATION",
+            "LOAD_FORECAST_XNDC"
+    )));
+
     public static boolean isLoadForecast(RegisterMetric metric) {
         return metric != null && LOAD_FORECAST.getMetricName().equals(metric.getMetricName());
     }
 
+    public static boolean isMomentMetric(RegisterMetric metric) {
+        return metric != null && VPP_MOMENT_METRIC_NAMES.contains(metric.getMetricName());
+    }
+
+    public static boolean isIntervalMetric(RegisterMetric metric) {
+        return metric != null && VPP_INTERVAL_METRIC_NAMES.contains(metric.getMetricName());
+    }
+
     private VppUnRegisterMetricDefinitions() {
     }
 }

+ 25 - 9
service-vpp/service-vpp-biz/src/main/java/com/usky/vpp/util/VppUnRegisterReportIndex.java

@@ -8,6 +8,7 @@ import org.springframework.util.StringUtils;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Predicate;
 
 /**
  * RegisterReport 量测点 rID 顺序索引(与 MetaDataReport 注册顺序一致)。
@@ -66,28 +67,35 @@ public final class VppUnRegisterReportIndex {
         }
     }
 
-    /** RegisterReport:虚拟电厂全部量测点(含负荷预测)。 */
+    /** RegisterReport:虚拟电厂全部量测点。 */
     public static List<Entry> buildRegisterEntries(VppUnProperties properties,
                                                    List<VppSite> sites,
                                                    List<VppResourcePoint> resources,
                                                    Map<Long, String> deviceUnResourceIdMap) {
-        return buildEntries(properties, sites, resources, deviceUnResourceIdMap, true);
+        return buildEntries(properties, sites, resources, deviceUnResourceIdMap, metric -> true);
     }
 
-    /** MomentData:不含负荷预测。 */
+    /**
+     * MomentData:虚拟电厂 8 项实时量测 + 站点/资源 AP。
+     * 实时:AP、AP_E、AP_PE、上调/下调能力、响应时间、爬坡速度、持续时间。
+     */
     public static List<Entry> buildMomentDataEntries(VppUnProperties properties,
                                                      List<VppSite> sites,
                                                      List<VppResourcePoint> resources,
                                                      Map<Long, String> deviceUnResourceIdMap) {
-        return buildEntries(properties, sites, resources, deviceUnResourceIdMap, false);
+        return buildEntries(properties, sites, resources, deviceUnResourceIdMap,
+                VppUnRegisterMetricDefinitions::isMomentMetric);
     }
 
-    /** IntervalData:含负荷预测(数值与 VPP 有功功率相同)。 */
+    /**
+     * IntervalData:虚拟电厂 9 项(基础 3 + 日前申报 5 + 负荷预测)+ 站点/资源 AP。
+     */
     public static List<Entry> buildIntervalDataEntries(VppUnProperties properties,
                                                        List<VppSite> sites,
                                                        List<VppResourcePoint> resources,
                                                        Map<Long, String> deviceUnResourceIdMap) {
-        return buildEntries(properties, sites, resources, deviceUnResourceIdMap, true);
+        return buildEntries(properties, sites, resources, deviceUnResourceIdMap,
+                VppUnRegisterMetricDefinitions::isIntervalMetric);
     }
 
     @Deprecated
@@ -102,17 +110,26 @@ public final class VppUnRegisterReportIndex {
                                             List<VppSite> sites,
                                             List<VppResourcePoint> resources,
                                             Map<Long, String> deviceUnResourceIdMap,
-                                            boolean includeLoadForecast) {
+                                            Predicate<VppUnRegisterMetricDefinitions.RegisterMetric> vppMetricFilter) {
         List<Entry> entries = new ArrayList<>();
         int rid = 0;
         for (VppUnRegisterMetricDefinitions.RegisterMetric metric
                 : VppUnRegisterMetricDefinitions.VPP_REGISTER_METRICS) {
-            if (!includeLoadForecast && VppUnRegisterMetricDefinitions.isLoadForecast(metric)) {
+            if (!vppMetricFilter.test(metric)) {
                 rid++;
                 continue;
             }
             entries.add(new Entry(rid++, metric, Scope.VPP, null, null));
         }
+        appendSiteAndResourceEntries(entries, rid, sites, resources, deviceUnResourceIdMap);
+        return entries;
+    }
+
+    private static void appendSiteAndResourceEntries(List<Entry> entries,
+                                                     int rid,
+                                                     List<VppSite> sites,
+                                                     List<VppResourcePoint> resources,
+                                                     Map<Long, String> deviceUnResourceIdMap) {
         if (sites != null) {
             for (VppSite site : sites) {
                 if (site == null || !StringUtils.hasText(site.getUnResourceId())) {
@@ -135,7 +152,6 @@ public final class VppUnRegisterReportIndex {
                         Scope.RESOURCE, null, resource));
             }
         }
-        return entries;
     }
 
     private VppUnRegisterReportIndex() {