|
@@ -0,0 +1,149 @@
|
|
|
+package com.cpp.web.service.datafactory;
|
|
|
+
|
|
|
+import com.cpp.common.utils.spring.SpringUtils;
|
|
|
+import com.cpp.system.service.ISysConfigService;
|
|
|
+import com.cpp.web.domain.station.*;
|
|
|
+import com.cpp.web.service.station.*;
|
|
|
+import com.cpp.web.utils.DateTimeUtil;
|
|
|
+
|
|
|
+import java.util.*;
|
|
|
+import java.util.concurrent.ConcurrentHashMap;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+public class DataStore {
|
|
|
+
|
|
|
+
|
|
|
+ Map<String, Object> map = new ConcurrentHashMap<>();
|
|
|
+
|
|
|
+ public static final DataStore getInstance() {
|
|
|
+ return DataStore.LazyHolder.INSTANCE;
|
|
|
+ }
|
|
|
+
|
|
|
+ private static class LazyHolder {
|
|
|
+ private static final DataStore INSTANCE = new DataStore();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public <T> void setData(List<T> t, String stationCode) {
|
|
|
+ this.map.put(stationCode + t.get(0).getClass().getName(), t);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public <T> T getData(String stationCode, Class<T> clazz) {
|
|
|
+ Object o = this.map.get(stationCode + clazz.getName());
|
|
|
+ if (o!=null){
|
|
|
+ Date date = null;
|
|
|
+ if (ForecastPowerShortTermStation.class.equals(clazz)) {
|
|
|
+ List<ForecastPowerShortTermStation> forecastPowerShortTermStationList = ((List<ForecastPowerShortTermStation>) o);
|
|
|
+ date = DateTimeUtil.getMomentTimeFor15Minute(System.currentTimeMillis());
|
|
|
+ Date finalDate1 = date;
|
|
|
+ List<ForecastPowerShortTermStation> forecastPowerShortTermStations = forecastPowerShortTermStationList.stream().filter(f -> f.getTime().equals(finalDate1)).collect(Collectors.toList());
|
|
|
+ if (forecastPowerShortTermStations.size() > 0) {
|
|
|
+ return (T) forecastPowerShortTermStations.get(0);
|
|
|
+ } else {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ } else if (ForecastPowerUltraShortTermStation.class.equals(clazz)) {
|
|
|
+ List<ForecastPowerUltraShortTermStation> forecastPowerUltraShortTermStationList = ((List<ForecastPowerUltraShortTermStation>) o);
|
|
|
+ date = DateTimeUtil.getMomentTimeFor15Minute(System.currentTimeMillis());
|
|
|
+ Date finalDate = date;
|
|
|
+ List<ForecastPowerUltraShortTermStation> forecastPowerUltraShortTermStations = forecastPowerUltraShortTermStationList.stream().filter(f -> f.getTime().equals(finalDate)).collect(Collectors.toList());
|
|
|
+ if (forecastPowerUltraShortTermStations.size() > 0) {
|
|
|
+ return (T) forecastPowerUltraShortTermStations.get(0);
|
|
|
+ } else {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ } else if (PowerStationStatusData.class.equals(clazz) || WeatherStationStatusData.class.equals(clazz) || WindTowerStatusData.class.equals(clazz)) {
|
|
|
+ return ((List<T>) o).get(0);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return null;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public void init() {
|
|
|
+
|
|
|
+
|
|
|
+ ISysConfigService configService = SpringUtils.getBean(ISysConfigService.class);
|
|
|
+ ElectricFieldService electricFieldService = SpringUtils.getBean(ElectricFieldService.class);
|
|
|
+ PowerStationStatusDataService powerStationStatusDataService = SpringUtils.getBean(PowerStationStatusDataService.class);
|
|
|
+ ForecastPowerShortTermStationService forecastPowerShortTermStationService = SpringUtils.getBean(ForecastPowerShortTermStationService.class);
|
|
|
+ ForecastPowerUltraShortTermStationService forecastPowerUltraShortTermStationService = SpringUtils.getBean(ForecastPowerUltraShortTermStationService.class);
|
|
|
+ WindTowerStatusDataService windTowerStatusDataService = SpringUtils.getBean(WindTowerStatusDataService.class);
|
|
|
+ WeatherStationStatusDataService weatherStationStatusDataService = SpringUtils.getBean(WeatherStationStatusDataService.class);
|
|
|
+
|
|
|
+ List<ElectricField> electricFieldList = electricFieldService.list();
|
|
|
+
|
|
|
+ Date dayStartTime = DateTimeUtil.getDayStartTime(System.currentTimeMillis());
|
|
|
+ //不清楚短期是否解析过,多查询一天直接置入
|
|
|
+ Date dayEndTime = DateTimeUtil.getDayLastTime(System.currentTimeMillis() + 86400000L);
|
|
|
+
|
|
|
+
|
|
|
+ if (electricFieldList.size() > 0) {
|
|
|
+
|
|
|
+
|
|
|
+ int dqAgo = 1;
|
|
|
+ try {
|
|
|
+ String dqHowLongAgo = configService.selectConfigByKey("dqHowLongAgo");
|
|
|
+ dqAgo = Integer.parseInt(dqHowLongAgo);
|
|
|
+ } catch (Exception e) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ int cdqAgo = 1;
|
|
|
+ try {
|
|
|
+ String cdqHowLongAgo = configService.selectConfigByKey("cdqHowLongAgo");
|
|
|
+ cdqAgo = Integer.parseInt(cdqHowLongAgo);
|
|
|
+ } catch (Exception e) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String, List<PowerStationStatusData>> powerStationStatusDataListMap = powerStationStatusDataService.findByTimeBetween(dayStartTime, dayEndTime).stream().collect(Collectors.groupingBy(PowerStationStatusData::getStationCode, Collectors.toList()));
|
|
|
+ Map<String, List<ForecastPowerShortTermStation>> forecastPowerShortTermStationListMap = forecastPowerShortTermStationService.findByForecastTimeBetweenAndHowLongAgo(dayStartTime, dayEndTime, dqAgo).stream().collect(Collectors.groupingBy(ForecastPowerShortTermStation::getStationCode, Collectors.toList()));
|
|
|
+ Map<String, List<ForecastPowerUltraShortTermStation>> forecastPowerUltraShortTermStationListMap = forecastPowerUltraShortTermStationService.findByForecastTimeBetweenAndHowLongAgo(dayStartTime, dayEndTime, cdqAgo).stream().collect(Collectors.groupingBy(ForecastPowerUltraShortTermStation::getStationCode, Collectors.toList()));
|
|
|
+ Map<String, List<WindTowerStatusData>> windTowerStatusDataListMap = windTowerStatusDataService.findByBetweenTimeAndStationCode(dayStartTime, dayEndTime, null).stream().collect(Collectors.groupingBy(WindTowerStatusData::getStationCode, Collectors.toList()));
|
|
|
+ Map<String, List<WeatherStationStatusData>> weatherStationStatusDataListMap = weatherStationStatusDataService.findByBetweenTimeAndStationCode(dayStartTime, dayEndTime, null).stream().collect(Collectors.groupingBy(WeatherStationStatusData::getStationCode, Collectors.toList()));
|
|
|
+
|
|
|
+
|
|
|
+ for (ElectricField electricField : electricFieldList) {
|
|
|
+ String stationCode = electricField.getStationCode();
|
|
|
+ if (powerStationStatusDataListMap.containsKey(stationCode)) {
|
|
|
+ PowerStationStatusData powerStationStatusData = powerStationStatusDataListMap.get(stationCode).stream().max(Comparator.comparing(p -> p.getTime().getTime())).get();
|
|
|
+ setData(Arrays.asList(powerStationStatusData), stationCode);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (electricField.getElectricFieldTypeEnum().equals("E2") && windTowerStatusDataListMap.containsKey(stationCode)) {
|
|
|
+ WindTowerStatusData windTowerStatusData = windTowerStatusDataListMap.get(stationCode).stream().max(Comparator.comparing(p -> p.getTime().getTime())).get();
|
|
|
+ setData(Arrays.asList(windTowerStatusData), stationCode);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (electricField.getElectricFieldTypeEnum().equals("E1") && weatherStationStatusDataListMap.containsKey(stationCode)) {
|
|
|
+ WeatherStationStatusData weatherStationStatusData = weatherStationStatusDataListMap.get(stationCode).stream().max(Comparator.comparing(p -> p.getTime().getTime())).get();
|
|
|
+ setData(Arrays.asList(weatherStationStatusData), stationCode);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (forecastPowerShortTermStationListMap.containsKey(stationCode)) {
|
|
|
+ List<ForecastPowerShortTermStation> forecastPowerShortTermStations = forecastPowerShortTermStationListMap.get(stationCode);
|
|
|
+ setData(forecastPowerShortTermStations, stationCode);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if (forecastPowerUltraShortTermStationListMap.containsKey(stationCode)) {
|
|
|
+ List<ForecastPowerUltraShortTermStation> forecastPowerUltraShortTermStations = forecastPowerUltraShortTermStationListMap.get(stationCode);
|
|
|
+ setData(forecastPowerUltraShortTermStations, stationCode);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|