AirDensityJob.java 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  1. package com.jiayue.biz.job;
  2. import ch.qos.logback.classic.spi.STEUtil;
  3. import cn.hutool.core.bean.BeanUtil;
  4. import cn.hutool.core.date.DateTime;
  5. import cn.hutool.core.util.StrUtil;
  6. import cn.hutool.db.Entity;
  7. import cn.hutool.json.JSONObject;
  8. import cn.hutool.json.JSONUtil;
  9. import com.jiayue.biz.api.apiHDY;
  10. import com.jiayue.biz.domain.*;
  11. import com.jiayue.biz.service.*;
  12. import com.jiayue.biz.service.impl.*;
  13. import com.jiayue.biz.util.CalculationUtil;
  14. import com.jiayue.biz.util.DateTimeUtil;
  15. import com.jiayue.common.utils.DateUtil;
  16. import lombok.AllArgsConstructor;
  17. import lombok.extern.slf4j.Slf4j;
  18. import org.springframework.data.mongodb.core.MongoTemplate;
  19. import org.springframework.scheduling.annotation.EnableScheduling;
  20. import org.springframework.scheduling.annotation.Scheduled;
  21. import org.springframework.stereotype.Service;
  22. import java.beans.IntrospectionException;
  23. import java.beans.PropertyDescriptor;
  24. import java.lang.reflect.Field;
  25. import java.lang.reflect.InvocationTargetException;
  26. import java.lang.reflect.Method;
  27. import java.math.BigDecimal;
  28. import java.math.RoundingMode;
  29. import java.sql.Timestamp;
  30. import java.text.SimpleDateFormat;
  31. import java.util.*;
  32. import java.util.stream.Collectors;
  33. @Slf4j
  34. @Service
  35. @EnableScheduling
  36. @AllArgsConstructor
  37. public class AirDensityJob {
  38. private final WindTowerCalculationDataServiceImpl windTowerCalculationDataService;
  39. private final WindTowerInfoServiceImpl windTowerInfoService;
  40. private final WindDirectionStatisticsDataServiceImpl windDirectionStatisticsDataService;
  41. private final EquipmentAttributeService equipmentAttributeService;
  42. private final StatisticsSituationServiceImpl statisticsSituationService;
  43. private final ProphaseAnemometryDataService prophaseAnemometryDataService;
  44. private final ProphaseWeatherDataService prophaseWeatherDataService;
  45. private final StationInfoService stationInfoService;
  46. private final MongoTemplate mongoTemplate;
  47. private final com.jiayue.biz.api.apiHDY apiHDY;
  48. private final FanModelDataService fanModelDataService;
  49. private final TotalBatteryDataService totalBatteryDataService;
  50. @Scheduled(cron = "0 0 19 * * ?")
  51. public void AirDensityCalculation() {
  52. List<WindTowerInfo> windTowerInfoList = windTowerInfoService.list();
  53. // 统计概述信息
  54. List<StatisticsSituation> statisticsSituations = statisticsSituationService.list();
  55. // 设备属性信息
  56. List<EquipmentAttribute> equipmentAttributeList = equipmentAttributeService.list();
  57. SimpleDateFormat sdf = new SimpleDateFormat("d");
  58. //前7天
  59. Date startDate = DateTimeUtil.getDayStartTime(new Date().getTime() - 60 * 60 * 24 * 1000 * 8);
  60. //如果为月初的前7天 取 月初时间 并且排除掉月初
  61. if (Integer.parseInt(sdf.format(new Date())) <= 7 && !sdf.format(new Date()).equals("1")) {
  62. startDate = DateUtil.beginOfMonth(new Date());
  63. }
  64. //前一天23点59分
  65. Date endDate = DateTimeUtil.getDayLastTime(DateUtil.yesterday().getTime());
  66. //传入时间的月末
  67. Date endMonthDate = DateTimeUtil.endOfMonth(endDate);
  68. for (WindTowerInfo windTowerInfo : windTowerInfoList) {
  69. WindTowerCalculationData lastData = windTowerCalculationDataService.getLastDataCalculation(windTowerInfo.getEquipmentNo());
  70. List<Entity> lastRealData = prophaseWeatherDataService.getLastData(windTowerInfo.getEquipmentNo());
  71. if (lastData != null && lastRealData != null) {
  72. Timestamp timestamp = (Timestamp) lastRealData.get(0).get("last (ts)");
  73. //获取统计数据最后数据的时间
  74. long lastTime = DateUtil.endOfDay(lastData.getTime()).getTime();
  75. //获取邮件数据最后数据的时间
  76. long realTime = DateUtil.endOfDay(new Date(timestamp.getTime())).getTime();
  77. //如果两个时间相等则不需要计算
  78. if (lastTime == realTime) {
  79. continue;
  80. }
  81. //如果邮件的数据比统计数据的时候大8天 则取统计数据的时间作为开始时间
  82. if (realTime - lastTime >= 60 * 60 * 24 * 1000 * 8) {
  83. startDate = new Date(lastTime);
  84. }
  85. }
  86. //传入时间的月初
  87. Date startMonthDate = DateTimeUtil.beginOfMonth(startDate);
  88. //风数据查询
  89. List<ProphaseAnemometryData> prophaseAnemometryDataList = prophaseAnemometryDataService.selectAll(windTowerInfo.getEquipmentNo(), new Timestamp(startMonthDate.getTime()), new Timestamp(endMonthDate.getTime()));
  90. //环境数据查询
  91. List<ProphaseWeatherData> prophaseWeatherDataList = prophaseWeatherDataService.selectPublicData(windTowerInfo.getEquipmentNo(), new Timestamp(startMonthDate.getTime()), new Timestamp(endMonthDate.getTime()));
  92. //统计数据
  93. List<WindTowerCalculationData> windTowerCalculationDataList = windTowerCalculationDataService.getByBetweenTimeAndEquipmentId(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo());
  94. //小时平均风速风功率密度
  95. ArrayList<WindTowerCalculationData> wsAndWpdList = windTowerCalculationDataService.calculateWindPowerDensity(startDate.getTime(), endDate.getTime(), windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, prophaseWeatherDataList, equipmentAttributeList, windTowerCalculationDataList);
  96. ArrayList<WindTowerCalculationData> dataList = new ArrayList<>(wsAndWpdList);
  97. //每小时风切变指数
  98. ArrayList<WindTowerCalculationData> windShearList = windTowerCalculationDataService.calculateWindPowerShear(startDate, endDate, windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, windTowerCalculationDataList);
  99. dataList.addAll(windShearList);
  100. //日平均温度
  101. ArrayList<WindTowerCalculationData> tList = windTowerCalculationDataService.tDay(startDate, endDate, windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList);
  102. dataList.addAll(tList);
  103. //日平均气压
  104. ArrayList<WindTowerCalculationData> paList = windTowerCalculationDataService.paDay(startDate, endDate, windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList);
  105. dataList.addAll(paList);
  106. //发电量与满发小时数
  107. ArrayList<WindTowerCalculationData> calculateBattery = windTowerCalculationDataService.calculateBattery(startDate.getTime(), endDate.getTime(), windTowerInfo, prophaseAnemometryDataList, equipmentAttributeList, windTowerCalculationDataList);
  108. dataList.addAll(calculateBattery);
  109. //日平均空气密度
  110. ArrayList<WindTowerCalculationData> airList = windTowerCalculationDataService.airDensityDay(startDate, endDate, windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList, windTowerCalculationDataList);
  111. dataList.addAll(airList);
  112. //日平均风速标差
  113. ArrayList<WindTowerCalculationData> staDay = windTowerCalculationDataService.calculateStaDay(startDate, endDate, windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList, windTowerCalculationDataList);
  114. dataList.addAll(staDay);
  115. //日平均风速
  116. ArrayList<WindTowerCalculationData> wsDayList = windTowerCalculationDataService.wsDay(startDate, endDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
  117. dataList.addAll(wsDayList);
  118. //日平均湍流
  119. ArrayList<WindTowerCalculationData> turList = windTowerCalculationDataService.turbulenceDay(startDate, endDate, windTowerInfo.getEquipmentNo(), equipmentAttributeList, windTowerInfoList, windTowerCalculationDataList);
  120. dataList.addAll(turList);
  121. //日平均风切变
  122. ArrayList<WindTowerCalculationData> windShearDay = windTowerCalculationDataService.shearDay(startDate, endDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList, prophaseAnemometryDataList);
  123. dataList.addAll(windShearDay);
  124. //日平均风功率密度
  125. ArrayList<WindTowerCalculationData> wpdDayList = windTowerCalculationDataService.wpdDay(startDate, endDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
  126. dataList.addAll(wpdDayList);
  127. //如果结束时间和数据统计的时间相差大于30天就分割月份进行计算
  128. if (endDate.getTime() - startDate.getTime() > 86400000L * 30) {
  129. List<Long> dateTime = DateTimeUtil.getIntervalTimeByMonth(DateTimeUtil.beginOfMonth(startDate), DateTimeUtil.beginOfMonth(endDate));
  130. for (Long l : dateTime) {
  131. //月平均风速
  132. ArrayList<WindTowerCalculationData> wsMonth = windTowerCalculationDataService.wsMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
  133. dataList.addAll(wsMonth);
  134. //月平均风功率密度
  135. ArrayList<WindTowerCalculationData> wpdMonth = windTowerCalculationDataService.wpdMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
  136. dataList.addAll(wpdMonth);
  137. //月平均湍流
  138. ArrayList<WindTowerCalculationData> turbulenceMonth = windTowerCalculationDataService.turbulenceMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
  139. dataList.addAll(turbulenceMonth);
  140. //月平均空气密度
  141. ArrayList<WindTowerCalculationData> airDensityMonth = windTowerCalculationDataService.airDensityMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList);
  142. dataList.addAll(airDensityMonth);
  143. //月最大风速
  144. ArrayList<WindTowerCalculationData> wsMaxMonth = windTowerCalculationDataService.wsMaxMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
  145. dataList.addAll(wsMaxMonth);
  146. //月平均风切变
  147. ArrayList<WindTowerCalculationData> shearMonth = windTowerCalculationDataService.shearMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList, prophaseAnemometryDataList);
  148. dataList.addAll(shearMonth);
  149. //月平均风速标差
  150. ArrayList<WindTowerCalculationData> staMonth = windTowerCalculationDataService.staMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
  151. dataList.addAll(staMonth);
  152. //月玫瑰图
  153. windDirectionStatisticsDataService.roseMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, prophaseWeatherDataList, equipmentAttributeList);
  154. //月平均环境数据
  155. ArrayList<WindTowerCalculationData> environmentData = windTowerCalculationDataService.environmentData(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList);
  156. dataList.addAll(environmentData);
  157. //空气密度月逐时
  158. ArrayList<WindTowerCalculationData> airDensityMonth1 = windTowerCalculationDataService.airDensityMonth(windTowerInfo.getEquipmentNo(), DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), prophaseWeatherDataList);
  159. dataList.addAll(airDensityMonth1);
  160. //湍流月逐时
  161. ArrayList<WindTowerCalculationData> turbulenceHourForMonth = windTowerCalculationDataService.turbulenceHourForMonth(windTowerInfo.getEquipmentNo(), DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
  162. dataList.addAll(turbulenceHourForMonth);
  163. }
  164. } else {
  165. //空气密度月逐时
  166. ArrayList<WindTowerCalculationData> airDensityMonth = windTowerCalculationDataService.airDensityMonth(windTowerInfo.getEquipmentNo(), startMonthDate, endMonthDate, prophaseWeatherDataList);
  167. dataList.addAll(airDensityMonth);
  168. //湍流月逐时
  169. ArrayList<WindTowerCalculationData> turbulenceHourForMonth = windTowerCalculationDataService.turbulenceHourForMonth(windTowerInfo.getEquipmentNo(), startMonthDate, endMonthDate, prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
  170. dataList.addAll(turbulenceHourForMonth);
  171. //月平均空气密度
  172. ArrayList<WindTowerCalculationData> airDensityMonth1 = windTowerCalculationDataService.airDensityMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList);
  173. dataList.addAll(airDensityMonth1);
  174. //月平均湍流
  175. ArrayList<WindTowerCalculationData> turbulenceMonth = windTowerCalculationDataService.turbulenceMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
  176. dataList.addAll(turbulenceMonth);
  177. //月平均风速
  178. ArrayList<WindTowerCalculationData> wsMonth = windTowerCalculationDataService.wsMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
  179. dataList.addAll(wsMonth);
  180. //月平均风功率密度
  181. ArrayList<WindTowerCalculationData> wpdMonth = windTowerCalculationDataService.wpdMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
  182. dataList.addAll(wpdMonth);
  183. //月最大风速
  184. ArrayList<WindTowerCalculationData> wsMaxMonth = windTowerCalculationDataService.wsMaxMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
  185. dataList.addAll(wsMaxMonth);
  186. //月平均风切变
  187. ArrayList<WindTowerCalculationData> shearMonth = windTowerCalculationDataService.shearMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList, prophaseAnemometryDataList);
  188. dataList.addAll(shearMonth);
  189. //月平均风速标差
  190. ArrayList<WindTowerCalculationData> staMonth = windTowerCalculationDataService.staMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
  191. dataList.addAll(staMonth);
  192. //月环境数据 温湿压最大最小平均
  193. ArrayList<WindTowerCalculationData> environmentData = windTowerCalculationDataService.environmentData(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList);
  194. dataList.addAll(environmentData);
  195. // 月玫瑰图
  196. windDirectionStatisticsDataService.roseMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, prophaseWeatherDataList, equipmentAttributeList);
  197. }
  198. // 统计概述
  199. statisticsSituationService.statisticsSituation(windTowerInfo, statisticsSituations, equipmentAttributeList);
  200. //保存
  201. windTowerCalculationDataService.saveBatchByEquipmentId(dataList, windTowerInfo.getEquipmentNo());
  202. }
  203. }
  204. //存储杨总数据
  205. // @Scheduled(cron = "0 30 14 6 7 ?")
  206. public void saveJsonY() {
  207. // String s = apiHDY.jsonY(DateUtil.format(new Date(), "yyyyMMdd"));
  208. String s = "{\"AV\":{\"fdl\":\"6.447\",\"fdly\":\"365.337\",\"fdln\":\"6847.890\",\"fd1\":\"2.835\",\"fd1y\":\"175.875\",\"fd1n\":\"3261.279\",\"fd2\":\"3.612\",\"fd2y\":\"189.462\",\"fd2n\":\"3586.611\",\"fd3\":\"0.000\",\"fd3y\":\"0.000\",\"fd3n\":\"0.000\",\"fd4\":\"0.000\",\"fd4y\":\"0.000\",\"fd4n\":\"0.000\",\"fd5\":\"0.000\",\"fd5y\":\"0.000\",\"fd5n\":\"0.000\",\"fd6\":\"0.000\",\"fd6y\":\"0.000\",\"fd6n\":\"0.000\",\"fd7\":\"0.000\",\"fd7y\":\"0.000\",\"fd7n\":\"0.000\",\"fd8\":\"0.000\",\"fd8y\":\"0.000\",\"fd8n\":\"0.000\",\"zfx\":\"\\u9635\\u96e8\",\"pjfs\":\"131.000\",\"zdfs\":\"350.000\",\"zxfs\":\"0.000\",\"wdzg\":\"23.0\",\"wdzd\":\"18.0\"},\"BY\":{\"fdl\":\"41.059\",\"fdly\":\"321.166\",\"fdln\":\"591.274\",\"fd1\":\"41.059\",\"fd1y\":\"321.166\",\"fd1n\":\"591.274\",\"fd2\":\"0.000\",\"fd2y\":\"0.000\",\"fd2n\":\"0.000\",\"fd3\":\"0.000\",\"fd3y\":\"0.000\",\"fd3n\":\"0.000\",\"fd4\":\"0.000\",\"fd4y\":\"0.000\",\"fd4n\":\"0.000\",\"fd5\":\"0.000\",\"fd5y\":\"0.000\",\"fd5n\":\"0.000\",\"fd6\":\"0.000\",\"fd6y\":\"0.000\",\"fd6n\":\"0.000\",\"fd7\":\"0.000\",\"fd7y\":\"0.000\",\"fd7n\":\"0.000\",\"fd8\":\"0.000\",\"fd8y\":\"0.000\",\"fd8n\":\"0.000\",\"zfx\":\"\\u4e1c\\u5317\",\"pjfs\":\"6.590\",\"zdfs\":\"13.270\",\"zxfs\":\"1.260\",\"wdzg\":\"21.0\",\"wdzd\":\"17.0\"},\"DN\":{\"fdl\":\"14.151\",\"fdly\":\"295.982\",\"fdln\":\"6299.297\",\"fd1\":\"14.151\",\"fd1y\":\"295.982\",\"fd1n\":\"6299.297\",\"fd2\":\"0.000\",\"fd2y\":\"0.000\",\"fd2n\":\"0.000\",\"fd3\":\"0.000\",\"fd3y\":\"0.000\",\"fd3n\":\"0.000\",\"fd4\":\"0.000\",\"fd4y\":\"0.000\",\"fd4n\":\"0.000\",\"fd5\":\"0.000\",\"fd5y\":\"0.000\",\"fd5n\":\"0.000\",\"fd6\":\"0.000\",\"fd6y\":\"0.000\",\"fd6n\":\"0.000\",\"fd7\":\"0.000\",\"fd7y\":\"0.000\",\"fd7n\":\"0.000\",\"fd8\":\"0.000\",\"fd8y\":\"0.000\",\"fd8n\":\"0.000\",\"zfx\":\"\\u897f\\u5317\",\"pjfs\":\"3.760\",\"zdfs\":\"8.630\",\"zxfs\":\"1.670\",\"wdzg\":\"26.0\",\"wdzd\":\"18.0\"},\"HA\":{\"fdl\":\"53.850\",\"fdly\":\"295.305\",\"fdln\":\"2192.663\",\"fd1\":\"53.850\",\"fd1y\":\"295.305\",\"fd1n\":\"2192.663\",\"fd2\":\"0.000\",\"fd2y\":\"0.000\",\"fd2n\":\"0.000\",\"fd3\":\"0.000\",\"fd3y\":\"0.000\",\"fd3n\":\"0.000\",\"fd4\":\"0.000\",\"fd4y\":\"0.000\",\"fd4n\":\"0.000\",\"fd5\":\"0.000\",\"fd5y\":\"0.000\",\"fd5n\":\"0.000\",\"fd6\":\"0.000\",\"fd6y\":\"0.000\",\"fd6n\":\"0.000\",\"fd7\":\"0.000\",\"fd7y\":\"0.000\",\"fd7n\":\"0.000\",\"fd8\":\"0.000\",\"fd8y\":\"0.000\",\"fd8n\":\"0.000\",\"zfx\":\"\\u4e1c\",\"pjfs\":\"8.840\",\"zdfs\":\"18.510\",\"zxfs\":\"0.100\",\"wdzg\":\"21.0\",\"wdzd\":\"18.0\"},\"HL\":{\"fdl\":\"58.940\",\"fdly\":\"459.900\",\"fdln\":\"11709.040\",\"fd1\":\"21.840\",\"fd1y\":\"196.140\",\"fd1n\":\"4844.840\",\"fd2\":\"37.100\",\"fd2y\":\"263.760\",\"fd2n\":\"6864.200\",\"fd3\":\"0.000\",\"fd3y\":\"0.000\",\"fd3n\":\"0.000\",\"fd4\":\"0.000\",\"fd4y\":\"0.000\",\"fd4n\":\"0.000\",\"fd5\":\"0.000\",\"fd5y\":\"0.000\",\"fd5n\":\"0.000\",\"fd6\":\"0.000\",\"fd6y\":\"0.000\",\"fd6n\":\"0.000\",\"fd7\":\"0.000\",\"fd7y\":\"0.000\",\"fd7n\":\"0.000\",\"fd8\":\"0.000\",\"fd8y\":\"0.000\",\"fd8n\":\"0.000\",\"zfx\":\"\\u897f\",\"pjfs\":\"4.550\",\"zdfs\":\"9.680\",\"zxfs\":\"1.560\",\"wdzg\":\"20.0\",\"wdzd\":\"12.0\"},\"HU\":{\"fdl\":\"9.658\",\"fdly\":\"45.768\",\"fdln\":\"45.768\",\"fd1\":\"9.658\",\"fd1y\":\"45.768\",\"fd1n\":\"45.768\",\"fd2\":\"0.000\",\"fd2y\":\"0.000\",\"fd2n\":\"0.000\",\"fd3\":\"0.000\",\"fd3y\":\"0.000\",\"fd3n\":\"0.000\",\"fd4\":\"0.000\",\"fd4y\":\"0.000\",\"fd4n\":\"0.000\",\"fd5\":\"0.000\",\"fd5y\":\"0.000\",\"fd5n\":\"0.000\",\"fd6\":\"0.000\",\"fd6y\":\"0.000\",\"fd6n\":\"0.000\",\"fd7\":\"0.000\",\"fd7y\":\"0.000\",\"fd7n\":\"0.000\",\"fd8\":\"0.000\",\"fd8y\":\"0.000\",\"fd8n\":\"0.000\",\"zfx\":\"\\u5317\",\"pjfs\":\"6.720\",\"zdfs\":\"12.450\",\"zxfs\":\"0.880\",\"wdzg\":\"22.0\",\"wdzd\":\"18.0\"},\"HV\":{\"fdl\":\"1.995\",\"fdly\":\"51.030\",\"fdln\":\"950.145\",\"fd1\":\"1.995\",\"fd1y\":\"51.030\",\"fd1n\":\"950.145\",\"fd2\":\"0.000\",\"fd2y\":\"0.000\",\"fd2n\":\"0.000\",\"fd3\":\"0.000\",\"fd3y\":\"0.000\",\"fd3n\":\"0.000\",\"fd4\":\"0.000\",\"fd4y\":\"0.000\",\"fd4n\":\"0.000\",\"fd5\":\"0.000\",\"fd5y\":\"0.000\",\"fd5n\":\"0.000\",\"fd6\":\"0.000\",\"fd6y\":\"0.000\",\"fd6n\":\"0.000\",\"fd7\":\"0.000\",\"fd7y\":\"0.000\",\"fd7n\":\"0.000\",\"fd8\":\"0.000\",\"fd8y\":\"0.000\",\"fd8n\":\"0.000\",\"zfx\":\"\\u9635\\u96e8\",\"pjfs\":\"174.280\",\"zdfs\":\"512.000\",\"zxfs\":\"0.000\",\"wdzg\":\"21.0\",\"wdzd\":\"13.0\"},\"ML\":{\"fdl\":\"0.096\",\"fdly\":\"3.768\",\"fdln\":\"89.350\",\"fd1\":\"0.096\",\"fd1y\":\"3.768\",\"fd1n\":\"89.350\",\"fd2\":\"0.000\",\"fd2y\":\"0.000\",\"fd2n\":\"0.000\",\"fd3\":\"0.000\",\"fd3y\":\"0.000\",\"fd3n\":\"0.000\",\"fd4\":\"0.000\",\"fd4y\":\"0.000\",\"fd4n\":\"0.000\",\"fd5\":\"0.000\",\"fd5y\":\"0.000\",\"fd5n\":\"0.000\",\"fd6\":\"0.000\",\"fd6y\":\"0.000\",\"fd6n\":\"0.000\",\"fd7\":\"0.000\",\"fd7y\":\"0.000\",\"fd7n\":\"0.000\",\"fd8\":\"0.000\",\"fd8y\":\"0.000\",\"fd8n\":\"0.000\",\"zfx\":\"\\u897f\",\"pjfs\":\"3.300\",\"zdfs\":\"8.400\",\"zxfs\":\"1.100\",\"wdzg\":\"24.0\",\"wdzd\":\"16.0\"},\"MU\":{\"fdl\":\"8.650\",\"fdly\":\"186.750\",\"fdln\":\"4408.554\",\"fd1\":\"0.000\",\"fd1y\":\"0.000\",\"fd1n\":\"247.854\",\"fd2\":\"8.650\",\"fd2y\":\"186.750\",\"fd2n\":\"4160.700\",\"fd3\":\"0.000\",\"fd3y\":\"0.000\",\"fd3n\":\"0.000\",\"fd4\":\"0.000\",\"fd4y\":\"0.000\",\"fd4n\":\"0.000\",\"fd5\":\"0.000\",\"fd5y\":\"0.000\",\"fd5n\":\"0.000\",\"fd6\":\"0.000\",\"fd6y\":\"0.000\",\"fd6n\":\"0.000\",\"fd7\":\"0.000\",\"fd7y\":\"0.000\",\"fd7n\":\"0.000\",\"fd8\":\"0.000\",\"fd8y\":\"0.000\",\"fd8n\":\"0.000\",\"zfx\":\"\\u4e1c\",\"pjfs\":\"4.200\",\"zdfs\":\"7.300\",\"zxfs\":\"2.400\",\"wdzg\":\"26.0\",\"wdzd\":\"17.0\"},\"NV\":{\"fdl\":\"4.158\",\"fdly\":\"119.133\",\"fdln\":\"1883.679\",\"fd1\":\"4.158\",\"fd1y\":\"119.133\",\"fd1n\":\"1883.679\",\"fd2\":\"0.000\",\"fd2y\":\"0.000\",\"fd2n\":\"0.000\",\"fd3\":\"0.000\",\"fd3y\":\"0.000\",\"fd3n\":\"0.000\",\"fd4\":\"0.000\",\"fd4y\":\"0.000\",\"fd4n\":\"0.000\",\"fd5\":\"0.000\",\"fd5y\":\"0.000\",\"fd5n\":\"0.000\",\"fd6\":\"0.000\",\"fd6y\":\"0.000\",\"fd6n\":\"0.000\",\"fd7\":\"0.000\",\"fd7y\":\"0.000\",\"fd7n\":\"0.000\",\"fd8\":\"0.000\",\"fd8y\":\"0.000\",\"fd8n\":\"0.000\",\"zfx\":\"\\u6674\",\"pjfs\":\"145.000\",\"zdfs\":\"424.000\",\"zxfs\":\"0.000\",\"wdzg\":\"22.0\",\"wdzd\":\"18.0\"},\"QH\":{\"fdl\":\"75.180\",\"fdly\":\"542.556\",\"fdln\":\"11468.996\",\"fd1\":\"41.384\",\"fd1y\":\"273.364\",\"fd1n\":\"5659.136\",\"fd2\":\"33.796\",\"fd2y\":\"269.192\",\"fd2n\":\"5809.860\",\"fd3\":\"0.000\",\"fd3y\":\"0.000\",\"fd3n\":\"0.000\",\"fd4\":\"0.000\",\"fd4y\":\"0.000\",\"fd4n\":\"0.000\",\"fd5\":\"0.000\",\"fd5y\":\"0.000\",\"fd5n\":\"0.000\",\"fd6\":\"0.000\",\"fd6y\":\"0.000\",\"fd6n\":\"0.000\",\"fd7\":\"0.000\",\"fd7y\":\"0.000\",\"fd7n\":\"0.000\",\"fd8\":\"0.000\",\"fd8y\":\"0.000\",\"fd8n\":\"0.000\",\"zfx\":\"\\u4e1c\",\"pjfs\":\"8.150\",\"zdfs\":\"11.700\",\"zxfs\":\"1.200\",\"wdzg\":\"21.0\",\"wdzd\":\"17.0\"},\"RX\":{\"fdl\":\"28.140\",\"fdly\":\"456.162\",\"fdln\":\"8252.497\",\"fd1\":\"28.140\",\"fd1y\":\"456.162\",\"fd1n\":\"8252.497\",\"fd2\":\"0.000\",\"fd2y\":\"0.000\",\"fd2n\":\"0.000\",\"fd3\":\"0.000\",\"fd3y\":\"0.000\",\"fd3n\":\"0.000\",\"fd4\":\"0.000\",\"fd4y\":\"0.000\",\"fd4n\":\"0.000\",\"fd5\":\"0.000\",\"fd5y\":\"0.000\",\"fd5n\":\"0.000\",\"fd6\":\"0.000\",\"fd6y\":\"0.000\",\"fd6n\":\"0.000\",\"fd7\":\"0.000\",\"fd7y\":\"0.000\",\"fd7n\":\"0.000\",\"fd8\":\"0.000\",\"fd8y\":\"0.000\",\"fd8n\":\"0.000\",\"zfx\":\"\\u897f\",\"pjfs\":\"6.060\",\"zdfs\":\"8.730\",\"zxfs\":\"5.320\",\"wdzg\":\"25.0\",\"wdzd\":\"15.0\"},\"TL\":{\"fdl\":\"62.345\",\"fdly\":\"274.725\",\"fdln\":\"7784.430\",\"fd1\":\"62.345\",\"fd1y\":\"274.725\",\"fd1n\":\"7784.430\",\"fd2\":\"0.000\",\"fd2y\":\"0.000\",\"fd2n\":\"0.000\",\"fd3\":\"0.000\",\"fd3y\":\"0.000\",\"fd3n\":\"0.000\",\"fd4\":\"0.000\",\"fd4y\":\"0.000\",\"fd4n\":\"0.000\",\"fd5\":\"0.000\",\"fd5y\":\"0.000\",\"fd5n\":\"0.000\",\"fd6\":\"0.000\",\"fd6y\":\"0.000\",\"fd6n\":\"0.000\",\"fd7\":\"0.000\",\"fd7y\":\"0.000\",\"fd7n\":\"0.000\",\"fd8\":\"0.000\",\"fd8y\":\"0.000\",\"fd8n\":\"0.000\",\"zfx\":\"\\u5357\",\"pjfs\":\"8.290\",\"zdfs\":\"16.530\",\"zxfs\":\"2.200\",\"wdzg\":\"21.0\",\"wdzd\":\"13.0\"},\"TY\":{\"fdl\":\"55.468\",\"fdly\":\"260.036\",\"fdln\":\"5447.652\",\"fd1\":\"55.468\",\"fd1y\":\"260.036\",\"fd1n\":\"5447.652\",\"fd2\":\"0.000\",\"fd2y\":\"0.000\",\"fd2n\":\"0.000\",\"fd3\":\"0.000\",\"fd3y\":\"0.000\",\"fd3n\":\"0.000\",\"fd4\":\"0.000\",\"fd4y\":\"0.000\",\"fd4n\":\"0.000\",\"fd5\":\"0.000\",\"fd5y\":\"0.000\",\"fd5n\":\"0.000\",\"fd6\":\"0.000\",\"fd6y\":\"0.000\",\"fd6n\":\"0.000\",\"fd7\":\"0.000\",\"fd7y\":\"0.000\",\"fd7n\":\"0.000\",\"fd8\":\"0.000\",\"fd8y\":\"0.000\",\"fd8n\":\"0.000\",\"zfx\":\"\\u4e1c\\u5317\",\"pjfs\":\"7.320\",\"zdfs\":\"21.370\",\"zxfs\":\"2.850\",\"wdzg\":\"21.0\",\"wdzd\":\"17.0\"},\"YL\":{\"fdl\":\"62.524\",\"fdly\":\"505.764\",\"fdln\":\"12715.643\",\"fd1\":\"28.840\",\"fd1y\":\"235.592\",\"fd1n\":\"5888.655\",\"fd2\":\"33.684\",\"fd2y\":\"270.172\",\"fd2n\":\"6826.988\",\"fd3\":\"0.000\",\"fd3y\":\"0.000\",\"fd3n\":\"0.000\",\"fd4\":\"0.000\",\"fd4y\":\"0.000\",\"fd4n\":\"0.000\",\"fd5\":\"0.000\",\"fd5y\":\"0.000\",\"fd5n\":\"0.000\",\"fd6\":\"0.000\",\"fd6y\":\"0.000\",\"fd6n\":\"0.000\",\"fd7\":\"0.000\",\"fd7y\":\"0.000\",\"fd7n\":\"0.000\",\"fd8\":\"0.000\",\"fd8y\":\"0.000\",\"fd8n\":\"0.000\",\"zfx\":\"\\u4e1c\",\"pjfs\":\"5.820\",\"zdfs\":\"16.530\",\"zxfs\":\"3.550\",\"wdzg\":\"21.0\",\"wdzd\":\"17.0\"},\"ZS\":{\"fdl\":\"0.000\",\"fdly\":\"422.520\",\"fdln\":\"10471.860\",\"fd1\":\"0.000\",\"fd1y\":\"422.520\",\"fd1n\":\"10471.860\",\"fd2\":\"0.000\",\"fd2y\":\"0.000\",\"fd2n\":\"0.000\",\"fd3\":\"0.000\",\"fd3y\":\"0.000\",\"fd3n\":\"0.000\",\"fd4\":\"0.000\",\"fd4y\":\"0.000\",\"fd4n\":\"0.000\",\"fd5\":\"0.000\",\"fd5y\":\"0.000\",\"fd5n\":\"0.000\",\"fd6\":\"0.000\",\"fd6y\":\"0.000\",\"fd6n\":\"0.000\",\"fd7\":\"0.000\",\"fd7y\":\"0.000\",\"fd7n\":\"0.000\",\"fd8\":\"0.000\",\"fd8y\":\"0.000\",\"fd8n\":\"0.000\",\"zfx\":\"\\u4e1c\",\"pjfs\":\"5.820\",\"zdfs\":\"16.530\",\"zxfs\":\"3.550\",\"wdzg\":\"21.0\",\"wdzd\":\"17.0\"}}";
  209. List<StationInfo> stationInfos = stationInfoService.selectStationInfo();
  210. List<FanModelData> fanModelDataList = fanModelDataService.getFanModelDataList();
  211. for (StationInfo stationInfo : stationInfos) {
  212. JSONObject jsonObject = JSONUtil.parseObj(s);
  213. JSONObject jsonObject1 = JSONUtil.parseObj(jsonObject.get(stationInfo.getStationBasicInfo().getAbbreviation()));
  214. if (jsonObject1.size() == 0) {
  215. continue;
  216. }
  217. FanJsonInfo towerJsonInfo = jsonObject1.toBean(FanJsonInfo.class);
  218. //存储tdEngine
  219. convertData(towerJsonInfo, stationInfo);
  220. //存储mongo
  221. // saveMongoBattery(stationInfo, towerJsonInfo, fanModelDataList);
  222. }
  223. }
  224. public void saveMongoBattery(StationInfo stationInfo, FanJsonInfo towerJsonInfo, List<FanModelData> fanModelDataList) {
  225. String[] strArr = new String[]{towerJsonInfo.getFdln(), towerJsonInfo.getFd1n(), towerJsonInfo.getFd2n(), towerJsonInfo.getFd3n(), towerJsonInfo.getFd4n()};
  226. List<String> collect = new ArrayList<>();
  227. if (stationInfo.getStationBasicInfo().getStationType().equals("风")) {
  228. collect = stationInfo.getFanTowerList().stream().map(FanTower::getFanModel).distinct().collect(Collectors.toList());
  229. } else {
  230. collect = stationInfo.getInverterInfos().stream().map(InverterInfo::getModelNumber).distinct().collect(Collectors.toList());
  231. }
  232. String fdn = "";
  233. for (int i = 0; i < collect.size(); i++) {
  234. if (collect.size() == 1) {
  235. fdn = strArr[i];
  236. } else {
  237. fdn = strArr[i + 1];
  238. }
  239. String s1 = collect.get(i);
  240. if (StrUtil.isBlank(s1)) {
  241. continue;
  242. }
  243. BigDecimal realTimeTotal = BigDecimal.ZERO;
  244. String s2 = CalculationUtil.getNumberFromStringForDian(s1);
  245. if (StrUtil.isBlank(s2)) {
  246. continue;
  247. }
  248. //根据风机类型分组
  249. Map<String, List<FanTower>> modelMap = stationInfo.getFanTowerList().stream()
  250. .collect(Collectors.groupingBy(FanTower::getFanModel));
  251. int fanTotal = modelMap.get(s1).size();
  252. fdn = new BigDecimal(fdn).multiply(BigDecimal.valueOf(10)).toString();
  253. realTimeTotal = new BigDecimal(fdn).divide(new BigDecimal(s2).multiply(new BigDecimal(fanTotal)), 2, BigDecimal.ROUND_HALF_UP);//满发小时数(年)
  254. //一期
  255. FanModelData fanModelData = new FanModelData(UUID.randomUUID().toString(), stationInfo.getId(),
  256. stationInfo.getStationBasicInfo().getStationName(), s1, stationInfo.getStationBasicInfo().getAbbreviation(),
  257. new BigDecimal(towerJsonInfo.getPjfs()).setScale(2, RoundingMode.HALF_UP).toString(), towerJsonInfo.getZfx(),
  258. fdn, realTimeTotal.toString());
  259. //发电量(年)
  260. fdn = new BigDecimal(towerJsonInfo.getFd2n()).setScale(2, RoundingMode.HALF_UP).toString();
  261. List<FanModelData> modelDataList = fanModelDataList.stream().filter(f -> f.getStationId().equals(stationInfo.getId())
  262. && f.getModelName().equals(s1)).collect(Collectors.toList());
  263. if (modelDataList.size() > 0) {
  264. // System.out.println("删除");
  265. // fanModelDataService.deleteFanModelData(modelDataList.get(0).getId());
  266. //
  267. }
  268. // System.out.println("新增");
  269. // mongoTemplate.save(fanModelData);
  270. //
  271. }
  272. }
  273. public void convertData(FanJsonInfo towerJsonInfo, StationInfo stationInfo) {
  274. TotalBatteryData totalBatteryData = new TotalBatteryData();
  275. BeanUtil.copyProperties(towerJsonInfo, totalBatteryData);
  276. batteryMultiplyTen(totalBatteryData);
  277. DateTime yesterday = DateUtil.yesterday();
  278. totalBatteryData.setTs(new Timestamp(DateUtil.beginOfDay(yesterday).getTime()));
  279. if (StrUtil.isNotBlank(stationInfo.getStationBasicInfo().getCapacity())) {
  280. BigDecimal equivalentHour = new BigDecimal(totalBatteryData.getFdln()).divide(new BigDecimal(stationInfo.getStationBasicInfo().getCapacity()), 3, RoundingMode.HALF_UP);
  281. totalBatteryData.setEquivalentHour(equivalentHour.floatValue());
  282. }
  283. totalBatteryData.setStationNameEasy(stationInfo.getStationBasicInfo().getAbbreviation());
  284. totalBatteryDataService.insertOne(totalBatteryData);
  285. }
  286. public void batteryMultiplyTen(TotalBatteryData totalBatteryData) {
  287. try {
  288. Class<? extends TotalBatteryData> aClass = totalBatteryData.getClass();
  289. Field[] declaredFields = aClass.getDeclaredFields();
  290. for (Field declaredField : declaredFields) {
  291. if (declaredField.getName().contains("fd")) {
  292. declaredField.setAccessible(true);
  293. PropertyDescriptor pd = new PropertyDescriptor(declaredField.getName(), aClass);
  294. Method getMethod = pd.getReadMethod();
  295. String invoke = (String) getMethod.invoke(totalBatteryData);
  296. BigDecimal batteryTen = new BigDecimal(invoke).multiply(BigDecimal.valueOf(10)).setScale(2,RoundingMode.HALF_UP);
  297. declaredField.set(totalBatteryData, batteryTen.toString());
  298. }
  299. }
  300. } catch (Exception e) {
  301. throw new RuntimeException(e);
  302. }
  303. }
  304. }