AirDensityJob.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. package com.jiayue.biz.job;
  2. import cn.hutool.db.Entity;
  3. import cn.hutool.json.JSONObject;
  4. import cn.hutool.json.JSONUtil;
  5. import com.jiayue.biz.api.apiHDY;
  6. import com.jiayue.biz.domain.*;
  7. import com.jiayue.biz.service.*;
  8. import com.jiayue.biz.service.impl.*;
  9. import com.jiayue.biz.util.CalculationUtil;
  10. import com.jiayue.biz.util.DateTimeUtil;
  11. import com.jiayue.common.utils.DateUtil;
  12. import lombok.AllArgsConstructor;
  13. import lombok.extern.slf4j.Slf4j;
  14. import org.springframework.data.mongodb.core.MongoTemplate;
  15. import org.springframework.scheduling.annotation.EnableScheduling;
  16. import org.springframework.scheduling.annotation.Scheduled;
  17. import org.springframework.stereotype.Service;
  18. import java.math.BigDecimal;
  19. import java.math.RoundingMode;
  20. import java.sql.Timestamp;
  21. import java.util.*;
  22. import java.util.stream.Collectors;
  23. @Slf4j
  24. @Service
  25. @EnableScheduling
  26. @AllArgsConstructor
  27. public class AirDensityJob {
  28. private final WindTowerCalculationDataServiceImpl windTowerCalculationDataService;
  29. private final WindTowerInfoServiceImpl windTowerInfoService;
  30. private final WindDirectionStatisticsDataServiceImpl windDirectionStatisticsDataService;
  31. private final EquipmentAttributeService equipmentAttributeService;
  32. private final StatisticsSituationServiceImpl statisticsSituationService;
  33. private final ProphaseAnemometryDataService prophaseAnemometryDataService;
  34. private final ProphaseWeatherDataService prophaseWeatherDataService;
  35. private final StationInfoService stationInfoService;
  36. private final MongoTemplate mongoTemplate;
  37. private final com.jiayue.biz.api.apiHDY apiHDY;
  38. @Scheduled(cron = "0 0 15 * * ?")
  39. public void AirDensityCalculation() {
  40. List<WindTowerInfo> windTowerInfoList = windTowerInfoService.list();
  41. // 统计概述信息
  42. List<StatisticsSituation> statisticsSituations = statisticsSituationService.list();
  43. // 设备属性信息
  44. List<EquipmentAttribute> equipmentAttributeList = equipmentAttributeService.list();
  45. //前7天
  46. Date startDate = DateTimeUtil.getDayStartTime(new Date().getTime() - 60 * 60 * 24 * 1000 * 8);
  47. //前一天23点59分
  48. Date endDate = DateTimeUtil.getDayLastTime(DateUtil.yesterday().getTime());
  49. //传入时间的月初
  50. Date startMonthDate = DateTimeUtil.beginOfMonth(startDate);
  51. //传入时间的月末
  52. Date endMonthDate = DateTimeUtil.endOfMonth(endDate);
  53. for (WindTowerInfo windTowerInfo : windTowerInfoList) {
  54. Date sevenDate = startDate;
  55. Date startTime = startMonthDate;
  56. WindTowerCalculationData lastData = windTowerCalculationDataService.getLastDataCalculation(windTowerInfo.getEquipmentNo());
  57. List<Entity> lastRealData = prophaseWeatherDataService.getLastData(windTowerInfo.getEquipmentNo());
  58. if (lastData != null && lastRealData != null){
  59. Timestamp timestamp = (Timestamp) lastRealData.get(0).get("last (ts)");
  60. long lastTime = DateUtil.endOfDay(lastData.getTime()).getTime();
  61. long realTime = DateUtil.endOfDay(new Date(timestamp.getTime())).getTime();
  62. if(lastTime == realTime){
  63. continue;
  64. }
  65. if (realTime - lastTime >= 60 * 60 * 24 * 1000 * 8) {
  66. sevenDate = new Date(lastTime);
  67. }
  68. }
  69. if(sevenDate.getTime() < startMonthDate.getTime()){
  70. startTime = sevenDate;
  71. }
  72. //风数据查询
  73. List<ProphaseAnemometryData> prophaseAnemometryDataList = prophaseAnemometryDataService.selectAll(windTowerInfo.getEquipmentNo(), new Timestamp(startTime.getTime()), new Timestamp(endDate.getTime()));
  74. //环境数据查询
  75. List<ProphaseWeatherData> prophaseWeatherDataList = prophaseWeatherDataService.selectPublicData(windTowerInfo.getEquipmentNo(), new Timestamp(startTime.getTime()), new Timestamp(endDate.getTime()));
  76. //统计数据
  77. List<WindTowerCalculationData> windTowerCalculationDataList = windTowerCalculationDataService.getByBetweenTimeAndEquipmentId(startTime, endDate, windTowerInfo.getEquipmentNo());
  78. //小时平均风速风功率密度
  79. ArrayList<WindTowerCalculationData> wsAndWpdList = windTowerCalculationDataService.calculateWindPowerDensity(sevenDate.getTime(), endDate.getTime(), windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, prophaseWeatherDataList, equipmentAttributeList, windTowerCalculationDataList);
  80. ArrayList<WindTowerCalculationData> dataList = new ArrayList<>(wsAndWpdList);
  81. //每小时风切变指数
  82. ArrayList<WindTowerCalculationData> windShearList = windTowerCalculationDataService.calculateWindPowerShear(sevenDate, endDate, windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, windTowerCalculationDataList);
  83. dataList.addAll(windShearList);
  84. //日平均温度
  85. ArrayList<WindTowerCalculationData> tList = windTowerCalculationDataService.tDay(sevenDate, endDate, windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList);
  86. dataList.addAll(tList);
  87. //日平均气压
  88. ArrayList<WindTowerCalculationData> paList = windTowerCalculationDataService.paDay(sevenDate, endDate, windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList);
  89. dataList.addAll(paList);
  90. //发电量与满发小时数
  91. ArrayList<WindTowerCalculationData> calculateBattery = windTowerCalculationDataService.calculateBattery(sevenDate.getTime(), endDate.getTime(), windTowerInfo, prophaseAnemometryDataList, equipmentAttributeList, windTowerCalculationDataList);
  92. dataList.addAll(calculateBattery);
  93. //日平均空气密度
  94. ArrayList<WindTowerCalculationData> airList = windTowerCalculationDataService.airDensityDay(sevenDate, endDate, windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList, windTowerCalculationDataList);
  95. dataList.addAll(airList);
  96. //日平均风速标差
  97. ArrayList<WindTowerCalculationData> staDay = windTowerCalculationDataService.calculateStaDay(sevenDate, endDate, windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList, windTowerCalculationDataList);
  98. dataList.addAll(staDay);
  99. //日平均风速
  100. ArrayList<WindTowerCalculationData> wsDayList = windTowerCalculationDataService.wsDay(sevenDate, endDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
  101. dataList.addAll(wsDayList);
  102. //日平均湍流
  103. ArrayList<WindTowerCalculationData> turList = windTowerCalculationDataService.turbulenceDay(sevenDate, endDate, windTowerInfo.getEquipmentNo(), equipmentAttributeList, windTowerInfoList, windTowerCalculationDataList);
  104. dataList.addAll(turList);
  105. //日平均风切变
  106. ArrayList<WindTowerCalculationData> windShearDay = windTowerCalculationDataService.shearDay(sevenDate, endDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList,prophaseAnemometryDataList);
  107. dataList.addAll(windShearDay);
  108. //日平均风功率密度
  109. ArrayList<WindTowerCalculationData> wpdDayList = windTowerCalculationDataService.wpdDay(sevenDate, endDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
  110. dataList.addAll(wpdDayList);
  111. //如果结束时间和数据统计的时间相差大于30天就分割月份进行计算
  112. if (endDate.getTime() - sevenDate.getTime() > 86400000L * 30) {
  113. List<Long> dateTime = DateTimeUtil.getIntervalTimeByMonth(DateTimeUtil.beginOfMonth(sevenDate), DateTimeUtil.beginOfMonth(endDate));
  114. for (Long l : dateTime) {
  115. //月平均风速
  116. ArrayList<WindTowerCalculationData> wsMonth = windTowerCalculationDataService.wsMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
  117. dataList.addAll(wsMonth);
  118. //月平均风功率密度
  119. ArrayList<WindTowerCalculationData> wpdMonth = windTowerCalculationDataService.wpdMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
  120. dataList.addAll(wpdMonth);
  121. //月平均湍流
  122. ArrayList<WindTowerCalculationData> turbulenceMonth = windTowerCalculationDataService.turbulenceMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
  123. dataList.addAll(turbulenceMonth);
  124. //月平均空气密度
  125. ArrayList<WindTowerCalculationData> airDensityMonth = windTowerCalculationDataService.airDensityMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList);
  126. dataList.addAll(airDensityMonth);
  127. //月最大风速
  128. ArrayList<WindTowerCalculationData> wsMaxMonth = windTowerCalculationDataService.wsMaxMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
  129. dataList.addAll(wsMaxMonth);
  130. //月平均风切变
  131. ArrayList<WindTowerCalculationData> shearMonth = windTowerCalculationDataService.shearMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList,prophaseAnemometryDataList);
  132. dataList.addAll(shearMonth);
  133. //月平均风速标差
  134. ArrayList<WindTowerCalculationData> staMonth = windTowerCalculationDataService.staMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
  135. dataList.addAll(staMonth);
  136. //月玫瑰图
  137. windDirectionStatisticsDataService.roseMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, prophaseWeatherDataList, equipmentAttributeList);
  138. //月平均环境数据
  139. ArrayList<WindTowerCalculationData> environmentData = windTowerCalculationDataService.environmentData(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList);
  140. dataList.addAll(environmentData);
  141. //空气密度月逐时
  142. ArrayList<WindTowerCalculationData> airDensityMonth1 = windTowerCalculationDataService.airDensityMonth(windTowerInfo.getEquipmentNo(), DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), prophaseWeatherDataList);
  143. dataList.addAll(airDensityMonth1);
  144. //湍流月逐时
  145. ArrayList<WindTowerCalculationData> turbulenceHourForMonth = windTowerCalculationDataService.turbulenceHourForMonth(windTowerInfo.getEquipmentNo(), DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
  146. dataList.addAll(turbulenceHourForMonth);
  147. }
  148. } else {
  149. //空气密度月逐时
  150. ArrayList<WindTowerCalculationData> airDensityMonth = windTowerCalculationDataService.airDensityMonth(windTowerInfo.getEquipmentNo(), startMonthDate, endMonthDate, prophaseWeatherDataList);
  151. dataList.addAll(airDensityMonth);
  152. //湍流月逐时
  153. ArrayList<WindTowerCalculationData> turbulenceHourForMonth = windTowerCalculationDataService.turbulenceHourForMonth(windTowerInfo.getEquipmentNo(), startMonthDate, endMonthDate, prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
  154. dataList.addAll(turbulenceHourForMonth);
  155. //月平均空气密度
  156. ArrayList<WindTowerCalculationData> airDensityMonth1 = windTowerCalculationDataService.airDensityMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList);
  157. dataList.addAll(airDensityMonth1);
  158. //月平均湍流
  159. ArrayList<WindTowerCalculationData> turbulenceMonth = windTowerCalculationDataService.turbulenceMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
  160. dataList.addAll(turbulenceMonth);
  161. //月平均风速
  162. ArrayList<WindTowerCalculationData> wsMonth = windTowerCalculationDataService.wsMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
  163. dataList.addAll(wsMonth);
  164. //月平均风功率密度
  165. ArrayList<WindTowerCalculationData> wpdMonth = windTowerCalculationDataService.wpdMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
  166. dataList.addAll(wpdMonth);
  167. //月最大风速
  168. ArrayList<WindTowerCalculationData> wsMaxMonth = windTowerCalculationDataService.wsMaxMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
  169. dataList.addAll(wsMaxMonth);
  170. //月平均风切变
  171. ArrayList<WindTowerCalculationData> shearMonth = windTowerCalculationDataService.shearMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList,prophaseAnemometryDataList);
  172. dataList.addAll(shearMonth);
  173. //月平均风速标差
  174. ArrayList<WindTowerCalculationData> staMonth = windTowerCalculationDataService.staMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
  175. dataList.addAll(staMonth);
  176. //月环境数据 温湿压最大最小平均
  177. ArrayList<WindTowerCalculationData> environmentData = windTowerCalculationDataService.environmentData(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList);
  178. dataList.addAll(environmentData);
  179. // 月玫瑰图
  180. windDirectionStatisticsDataService.roseMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, prophaseWeatherDataList, equipmentAttributeList);
  181. }
  182. // 统计概述
  183. statisticsSituationService.statisticsSituation(windTowerInfo, statisticsSituations, equipmentAttributeList);
  184. //保存
  185. windTowerCalculationDataService.saveBatchByEquipmentId(dataList, windTowerInfo.getEquipmentNo());
  186. }
  187. }
  188. //存储杨总数据 TODO 缺少TD Engine 逻辑
  189. public void saveJsonY() {
  190. String s = apiHDY.jsonY(DateUtil.format(new Date(),"yyyyMMdd"));
  191. List<StationInfo> stationInfos = stationInfoService.selectStationInfo();
  192. for (StationInfo stationInfo : stationInfos) {
  193. JSONObject jsonObject = JSONUtil.parseObj(s);
  194. JSONObject jsonObject1 = JSONUtil.parseObj(jsonObject.get(stationInfo.getStationBasicInfo().getAbbreviation()));
  195. FanJsonInfo towerJsonInfo = jsonObject1.toBean(FanJsonInfo.class);
  196. List<String> collect = stationInfo.getFanTowerList().stream().map(FanTower::getFanModel).distinct().collect(Collectors.toList());
  197. String fdn = new BigDecimal(towerJsonInfo.getFd1n()).setScale(2, RoundingMode.HALF_UP).toString();
  198. for (String s1 : collect) {
  199. if (!s1.contains("MW")) {
  200. continue;
  201. }
  202. String s2 = CalculationUtil.getNumberFromStringForDian(s1);
  203. BigDecimal realTimeTotal = new BigDecimal(fdn).divide(new BigDecimal(s2), 2, BigDecimal.ROUND_HALF_UP);
  204. //一期
  205. FanModelData fanModelData = new FanModelData(UUID.randomUUID().toString(), stationInfo.getId(),
  206. stationInfo.getStationBasicInfo().getStationName(), s1, stationInfo.getStationBasicInfo().getAbbreviation(),
  207. new BigDecimal(towerJsonInfo.getPjfs()).setScale(2, RoundingMode.HALF_UP).toString(), towerJsonInfo.getZfx(),
  208. fdn, realTimeTotal.toString());
  209. fdn = new BigDecimal(towerJsonInfo.getFd2n()).setScale(2, RoundingMode.HALF_UP).toString();
  210. mongoTemplate.save(fanModelData);
  211. }
  212. }
  213. }
  214. }