|
@@ -22,6 +22,7 @@ import org.springframework.stereotype.Service;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
import java.sql.Timestamp;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -54,87 +55,96 @@ public class AirDensityJob {
|
|
|
private final com.jiayue.biz.api.apiHDY apiHDY;
|
|
|
|
|
|
|
|
|
- @Scheduled(cron = "0 0 15 * * ?")
|
|
|
+ @Scheduled(cron = "0 30 9 * * ?")
|
|
|
public void AirDensityCalculation() {
|
|
|
- List<WindTowerInfo> windTowerInfoList = windTowerInfoService.getAllWindTower();
|
|
|
+ List<WindTowerInfo> windTowerInfoList = windTowerInfoService.list();
|
|
|
// 统计概述信息
|
|
|
List<StatisticsSituation> statisticsSituations = statisticsSituationService.list();
|
|
|
// 设备属性信息
|
|
|
List<EquipmentAttribute> equipmentAttributeList = equipmentAttributeService.list();
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("d");
|
|
|
//前7天
|
|
|
Date startDate = DateTimeUtil.getDayStartTime(new Date().getTime() - 60 * 60 * 24 * 1000 * 8);
|
|
|
+ //如果为月初的前7天 取 月初时间 并且排除掉月初
|
|
|
+ if (Integer.parseInt(sdf.format(new Date())) <= 7 && !sdf.format(new Date()).equals("1")) {
|
|
|
+ startDate = DateUtil.beginOfMonth(new Date());
|
|
|
+ }
|
|
|
//前一天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){
|
|
|
+ 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){
|
|
|
+ //如果两个时间相等则不需要计算
|
|
|
+ if (lastTime == realTime) {
|
|
|
continue;
|
|
|
}
|
|
|
+ //如果邮件的数据比统计数据的时候大8天 则取统计数据的时间作为开始时间
|
|
|
if (realTime - lastTime >= 60 * 60 * 24 * 1000 * 8) {
|
|
|
- sevenDate = new Date(lastTime);
|
|
|
+ startDate = new Date(lastTime);
|
|
|
}
|
|
|
|
|
|
- }
|
|
|
- if(sevenDate.getTime() < startMonthDate.getTime()){
|
|
|
- startTime = sevenDate;
|
|
|
- }
|
|
|
+ } else {
|
|
|
+ List<Entity> firstRealData = prophaseWeatherDataService.getFirstData(windTowerInfo.getEquipmentNo());
|
|
|
+ if(firstRealData.size() > 0){
|
|
|
+ startDate = (Timestamp) firstRealData.get(0).get("first (ts)");
|
|
|
+ }
|
|
|
|
|
|
+ }
|
|
|
+ //传入时间的月初
|
|
|
+ Date startMonthDate = DateTimeUtil.beginOfMonth(startDate);
|
|
|
|
|
|
//风数据查询
|
|
|
- List<ProphaseAnemometryData> prophaseAnemometryDataList = prophaseAnemometryDataService.selectAll(windTowerInfo.getEquipmentNo(), new Timestamp(startTime.getTime()), new Timestamp(endDate.getTime()));
|
|
|
+ List<ProphaseAnemometryData> prophaseAnemometryDataList = prophaseAnemometryDataService.selectAll(windTowerInfo.getEquipmentNo(), new Timestamp(startMonthDate.getTime()), new Timestamp(endMonthDate.getTime()));
|
|
|
//环境数据查询
|
|
|
- List<ProphaseWeatherData> prophaseWeatherDataList = prophaseWeatherDataService.selectPublicData(windTowerInfo.getEquipmentNo(), new Timestamp(startTime.getTime()), new Timestamp(endDate.getTime()));
|
|
|
+ List<ProphaseWeatherData> prophaseWeatherDataList = prophaseWeatherDataService.selectPublicData(windTowerInfo.getEquipmentNo(), new Timestamp(startMonthDate.getTime()), new Timestamp(endMonthDate.getTime()));
|
|
|
//统计数据
|
|
|
- List<WindTowerCalculationData> windTowerCalculationDataList = windTowerCalculationDataService.getByBetweenTimeAndEquipmentId(startTime, endDate, windTowerInfo.getEquipmentNo());
|
|
|
+ List<WindTowerCalculationData> windTowerCalculationDataList = windTowerCalculationDataService.getByBetweenTimeAndEquipmentId(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo());
|
|
|
//小时平均风速风功率密度
|
|
|
- ArrayList<WindTowerCalculationData> wsAndWpdList = windTowerCalculationDataService.calculateWindPowerDensity(sevenDate.getTime(), endDate.getTime(), windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, prophaseWeatherDataList, equipmentAttributeList, windTowerCalculationDataList);
|
|
|
+ ArrayList<WindTowerCalculationData> wsAndWpdList = windTowerCalculationDataService.calculateWindPowerDensity(startDate.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);
|
|
|
+ ArrayList<WindTowerCalculationData> windShearList = windTowerCalculationDataService.calculateWindPowerShear(startDate, endDate, windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, windTowerCalculationDataList);
|
|
|
dataList.addAll(windShearList);
|
|
|
//日平均温度
|
|
|
- ArrayList<WindTowerCalculationData> tList = windTowerCalculationDataService.tDay(sevenDate, endDate, windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList);
|
|
|
+ ArrayList<WindTowerCalculationData> tList = windTowerCalculationDataService.tDay(startDate, endDate, windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList);
|
|
|
dataList.addAll(tList);
|
|
|
//日平均气压
|
|
|
- ArrayList<WindTowerCalculationData> paList = windTowerCalculationDataService.paDay(sevenDate, endDate, windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList);
|
|
|
+ ArrayList<WindTowerCalculationData> paList = windTowerCalculationDataService.paDay(startDate, endDate, windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList);
|
|
|
dataList.addAll(paList);
|
|
|
//发电量与满发小时数
|
|
|
- ArrayList<WindTowerCalculationData> calculateBattery = windTowerCalculationDataService.calculateBattery(sevenDate.getTime(), endDate.getTime(), windTowerInfo, prophaseAnemometryDataList, equipmentAttributeList, windTowerCalculationDataList);
|
|
|
+ ArrayList<WindTowerCalculationData> calculateBattery = windTowerCalculationDataService.calculateBattery(startDate.getTime(), endDate.getTime(), windTowerInfo, prophaseAnemometryDataList, equipmentAttributeList, windTowerCalculationDataList);
|
|
|
dataList.addAll(calculateBattery);
|
|
|
//日平均空气密度
|
|
|
- ArrayList<WindTowerCalculationData> airList = windTowerCalculationDataService.airDensityDay(sevenDate, endDate, windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList, windTowerCalculationDataList);
|
|
|
+ ArrayList<WindTowerCalculationData> airList = windTowerCalculationDataService.airDensityDay(startDate, endDate, windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList, windTowerCalculationDataList);
|
|
|
dataList.addAll(airList);
|
|
|
//日平均风速标差
|
|
|
- ArrayList<WindTowerCalculationData> staDay = windTowerCalculationDataService.calculateStaDay(sevenDate, endDate, windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList, windTowerCalculationDataList);
|
|
|
+ ArrayList<WindTowerCalculationData> staDay = windTowerCalculationDataService.calculateStaDay(startDate, endDate, windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList, windTowerCalculationDataList);
|
|
|
dataList.addAll(staDay);
|
|
|
//日平均风速
|
|
|
- ArrayList<WindTowerCalculationData> wsDayList = windTowerCalculationDataService.wsDay(sevenDate, endDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
|
|
|
+ ArrayList<WindTowerCalculationData> wsDayList = windTowerCalculationDataService.wsDay(startDate, endDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
|
|
|
dataList.addAll(wsDayList);
|
|
|
//日平均湍流
|
|
|
- ArrayList<WindTowerCalculationData> turList = windTowerCalculationDataService.turbulenceDay(sevenDate, endDate, windTowerInfo.getEquipmentNo(), equipmentAttributeList, windTowerInfoList, windTowerCalculationDataList);
|
|
|
+ ArrayList<WindTowerCalculationData> turList = windTowerCalculationDataService.turbulenceDay(startDate, endDate, windTowerInfo.getEquipmentNo(), equipmentAttributeList, windTowerInfoList, windTowerCalculationDataList);
|
|
|
dataList.addAll(turList);
|
|
|
//日平均风切变
|
|
|
- ArrayList<WindTowerCalculationData> windShearDay = windTowerCalculationDataService.shearDay(sevenDate, endDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList,prophaseAnemometryDataList);
|
|
|
+ ArrayList<WindTowerCalculationData> windShearDay = windTowerCalculationDataService.shearDay(startDate, endDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList, prophaseAnemometryDataList);
|
|
|
dataList.addAll(windShearDay);
|
|
|
//日平均风功率密度
|
|
|
- ArrayList<WindTowerCalculationData> wpdDayList = windTowerCalculationDataService.wpdDay(sevenDate, endDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
|
|
|
+ ArrayList<WindTowerCalculationData> wpdDayList = windTowerCalculationDataService.wpdDay(startDate, 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));
|
|
|
+ if (endDate.getTime() - startDate.getTime() > 86400000L * 30) {
|
|
|
+ List<Long> dateTime = DateTimeUtil.getIntervalTimeByMonth(DateTimeUtil.beginOfMonth(startDate), 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);
|
|
@@ -152,7 +162,7 @@ public class AirDensityJob {
|
|
|
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);
|
|
|
+ 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);
|
|
@@ -193,7 +203,7 @@ public class AirDensityJob {
|
|
|
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);
|
|
|
+ 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);
|
|
@@ -214,7 +224,7 @@ public class AirDensityJob {
|
|
|
|
|
|
//存储杨总数据 TODO 缺少TD Engine 逻辑
|
|
|
public void saveJsonY() {
|
|
|
- String s = apiHDY.jsonY(DateUtil.format(new Date(),"yyyyMMdd"));
|
|
|
+ String s = apiHDY.jsonY(DateUtil.format(new Date(), "yyyyMMdd"));
|
|
|
List<StationInfo> stationInfos = stationInfoService.selectStationInfo();
|
|
|
for (StationInfo stationInfo : stationInfos) {
|
|
|
JSONObject jsonObject = JSONUtil.parseObj(s);
|