فهرست منبع

逆变器分析3

xushili 1 سال پیش
والد
کامیت
4375d7a638

+ 28 - 23
power-fitting-JN/src/main/java/com.gyee.power.fitting/dispersionanalysis/PhotovoltaicAnalysisTask.java

@@ -21,6 +21,7 @@ import com.gyee.power.fitting.service.ProBasicEquipmentPointService;
 import com.gyee.power.fitting.service.ProBasicEquipmentService;
 import com.gyee.power.fitting.service.ProEconEquipmentmodelService;
 import com.gyee.power.fitting.service.impl.IvPvCurveFittingService;
+import com.gyee.power.fitting.service.impl.NewIvPvCurveFittingService;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
@@ -28,6 +29,7 @@ import javax.annotation.Resource;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 @Component
 public class PhotovoltaicAnalysisTask {
@@ -47,14 +49,14 @@ public class PhotovoltaicAnalysisTask {
     @Resource
     private InverterPowerAnalysis2 inverterPowerAnalysis;
     @Resource
-    private IvPvCurveFittingService curveFittingService;
+    private NewIvPvCurveFittingService curveFittingService;
     @Resource
     private PhotovoltaicEfficiencyAnalysis2 photovoltaicEfficiencyAnalysis;
     @Resource
     private GyeeConfig gyeeConfig;
 
     //秒 分 时 日 月 周
-    @Scheduled(cron = "0 0 1 * * ?")
+    @Scheduled(cron = "0 51 14 * * ?")
     public void doTask() {
         //获取逆变器
         QueryWrapper<ProBasicEquipment> eWrapper = new QueryWrapper<>();
@@ -73,9 +75,8 @@ public class PhotovoltaicAnalysisTask {
         QueryWrapper<ProBasicEquipmentPoint> rfdlWrapper = new QueryWrapper<>();
         rfdlWrapper.eq("uniform_code", "RFDL").like("windturbine_id", "_IN_");
         List<ProBasicEquipmentPoint> rfdlList = proBasicEquipmentPointService.list(rfdlWrapper);
-        //场站、机型、日发电量测点
-        Map<String, Map<String, String>> rfdlPointsMap = rfdlList.stream().collect(Collectors.groupingBy(ProBasicEquipmentPoint::getWindpowerstationId,
-                Collectors.groupingBy(ProBasicEquipmentPoint::getModelId, Collectors.mapping(ProBasicEquipmentPoint::getNemCode, 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));
@@ -91,7 +92,7 @@ public class PhotovoltaicAnalysisTask {
         QueryWrapper<PhotovoltaicAnalysis> paWrapper = new QueryWrapper<>();
         paWrapper.select("max(data_date) data_date");
         PhotovoltaicAnalysis paList = photovoltaicAnalysisService.getOne(paWrapper);
-        DateRange dateRange = getDateRange(paList.getDataDate());
+        DateRange dateRange = getDateRange(paList);
         if (dateRange == null) return;
 
         for (DateTime dateTime : dateRange) {
@@ -99,16 +100,18 @@ public class PhotovoltaicAnalysisTask {
 
             List<PhotovoltaicAnalysis> photovoltaicAnalyses = new ArrayList<>();
             equipmentMapMap.forEach((stationId, vv) -> {
-                //逆变器,功率数据
-                Map<String, List<PhotovoltaicInfo>> datas2File1 = curveFittingService.getDatas2File1(stationId, dateTime.getTime(), endTime.getTime(), null);
-                //标准点
-                List<PhotovoltaicInfo> bzdList = curveFittingService.standardPointCalculate1(datas2File1);
-                //计算理论功率
-                Map<String, List<PhotovoltaicInfo>> llglInfos = curveFittingService.calculatAnalysis1(bzdList, datas2File1);
-
                 vv.forEach((modelId, equipments) -> {
+                    List<String> nbqs = equipments.stream().map(ProBasicEquipment::getId).collect(Collectors.toList());
+                    //逆变器,功率数据
+                    Map<String, List<PhotovoltaicInfo>> datas2File1 = curveFittingService.getDatas2File1(stationId, nbqs, dateTime.getTime(), endTime.getTime(), 5*60);
+                    //标准点
+                    List<PhotovoltaicInfo> bzdList = curveFittingService.standardPointCalculate1(datas2File1);
+                    //计算理论功率
+                    Map<String, List<PhotovoltaicInfo>> llglInfos = curveFittingService.calculatAnalysis1(bzdList, datas2File1);
+
                     //测点、日发电量
-                    Map<String, TsDoubleData> rfdlMap = remoteService.adaptergf().getHistorySection(rfdlPointsMap.get(stationId).get(modelId), endTime.getTime());
+                    String points = rfdlList.stream().filter(rfdl -> nbqs.contains(rfdl.getWindturbineId())).map(ProBasicEquipmentPoint::getNemCode).collect(Collectors.joining(","));
+                    Map<String, TsDoubleData> rfdlMap = remoteService.adapterfd().getHistorySection(points, endTime.getTime());
 
                     List<PhotovoltaicAnalysis> analysises = new ArrayList<>();
                     //等效发电时之和
@@ -126,11 +129,11 @@ public class PhotovoltaicAnalysisTask {
                         analysis.setDataDate(dateTime.toJdkDate());
 
                         //设备状态
-                        List<TsDoubleData> sbztInfoList = remoteService.adaptergf().getRawValuesByKey(sbztPointMap.get(equipmentId), dateTime.getTime(), endTime.getTime());
+                        List<TsDoubleData> sbztInfoList = remoteService.adapterfd().getRawValuesByKey(sbztPointMap.get(equipmentId), dateTime.getTime(), endTime.getTime());
                         //计算故障导致停机时间
                         double gzdztjSj = calcDowntimeByFailure(sbztInfoList);
                         analysis.setMalfunctionTime(gzdztjSj);
-                        analysis.setDeviceAvailability((24 - gzdztjSj) / 24);
+                        analysis.setDeviceAvailability((24 - gzdztjSj)*100 / 24);
 
                         //日发电量
                         double rfdl = rfdlMap.get(point).getDoubleValue();
@@ -142,10 +145,12 @@ public class PhotovoltaicAnalysisTask {
                         //离散率计算
                         List<PhotovoltaicInfo> lslList = datas2File1.get(equipmentId);
                         //平均功率
-                        double pjGl = lslList.stream().filter(i -> i.getActualP() > 1).mapToDouble(PhotovoltaicInfo::getActualP).average().orElse(0);
+                        List<PhotovoltaicInfo> collect = lslList.stream().filter(i -> i.getActualP() > 1).collect(Collectors.toList());
+                        double pjGl = collect.stream().mapToDouble(PhotovoltaicInfo::getActualP).average().orElse(0);
                         analysis.setAveragePower(pjGl);
                         //平均理论功率
-                        double pjLlgl = llglInfos.get(equipmentId).stream().filter(i -> i.getActualP() > 1).mapToDouble(PhotovoltaicInfo::getIdeaP).average().orElse(0);
+                        List<PhotovoltaicInfo> infoStream = llglInfos.get(equipmentId).stream().filter(i -> i.getIdeaP() > 1).collect(Collectors.toList());
+                        double pjLlgl = infoStream.stream().mapToDouble(PhotovoltaicInfo::getIdeaP).average().orElse(0);
                         analysis.setAverageTheoryPower(pjLlgl);
                         //光伏转换效率
                         double zhxl = photovoltaicEfficiencyAnalysis.calculatePhotovoltaicEfficiency(pjGl, pjLlgl);
@@ -176,8 +181,8 @@ public class PhotovoltaicAnalysisTask {
                 });
             });
             photovoltaicAnalysisService.saveBatch(photovoltaicAnalyses);
-            CsvWriter writer = CsvUtil.getWriter(gyeeConfig.getGfDataPath() + "testWrite.csv", CharsetUtil.CHARSET_UTF_8);
-            writer.write(photovoltaicAnalyses);
+//            CsvWriter writer = CsvUtil.getWriter(gyeeConfig.getGfDataPath() + "testWrite.csv", CharsetUtil.CHARSET_UTF_8);
+//            writer.write(photovoltaicAnalyses);
 
         }
     }
@@ -199,14 +204,14 @@ public class PhotovoltaicAnalysisTask {
         return duration / (1000.0 * 60 * 60);
     }
 
-    private DateRange getDateRange(Date date) {
+    private DateRange getDateRange(PhotovoltaicAnalysis paList) {
         //paList.setDataDate(DateUtil.parse("2023-10-14"));
         DateTime startTime;
         DateTime endTime = DateUtil.beginOfDay(DateUtil.yesterday());
-        if (date == null) {
+        if (paList == null || paList.getDataDate()==null) {
             startTime = endTime;
         } else {
-            startTime = DateUtil.offsetDay(date, 1);
+            startTime = DateUtil.offsetDay(paList.getDataDate(), 1);
             if (startTime.isAfter(endTime)) return null;
         }
         return DateUtil.range(startTime, endTime, DateField.DAY_OF_YEAR);