Browse Source

光伏分析

xushili 1 year ago
parent
commit
f1f714aa06

+ 18 - 6
power-fitting-JN/src/main/java/com.gyee.power.fitting/dispersionanalysis/PhotovoltaicAnalysisTask.java

@@ -4,7 +4,11 @@ import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateRange;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.text.csv.CsvUtil;
+import cn.hutool.core.text.csv.CsvWriter;
+import cn.hutool.core.util.CharsetUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.gyee.power.fitting.common.config.GyeeConfig;
 import com.gyee.power.fitting.common.feign.RemoteServiceBuilder;
 import com.gyee.power.fitting.model.PhotovoltaicAnalysis;
 import com.gyee.power.fitting.model.ProBasicEquipment;
@@ -46,6 +50,8 @@ public class PhotovoltaicAnalysisTask {
     private IvPvCurveFittingService curveFittingService;
     @Resource
     private PhotovoltaicEfficiencyAnalysis2 photovoltaicEfficiencyAnalysis;
+    @Resource
+    private GyeeConfig gyeeConfig;
 
     //秒 分 时 日 月 周
     @Scheduled(cron = "0 0 1 * * ?")
@@ -67,7 +73,10 @@ public class PhotovoltaicAnalysisTask {
         QueryWrapper<ProBasicEquipmentPoint> rfdlWrapper = new QueryWrapper<>();
         rfdlWrapper.eq("uniform_code", "RFDL").like("windturbine_id", "_IN_");
         List<ProBasicEquipmentPoint> rfdlList = proBasicEquipmentPointService.list(rfdlWrapper);
-        String rfdlPoints = rfdlList.stream().map(ProBasicEquipmentPoint::getNemCode).collect(Collectors.joining(","));
+        //场站、机型、日发电量测点
+        Map<String, Map<String, String>> rfdlPointsMap = rfdlList.stream().collect(Collectors.groupingBy(ProBasicEquipmentPoint::getWindpowerstationId,
+                Collectors.groupingBy(ProBasicEquipmentPoint::getModelId, Collectors.mapping(ProBasicEquipmentPoint::getNemCode, Collectors.joining(",")))));
+        //String rfdlPoints = rfdlList.stream().map(ProBasicEquipmentPoint::getNemCode).collect(Collectors.joining(","));
         //逆变器id,日发电量测点
         Map<String, String> rfdlPointMap = rfdlList.stream().collect(Collectors.toMap(ProBasicEquipmentPoint::getWindturbineId, ProBasicEquipmentPoint::getNemCode));
 
@@ -84,10 +93,9 @@ public class PhotovoltaicAnalysisTask {
         PhotovoltaicAnalysis paList = photovoltaicAnalysisService.getOne(paWrapper);
         DateRange dateRange = getDateRange(paList.getDataDate());
         if (dateRange == null) return;
+
         for (DateTime dateTime : dateRange) {
             DateTime endTime = dateTime.offsetNew(DateField.DAY_OF_YEAR, 1);
-            //测点、日发电量
-            Map<String, TsDoubleData> rfdlMap = remoteService.adaptergf().getHistorySection(rfdlPoints, endTime.getTime());
 
             List<PhotovoltaicAnalysis> photovoltaicAnalyses = new ArrayList<>();
             equipmentMapMap.forEach((stationId, vv) -> {
@@ -99,6 +107,9 @@ public class PhotovoltaicAnalysisTask {
                 Map<String, List<PhotovoltaicInfo>> llglInfos = curveFittingService.calculatAnalysis1(bzdList, datas2File1);
 
                 vv.forEach((modelId, equipments) -> {
+                    //测点、日发电量
+                    Map<String, TsDoubleData> rfdlMap = remoteService.adaptergf().getHistorySection(rfdlPointsMap.get(stationId).get(modelId), endTime.getTime());
+
                     List<PhotovoltaicAnalysis> analysises = new ArrayList<>();
                     //等效发电时之和
                     AtomicReference<Double> hoursSum = new AtomicReference<>((double) 0);
@@ -165,6 +176,9 @@ public class PhotovoltaicAnalysisTask {
                 });
             });
             photovoltaicAnalysisService.saveBatch(photovoltaicAnalyses);
+            CsvWriter writer = CsvUtil.getWriter(gyeeConfig.getGfDataPath() + "testWrite.csv", CharsetUtil.CHARSET_UTF_8);
+            writer.write(photovoltaicAnalyses);
+
         }
     }
 
@@ -179,10 +193,8 @@ public class PhotovoltaicAnalysisTask {
             int doubleValue = (int) tsPointData.getDoubleValue();
             if (doubleValue == 2 || doubleValue == 3) {
                 duration += faultTime - tsPointData.getTs();
-                faultTime = tsPointData.getTs();
-            } else {
-                faultTime = tsPointData.getTs();
             }
+            faultTime = tsPointData.getTs();
         }
         return duration / (1000.0 * 60 * 60);
     }