|
@@ -0,0 +1,706 @@
|
|
|
+package com.gyee.gaia.meter.service.saveTDengine;
|
|
|
+
|
|
|
+import cn.hutool.core.date.DateTime;
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.gyee.gaia.meter.adapter.Adapter;
|
|
|
+import com.gyee.gaia.meter.entity.*;
|
|
|
+import com.gyee.gaia.meter.mapper.TDEquipmentMeterInfoMapper;
|
|
|
+import com.gyee.gaia.meter.service.impl.EquipmentServiceImpl;
|
|
|
+import com.gyee.gaia.meter.service.impl.ModelPowerDetailsServiceImpl;
|
|
|
+import com.gyee.gaia.meter.service.impl.TestingPointServiceImpl;
|
|
|
+import org.junit.jupiter.api.Test;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.boot.test.context.SpringBootTest;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+
|
|
|
+ * Author: malijun
|
|
|
+ * Data : 2023: 04: 27
|
|
|
+ **/
|
|
|
+@SpringBootTest
|
|
|
+class TDSaveLLFDLTest {
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ Adapter adapter;
|
|
|
+ @Resource
|
|
|
+ private EquipmentServiceImpl equipmentService;
|
|
|
+ @Resource
|
|
|
+ private ModelPowerDetailsServiceImpl modelPowerDetailsService;
|
|
|
+ @Resource
|
|
|
+ private TestingPointServiceImpl testingPointService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private TDEquipmentMeterInfoMapper tdEquipmentMeterInfoMapper;
|
|
|
+
|
|
|
+ @Value("${start.time}")
|
|
|
+ private String startTimeString;
|
|
|
+ @Value("${end.time}")
|
|
|
+ private String endTimeString;
|
|
|
+
|
|
|
+
|
|
|
+ * 日理论发电量(每台风机,综合到每个场站,每个期次,每条线路)
|
|
|
+ * 1分钟平均风速乘model_power_details的理论功率
|
|
|
+ * w=pt,理论功率乘时间(kw/h)除以60为1分钟理论发电量
|
|
|
+ * pro_basic_equipment表中获取到所有风机,每台风机型号等
|
|
|
+ * uniFormCode AI022 从testing_point中获取到所有风速测点
|
|
|
+ * 从适配器中取1分钟平均风速,根据风速从model_power_details中取到理论功率
|
|
|
+ * 计算1分钟理论发电量
|
|
|
+ * 保存到taos数据库中
|
|
|
+ */
|
|
|
+
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void llfdl_1Min() {
|
|
|
+
|
|
|
+
|
|
|
+ String startString = startTimeString;
|
|
|
+ DateTime startDateTime = DateUtil.parse(startString);
|
|
|
+
|
|
|
+
|
|
|
+ String endDateString = endTimeString;
|
|
|
+ DateTime endDateTime0 = DateUtil.parse(endDateString);
|
|
|
+ DateTime endDateTime = DateUtil.endOfDay(endDateTime0);
|
|
|
+
|
|
|
+
|
|
|
+ List<Equipment> equipmentList = equipmentService.list(new QueryWrapper<Equipment>()
|
|
|
+ .eq("spare1", "WT")
|
|
|
+ );
|
|
|
+
|
|
|
+
|
|
|
+ List<ModelPowerDetails> modelPowerDetailsList = modelPowerDetailsService.list();
|
|
|
+
|
|
|
+
|
|
|
+ Map<String, Map<BigDecimal, Double>> map = new HashMap<>();
|
|
|
+ for (ModelPowerDetails modelPowerDetails : modelPowerDetailsList) {
|
|
|
+ String modelId = modelPowerDetails.getModelId();
|
|
|
+ double speed0 = modelPowerDetails.getSpeed();
|
|
|
+ BigDecimal speed = new BigDecimal(speed0).setScale(2, RoundingMode.HALF_EVEN);
|
|
|
+ Double theoryPower = modelPowerDetails.getTheoryPower();
|
|
|
+
|
|
|
+
|
|
|
+ if (map.containsKey(modelId)) {
|
|
|
+
|
|
|
+ Map<BigDecimal, Double> innerMap = map.get(modelId);
|
|
|
+ innerMap.put(speed, theoryPower);
|
|
|
+ } else {
|
|
|
+
|
|
|
+ Map<BigDecimal, Double> innerMap = new HashMap<>();
|
|
|
+ innerMap.put(speed, theoryPower);
|
|
|
+ map.put(modelId, innerMap);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ List<TestingPoint> testingPointList1 = testingPointService.list(new QueryWrapper<TestingPoint>()
|
|
|
+ .eq("uniform_code", "AI022")
|
|
|
+ );
|
|
|
+
|
|
|
+ List<String> codeList1 = new ArrayList<>();
|
|
|
+ for (TestingPoint testingPoint : testingPointList1) {
|
|
|
+ String code = testingPoint.getCode();
|
|
|
+ codeList1.add(code);
|
|
|
+ }
|
|
|
+
|
|
|
+ for (String code : codeList1) {
|
|
|
+ List<PointDatas> pointDataList = adapter.getHistoryStat(code, startDateTime.getTime(), endDateTime.getTime(), 60);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ List<TestingPoint> testingPointList = testingPointService.list(new QueryWrapper<TestingPoint>()
|
|
|
+ .eq("uniform_code", "AI022")
|
|
|
+ );
|
|
|
+
|
|
|
+ List<String> codeList = new ArrayList<>();
|
|
|
+ for (TestingPoint testingPoint : testingPointList) {
|
|
|
+ String code = testingPoint.getCode();
|
|
|
+ codeList.add(code);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ Map<String, Map<Long, BigDecimal>> map1 = new HashMap<>();
|
|
|
+
|
|
|
+
|
|
|
+ for (String code : codeList) {
|
|
|
+ List<PointDatas> pointDataList = adapter.getHistoryStat(code, startDateTime.getTime(), endDateTime.getTime(), 60);
|
|
|
+
|
|
|
+
|
|
|
+ for (TestingPoint testingPoint : testingPointList) {
|
|
|
+ String code1 = testingPoint.getCode();
|
|
|
+ if (code.equals(code1)) {
|
|
|
+ String thingId = testingPoint.getThingId();
|
|
|
+
|
|
|
+ for (Equipment equipment : equipmentList) {
|
|
|
+ String nemCode = equipment.getNemCode();
|
|
|
+ if (thingId.equals(nemCode)) {
|
|
|
+ String modelId = equipment.getModelId();
|
|
|
+
|
|
|
+ Map<BigDecimal, Double> map2 = map.get(modelId);
|
|
|
+
|
|
|
+ for (PointDatas pointData : pointDataList) {
|
|
|
+
|
|
|
+ double speed0 = pointData.getAvg().getValue();
|
|
|
+ BigDecimal speed = new BigDecimal(speed0).setScale(2, RoundingMode.HALF_EVEN);
|
|
|
+
|
|
|
+ Double theoryPower = 0.0;
|
|
|
+ if (speed0 >= 3 && speed0 <= 25) {
|
|
|
+
|
|
|
+ theoryPower = map2.get(speed);
|
|
|
+ }
|
|
|
+
|
|
|
+ DateTime dateTime = DateTime.of(pointData.getAvg().getTs());
|
|
|
+
|
|
|
+
|
|
|
+ BigDecimal llfdl = BigDecimal.valueOf(0);
|
|
|
+
|
|
|
+ if (theoryPower != null) {
|
|
|
+ llfdl = new BigDecimal(Double.toString(theoryPower))
|
|
|
+ .multiply(new BigDecimal(Double.toString(1)))
|
|
|
+ .divide(new BigDecimal(Double.toString(60)), 2, RoundingMode.HALF_UP);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if (map1.containsKey(nemCode)) {
|
|
|
+
|
|
|
+ Map<Long, BigDecimal> innerMap = map1.get(nemCode);
|
|
|
+ innerMap.put(dateTime.getTime(), llfdl);
|
|
|
+ } else {
|
|
|
+
|
|
|
+ Map<Long, BigDecimal> innerMap = new HashMap<>();
|
|
|
+ innerMap.put(dateTime.getTime(), llfdl);
|
|
|
+ map1.put(nemCode, innerMap);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ HashMap<String, BigDecimal> map2 = new HashMap<>();
|
|
|
+ for (String key : map1.keySet()) {
|
|
|
+ Map<Long, BigDecimal> mapValues = map1.get(key);
|
|
|
+ BigDecimal llfdl = BigDecimal.valueOf(0);
|
|
|
+ for (BigDecimal mapValue : mapValues.values()) {
|
|
|
+ llfdl = llfdl.add(mapValue);
|
|
|
+ }
|
|
|
+ map2.put(key, llfdl);
|
|
|
+ }
|
|
|
+
|
|
|
+ BigDecimal mhsllfdl = BigDecimal.valueOf(0);
|
|
|
+ BigDecimal nssllfdl = BigDecimal.valueOf(0);
|
|
|
+ BigDecimal qsllfdl = BigDecimal.valueOf(0);
|
|
|
+ BigDecimal sbqllfdl = BigDecimal.valueOf(0);
|
|
|
+ BigDecimal xsllfdl = BigDecimal.valueOf(0);
|
|
|
+
|
|
|
+ for (String key : map2.keySet()) {
|
|
|
+ if (key.contains("NX_GDDL_MHS_F_WT_")) {
|
|
|
+ mhsllfdl = mhsllfdl.add(map2.get(key));
|
|
|
+ }
|
|
|
+ if (key.contains("NX_GDDL_NSS_F_WT_")) {
|
|
|
+ nssllfdl = nssllfdl.add(map2.get(key));
|
|
|
+ }
|
|
|
+ if (key.contains("NX_GDDL_QS_F_WT_")) {
|
|
|
+ qsllfdl = qsllfdl.add(map2.get(key));
|
|
|
+ }
|
|
|
+ if (key.contains("NX_GDDL_SBQ_F_WT_")) {
|
|
|
+ sbqllfdl = sbqllfdl.add(map2.get(key));
|
|
|
+ }
|
|
|
+ if (key.contains("NX_GDDL_XS_F_WT_")) {
|
|
|
+ xsllfdl = xsllfdl.add(map2.get(key));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ System.out.println("麻黄山理论发电量:" + mhsllfdl.divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_EVEN));
|
|
|
+ System.out.println("牛首山理论发电量:" + nssllfdl.divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_EVEN));
|
|
|
+ System.out.println("青山理论发电量:" + qsllfdl.divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_EVEN));
|
|
|
+ System.out.println("石板泉理论发电量:" + sbqllfdl.divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_EVEN));
|
|
|
+ System.out.println("香山理论发电量:" + xsllfdl.divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_EVEN));
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ * 理论发电量,每台风机每分钟平均风速乘机型理论功率
|
|
|
+ * (如果理论功率小于实际功率,用实际功率)或者1分钟理论发电量小于1分钟实际发电量,用实际发电量
|
|
|
+ * 1分钟平均风速
|
|
|
+ */
|
|
|
+ @Test
|
|
|
+ public void llfdl_1Min1() {
|
|
|
+
|
|
|
+
|
|
|
+ String startString = startTimeString;
|
|
|
+ DateTime startDateTime0 = DateUtil.parse(startString);
|
|
|
+ DateTime startDateTime = DateUtil.beginOfDay(startDateTime0);
|
|
|
+
|
|
|
+
|
|
|
+ String endDateString = endTimeString;
|
|
|
+ DateTime endDateTime0 = DateUtil.parse(endDateString);
|
|
|
+ DateTime endDateTime = DateUtil.endOfDay(endDateTime0);
|
|
|
+
|
|
|
+
|
|
|
+ int a = 0;
|
|
|
+
|
|
|
+ ArrayList<TDEquipmentMeterInfo> tdEquiomentMeterInfos = new ArrayList<>();
|
|
|
+ ArrayList<TDEquipmentMeterInfo> tdEquiomentMeterInfoSpeed = new ArrayList<>();
|
|
|
+ ArrayList<TDEquipmentMeterInfo> tdEquiomentMeterInfoPower = new ArrayList<>();
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ List<ModelPowerDetails> modelPowerDetailsList = modelPowerDetailsService.list();
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ List<TestingPoint> testingPointList = testingPointService.list(new QueryWrapper<TestingPoint>()
|
|
|
+ .eq("uniform_code", "AI022")
|
|
|
+ );
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ for (TestingPoint testingPoint : testingPointList) {
|
|
|
+ String code = testingPoint.getCode();
|
|
|
+ List<PointDatas> pointDataList = adapter.getHistoryStat(code, startDateTime.getTime(), endDateTime.getTime(), 60);
|
|
|
+
|
|
|
+ System.out.println("风速返回数据:" + pointDataList.size());
|
|
|
+
|
|
|
+ for (PointDatas pointData : pointDataList) {
|
|
|
+
|
|
|
+ double speed0 = pointData.getAvg().getValue();
|
|
|
+ BigDecimal speed = new BigDecimal(speed0).setScale(2, RoundingMode.HALF_EVEN);
|
|
|
+
|
|
|
+
|
|
|
+ long ts0 = pointData.getAvg().getTs();
|
|
|
+ long ts = DateUtil.beginOfMinute(DateTime.of(ts0)).getTime();
|
|
|
+
|
|
|
+ TDEquipmentMeterInfo tdEquiomentMeterInfo = new TDEquipmentMeterInfo();
|
|
|
+ tdEquiomentMeterInfo.setTbName(testingPoint.getThingId());
|
|
|
+ tdEquiomentMeterInfo.setTs(ts);
|
|
|
+ tdEquiomentMeterInfo.setSpeed(speed.doubleValue());
|
|
|
+ tdEquiomentMeterInfo.setActualPower(0);
|
|
|
+ tdEquiomentMeterInfo.setTheoreticalPower(0);
|
|
|
+ tdEquiomentMeterInfo.setModel(testingPoint.getModel());
|
|
|
+ tdEquiomentMeterInfo.setStation(testingPoint.getStationId());
|
|
|
+ tdEquiomentMeterInfoSpeed.add(tdEquiomentMeterInfo);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ List<TestingPoint> testingPointList2 = testingPointService.list(new QueryWrapper<TestingPoint>()
|
|
|
+ .eq("uniform_code", "AI130")
|
|
|
+ .eq("thing_type", "windturbine")
|
|
|
+ );
|
|
|
+
|
|
|
+
|
|
|
+ for (TestingPoint testingPoint : testingPointList2) {
|
|
|
+ String code = testingPoint.getCode();
|
|
|
+ List<PointDatas> pointDataList = adapter.getHistoryStat(code, startDateTime.getTime(), endDateTime.getTime(), 60);
|
|
|
+
|
|
|
+ System.out.println("实际功率返回数据:" + pointDataList.size());
|
|
|
+
|
|
|
+ for (PointDatas pointData : pointDataList) {
|
|
|
+
|
|
|
+ double power = pointData.getAvg().getValue();
|
|
|
+
|
|
|
+
|
|
|
+ long ts0 = pointData.getAvg().getTs();
|
|
|
+ long ts = DateUtil.beginOfMinute(DateTime.of(ts0)).getTime();
|
|
|
+
|
|
|
+ TDEquipmentMeterInfo tdEquiomentMeterInfo = new TDEquipmentMeterInfo();
|
|
|
+ tdEquiomentMeterInfo.setTbName(testingPoint.getThingId());
|
|
|
+ tdEquiomentMeterInfo.setTs(ts);
|
|
|
+ tdEquiomentMeterInfo.setActualPower(power);
|
|
|
+ tdEquiomentMeterInfo.setModel(testingPoint.getModel());
|
|
|
+ tdEquiomentMeterInfo.setStation(testingPoint.getStationId());
|
|
|
+ tdEquiomentMeterInfoPower.add(tdEquiomentMeterInfo);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ System.out.println("tdEquiomentMeterInfoSpeed" + tdEquiomentMeterInfoSpeed.size());
|
|
|
+
|
|
|
+ System.out.println("tdEquiomentMeterInfoPower" + tdEquiomentMeterInfoPower.size());
|
|
|
+
|
|
|
+ for (TDEquipmentMeterInfo speedInfo : tdEquiomentMeterInfoSpeed) {
|
|
|
+ String tbName = speedInfo.getTbName();
|
|
|
+ long ts = speedInfo.getTs();
|
|
|
+ BigDecimal bigDecimal1 = new BigDecimal(ts);
|
|
|
+
|
|
|
+ for (TDEquipmentMeterInfo powerInfo : tdEquiomentMeterInfoPower) {
|
|
|
+ BigDecimal bigDecimal2 = new BigDecimal(powerInfo.getTs());
|
|
|
+ if (powerInfo.getTbName().equals(tbName) && bigDecimal1.equals(bigDecimal2)) {
|
|
|
+ a++;
|
|
|
+ speedInfo.setActualPower(powerInfo.getActualPower());
|
|
|
+
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ for (TDEquipmentMeterInfo tdEquiomentMeterInfo : tdEquiomentMeterInfoSpeed) {
|
|
|
+
|
|
|
+ for (ModelPowerDetails modelPowerDetails : modelPowerDetailsList) {
|
|
|
+ if (tdEquiomentMeterInfo.getSpeed() == modelPowerDetails.getSpeed() && tdEquiomentMeterInfo.getModel().equals(modelPowerDetails.getModelId())) {
|
|
|
+ tdEquiomentMeterInfo.setTheoreticalPower(modelPowerDetails.getEnsurePower());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ tdEquiomentMeterInfoPower.sort(Comparator.comparing(TDEquipmentMeterInfo::getTbName).thenComparing(TDEquipmentMeterInfo::getTs));
|
|
|
+
|
|
|
+ tdEquiomentMeterInfoSpeed.sort(Comparator.comparing(TDEquipmentMeterInfo::getTbName).thenComparing(TDEquipmentMeterInfo::getTs));
|
|
|
+
|
|
|
+
|
|
|
+ double c = 0;
|
|
|
+ double b = 0;
|
|
|
+
|
|
|
+ for (TDEquipmentMeterInfo tDEquiomentMeterInfo : tdEquiomentMeterInfoSpeed) {
|
|
|
+ tDEquiomentMeterInfo.setTheoreticalPowerGeneration(tDEquiomentMeterInfo.getTheoreticalPower() / 60);
|
|
|
+ tDEquiomentMeterInfo.setActualGeneration(tDEquiomentMeterInfo.getActualPower() / 60);
|
|
|
+
|
|
|
+ c = c + tDEquiomentMeterInfo.getTheoreticalPowerGeneration();
|
|
|
+ b = b + tDEquiomentMeterInfo.getActualGeneration();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ System.out.println("理论发电量" + c);
|
|
|
+ System.out.println("实际发电量" + b);
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void llfdl_1Min2() {
|
|
|
+
|
|
|
+
|
|
|
+ String startString = startTimeString;
|
|
|
+ DateTime startDateTime0 = DateUtil.parse(startString);
|
|
|
+ DateTime startDateTime = DateUtil.beginOfDay(startDateTime0);
|
|
|
+
|
|
|
+
|
|
|
+ String endDateString = endTimeString;
|
|
|
+ DateTime endDateTime0 = DateUtil.parse(endDateString);
|
|
|
+
|
|
|
+ DateTime endDateTime = DateUtil.offsetMinute(startDateTime, 1);
|
|
|
+
|
|
|
+ int a = 0;
|
|
|
+
|
|
|
+ ArrayList<TDEquipmentMeterInfo> tdEquiomentMeterInfos = new ArrayList<>();
|
|
|
+ ArrayList<TDEquipmentMeterInfo> tdEquiomentMeterInfoSpeed = new ArrayList<>();
|
|
|
+ ArrayList<TDEquipmentMeterInfo> tdEquiomentMeterInfoPower = new ArrayList<>();
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ List<ModelPowerDetails> modelPowerDetailsList = modelPowerDetailsService.list();
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ List<TestingPoint> testingPointList = testingPointService.list(new QueryWrapper<TestingPoint>()
|
|
|
+ .eq("uniform_code", "AI022")
|
|
|
+ );
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ for (TestingPoint testingPoint : testingPointList) {
|
|
|
+ String code = testingPoint.getCode();
|
|
|
+ List<PointDatas> pointDataList = adapter.getHistoryStat(code, startDateTime.getTime(), endDateTime.getTime(), 60);
|
|
|
+
|
|
|
+ System.out.println("风速返回数据:" + pointDataList.size());
|
|
|
+
|
|
|
+ for (PointDatas pointData : pointDataList) {
|
|
|
+
|
|
|
+ double speed0 = pointData.getAvg().getValue();
|
|
|
+ BigDecimal speed = new BigDecimal(speed0).setScale(2, RoundingMode.HALF_EVEN);
|
|
|
+
|
|
|
+
|
|
|
+ long ts0 = pointData.getAvg().getTs();
|
|
|
+ long ts = DateUtil.beginOfMinute(DateTime.of(ts0)).getTime();
|
|
|
+
|
|
|
+ TDEquipmentMeterInfo tdEquiomentMeterInfo = new TDEquipmentMeterInfo();
|
|
|
+ tdEquiomentMeterInfo.setTbName(testingPoint.getThingId());
|
|
|
+ tdEquiomentMeterInfo.setTs(ts);
|
|
|
+ tdEquiomentMeterInfo.setSpeed(speed.doubleValue());
|
|
|
+ tdEquiomentMeterInfo.setActualPower(0);
|
|
|
+ tdEquiomentMeterInfo.setTheoreticalPower(0);
|
|
|
+ tdEquiomentMeterInfo.setModel(testingPoint.getModel());
|
|
|
+ tdEquiomentMeterInfo.setStation(testingPoint.getStationId());
|
|
|
+ tdEquiomentMeterInfoSpeed.add(tdEquiomentMeterInfo);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ List<TestingPoint> testingPointList2 = testingPointService.list(new QueryWrapper<TestingPoint>()
|
|
|
+ .eq("uniform_code", "AI130")
|
|
|
+ .eq("thing_type", "windturbine")
|
|
|
+ );
|
|
|
+
|
|
|
+
|
|
|
+ for (TestingPoint testingPoint : testingPointList2) {
|
|
|
+ String code = testingPoint.getCode();
|
|
|
+ List<PointDatas> pointDataList = adapter.getHistoryStat(code, startDateTime.getTime(), endDateTime.getTime(), 60);
|
|
|
+
|
|
|
+ System.out.println("实际功率返回数据:" + pointDataList.size());
|
|
|
+
|
|
|
+ for (PointDatas pointData : pointDataList) {
|
|
|
+
|
|
|
+ double power = pointData.getAvg().getValue();
|
|
|
+
|
|
|
+
|
|
|
+ long ts0 = pointData.getAvg().getTs();
|
|
|
+ long ts = DateUtil.beginOfMinute(DateTime.of(ts0)).getTime();
|
|
|
+
|
|
|
+ TDEquipmentMeterInfo tdEquiomentMeterInfo = new TDEquipmentMeterInfo();
|
|
|
+ tdEquiomentMeterInfo.setTbName(testingPoint.getThingId());
|
|
|
+ tdEquiomentMeterInfo.setTs(ts);
|
|
|
+ tdEquiomentMeterInfo.setActualPower(power);
|
|
|
+ tdEquiomentMeterInfo.setModel(testingPoint.getModel());
|
|
|
+ tdEquiomentMeterInfo.setStation(testingPoint.getStationId());
|
|
|
+ tdEquiomentMeterInfoPower.add(tdEquiomentMeterInfo);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ System.out.println("tdEquiomentMeterInfoSpeed" + tdEquiomentMeterInfoSpeed.size());
|
|
|
+
|
|
|
+ System.out.println("tdEquiomentMeterInfoPower" + tdEquiomentMeterInfoPower.size());
|
|
|
+
|
|
|
+ for (TDEquipmentMeterInfo speedInfo : tdEquiomentMeterInfoSpeed) {
|
|
|
+ String tbName = speedInfo.getTbName();
|
|
|
+ long ts = speedInfo.getTs();
|
|
|
+ BigDecimal bigDecimal1 = new BigDecimal(ts);
|
|
|
+
|
|
|
+ for (TDEquipmentMeterInfo powerInfo : tdEquiomentMeterInfoPower) {
|
|
|
+ BigDecimal bigDecimal2 = new BigDecimal(powerInfo.getTs());
|
|
|
+ if (powerInfo.getTbName().equals(tbName) && bigDecimal1.equals(bigDecimal2)) {
|
|
|
+ a++;
|
|
|
+ speedInfo.setActualPower(powerInfo.getActualPower());
|
|
|
+
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ for (TDEquipmentMeterInfo tdEquiomentMeterInfo : tdEquiomentMeterInfoSpeed) {
|
|
|
+
|
|
|
+ for (ModelPowerDetails modelPowerDetails : modelPowerDetailsList) {
|
|
|
+ if (tdEquiomentMeterInfo.getSpeed() == modelPowerDetails.getSpeed() && tdEquiomentMeterInfo.getModel().equals(modelPowerDetails.getModelId())) {
|
|
|
+ tdEquiomentMeterInfo.setTheoreticalPower(modelPowerDetails.getTheoryPower());
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ tdEquiomentMeterInfoPower.sort(Comparator.comparing(TDEquipmentMeterInfo::getTbName).thenComparing(TDEquipmentMeterInfo::getTs));
|
|
|
+ tdEquiomentMeterInfoSpeed.sort(Comparator.comparing(TDEquipmentMeterInfo::getTbName).thenComparing(TDEquipmentMeterInfo::getTs));
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ double c = 0;
|
|
|
+
|
|
|
+ for (TDEquipmentMeterInfo tDEquiomentMeterInfo : tdEquiomentMeterInfoSpeed) {
|
|
|
+
|
|
|
+ tDEquiomentMeterInfo.setActualGeneration(tDEquiomentMeterInfo.getActualPower() / 60);
|
|
|
+
|
|
|
+
|
|
|
+ tDEquiomentMeterInfo.setTheoreticalPowerGeneration(Math.max(tDEquiomentMeterInfo.getTheoreticalPower(), tDEquiomentMeterInfo.getActualPower())/60);
|
|
|
+
|
|
|
+
|
|
|
+ c = c + tDEquiomentMeterInfo.getTheoreticalPowerGeneration();
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ tdEquipmentMeterInfoMapper.insertTDEquiomentMeterInfo(tDEquiomentMeterInfo.getTbName(), tDEquiomentMeterInfo.getModel(), tDEquiomentMeterInfo.getStation(), tDEquiomentMeterInfo.getTs(), tDEquiomentMeterInfo.getSpeed(), tDEquiomentMeterInfo.getTheoreticalPower(), tDEquiomentMeterInfo.getActualPower(), tDEquiomentMeterInfo.getTheoreticalPowerGeneration(), tDEquiomentMeterInfo.getActualGeneration());
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void llfdl_1Min3() {
|
|
|
+
|
|
|
+ DateTime startDateTime = DateUtil.beginOfDay(DateUtil.parse(startTimeString));
|
|
|
+
|
|
|
+
|
|
|
+ DateTime endDateTime = DateUtil.endOfDay(DateUtil.parse(endTimeString));
|
|
|
+
|
|
|
+ ArrayList<TDEquipmentMeterInfo> tdEquiomentMeterInfoSpeed = new ArrayList<>();
|
|
|
+ ArrayList<TDEquipmentMeterInfo> tdEquiomentMeterInfoPower = new ArrayList<>();
|
|
|
+
|
|
|
+
|
|
|
+ List<TestingPoint> testingPointList = testingPointService.list(new QueryWrapper<TestingPoint>()
|
|
|
+ .eq("uniform_code", "AI022")
|
|
|
+ );
|
|
|
+
|
|
|
+
|
|
|
+ testingPointList.parallelStream().forEach(testingPoint -> {
|
|
|
+ String code = testingPoint.getCode();
|
|
|
+ List<PointDatas> pointDataList = adapter.getHistoryStat(code, startDateTime.getTime(), endDateTime.getTime(), 60);
|
|
|
+
|
|
|
+
|
|
|
+ for (PointDatas pointData : pointDataList) {
|
|
|
+
|
|
|
+ double speed0 = pointData.getAvg().getValue();
|
|
|
+ BigDecimal speed = new BigDecimal(speed0).setScale(2, RoundingMode.HALF_EVEN);
|
|
|
+
|
|
|
+
|
|
|
+ long ts0 = pointData.getAvg().getTs();
|
|
|
+ long ts = DateUtil.beginOfMinute(DateTime.of(ts0)).getTime();
|
|
|
+
|
|
|
+ TDEquipmentMeterInfo tdEquiomentMeterInfo = new TDEquipmentMeterInfo();
|
|
|
+ tdEquiomentMeterInfo.setTbName(testingPoint.getThingId());
|
|
|
+ tdEquiomentMeterInfo.setTs(ts);
|
|
|
+ tdEquiomentMeterInfo.setSpeed(speed.doubleValue());
|
|
|
+ tdEquiomentMeterInfo.setActualPower(0);
|
|
|
+ tdEquiomentMeterInfo.setTheoreticalPower(0);
|
|
|
+ tdEquiomentMeterInfo.setModel(testingPoint.getModel());
|
|
|
+ tdEquiomentMeterInfo.setStation(testingPoint.getStationId());
|
|
|
+
|
|
|
+ synchronized (tdEquiomentMeterInfoSpeed) {
|
|
|
+ tdEquiomentMeterInfoSpeed.add(tdEquiomentMeterInfo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+ List<TestingPoint> testingPointList2 = testingPointService.list(new QueryWrapper<TestingPoint>()
|
|
|
+ .eq("uniform_code", "AI130")
|
|
|
+ .eq("thing_type", "windturbine")
|
|
|
+ );
|
|
|
+
|
|
|
+
|
|
|
+ testingPointList2.parallelStream().forEach(testingPoint -> {
|
|
|
+ String code = testingPoint.getCode();
|
|
|
+ List<PointDatas> pointDataList = adapter.getHistoryStat(code, startDateTime.getTime(), endDateTime.getTime(), 60);
|
|
|
+
|
|
|
+
|
|
|
+ for (PointDatas pointData : pointDataList) {
|
|
|
+
|
|
|
+ double power = pointData.getAvg().getValue();
|
|
|
+
|
|
|
+
|
|
|
+ long ts0 = pointData.getAvg().getTs();
|
|
|
+ long ts = DateUtil.beginOfMinute(DateTime.of(ts0)).getTime();
|
|
|
+
|
|
|
+ TDEquipmentMeterInfo tdEquiomentMeterInfo = new TDEquipmentMeterInfo();
|
|
|
+ tdEquiomentMeterInfo.setTbName(testingPoint.getThingId());
|
|
|
+ tdEquiomentMeterInfo.setTs(ts);
|
|
|
+ tdEquiomentMeterInfo.setActualPower(power);
|
|
|
+ tdEquiomentMeterInfo.setModel(testingPoint.getModel());
|
|
|
+ tdEquiomentMeterInfo.setStation(testingPoint.getStationId());
|
|
|
+
|
|
|
+ synchronized (tdEquiomentMeterInfoPower) {
|
|
|
+ tdEquiomentMeterInfoPower.add(tdEquiomentMeterInfo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ Map<String, TDEquipmentMeterInfo> powerInfoMap = new HashMap<>();
|
|
|
+ for (TDEquipmentMeterInfo powerInfo : tdEquiomentMeterInfoPower) {
|
|
|
+ powerInfoMap.put(powerInfo.getTbName() + "_" + powerInfo.getTs(), powerInfo);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ for (TDEquipmentMeterInfo speedInfo : tdEquiomentMeterInfoSpeed) {
|
|
|
+ String tbName = speedInfo.getTbName();
|
|
|
+ long ts = speedInfo.getTs();
|
|
|
+ TDEquipmentMeterInfo powerInfo = powerInfoMap.get(tbName + "_" + ts);
|
|
|
+ if (powerInfo != null) {
|
|
|
+ speedInfo.setActualPower(powerInfo.getActualPower());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ List<ModelPowerDetails> modelPowerDetailsList = modelPowerDetailsService.list();
|
|
|
+
|
|
|
+
|
|
|
+ Set<String> modelSet = new HashSet<>();
|
|
|
+ for (ModelPowerDetails modelPowerDetails : modelPowerDetailsList) {
|
|
|
+ modelSet.add(modelPowerDetails.getModelId());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ for (TDEquipmentMeterInfo tdEquiomentMeterInfo : tdEquiomentMeterInfoSpeed) {
|
|
|
+ if (modelSet.contains(tdEquiomentMeterInfo.getModel())) {
|
|
|
+ for (ModelPowerDetails modelPowerDetails : modelPowerDetailsList) {
|
|
|
+ if (tdEquiomentMeterInfo.getSpeed() == modelPowerDetails.getSpeed() && tdEquiomentMeterInfo.getModel().equals(modelPowerDetails.getModelId())) {
|
|
|
+ if (tdEquiomentMeterInfo.getSpeed() < 4.5) {
|
|
|
+ tdEquiomentMeterInfo.setTheoreticalPower(modelPowerDetails.getEnsurePower());
|
|
|
+ }else {tdEquiomentMeterInfo.setTheoreticalPower(modelPowerDetails.getTheoryPower());
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ double c = 0;
|
|
|
+ double b = 0;
|
|
|
+ double d = 0;
|
|
|
+ for (TDEquipmentMeterInfo tDEquiomentMeterInfo : tdEquiomentMeterInfoSpeed) {
|
|
|
+ tDEquiomentMeterInfo.setTheoreticalPowerGeneration(tDEquiomentMeterInfo.getTheoreticalPower() / 60);
|
|
|
+ tDEquiomentMeterInfo.setActualGeneration(tDEquiomentMeterInfo.getActualPower() / 60);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ double c1 = tDEquiomentMeterInfo.getTheoreticalPowerGeneration();
|
|
|
+
|
|
|
+ c += c1;
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ System.out.println("理论功率功率理论发电量: " + c);
|
|
|
+ System.out.println("实际平均功率发电量: " + b);
|
|
|
+ System.out.println("优化理论发电量发电量: " + d);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|