123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- 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,prophaseAnemometryDataList);
- 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,prophaseAnemometryDataList);
- 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,prophaseAnemometryDataList);
- 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);
- }
- }
- }
- }
|