AirDensityJob.java 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362
  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. }else {
  86. List<Entity> firstRealData = prophaseWeatherDataService.getFirstData(windTowerInfo.getEquipmentNo());
  87. if(firstRealData.size() > 0){
  88. startDate = (Timestamp) firstRealData.get(0).get("first (ts)");
  89. }
  90. }
  91. //传入时间的月初
  92. Date startMonthDate = DateTimeUtil.beginOfMonth(startDate);
  93. //风数据查询
  94. List<ProphaseAnemometryData> prophaseAnemometryDataList = prophaseAnemometryDataService.selectAll(windTowerInfo.getEquipmentNo(), new Timestamp(startMonthDate.getTime()), new Timestamp(endMonthDate.getTime()));
  95. //环境数据查询
  96. List<ProphaseWeatherData> prophaseWeatherDataList = prophaseWeatherDataService.selectPublicData(windTowerInfo.getEquipmentNo(), new Timestamp(startMonthDate.getTime()), new Timestamp(endMonthDate.getTime()));
  97. //统计数据
  98. List<WindTowerCalculationData> windTowerCalculationDataList = windTowerCalculationDataService.getByBetweenTimeAndEquipmentId(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo());
  99. //小时平均风速风功率密度
  100. ArrayList<WindTowerCalculationData> wsAndWpdList = windTowerCalculationDataService.calculateWindPowerDensity(startDate.getTime(), endDate.getTime(), windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, prophaseWeatherDataList, equipmentAttributeList, windTowerCalculationDataList);
  101. ArrayList<WindTowerCalculationData> dataList = new ArrayList<>(wsAndWpdList);
  102. //每小时风切变指数
  103. ArrayList<WindTowerCalculationData> windShearList = windTowerCalculationDataService.calculateWindPowerShear(startDate, endDate, windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, windTowerCalculationDataList);
  104. dataList.addAll(windShearList);
  105. //日平均温度
  106. ArrayList<WindTowerCalculationData> tList = windTowerCalculationDataService.tDay(startDate, endDate, windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList);
  107. dataList.addAll(tList);
  108. //日平均气压
  109. ArrayList<WindTowerCalculationData> paList = windTowerCalculationDataService.paDay(startDate, endDate, windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList);
  110. dataList.addAll(paList);
  111. //发电量与满发小时数
  112. ArrayList<WindTowerCalculationData> calculateBattery = windTowerCalculationDataService.calculateBattery(startDate.getTime(), endDate.getTime(), windTowerInfo, prophaseAnemometryDataList, equipmentAttributeList, windTowerCalculationDataList);
  113. dataList.addAll(calculateBattery);
  114. //日平均空气密度
  115. ArrayList<WindTowerCalculationData> airList = windTowerCalculationDataService.airDensityDay(startDate, endDate, windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList, windTowerCalculationDataList);
  116. dataList.addAll(airList);
  117. //日平均风速标差
  118. ArrayList<WindTowerCalculationData> staDay = windTowerCalculationDataService.calculateStaDay(startDate, endDate, windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList, windTowerCalculationDataList);
  119. dataList.addAll(staDay);
  120. //日平均风速
  121. ArrayList<WindTowerCalculationData> wsDayList = windTowerCalculationDataService.wsDay(startDate, endDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
  122. dataList.addAll(wsDayList);
  123. //日平均湍流
  124. ArrayList<WindTowerCalculationData> turList = windTowerCalculationDataService.turbulenceDay(startDate, endDate, windTowerInfo.getEquipmentNo(), equipmentAttributeList, windTowerInfoList, windTowerCalculationDataList);
  125. dataList.addAll(turList);
  126. //日平均风切变
  127. ArrayList<WindTowerCalculationData> windShearDay = windTowerCalculationDataService.shearDay(startDate, endDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList, prophaseAnemometryDataList);
  128. dataList.addAll(windShearDay);
  129. //日平均风功率密度
  130. ArrayList<WindTowerCalculationData> wpdDayList = windTowerCalculationDataService.wpdDay(startDate, endDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
  131. dataList.addAll(wpdDayList);
  132. //如果结束时间和数据统计的时间相差大于30天就分割月份进行计算
  133. if (endDate.getTime() - startDate.getTime() > 86400000L * 30) {
  134. List<Long> dateTime = DateTimeUtil.getIntervalTimeByMonth(DateTimeUtil.beginOfMonth(startDate), DateTimeUtil.beginOfMonth(endDate));
  135. for (Long l : dateTime) {
  136. //月平均风速
  137. ArrayList<WindTowerCalculationData> wsMonth = windTowerCalculationDataService.wsMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
  138. dataList.addAll(wsMonth);
  139. //月平均风功率密度
  140. ArrayList<WindTowerCalculationData> wpdMonth = windTowerCalculationDataService.wpdMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
  141. dataList.addAll(wpdMonth);
  142. //月平均湍流
  143. ArrayList<WindTowerCalculationData> turbulenceMonth = windTowerCalculationDataService.turbulenceMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
  144. dataList.addAll(turbulenceMonth);
  145. //月平均空气密度
  146. ArrayList<WindTowerCalculationData> airDensityMonth = windTowerCalculationDataService.airDensityMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList);
  147. dataList.addAll(airDensityMonth);
  148. //月最大风速
  149. ArrayList<WindTowerCalculationData> wsMaxMonth = windTowerCalculationDataService.wsMaxMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
  150. dataList.addAll(wsMaxMonth);
  151. //月平均风切变
  152. ArrayList<WindTowerCalculationData> shearMonth = windTowerCalculationDataService.shearMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList, prophaseAnemometryDataList);
  153. dataList.addAll(shearMonth);
  154. //月平均风速标差
  155. ArrayList<WindTowerCalculationData> staMonth = windTowerCalculationDataService.staMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
  156. dataList.addAll(staMonth);
  157. //月玫瑰图
  158. windDirectionStatisticsDataService.roseMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, prophaseWeatherDataList, equipmentAttributeList);
  159. //月平均环境数据
  160. ArrayList<WindTowerCalculationData> environmentData = windTowerCalculationDataService.environmentData(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList);
  161. dataList.addAll(environmentData);
  162. //空气密度月逐时
  163. ArrayList<WindTowerCalculationData> airDensityMonth1 = windTowerCalculationDataService.airDensityMonth(windTowerInfo.getEquipmentNo(), DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), prophaseWeatherDataList);
  164. dataList.addAll(airDensityMonth1);
  165. //湍流月逐时
  166. ArrayList<WindTowerCalculationData> turbulenceHourForMonth = windTowerCalculationDataService.turbulenceHourForMonth(windTowerInfo.getEquipmentNo(), DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
  167. dataList.addAll(turbulenceHourForMonth);
  168. }
  169. } else {
  170. //空气密度月逐时
  171. ArrayList<WindTowerCalculationData> airDensityMonth = windTowerCalculationDataService.airDensityMonth(windTowerInfo.getEquipmentNo(), startMonthDate, endMonthDate, prophaseWeatherDataList);
  172. dataList.addAll(airDensityMonth);
  173. //湍流月逐时
  174. ArrayList<WindTowerCalculationData> turbulenceHourForMonth = windTowerCalculationDataService.turbulenceHourForMonth(windTowerInfo.getEquipmentNo(), startMonthDate, endMonthDate, prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
  175. dataList.addAll(turbulenceHourForMonth);
  176. //月平均空气密度
  177. ArrayList<WindTowerCalculationData> airDensityMonth1 = windTowerCalculationDataService.airDensityMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList);
  178. dataList.addAll(airDensityMonth1);
  179. //月平均湍流
  180. ArrayList<WindTowerCalculationData> turbulenceMonth = windTowerCalculationDataService.turbulenceMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
  181. dataList.addAll(turbulenceMonth);
  182. //月平均风速
  183. ArrayList<WindTowerCalculationData> wsMonth = windTowerCalculationDataService.wsMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
  184. dataList.addAll(wsMonth);
  185. //月平均风功率密度
  186. ArrayList<WindTowerCalculationData> wpdMonth = windTowerCalculationDataService.wpdMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList);
  187. dataList.addAll(wpdMonth);
  188. //月最大风速
  189. ArrayList<WindTowerCalculationData> wsMaxMonth = windTowerCalculationDataService.wsMaxMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
  190. dataList.addAll(wsMaxMonth);
  191. //月平均风切变
  192. ArrayList<WindTowerCalculationData> shearMonth = windTowerCalculationDataService.shearMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList, prophaseAnemometryDataList);
  193. dataList.addAll(shearMonth);
  194. //月平均风速标差
  195. ArrayList<WindTowerCalculationData> staMonth = windTowerCalculationDataService.staMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList);
  196. dataList.addAll(staMonth);
  197. //月环境数据 温湿压最大最小平均
  198. ArrayList<WindTowerCalculationData> environmentData = windTowerCalculationDataService.environmentData(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList);
  199. dataList.addAll(environmentData);
  200. // 月玫瑰图
  201. windDirectionStatisticsDataService.roseMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, prophaseWeatherDataList, equipmentAttributeList);
  202. }
  203. // 统计概述
  204. statisticsSituationService.statisticsSituation(windTowerInfo, statisticsSituations, equipmentAttributeList);
  205. //保存
  206. windTowerCalculationDataService.saveBatchByEquipmentId(dataList, windTowerInfo.getEquipmentNo());
  207. }
  208. }
  209. //存储杨总数据
  210. // @Scheduled(cron = "0 30 14 6 7 ?")
  211. public void saveJsonY() {
  212. // String s = apiHDY.jsonY(DateUtil.format(new Date(), "yyyyMMdd"));
  213. 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\"}}";
  214. List<StationInfo> stationInfos = stationInfoService.selectStationInfo();
  215. stationInfos = stationInfos.stream().filter(w -> w.getStationBasicInfo().getStationType().equals("光")).collect(Collectors.toList());
  216. List<FanModelData> fanModelDataList = fanModelDataService.getFanModelDataList();
  217. for (StationInfo stationInfo : stationInfos) {
  218. JSONObject jsonObject = JSONUtil.parseObj(s);
  219. JSONObject jsonObject1 = JSONUtil.parseObj(jsonObject.get(stationInfo.getStationBasicInfo().getAbbreviation()));
  220. if (jsonObject1.size() == 0) {
  221. continue;
  222. }
  223. FanJsonInfo towerJsonInfo = jsonObject1.toBean(FanJsonInfo.class);
  224. //存储tdEngine
  225. convertData(towerJsonInfo, stationInfo);
  226. //存储mongo
  227. saveMongoBattery(stationInfo, towerJsonInfo, fanModelDataList);
  228. }
  229. }
  230. public void saveMongoBattery(StationInfo stationInfo, FanJsonInfo towerJsonInfo, List<FanModelData> fanModelDataList) {
  231. String[] strArr = new String[]{towerJsonInfo.getFdln(), towerJsonInfo.getFd1n(), towerJsonInfo.getFd2n(), towerJsonInfo.getFd3n(), towerJsonInfo.getFd4n()};
  232. List<String> collect = new ArrayList<>();
  233. Map<String, List<Object>> modelMap = new HashMap<>();
  234. if (stationInfo.getStationBasicInfo().getStationType().equals("风")) {
  235. //根据风机类型分组
  236. Map<String, List<Object>> map = new HashMap<>();
  237. for (FanTower fanTower : stationInfo.getFanTowerList()) {
  238. map.computeIfAbsent(fanTower.getFanModel(), k -> new ArrayList<>()).add(fanTower);
  239. }
  240. modelMap = map;
  241. collect = stationInfo.getFanTowerList().stream().map(FanTower::getFanModel).distinct().collect(Collectors.toList());
  242. } else {
  243. collect = stationInfo.getInverterInfos().stream().map(InverterInfo::getModelNumber).distinct().collect(Collectors.toList());
  244. Map<String, List<Object>> map = new HashMap<>();
  245. for (InverterInfo inverterInfo : stationInfo.getInverterInfos()) {
  246. map.computeIfAbsent(inverterInfo.getModelNumber(), k -> new ArrayList<>()).add(inverterInfo);
  247. }
  248. modelMap = map;
  249. }
  250. String fdn = "";
  251. for (int i = 0; i < collect.size(); i++) {
  252. if (collect.size() == 1) {
  253. fdn = strArr[i];
  254. } else {
  255. fdn = strArr[i + 1];
  256. }
  257. String modelName = collect.get(i);
  258. if (StrUtil.isBlank(modelName)) {
  259. continue;
  260. }
  261. BigDecimal realTimeTotal = BigDecimal.ZERO;
  262. String capacity = CalculationUtil.getNumberFromStringForDian(modelName);
  263. if(stationInfo.getStationBasicInfo().getStationType().equals("光")){
  264. capacity = stationInfo.getInverterInfos().get(0).getCapacity();
  265. }
  266. if (StrUtil.isBlank(modelName)) {
  267. continue;
  268. }
  269. int fanTotal = modelMap.get(modelName).size();
  270. fdn = new BigDecimal(fdn).multiply(BigDecimal.valueOf(10)).toString();
  271. realTimeTotal = new BigDecimal(fdn).divide(new BigDecimal(capacity).multiply(new BigDecimal(fanTotal)), 2, BigDecimal.ROUND_HALF_UP);//满发小时数(年)
  272. //一期
  273. FanModelData fanModelData = new FanModelData(UUID.randomUUID().toString(), stationInfo.getId(),
  274. stationInfo.getStationBasicInfo().getStationName(), modelName, stationInfo.getStationBasicInfo().getAbbreviation(),
  275. new BigDecimal(towerJsonInfo.getPjfs()).setScale(2, RoundingMode.HALF_UP).toString(), towerJsonInfo.getZfx(),
  276. fdn, realTimeTotal.toString());
  277. //发电量(年)
  278. fdn = new BigDecimal(towerJsonInfo.getFd2n()).setScale(2, RoundingMode.HALF_UP).toString();
  279. List<FanModelData> modelDataList = fanModelDataList.stream().filter(f -> f.getStationId().equals(stationInfo.getId())
  280. && f.getModelName().equals(modelName)).collect(Collectors.toList());
  281. if (modelDataList.size() > 0) {
  282. // System.out.println("删除");
  283. // fanModelDataService.deleteFanModelData(modelDataList.get(0).getId());
  284. //
  285. }
  286. // System.out.println("新增");
  287. // mongoTemplate.save(fanModelData);
  288. //
  289. }
  290. }
  291. public void convertData(FanJsonInfo towerJsonInfo, StationInfo stationInfo) {
  292. TotalBatteryData totalBatteryData = new TotalBatteryData();
  293. BeanUtil.copyProperties(towerJsonInfo, totalBatteryData);
  294. batteryMultiplyTen(totalBatteryData);
  295. DateTime yesterday = DateUtil.yesterday();
  296. totalBatteryData.setTs(new Timestamp(DateUtil.beginOfDay(yesterday).getTime()));
  297. if (StrUtil.isNotBlank(stationInfo.getStationBasicInfo().getCapacity())) {
  298. BigDecimal equivalentHour = new BigDecimal(totalBatteryData.getFdln()).divide(new BigDecimal(stationInfo.getStationBasicInfo().getCapacity().trim()), 3, RoundingMode.HALF_UP);
  299. totalBatteryData.setEquivalentHour(equivalentHour.floatValue());
  300. }
  301. totalBatteryData.setStationNameEasy(stationInfo.getStationBasicInfo().getAbbreviation());
  302. totalBatteryDataService.insertOne(totalBatteryData);
  303. }
  304. public void batteryMultiplyTen(TotalBatteryData totalBatteryData) {
  305. try {
  306. Class<? extends TotalBatteryData> aClass = totalBatteryData.getClass();
  307. Field[] declaredFields = aClass.getDeclaredFields();
  308. for (Field declaredField : declaredFields) {
  309. if (declaredField.getName().contains("fd")) {
  310. declaredField.setAccessible(true);
  311. PropertyDescriptor pd = new PropertyDescriptor(declaredField.getName(), aClass);
  312. Method getMethod = pd.getReadMethod();
  313. String invoke = (String) getMethod.invoke(totalBatteryData);
  314. BigDecimal batteryTen = new BigDecimal(invoke).multiply(BigDecimal.valueOf(10)).setScale(2, RoundingMode.HALF_UP);
  315. declaredField.set(totalBatteryData, batteryTen.toString());
  316. }
  317. }
  318. } catch (Exception e) {
  319. throw new RuntimeException(e);
  320. }
  321. }
  322. }