|
@@ -5,7 +5,10 @@ import com.cpp.system.service.ISysConfigService;
|
|
import com.cpp.web.domain.station.*;
|
|
import com.cpp.web.domain.station.*;
|
|
import com.cpp.web.service.station.*;
|
|
import com.cpp.web.service.station.*;
|
|
import com.cpp.web.utils.DateTimeUtil;
|
|
import com.cpp.web.utils.DateTimeUtil;
|
|
|
|
+import lombok.Data;
|
|
|
|
|
|
|
|
+import java.util.LinkedList;
|
|
|
|
+import java.util.NoSuchElementException;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
@@ -25,17 +28,39 @@ public class DataStore {
|
|
|
|
|
|
|
|
|
|
public <T> void setData(List<T> t, String stationCode) {
|
|
public <T> void setData(List<T> t, String stationCode) {
|
|
- if (t.size()>0)
|
|
|
|
- this.map.put(stationCode + t.get(0).getClass().getName(), t);
|
|
|
|
|
|
+ if (t.size() > 0) {
|
|
|
|
+ Class<?> clazz = t.get(0).getClass();
|
|
|
|
+ if (ForecastPowerShortTermRegulation.class.equals(clazz)) {
|
|
|
|
+ if (this.map.containsKey(stationCode + clazz.getName())) {
|
|
|
|
+ FixedSizeCollection<T> fixedSizeCollection = ((FixedSizeCollection<T>) this.map.get(stationCode + clazz.getName()));
|
|
|
|
+ t.forEach(obj -> fixedSizeCollection.add(obj));
|
|
|
|
+ } else {
|
|
|
|
+ FixedSizeCollection<T> fixedSizeCollection = new FixedSizeCollection<>(960);
|
|
|
|
+ t.forEach(obj -> fixedSizeCollection.add(obj));
|
|
|
|
+ this.map.put(stationCode + clazz.getName(), fixedSizeCollection);
|
|
|
|
+ }
|
|
|
|
+ } else if (ForecastPowerUltraShortTermRegulation.class.equals(clazz)) {
|
|
|
|
+ if (this.map.containsKey(stationCode + clazz.getName())) {
|
|
|
|
+ FixedSizeCollection<T> fixedSizeCollection = ((FixedSizeCollection<T>) this.map.get(stationCode + clazz.getName()));
|
|
|
|
+ t.forEach(obj -> fixedSizeCollection.add(obj));
|
|
|
|
+ } else {
|
|
|
|
+ FixedSizeCollection<T> fixedSizeCollection = new FixedSizeCollection<>(16);
|
|
|
|
+ t.forEach(obj -> fixedSizeCollection.add(obj));
|
|
|
|
+ this.map.put(stationCode + clazz.getName(), fixedSizeCollection);
|
|
|
|
+ }
|
|
|
|
+ } else if (PowerStationStatusData.class.equals(clazz) || WeatherStationStatusData.class.equals(clazz) || WindTowerStatusData.class.equals(clazz)) {
|
|
|
|
+ this.map.put(stationCode + clazz.getName(), t);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
public <T> T getData(String stationCode, Class<T> clazz) {
|
|
public <T> T getData(String stationCode, Class<T> clazz) {
|
|
Object o = this.map.get(stationCode + clazz.getName());
|
|
Object o = this.map.get(stationCode + clazz.getName());
|
|
- if (o!=null){
|
|
|
|
|
|
+ if (o != null) {
|
|
Date date = null;
|
|
Date date = null;
|
|
if (ForecastPowerShortTermRegulation.class.equals(clazz)) {
|
|
if (ForecastPowerShortTermRegulation.class.equals(clazz)) {
|
|
- List<ForecastPowerShortTermRegulation> forecastPowerShortTermRegulationList = ((List<ForecastPowerShortTermRegulation>) o);
|
|
|
|
|
|
+ List<ForecastPowerShortTermRegulation> forecastPowerShortTermRegulationList = ((FixedSizeCollection<ForecastPowerShortTermRegulation>) o).getList();
|
|
date = DateTimeUtil.getMomentTimeFor15Minute(System.currentTimeMillis());
|
|
date = DateTimeUtil.getMomentTimeFor15Minute(System.currentTimeMillis());
|
|
Date finalDate1 = date;
|
|
Date finalDate1 = date;
|
|
List<ForecastPowerShortTermRegulation> forecastPowerShortTermRegulations = forecastPowerShortTermRegulationList.stream().filter(f -> f.getTime().equals(finalDate1)).collect(Collectors.toList());
|
|
List<ForecastPowerShortTermRegulation> forecastPowerShortTermRegulations = forecastPowerShortTermRegulationList.stream().filter(f -> f.getTime().equals(finalDate1)).collect(Collectors.toList());
|
|
@@ -45,7 +70,7 @@ public class DataStore {
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|
|
} else if (ForecastPowerUltraShortTermRegulation.class.equals(clazz)) {
|
|
} else if (ForecastPowerUltraShortTermRegulation.class.equals(clazz)) {
|
|
- List<ForecastPowerUltraShortTermRegulation> forecastPowerUltraShortTermRegulationList = ((List<ForecastPowerUltraShortTermRegulation>) o);
|
|
|
|
|
|
+ List<ForecastPowerUltraShortTermRegulation> forecastPowerUltraShortTermRegulationList = ((FixedSizeCollection<ForecastPowerUltraShortTermRegulation>) o).getList();
|
|
date = DateTimeUtil.getMomentTimeFor15Minute(System.currentTimeMillis());
|
|
date = DateTimeUtil.getMomentTimeFor15Minute(System.currentTimeMillis());
|
|
Date finalDate = date;
|
|
Date finalDate = date;
|
|
List<ForecastPowerUltraShortTermRegulation> forecastPowerUltraShortTermRegulations = forecastPowerUltraShortTermRegulationList.stream().filter(f -> f.getTime().equals(finalDate)).collect(Collectors.toList());
|
|
List<ForecastPowerUltraShortTermRegulation> forecastPowerUltraShortTermRegulations = forecastPowerUltraShortTermRegulationList.stream().filter(f -> f.getTime().equals(finalDate)).collect(Collectors.toList());
|
|
@@ -57,16 +82,12 @@ public class DataStore {
|
|
} else if (PowerStationStatusData.class.equals(clazz) || WeatherStationStatusData.class.equals(clazz) || WindTowerStatusData.class.equals(clazz)) {
|
|
} else if (PowerStationStatusData.class.equals(clazz) || WeatherStationStatusData.class.equals(clazz) || WindTowerStatusData.class.equals(clazz)) {
|
|
return ((List<T>) o).get(0);
|
|
return ((List<T>) o).get(0);
|
|
}
|
|
}
|
|
-
|
|
|
|
}
|
|
}
|
|
-
|
|
|
|
return null;
|
|
return null;
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
public void init() {
|
|
public void init() {
|
|
-
|
|
|
|
-
|
|
|
|
ISysConfigService configService = SpringUtils.getBean(ISysConfigService.class);
|
|
ISysConfigService configService = SpringUtils.getBean(ISysConfigService.class);
|
|
ElectricFieldService electricFieldService = SpringUtils.getBean(ElectricFieldService.class);
|
|
ElectricFieldService electricFieldService = SpringUtils.getBean(ElectricFieldService.class);
|
|
PowerStationStatusDataService powerStationStatusDataService = SpringUtils.getBean(PowerStationStatusDataService.class);
|
|
PowerStationStatusDataService powerStationStatusDataService = SpringUtils.getBean(PowerStationStatusDataService.class);
|
|
@@ -76,30 +97,21 @@ public class DataStore {
|
|
WeatherStationStatusDataService weatherStationStatusDataService = SpringUtils.getBean(WeatherStationStatusDataService.class);
|
|
WeatherStationStatusDataService weatherStationStatusDataService = SpringUtils.getBean(WeatherStationStatusDataService.class);
|
|
|
|
|
|
List<ElectricField> electricFieldList = electricFieldService.list();
|
|
List<ElectricField> electricFieldList = electricFieldService.list();
|
|
-
|
|
|
|
Date dayStartTime = DateTimeUtil.getDayStartTime(System.currentTimeMillis());
|
|
Date dayStartTime = DateTimeUtil.getDayStartTime(System.currentTimeMillis());
|
|
//不清楚短期是否解析过,多查询一天直接置入
|
|
//不清楚短期是否解析过,多查询一天直接置入
|
|
Date dayEndTime = DateTimeUtil.getDayLastTime(System.currentTimeMillis() + 86400000L);
|
|
Date dayEndTime = DateTimeUtil.getDayLastTime(System.currentTimeMillis() + 86400000L);
|
|
-
|
|
|
|
-
|
|
|
|
if (electricFieldList.size() > 0) {
|
|
if (electricFieldList.size() > 0) {
|
|
-
|
|
|
|
-
|
|
|
|
int dqAgo = 1;
|
|
int dqAgo = 1;
|
|
try {
|
|
try {
|
|
String dqHowLongAgo = configService.selectConfigByKey("dqHowLongAgo");
|
|
String dqHowLongAgo = configService.selectConfigByKey("dqHowLongAgo");
|
|
dqAgo = Integer.parseInt(dqHowLongAgo);
|
|
dqAgo = Integer.parseInt(dqHowLongAgo);
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
-
|
|
|
|
}
|
|
}
|
|
-
|
|
|
|
-
|
|
|
|
int cdqAgo = 1;
|
|
int cdqAgo = 1;
|
|
try {
|
|
try {
|
|
String cdqHowLongAgo = configService.selectConfigByKey("cdqHowLongAgo");
|
|
String cdqHowLongAgo = configService.selectConfigByKey("cdqHowLongAgo");
|
|
cdqAgo = Integer.parseInt(cdqHowLongAgo);
|
|
cdqAgo = Integer.parseInt(cdqHowLongAgo);
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
-
|
|
|
|
}
|
|
}
|
|
|
|
|
|
Map<String, List<PowerStationStatusData>> powerStationStatusDataListMap = powerStationStatusDataService.findByTimeBetween(dayStartTime, dayEndTime).stream().collect(Collectors.groupingBy(PowerStationStatusData::getStationCode, Collectors.toList()));
|
|
Map<String, List<PowerStationStatusData>> powerStationStatusDataListMap = powerStationStatusDataService.findByTimeBetween(dayStartTime, dayEndTime).stream().collect(Collectors.groupingBy(PowerStationStatusData::getStationCode, Collectors.toList()));
|
|
@@ -108,7 +120,6 @@ public class DataStore {
|
|
Map<String, List<WindTowerStatusData>> windTowerStatusDataListMap = windTowerStatusDataService.findByBetweenTimeAndStationCode(dayStartTime, dayEndTime, null).stream().collect(Collectors.groupingBy(WindTowerStatusData::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()));
|
|
Map<String, List<WeatherStationStatusData>> weatherStationStatusDataListMap = weatherStationStatusDataService.findByBetweenTimeAndStationCode(dayStartTime, dayEndTime, null).stream().collect(Collectors.groupingBy(WeatherStationStatusData::getStationCode, Collectors.toList()));
|
|
|
|
|
|
-
|
|
|
|
for (ElectricField electricField : electricFieldList) {
|
|
for (ElectricField electricField : electricFieldList) {
|
|
String stationCode = electricField.getStationCode();
|
|
String stationCode = electricField.getStationCode();
|
|
if (powerStationStatusDataListMap.containsKey(stationCode)) {
|
|
if (powerStationStatusDataListMap.containsKey(stationCode)) {
|
|
@@ -116,7 +127,6 @@ public class DataStore {
|
|
setData(Arrays.asList(powerStationStatusData), stationCode);
|
|
setData(Arrays.asList(powerStationStatusData), stationCode);
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
if (electricField.getElectricFieldTypeEnum().equals("E2") && windTowerStatusDataListMap.containsKey(stationCode)) {
|
|
if (electricField.getElectricFieldTypeEnum().equals("E2") && windTowerStatusDataListMap.containsKey(stationCode)) {
|
|
WindTowerStatusData windTowerStatusData = windTowerStatusDataListMap.get(stationCode).stream().max(Comparator.comparing(p -> p.getTime().getTime())).get();
|
|
WindTowerStatusData windTowerStatusData = windTowerStatusDataListMap.get(stationCode).stream().max(Comparator.comparing(p -> p.getTime().getTime())).get();
|
|
setData(Arrays.asList(windTowerStatusData), stationCode);
|
|
setData(Arrays.asList(windTowerStatusData), stationCode);
|
|
@@ -127,24 +137,50 @@ public class DataStore {
|
|
setData(Arrays.asList(weatherStationStatusData), stationCode);
|
|
setData(Arrays.asList(weatherStationStatusData), stationCode);
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
if (forecastPowerShortTermRegulationListMap.containsKey(stationCode)) {
|
|
if (forecastPowerShortTermRegulationListMap.containsKey(stationCode)) {
|
|
List<ForecastPowerShortTermRegulation> forecastPowerShortTermRegulations = forecastPowerShortTermRegulationListMap.get(stationCode);
|
|
List<ForecastPowerShortTermRegulation> forecastPowerShortTermRegulations = forecastPowerShortTermRegulationListMap.get(stationCode);
|
|
setData(forecastPowerShortTermRegulations, stationCode);
|
|
setData(forecastPowerShortTermRegulations, stationCode);
|
|
-
|
|
|
|
}
|
|
}
|
|
|
|
|
|
if (forecastPowerUltraShortTermRegulationListMap.containsKey(stationCode)) {
|
|
if (forecastPowerUltraShortTermRegulationListMap.containsKey(stationCode)) {
|
|
List<ForecastPowerUltraShortTermRegulation> forecastPowerUltraShortTermRegulations = forecastPowerUltraShortTermRegulationListMap.get(stationCode);
|
|
List<ForecastPowerUltraShortTermRegulation> forecastPowerUltraShortTermRegulations = forecastPowerUltraShortTermRegulationListMap.get(stationCode);
|
|
setData(forecastPowerUltraShortTermRegulations, stationCode);
|
|
setData(forecastPowerUltraShortTermRegulations, stationCode);
|
|
}
|
|
}
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Data
|
|
|
|
+ public class FixedSizeCollection<T> {
|
|
|
|
+ private final int maxSize;
|
|
|
|
+ private final LinkedList<T> list;
|
|
|
|
|
|
|
|
+ public FixedSizeCollection(int maxSize) {
|
|
|
|
+ this.maxSize = maxSize;
|
|
|
|
+ this.list = new LinkedList<>();
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ public void add(T element) {
|
|
|
|
+ list.add(element);
|
|
|
|
+ if (list.size() > maxSize) {
|
|
|
|
+ list.removeFirst();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public T get(int index) {
|
|
|
|
+ if (index < 0 || index >= list.size()) {
|
|
|
|
+ throw new NoSuchElementException("Index out of bounds: " + index);
|
|
|
|
+ }
|
|
|
|
+ return list.get(index);
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ public int size() {
|
|
|
|
+ return list.size();
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ public boolean isEmpty() {
|
|
|
|
+ return list.isEmpty();
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ }
|
|
}
|
|
}
|