package com.jiayue.biz.job; import ch.qos.logback.classic.spi.STEUtil; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateTime; import cn.hutool.core.util.StrUtil; import cn.hutool.db.Entity; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.jiayue.biz.api.apiHDY; import com.jiayue.biz.domain.*; import com.jiayue.biz.service.*; import com.jiayue.biz.service.impl.*; import com.jiayue.biz.util.CalculationUtil; import com.jiayue.biz.util.DateTimeUtil; import com.jiayue.common.utils.DateUtil; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.math.BigDecimal; import java.math.RoundingMode; import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @Slf4j @Service @EnableScheduling @AllArgsConstructor public class AirDensityJob { private final WindTowerCalculationDataServiceImpl windTowerCalculationDataService; private final WindTowerInfoServiceImpl windTowerInfoService; private final WindDirectionStatisticsDataServiceImpl windDirectionStatisticsDataService; private final EquipmentAttributeService equipmentAttributeService; private final StatisticsSituationServiceImpl statisticsSituationService; private final ProphaseAnemometryDataService prophaseAnemometryDataService; private final ProphaseWeatherDataService prophaseWeatherDataService; private final StationInfoService stationInfoService; private final MongoTemplate mongoTemplate; private final com.jiayue.biz.api.apiHDY apiHDY; private final FanModelDataService fanModelDataService; private final TotalBatteryDataService totalBatteryDataService; @Scheduled(cron = "0 0 19 * * ?") public void AirDensityCalculation() { List windTowerInfoList = windTowerInfoService.list(); // 统计概述信息 List statisticsSituations = statisticsSituationService.list(); // 设备属性信息 List 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 endMonthDate = DateTimeUtil.endOfMonth(endDate); for (WindTowerInfo windTowerInfo : windTowerInfoList) { WindTowerCalculationData lastData = windTowerCalculationDataService.getLastDataCalculation(windTowerInfo.getEquipmentNo()); List lastRealData = prophaseWeatherDataService.getLastData(windTowerInfo.getEquipmentNo()); if (lastData != null && lastRealData != null) { Timestamp timestamp = (Timestamp) lastRealData.get(0).get("last (ts)"); //获取统计数据最后数据的时间 long lastTime = DateUtil.endOfDay(lastData.getTime()).getTime(); //获取邮件数据最后数据的时间 long realTime = DateUtil.endOfDay(new Date(timestamp.getTime())).getTime(); //如果两个时间相等则不需要计算 if (lastTime == realTime) { continue; } //如果邮件的数据比统计数据的时候大8天 则取统计数据的时间作为开始时间 if (realTime - lastTime >= 60 * 60 * 24 * 1000 * 8) { startDate = new Date(lastTime); } } //传入时间的月初 Date startMonthDate = DateTimeUtil.beginOfMonth(startDate); //风数据查询 List prophaseAnemometryDataList = prophaseAnemometryDataService.selectAll(windTowerInfo.getEquipmentNo(), new Timestamp(startMonthDate.getTime()), new Timestamp(endMonthDate.getTime())); //环境数据查询 List prophaseWeatherDataList = prophaseWeatherDataService.selectPublicData(windTowerInfo.getEquipmentNo(), new Timestamp(startMonthDate.getTime()), new Timestamp(endMonthDate.getTime())); //统计数据 List windTowerCalculationDataList = windTowerCalculationDataService.getByBetweenTimeAndEquipmentId(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo()); //小时平均风速风功率密度 ArrayList wsAndWpdList = windTowerCalculationDataService.calculateWindPowerDensity(startDate.getTime(), endDate.getTime(), windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, prophaseWeatherDataList, equipmentAttributeList, windTowerCalculationDataList); ArrayList dataList = new ArrayList<>(wsAndWpdList); //每小时风切变指数 ArrayList windShearList = windTowerCalculationDataService.calculateWindPowerShear(startDate, endDate, windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, windTowerCalculationDataList); dataList.addAll(windShearList); //日平均温度 ArrayList tList = windTowerCalculationDataService.tDay(startDate, endDate, windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList); dataList.addAll(tList); //日平均气压 ArrayList paList = windTowerCalculationDataService.paDay(startDate, endDate, windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList); dataList.addAll(paList); //发电量与满发小时数 ArrayList calculateBattery = windTowerCalculationDataService.calculateBattery(startDate.getTime(), endDate.getTime(), windTowerInfo, prophaseAnemometryDataList, equipmentAttributeList, windTowerCalculationDataList); dataList.addAll(calculateBattery); //日平均空气密度 ArrayList airList = windTowerCalculationDataService.airDensityDay(startDate, endDate, windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList, windTowerCalculationDataList); dataList.addAll(airList); //日平均风速标差 ArrayList staDay = windTowerCalculationDataService.calculateStaDay(startDate, endDate, windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList, windTowerCalculationDataList); dataList.addAll(staDay); //日平均风速 ArrayList wsDayList = windTowerCalculationDataService.wsDay(startDate, endDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList); dataList.addAll(wsDayList); //日平均湍流 ArrayList turList = windTowerCalculationDataService.turbulenceDay(startDate, endDate, windTowerInfo.getEquipmentNo(), equipmentAttributeList, windTowerInfoList, windTowerCalculationDataList); dataList.addAll(turList); //日平均风切变 ArrayList windShearDay = windTowerCalculationDataService.shearDay(startDate, endDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList, prophaseAnemometryDataList); dataList.addAll(windShearDay); //日平均风功率密度 ArrayList wpdDayList = windTowerCalculationDataService.wpdDay(startDate, endDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList); dataList.addAll(wpdDayList); //如果结束时间和数据统计的时间相差大于30天就分割月份进行计算 if (endDate.getTime() - startDate.getTime() > 86400000L * 30) { List dateTime = DateTimeUtil.getIntervalTimeByMonth(DateTimeUtil.beginOfMonth(startDate), DateTimeUtil.beginOfMonth(endDate)); for (Long l : dateTime) { //月平均风速 ArrayList wsMonth = windTowerCalculationDataService.wsMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList); dataList.addAll(wsMonth); //月平均风功率密度 ArrayList wpdMonth = windTowerCalculationDataService.wpdMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList); dataList.addAll(wpdMonth); //月平均湍流 ArrayList turbulenceMonth = windTowerCalculationDataService.turbulenceMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList); dataList.addAll(turbulenceMonth); //月平均空气密度 ArrayList airDensityMonth = windTowerCalculationDataService.airDensityMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList); dataList.addAll(airDensityMonth); //月最大风速 ArrayList wsMaxMonth = windTowerCalculationDataService.wsMaxMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList); dataList.addAll(wsMaxMonth); //月平均风切变 ArrayList shearMonth = windTowerCalculationDataService.shearMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList, prophaseAnemometryDataList); dataList.addAll(shearMonth); //月平均风速标差 ArrayList staMonth = windTowerCalculationDataService.staMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList); dataList.addAll(staMonth); //月玫瑰图 windDirectionStatisticsDataService.roseMonth(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, prophaseWeatherDataList, equipmentAttributeList); //月平均环境数据 ArrayList environmentData = windTowerCalculationDataService.environmentData(DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList); dataList.addAll(environmentData); //空气密度月逐时 ArrayList airDensityMonth1 = windTowerCalculationDataService.airDensityMonth(windTowerInfo.getEquipmentNo(), DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), prophaseWeatherDataList); dataList.addAll(airDensityMonth1); //湍流月逐时 ArrayList turbulenceHourForMonth = windTowerCalculationDataService.turbulenceHourForMonth(windTowerInfo.getEquipmentNo(), DateTimeUtil.beginOfMonth(new Date(l)), DateTimeUtil.endOfMonth(new Date(l)), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList); dataList.addAll(turbulenceHourForMonth); } } else { //空气密度月逐时 ArrayList airDensityMonth = windTowerCalculationDataService.airDensityMonth(windTowerInfo.getEquipmentNo(), startMonthDate, endMonthDate, prophaseWeatherDataList); dataList.addAll(airDensityMonth); //湍流月逐时 ArrayList turbulenceHourForMonth = windTowerCalculationDataService.turbulenceHourForMonth(windTowerInfo.getEquipmentNo(), startMonthDate, endMonthDate, prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList); dataList.addAll(turbulenceHourForMonth); //月平均空气密度 ArrayList airDensityMonth1 = windTowerCalculationDataService.airDensityMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList); dataList.addAll(airDensityMonth1); //月平均湍流 ArrayList turbulenceMonth = windTowerCalculationDataService.turbulenceMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList); dataList.addAll(turbulenceMonth); //月平均风速 ArrayList wsMonth = windTowerCalculationDataService.wsMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList); dataList.addAll(wsMonth); //月平均风功率密度 ArrayList wpdMonth = windTowerCalculationDataService.wpdMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList); dataList.addAll(wpdMonth); //月最大风速 ArrayList wsMaxMonth = windTowerCalculationDataService.wsMaxMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList); dataList.addAll(wsMaxMonth); //月平均风切变 ArrayList shearMonth = windTowerCalculationDataService.shearMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), windTowerCalculationDataList, equipmentAttributeList, windTowerInfoList, prophaseAnemometryDataList); dataList.addAll(shearMonth); //月平均风速标差 ArrayList staMonth = windTowerCalculationDataService.staMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, equipmentAttributeList, windTowerInfoList); dataList.addAll(staMonth); //月环境数据 温湿压最大最小平均 ArrayList environmentData = windTowerCalculationDataService.environmentData(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), prophaseWeatherDataList, equipmentAttributeList); dataList.addAll(environmentData); // 月玫瑰图 windDirectionStatisticsDataService.roseMonth(startMonthDate, endMonthDate, windTowerInfo.getEquipmentNo(), prophaseAnemometryDataList, prophaseWeatherDataList, equipmentAttributeList); } // 统计概述 statisticsSituationService.statisticsSituation(windTowerInfo, statisticsSituations, equipmentAttributeList); //保存 windTowerCalculationDataService.saveBatchByEquipmentId(dataList, windTowerInfo.getEquipmentNo()); } } //存储杨总数据 // @Scheduled(cron = "0 30 14 6 7 ?") public void saveJsonY() { // String s = apiHDY.jsonY(DateUtil.format(new Date(), "yyyyMMdd")); 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\"}}"; List stationInfos = stationInfoService.selectStationInfo(); List fanModelDataList = fanModelDataService.getFanModelDataList(); for (StationInfo stationInfo : stationInfos) { JSONObject jsonObject = JSONUtil.parseObj(s); JSONObject jsonObject1 = JSONUtil.parseObj(jsonObject.get(stationInfo.getStationBasicInfo().getAbbreviation())); if (jsonObject1.size() == 0) { continue; } FanJsonInfo towerJsonInfo = jsonObject1.toBean(FanJsonInfo.class); //存储tdEngine convertData(towerJsonInfo, stationInfo); //存储mongo // saveMongoBattery(stationInfo, towerJsonInfo, fanModelDataList); } } public void saveMongoBattery(StationInfo stationInfo, FanJsonInfo towerJsonInfo, List fanModelDataList) { String[] strArr = new String[]{towerJsonInfo.getFdln(), towerJsonInfo.getFd1n(), towerJsonInfo.getFd2n(), towerJsonInfo.getFd3n(), towerJsonInfo.getFd4n()}; List collect = new ArrayList<>(); if (stationInfo.getStationBasicInfo().getStationType().equals("风")) { collect = stationInfo.getFanTowerList().stream().map(FanTower::getFanModel).distinct().collect(Collectors.toList()); } else { collect = stationInfo.getInverterInfos().stream().map(InverterInfo::getModelNumber).distinct().collect(Collectors.toList()); } String fdn = ""; for (int i = 0; i < collect.size(); i++) { if (collect.size() == 1) { fdn = strArr[i]; } else { fdn = strArr[i + 1]; } String s1 = collect.get(i); if (StrUtil.isBlank(s1)) { continue; } BigDecimal realTimeTotal = BigDecimal.ZERO; String s2 = CalculationUtil.getNumberFromStringForDian(s1); if (StrUtil.isBlank(s2)) { continue; } //根据风机类型分组 Map> modelMap = stationInfo.getFanTowerList().stream() .collect(Collectors.groupingBy(FanTower::getFanModel)); int fanTotal = modelMap.get(s1).size(); fdn = new BigDecimal(fdn).multiply(BigDecimal.valueOf(10)).toString(); realTimeTotal = new BigDecimal(fdn).divide(new BigDecimal(s2).multiply(new BigDecimal(fanTotal)), 2, BigDecimal.ROUND_HALF_UP);//满发小时数(年) //一期 FanModelData fanModelData = new FanModelData(UUID.randomUUID().toString(), stationInfo.getId(), stationInfo.getStationBasicInfo().getStationName(), s1, stationInfo.getStationBasicInfo().getAbbreviation(), new BigDecimal(towerJsonInfo.getPjfs()).setScale(2, RoundingMode.HALF_UP).toString(), towerJsonInfo.getZfx(), fdn, realTimeTotal.toString()); //发电量(年) fdn = new BigDecimal(towerJsonInfo.getFd2n()).setScale(2, RoundingMode.HALF_UP).toString(); List modelDataList = fanModelDataList.stream().filter(f -> f.getStationId().equals(stationInfo.getId()) && f.getModelName().equals(s1)).collect(Collectors.toList()); if (modelDataList.size() > 0) { // System.out.println("删除"); // fanModelDataService.deleteFanModelData(modelDataList.get(0).getId()); // } // System.out.println("新增"); // mongoTemplate.save(fanModelData); // } } public void convertData(FanJsonInfo towerJsonInfo, StationInfo stationInfo) { TotalBatteryData totalBatteryData = new TotalBatteryData(); BeanUtil.copyProperties(towerJsonInfo, totalBatteryData); batteryMultiplyTen(totalBatteryData); DateTime yesterday = DateUtil.yesterday(); totalBatteryData.setTs(new Timestamp(DateUtil.beginOfDay(yesterday).getTime())); if (StrUtil.isNotBlank(stationInfo.getStationBasicInfo().getCapacity())) { BigDecimal equivalentHour = new BigDecimal(totalBatteryData.getFdln()).divide(new BigDecimal(stationInfo.getStationBasicInfo().getCapacity()), 3, RoundingMode.HALF_UP); totalBatteryData.setEquivalentHour(equivalentHour.floatValue()); } totalBatteryData.setStationNameEasy(stationInfo.getStationBasicInfo().getAbbreviation()); totalBatteryDataService.insertOne(totalBatteryData); } public void batteryMultiplyTen(TotalBatteryData totalBatteryData) { try { Class aClass = totalBatteryData.getClass(); Field[] declaredFields = aClass.getDeclaredFields(); for (Field declaredField : declaredFields) { if (declaredField.getName().contains("fd")) { declaredField.setAccessible(true); PropertyDescriptor pd = new PropertyDescriptor(declaredField.getName(), aClass); Method getMethod = pd.getReadMethod(); String invoke = (String) getMethod.invoke(totalBatteryData); BigDecimal batteryTen = new BigDecimal(invoke).multiply(BigDecimal.valueOf(10)).setScale(2,RoundingMode.HALF_UP); declaredField.set(totalBatteryData, batteryTen.toString()); } } } catch (Exception e) { throw new RuntimeException(e); } } }