ソースを参照

优化元数据报告请求、实时数据报告请求和曲线数据报告请求三个接口,元数据报告请求和曲线数据报告增加负荷预测数据项的推送,实时数据报告请求判断不推送负荷预测数据项

james 5 日 前
コミット
ec59766bad

+ 5 - 5
service-vpp/service-vpp-biz/src/main/java/com/usky/vpp/service/impl/VppUnReportServiceImpl.java

@@ -122,7 +122,7 @@ public class VppUnReportServiceImpl implements VppUnReportService {
                         && resource.getDeviceId() != null
                         && StringUtils.hasText(deviceUnResourceIdMap.get(resource.getDeviceId())))
                 .count();
-        log.info("已提交 RegisterReportRequest,虚拟电厂量测点={},站点量测点={},资源点量测点={}",
+        log.info("已提交 RegisterReportRequest,虚拟电厂量测点={},含负荷预测,站点量测点={},资源点量测点={}",
                 VppUnRegisterMetricDefinitions.VPP_REGISTER_METRICS.size(), siteMetricCount, resourceMetricCount);
     }
 
@@ -155,14 +155,14 @@ public class VppUnReportServiceImpl implements VppUnReportService {
                 forecastDate, workday, loadResponseHistoryDates(), requiredCount, LocalDate.now());
 
         LocalDateTime reportTime = LocalDateTime.now();
-        List<VppUnRegisterReportIndex.Entry> entries = VppUnRegisterReportIndex.buildEntries(
+        List<VppUnRegisterReportIndex.Entry> entries = VppUnRegisterReportIndex.buildIntervalDataEntries(
                 properties, sites, resources, deviceUnResourceIdMap);
         List<Map<String, Object>> pointCurveData = new ArrayList<>(entries.size());
         for (VppUnRegisterReportIndex.Entry entry : entries) {
             List<String> deviceUuids = resolveMomentDataDeviceUuids(
                     entry, tenantPeakDeviceUuids, peakDeviceUuidsBySite, deviceMap);
             List<Map<String, Object>> curveValues = VppUnIntervalDataHelper.buildForecastCurveValues(
-                    vppTsdbQueryService, deviceUuids, referenceDates, forecastDate, entry.getMetric());
+                    vppTsdbQueryService, deviceUuids, referenceDates, forecastDate, entry.getDataMetric());
             pointCurveData.add(VppUnMessageBuilder.buildIntervalCurveDataEntry(entry.getRid(), curveValues));
         }
 
@@ -196,14 +196,14 @@ public class VppUnReportServiceImpl implements VppUnReportService {
         LocalDateTime windowEnd = VppUnMomentDataHelper.resolveWindowEnd(LocalDateTime.now());
         LocalDateTime windowStart = VppUnMomentDataHelper.resolveWindowStart(windowEnd);
 
-        List<VppUnRegisterReportIndex.Entry> entries = VppUnRegisterReportIndex.buildEntries(
+        List<VppUnRegisterReportIndex.Entry> entries = VppUnRegisterReportIndex.buildMomentDataEntries(
                 properties, sites, resources, deviceUnResourceIdMap);
         List<Map<String, Object>> pointData = new ArrayList<>(entries.size());
         for (VppUnRegisterReportIndex.Entry entry : entries) {
             List<String> deviceUuids = resolveMomentDataDeviceUuids(
                     entry, tenantPeakDeviceUuids, peakDeviceUuidsBySite, deviceMap);
             BigDecimal value = VppUnMomentDataHelper.aggregateMetricValue(
-                    vppTsdbQueryService, deviceUuids, windowStart, windowEnd, entry.getMetric());
+                    vppTsdbQueryService, deviceUuids, windowStart, windowEnd, entry.getDataMetric());
             pointData.add(VppUnMessageBuilder.buildMomentDataPoint(
                     entry.getRid(), value, windowEnd, "good"));
         }

+ 2 - 2
service-vpp/service-vpp-biz/src/main/java/com/usky/vpp/util/VppUnMessageBuilder.java

@@ -101,7 +101,7 @@ public final class VppUnMessageBuilder {
     }
 
     /**
-     * 构造 RegisterReportRequest:虚拟电厂 13 项量测点 + 站点/资源点有功功率(kW)。
+     * 构造 RegisterReportRequest:虚拟电厂量测点(含负荷预测)+ 站点/资源点有功功率(kW)。
      */
     public static Map<String, Object> buildRegisterReportRequest(VppUnProperties properties,
                                                                  List<VppSite> sites,
@@ -111,7 +111,7 @@ public final class VppUnMessageBuilder {
         req.put("reportRequestID", "MetaDataReport");
         List<Map<String, Object>> reports = new ArrayList<>();
         String createdDateTime = CREATED_DATE_TIME.format(LocalDateTime.now());
-        for (VppUnRegisterReportIndex.Entry entry : VppUnRegisterReportIndex.buildEntries(
+        for (VppUnRegisterReportIndex.Entry entry : VppUnRegisterReportIndex.buildRegisterEntries(
                 properties, sites, resources, deviceUnResourceIdMap)) {
             String resourceId = resolveRegisterResourceId(entry, properties, deviceUnResourceIdMap);
             reports.add(buildVppMetadataReportItem(entry.getRid(), entry.getMetric(), resourceId, createdDateTime));

+ 1 - 0
service-vpp/service-vpp-biz/src/main/java/com/usky/vpp/util/VppUnMomentDataHelper.java

@@ -51,6 +51,7 @@ public final class VppUnMomentDataHelper {
         }
         switch (metric.getMetricName()) {
             case "AP":
+            case "LOAD_FORECAST_XNDC":
                 return VppBaselineHelper.POWER_METRICS;
             case "AP_E":
                 return Collections.singletonList(VppTsdbConstants.METRIC_EPP);

+ 10 - 2
service-vpp/service-vpp-biz/src/main/java/com/usky/vpp/util/VppUnRegisterMetricDefinitions.java

@@ -39,7 +39,10 @@ public final class VppUnRegisterMetricDefinitions {
     /** 站点/资源点注册的有功功率量测点(kW)。 */
     public static final RegisterMetric ACTIVE_POWER = new RegisterMetric("AP", MULTIPLIER_K, "W");
 
-    /** 虚拟电厂需注册的 13 项量测点,resourceID 统一为 dnID。 */
+    /** 虚拟电厂负荷预测(kW)。 */
+    public static final RegisterMetric LOAD_FORECAST = new RegisterMetric("LOAD_FORECAST_XNDC", MULTIPLIER_K, "W");
+
+    /** 虚拟电厂需注册的量测点(含负荷预测),resourceID 统一为 dnID。 */
     public static final List<RegisterMetric> VPP_REGISTER_METRICS = Collections.unmodifiableList(Arrays.asList(
             ACTIVE_POWER,
             new RegisterMetric("AP_E", MULTIPLIER_K, "Wh"),
@@ -53,9 +56,14 @@ public final class VppUnRegisterMetricDefinitions {
             new RegisterMetric("F_REGULATE_DOWN", MULTIPLIER_K, "W"),
             new RegisterMetric("F_RESPONSE_TIME", null, "s"),
             new RegisterMetric("F_CONTROL_RATE", MULTIPLIER_K, "W/min"),
-            new RegisterMetric("F_DURATION", null, "min")
+            new RegisterMetric("F_DURATION", null, "min"),
+            LOAD_FORECAST
     ));
 
+    public static boolean isLoadForecast(RegisterMetric metric) {
+        return metric != null && LOAD_FORECAST.getMetricName().equals(metric.getMetricName());
+    }
+
     private VppUnRegisterMetricDefinitions() {
     }
 }

+ 45 - 0
service-vpp/service-vpp-biz/src/main/java/com/usky/vpp/util/VppUnRegisterReportIndex.java

@@ -56,16 +56,61 @@ public final class VppUnRegisterReportIndex {
         public VppResourcePoint getResource() {
             return resource;
         }
+
+        /** 曲线/实时数据计算时共用的有功功率量测定义(负荷预测与 VPP AP 相同)。 */
+        public VppUnRegisterMetricDefinitions.RegisterMetric getDataMetric() {
+            if (VppUnRegisterMetricDefinitions.isLoadForecast(metric)) {
+                return VppUnRegisterMetricDefinitions.ACTIVE_POWER;
+            }
+            return metric;
+        }
     }
 
+    /** 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);
+    }
+
+    /** MomentData:不含负荷预测。 */
+    public static List<Entry> buildMomentDataEntries(VppUnProperties properties,
+                                                     List<VppSite> sites,
+                                                     List<VppResourcePoint> resources,
+                                                     Map<Long, String> deviceUnResourceIdMap) {
+        return buildEntries(properties, sites, resources, deviceUnResourceIdMap, false);
+    }
+
+    /** IntervalData:含负荷预测(数值与 VPP 有功功率相同)。 */
+    public static List<Entry> buildIntervalDataEntries(VppUnProperties properties,
+                                                       List<VppSite> sites,
+                                                       List<VppResourcePoint> resources,
+                                                       Map<Long, String> deviceUnResourceIdMap) {
+        return buildEntries(properties, sites, resources, deviceUnResourceIdMap, true);
+    }
+
+    @Deprecated
     public static List<Entry> buildEntries(VppUnProperties properties,
                                            List<VppSite> sites,
                                            List<VppResourcePoint> resources,
                                            Map<Long, String> deviceUnResourceIdMap) {
+        return buildMomentDataEntries(properties, sites, resources, deviceUnResourceIdMap);
+    }
+
+    private static List<Entry> buildEntries(VppUnProperties properties,
+                                            List<VppSite> sites,
+                                            List<VppResourcePoint> resources,
+                                            Map<Long, String> deviceUnResourceIdMap,
+                                            boolean includeLoadForecast) {
         List<Entry> entries = new ArrayList<>();
         int rid = 0;
         for (VppUnRegisterMetricDefinitions.RegisterMetric metric
                 : VppUnRegisterMetricDefinitions.VPP_REGISTER_METRICS) {
+            if (!includeLoadForecast && VppUnRegisterMetricDefinitions.isLoadForecast(metric)) {
+                rid++;
+                continue;
+            }
             entries.add(new Entry(rid++, metric, Scope.VPP, null, null));
         }
         if (sites != null) {