|
@@ -0,0 +1,250 @@
|
|
|
+package com.jiayue.biz.job;
|
|
|
+
|
|
|
+
|
|
|
+import cn.hutool.db.Entity;
|
|
|
+import cn.hutool.json.JSONObject;
|
|
|
+import cn.hutool.json.JSONUtil;
|
|
|
+import com.jiayue.biz.api.apiHDY;
|
|
|
+import com.jiayue.biz.domain.*;
|
|
|
+import com.jiayue.biz.service.*;
|
|
|
+import com.jiayue.biz.service.impl.*;
|
|
|
+import com.jiayue.biz.util.CalculationUtil;
|
|
|
+import com.jiayue.biz.util.DateTimeUtil;
|
|
|
+import com.jiayue.common.utils.DateUtil;
|
|
|
+import lombok.AllArgsConstructor;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+
|
|
|
+import org.springframework.data.mongodb.core.MongoTemplate;
|
|
|
+import org.springframework.scheduling.annotation.EnableScheduling;
|
|
|
+import org.springframework.scheduling.annotation.Scheduled;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
+import java.sql.Timestamp;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+@Slf4j
|
|
|
+@Service
|
|
|
+@EnableScheduling
|
|
|
+@AllArgsConstructor
|
|
|
+public class AirDensityJob {
|
|
|
+
|
|
|
+ private final WindTowerCalculationDataServiceImpl windTowerCalculationDataService;
|
|
|
+
|
|
|
+ private final WindTowerInfoServiceImpl windTowerInfoService;
|
|
|
+
|
|
|
+ private final WindDirectionStatisticsDataServiceImpl windDirectionStatisticsDataService;
|
|
|
+
|
|
|
+ private final EquipmentAttributeService equipmentAttributeService;
|
|
|
+
|
|
|
+ private final StatisticsSituationServiceImpl statisticsSituationService;
|
|
|
+
|
|
|
+
|
|
|
+ private final ProphaseAnemometryDataService prophaseAnemometryDataService;
|
|
|
+
|
|
|
+ private final ProphaseWeatherDataService prophaseWeatherDataService;
|
|
|
+
|
|
|
+
|
|
|
+ private final StationInfoService stationInfoService;
|
|
|
+
|
|
|
+ private final MongoTemplate mongoTemplate;
|
|
|
+
|
|
|
+ private final com.jiayue.biz.api.apiHDY apiHDY;
|
|
|
+
|
|
|
+
|
|
|
+ @Scheduled(cron = "0 0 15 * * ?")
|
|
|
+ public void AirDensityCalculation() {
|
|
|
+ List<WindTowerInfo> windTowerInfoList = windTowerInfoService.list();
|
|
|
+ // 统计概述信息
|
|
|
+ List<StatisticsSituation> statisticsSituations = statisticsSituationService.list();
|
|
|
+ // 设备属性信息
|
|
|
+ List<EquipmentAttribute> equipmentAttributeList = equipmentAttributeService.list();
|
|
|
+ //前7天
|
|
|
+ Date startDate = DateTimeUtil.getDayStartTime(new Date().getTime() - 60 * 60 * 24 * 1000 * 8);
|
|
|
+ //前一天23点59分
|
|
|
+ Date endDate = DateTimeUtil.getDayLastTime(DateUtil.yesterday().getTime());
|
|
|
+ //传入时间的月初
|
|
|
+ Date startMonthDate = DateTimeUtil.beginOfMonth(startDate);
|
|
|
+ //传入时间的月末
|
|
|
+ Date endMonthDate = DateTimeUtil.endOfMonth(endDate);
|
|
|
+ for (WindTowerInfo windTowerInfo : windTowerInfoList) {
|
|
|
+ Date sevenDate = startDate;
|
|
|
+ Date startTime = startMonthDate;
|
|
|
+ WindTowerCalculationData lastData = windTowerCalculationDataService.getLastDataCalculation(windTowerInfo.getEquipmentNo());
|
|
|
+ List<Entity> lastRealData = prophaseWeatherDataService.getLastData(windTowerInfo.getEquipmentNo());
|
|
|
+ if (lastData != null && lastRealData != null){
|
|
|
+ Timestamp timestamp = (Timestamp) lastRealData.get(0).get("last (ts)");
|
|
|
+ long lastTime = DateUtil.endOfDay(lastData.getTime()).getTime();
|
|
|
+ long realTime = DateUtil.endOfDay(new Date(timestamp.getTime())).getTime();
|
|
|
+ if(lastTime == realTime){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (realTime - lastTime >= 60 * 60 * 24 * 1000 * 8) {
|
|
|
+ sevenDate = new Date(lastTime);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ if(sevenDate.getTime() < startMonthDate.getTime()){
|
|
|
+ startTime = sevenDate;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //风数据查询
|
|
|
+ List<ProphaseAnemometryData> prophaseAnemometryDataList = prophaseAnemometryDataService.selectAll(windTowerInfo.getEquipmentNo(), new Timestamp(startTime.getTime()), new Timestamp(endDate.getTime()));
|
|
|
+ //环境数据查询
|
|
|
+ List<ProphaseWeatherData> prophaseWeatherDataList = prophaseWeatherDataService.selectPublicData(windTowerInfo.getEquipmentNo(), new Timestamp(startTime.getTime()), new Timestamp(endDate.getTime()));
|
|
|
+ //统计数据
|
|
|
+ List<WindTowerCalculationData> windTowerCalculationDataList = windTowerCalculationDataService.getByBetweenTimeAndEquipmentId(startTime, endDate, windTowerInfo.getEquipmentNo());
|
|
|
+ //小时平均风速风功率密度
|
|
|
+ ArrayList<WindTowerCalculationData> wsAndWpdList = windTowerCalculationDataService.calculateWindPowerDensity(sevenDate.getTime(), endDate.getTime(), windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, prophaseWeatherDataList, equipmentAttributeList, windTowerCalculationDataList);
|
|
|
+ ArrayList<WindTowerCalculationData> dataList = new ArrayList<>(wsAndWpdList);
|
|
|
+ //每小时风切变指数
|
|
|
+ ArrayList<WindTowerCalculationData> windShearList = windTowerCalculationDataService.calculateWindPowerShear(sevenDate, endDate, windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, windTowerCalculationDataList);
|
|
|
+ dataList.addAll(windShearList);
|
|
|
+ //日平均温度
|
|
|
+ ArrayList<WindTowerCalculationData> tList = windTowerCalculationDataService.tDay(sevenDate, endDate, windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList);
|
|
|
+ dataList.addAll(tList);
|
|
|
+ //日平均气压
|
|
|
+ ArrayList<WindTowerCalculationData> paList = windTowerCalculationDataService.paDay(sevenDate, endDate, windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList);
|
|
|
+ dataList.addAll(paList);
|
|
|
+ //发电量与满发小时数
|
|
|
+ ArrayList<WindTowerCalculationData> calculateBattery = windTowerCalculationDataService.calculateBattery(sevenDate.getTime(), endDate.getTime(), windTowerInfo, prophaseAnemometryDataList, equipmentAttributeList, windTowerCalculationDataList);
|
|
|
+ dataList.addAll(calculateBattery);
|
|
|
+ //日平均空气密度
|
|
|
+ ArrayList<WindTowerCalculationData> airList = windTowerCalculationDataService.airDensityDay(sevenDate, endDate, windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList, windTowerCalculationDataList);
|
|
|
+ dataList.addAll(airList);
|
|
|
+ //日平均风速标差
|
|
|
+ ArrayList<WindTowerCalculationData> staDay = windTowerCalculationDataService.calculateStaDay(sevenDate, endDate, windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList, windTowerCalculationDataList);
|
|
|
+ dataList.addAll(staDay);
|
|
|
+ //日平均风速
|
|
|
+ ArrayList<WindTowerCalculationData> wsDayList = windTowerCalculationDataService.wsDay(sevenDate, endDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
|
|
|
+ dataList.addAll(wsDayList);
|
|
|
+ //日平均湍流
|
|
|
+ ArrayList<WindTowerCalculationData> turList = windTowerCalculationDataService.turbulenceDay(sevenDate, endDate, windTowerInfo.getEquipmentNo(), equipmentAttributeList, windTowerInfoList, windTowerCalculationDataList);
|
|
|
+ dataList.addAll(turList);
|
|
|
+ //日平均风切变
|
|
|
+ ArrayList<WindTowerCalculationData> windShearDay = windTowerCalculationDataService.shearDay(sevenDate, endDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
|
|
|
+ dataList.addAll(windShearDay);
|
|
|
+ //日平均风功率密度
|
|
|
+ ArrayList<WindTowerCalculationData> wpdDayList = windTowerCalculationDataService.wpdDay(sevenDate, endDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
|
|
|
+ dataList.addAll(wpdDayList);
|
|
|
+
|
|
|
+
|
|
|
+ //如果结束时间和数据统计的时间相差大于30天就分割月份进行计算
|
|
|
+ if (endDate.getTime() - sevenDate.getTime() > 86400000L * 30) {
|
|
|
+ List<Long> dateTime = DateTimeUtil.getIntervalTimeByMonth(DateTimeUtil.beginOfMonth(sevenDate), DateTimeUtil.beginOfMonth(endDate));
|
|
|
+ for (Long l : dateTime) {
|
|
|
+ //月平均风速
|
|
|
+ ArrayList<WindTowerCalculationData> wsMonth = windTowerCalculationDataService.wsMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
|
|
|
+ dataList.addAll(wsMonth);
|
|
|
+ //月平均风功率密度
|
|
|
+ ArrayList<WindTowerCalculationData> wpdMonth = windTowerCalculationDataService.wpdMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
|
|
|
+ dataList.addAll(wpdMonth);
|
|
|
+ //月平均湍流
|
|
|
+ ArrayList<WindTowerCalculationData> turbulenceMonth = windTowerCalculationDataService.turbulenceMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
|
|
|
+ dataList.addAll(turbulenceMonth);
|
|
|
+ //月平均空气密度
|
|
|
+ ArrayList<WindTowerCalculationData> airDensityMonth = windTowerCalculationDataService.airDensityMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList);
|
|
|
+ dataList.addAll(airDensityMonth);
|
|
|
+ //月最大风速
|
|
|
+ ArrayList<WindTowerCalculationData> wsMaxMonth = windTowerCalculationDataService.wsMaxMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
|
|
|
+ dataList.addAll(wsMaxMonth);
|
|
|
+ //月平均风切变
|
|
|
+ ArrayList<WindTowerCalculationData> shearMonth = windTowerCalculationDataService.shearMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
|
|
|
+ dataList.addAll(shearMonth);
|
|
|
+ //月平均风速标差
|
|
|
+ ArrayList<WindTowerCalculationData> staMonth = windTowerCalculationDataService.staMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
|
|
|
+ dataList.addAll(staMonth);
|
|
|
+ //月玫瑰图
|
|
|
+ windDirectionStatisticsDataService.roseMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, prophaseWeatherDataList, equipmentAttributeList);
|
|
|
+ //月平均环境数据
|
|
|
+ ArrayList<WindTowerCalculationData> environmentData = windTowerCalculationDataService.environmentData(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList);
|
|
|
+ dataList.addAll(environmentData);
|
|
|
+ //空气密度月逐时
|
|
|
+ ArrayList<WindTowerCalculationData> airDensityMonth1 = windTowerCalculationDataService.airDensityMonth(windTowerInfo.getEquipmentNo(), DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), prophaseWeatherDataList);
|
|
|
+ dataList.addAll(airDensityMonth1);
|
|
|
+ //湍流月逐时
|
|
|
+ ArrayList<WindTowerCalculationData> turbulenceHourForMonth = windTowerCalculationDataService.turbulenceHourForMonth(windTowerInfo.getEquipmentNo(), DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
|
|
|
+ dataList.addAll(turbulenceHourForMonth);
|
|
|
+
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //空气密度月逐时
|
|
|
+ ArrayList<WindTowerCalculationData> airDensityMonth = windTowerCalculationDataService.airDensityMonth(windTowerInfo.getEquipmentNo(), startMonthDate, endMonthDate, prophaseWeatherDataList);
|
|
|
+ dataList.addAll(airDensityMonth);
|
|
|
+ //湍流月逐时
|
|
|
+ ArrayList<WindTowerCalculationData> turbulenceHourForMonth = windTowerCalculationDataService.turbulenceHourForMonth(windTowerInfo.getEquipmentNo(), startMonthDate, endMonthDate, prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
|
|
|
+ dataList.addAll(turbulenceHourForMonth);
|
|
|
+ //月平均空气密度
|
|
|
+ ArrayList<WindTowerCalculationData> airDensityMonth1 = windTowerCalculationDataService.airDensityMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList);
|
|
|
+ dataList.addAll(airDensityMonth1);
|
|
|
+ //月平均湍流
|
|
|
+ ArrayList<WindTowerCalculationData> turbulenceMonth = windTowerCalculationDataService.turbulenceMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
|
|
|
+ dataList.addAll(turbulenceMonth);
|
|
|
+ //月平均风速
|
|
|
+ ArrayList<WindTowerCalculationData> wsMonth = windTowerCalculationDataService.wsMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
|
|
|
+ dataList.addAll(wsMonth);
|
|
|
+ //月平均风功率密度
|
|
|
+ ArrayList<WindTowerCalculationData> wpdMonth = windTowerCalculationDataService.wpdMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
|
|
|
+ dataList.addAll(wpdMonth);
|
|
|
+ //月最大风速
|
|
|
+ ArrayList<WindTowerCalculationData> wsMaxMonth = windTowerCalculationDataService.wsMaxMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
|
|
|
+ dataList.addAll(wsMaxMonth);
|
|
|
+ //月平均风切变
|
|
|
+ ArrayList<WindTowerCalculationData> shearMonth = windTowerCalculationDataService.shearMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
|
|
|
+ dataList.addAll(shearMonth);
|
|
|
+ //月平均风速标差
|
|
|
+ ArrayList<WindTowerCalculationData> staMonth = windTowerCalculationDataService.staMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
|
|
|
+ dataList.addAll(staMonth);
|
|
|
+ //月环境数据 温湿压最大最小平均
|
|
|
+ ArrayList<WindTowerCalculationData> environmentData = windTowerCalculationDataService.environmentData(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList);
|
|
|
+ dataList.addAll(environmentData);
|
|
|
+ // 月玫瑰图
|
|
|
+ windDirectionStatisticsDataService.roseMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, prophaseWeatherDataList, equipmentAttributeList);
|
|
|
+
|
|
|
+ }
|
|
|
+ // 统计概述
|
|
|
+ statisticsSituationService.statisticsSituation(windTowerInfo, statisticsSituations, equipmentAttributeList);
|
|
|
+ //保存
|
|
|
+ windTowerCalculationDataService.saveBatchByEquipmentId(dataList, windTowerInfo.getEquipmentNo());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //存储杨总数据 TODO 缺少TD Engine 逻辑
|
|
|
+ public void saveJsonY() {
|
|
|
+ String s = apiHDY.jsonY(DateUtil.format(new Date(),"yyyyMMdd"));
|
|
|
+ List<StationInfo> stationInfos = stationInfoService.selectStationInfo();
|
|
|
+ for (StationInfo stationInfo : stationInfos) {
|
|
|
+ JSONObject jsonObject = JSONUtil.parseObj(s);
|
|
|
+ JSONObject jsonObject1 = JSONUtil.parseObj(jsonObject.get(stationInfo.getStationBasicInfo().getAbbreviation()));
|
|
|
+ FanJsonInfo towerJsonInfo = jsonObject1.toBean(FanJsonInfo.class);
|
|
|
+
|
|
|
+ List<String> collect = stationInfo.getFanTowerList().stream().map(FanTower::getFanModel).distinct().collect(Collectors.toList());
|
|
|
+ String fdn = new BigDecimal(towerJsonInfo.getFd1n()).setScale(2, RoundingMode.HALF_UP).toString();
|
|
|
+ for (String s1 : collect) {
|
|
|
+ if (!s1.contains("MW")) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ String s2 = CalculationUtil.getNumberFromStringForDian(s1);
|
|
|
+ BigDecimal realTimeTotal = new BigDecimal(fdn).divide(new BigDecimal(s2), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
+
|
|
|
+ //一期
|
|
|
+ FanModelData fanModelData = new FanModelData(UUID.randomUUID().toString(), stationInfo.getId(),
|
|
|
+ stationInfo.getStationBasicInfo().getStationName(), s1, stationInfo.getStationBasicInfo().getAbbreviation(),
|
|
|
+ new BigDecimal(towerJsonInfo.getPjfs()).setScale(2, RoundingMode.HALF_UP).toString(), towerJsonInfo.getZfx(),
|
|
|
+ fdn, realTimeTotal.toString());
|
|
|
+
|
|
|
+ fdn = new BigDecimal(towerJsonInfo.getFd2n()).setScale(2, RoundingMode.HALF_UP).toString();
|
|
|
+ mongoTemplate.save(fanModelData);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|