|
@@ -5,6 +5,8 @@ import com.cpp.common.core.domain.R;
|
|
import com.cpp.system.service.ISysConfigService;
|
|
import com.cpp.system.service.ISysConfigService;
|
|
import com.cpp.web.domain.station.*;
|
|
import com.cpp.web.domain.station.*;
|
|
import com.cpp.web.domain.station.enums.ElectricFieldTypeEnum;
|
|
import com.cpp.web.domain.station.enums.ElectricFieldTypeEnum;
|
|
|
|
+import com.cpp.web.dto.largeScreen.ElectricFieldDataTotalDto;
|
|
|
|
+import com.cpp.web.dto.largeScreen.ProductionDataTotalDto;
|
|
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 com.cpp.web.utils.LatestDataUtil;
|
|
import com.cpp.web.utils.LatestDataUtil;
|
|
@@ -13,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.web.bind.annotation.*;
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
|
+import java.math.RoundingMode;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@@ -48,16 +51,77 @@ public class LargeScreenController {
|
|
public R getBizData() {
|
|
public R getBizData() {
|
|
// 获取所有场站
|
|
// 获取所有场站
|
|
List<ElectricField> electricFieldList = electricFieldService.list();
|
|
List<ElectricField> electricFieldList = electricFieldService.list();
|
|
|
|
+ // 首页左上角场站数据统计
|
|
|
|
+ // 统计开机容量累计值
|
|
|
|
+ BigDecimal gfOpenCapacitySum = BigDecimal.ZERO;
|
|
|
|
+ BigDecimal fdOpenCapacitySum = BigDecimal.ZERO;
|
|
|
|
+ // 辐照度累计值
|
|
|
|
+ BigDecimal fzdSum = BigDecimal.ZERO;
|
|
|
|
+ BigDecimal wsSum = BigDecimal.ZERO;
|
|
|
|
+ int wsSumCount = 0;
|
|
|
|
+ int fzdSumCount = 0;
|
|
|
|
+ // 实际发电量总和
|
|
|
|
+ BigDecimal realGeneratingSum = BigDecimal.ZERO;
|
|
|
|
+ // 预测发电量总和
|
|
|
|
+ BigDecimal forecastGenerating = BigDecimal.ZERO;
|
|
|
|
+ for (ElectricField electricField:electricFieldList){
|
|
|
|
+ PowerStationStatusData powerStationStatusData = LatestDataUtil.getData(electricField.getStationCode(), PowerStationStatusData.class);
|
|
|
|
+ if (ElectricFieldTypeEnum.E1.name().equals(electricField.getElectricFieldTypeEnum())){
|
|
|
|
+ // 获取气象站辐照度
|
|
|
|
+ WeatherStationStatusData weatherStationStatusData = LatestDataUtil.getData(electricField.getStationCode(), WeatherStationStatusData.class);
|
|
|
|
+ if (weatherStationStatusData!=null){
|
|
|
|
+ fzdSum = fzdSum.add(weatherStationStatusData.getGlobalR());
|
|
|
|
+ fzdSumCount++;
|
|
|
|
+ }
|
|
|
|
+ // 累计开机容量
|
|
|
|
+ if (powerStationStatusData!=null){
|
|
|
|
+ gfOpenCapacitySum = gfOpenCapacitySum.add(powerStationStatusData.getOpenCapacity());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else{
|
|
|
|
+ // 获取测风塔风速
|
|
|
|
+ WindTowerStatusData windTowerStatusData = LatestDataUtil.getData(electricField.getStationCode(), WindTowerStatusData.class);
|
|
|
|
+ if (windTowerStatusData!=null){
|
|
|
|
+ wsSum = wsSum.add(windTowerStatusData.getWsHubHeight());
|
|
|
|
+ wsSumCount++;
|
|
|
|
+ }
|
|
|
|
+ // 累计开机容量
|
|
|
|
+ if (powerStationStatusData!=null){
|
|
|
|
+ fdOpenCapacitySum = fdOpenCapacitySum.add(powerStationStatusData.getOpenCapacity());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 计算实际发电量和预测发电量
|
|
|
|
+ }
|
|
|
|
+ // 封装首页场站数据统计
|
|
|
|
+ ElectricFieldDataTotalDto electricFieldDataTotalDto = new ElectricFieldDataTotalDto();
|
|
|
|
+ electricFieldDataTotalDto.setGfOpenCapcitySum(gfOpenCapacitySum);
|
|
|
|
+ BigDecimal fzdAvg = BigDecimal.ZERO;
|
|
|
|
+ if (fzdSum.compareTo(BigDecimal.ZERO)==1){
|
|
|
|
+ fzdAvg = fzdSum.divide(new BigDecimal(fzdSumCount),2, BigDecimal.ROUND_HALF_UP);
|
|
|
|
+ }
|
|
|
|
+ electricFieldDataTotalDto.setFzdAvg(fzdAvg);
|
|
|
|
+ electricFieldDataTotalDto.setFdOpenCapcitySum(fdOpenCapacitySum);
|
|
|
|
+ BigDecimal wsAvg = BigDecimal.ZERO;
|
|
|
|
+ if (wsSum.compareTo(BigDecimal.ZERO)==1){
|
|
|
|
+ wsAvg = wsSum.divide(new BigDecimal(wsSumCount),2, BigDecimal.ROUND_HALF_UP);
|
|
|
|
+ }
|
|
|
|
+ electricFieldDataTotalDto.setWsAvg(wsAvg);
|
|
|
|
+ Map bizDataMap = new HashMap();
|
|
|
|
+ bizDataMap.put("electricFieldDataTotalDto",electricFieldDataTotalDto);
|
|
|
|
+
|
|
|
|
+ ProductionDataTotalDto productionDataTotalDto = calGenerating();
|
|
|
|
+ bizDataMap.put("productionDataTotalDto",productionDataTotalDto);
|
|
|
|
+
|
|
|
|
+
|
|
// 定义首页实际功率、可用、理论总和
|
|
// 定义首页实际功率、可用、理论总和
|
|
BigDecimal realSum = BigDecimal.ZERO;
|
|
BigDecimal realSum = BigDecimal.ZERO;
|
|
BigDecimal ableSum = BigDecimal.ZERO;
|
|
BigDecimal ableSum = BigDecimal.ZERO;
|
|
BigDecimal theorySum = BigDecimal.ZERO;
|
|
BigDecimal theorySum = BigDecimal.ZERO;
|
|
BigDecimal cdqSum = BigDecimal.ZERO;
|
|
BigDecimal cdqSum = BigDecimal.ZERO;
|
|
BigDecimal dqSum = BigDecimal.ZERO;
|
|
BigDecimal dqSum = BigDecimal.ZERO;
|
|
- BigDecimal fzdSum = BigDecimal.ZERO;
|
|
|
|
- BigDecimal wsSum = BigDecimal.ZERO;
|
|
|
|
- int fzdSumCount = 0;
|
|
|
|
- int wsSumCount = 0;
|
|
|
|
|
|
+
|
|
|
|
+
|
|
// 限电场站数定义
|
|
// 限电场站数定义
|
|
int xdCount = 0;
|
|
int xdCount = 0;
|
|
// 获取每个场站的实时功率、可用、理论、超短期、短期
|
|
// 获取每个场站的实时功率、可用、理论、超短期、短期
|
|
@@ -98,7 +162,7 @@ public class LargeScreenController {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- Map bizDataMap = new HashMap();
|
|
|
|
|
|
+
|
|
// 定义总和map
|
|
// 定义总和map
|
|
Map sumMap = new HashMap();
|
|
Map sumMap = new HashMap();
|
|
sumMap.put("realSum",realSum);
|
|
sumMap.put("realSum",realSum);
|
|
@@ -106,17 +170,11 @@ public class LargeScreenController {
|
|
sumMap.put("theorySum",theorySum);
|
|
sumMap.put("theorySum",theorySum);
|
|
bizDataMap.put("sumMap",sumMap);
|
|
bizDataMap.put("sumMap",sumMap);
|
|
Map envDataMap = new HashMap();
|
|
Map envDataMap = new HashMap();
|
|
- BigDecimal wsAvg = BigDecimal.ZERO;
|
|
|
|
- if (wsSum.compareTo(BigDecimal.ZERO)==1){
|
|
|
|
- wsAvg = wsAvg.divide(new BigDecimal(wsSumCount),2, BigDecimal.ROUND_HALF_UP);
|
|
|
|
- }
|
|
|
|
|
|
+
|
|
envDataMap.put("wsAvg",wsAvg);
|
|
envDataMap.put("wsAvg",wsAvg);
|
|
- BigDecimal fzdAvg = BigDecimal.ZERO;
|
|
|
|
- if (fzdSum.compareTo(BigDecimal.ZERO)==1){
|
|
|
|
- fzdAvg = fzdAvg.divide(new BigDecimal(fzdSumCount),2, BigDecimal.ROUND_HALF_UP);
|
|
|
|
- }
|
|
|
|
|
|
+
|
|
envDataMap.put("fzdAvg",fzdAvg);
|
|
envDataMap.put("fzdAvg",fzdAvg);
|
|
- bizDataMap.put("envDataMap",envDataMap);
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
|
|
Date dayStartTime = DateTimeUtil.getDayStartTime(System.currentTimeMillis());
|
|
Date dayStartTime = DateTimeUtil.getDayStartTime(System.currentTimeMillis());
|
|
@@ -242,4 +300,56 @@ public class LargeScreenController {
|
|
|
|
|
|
return R.ok(bizDataMap);
|
|
return R.ok(bizDataMap);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 统计首页生成数据
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ private ProductionDataTotalDto calGenerating(){
|
|
|
|
+ // 当日零点
|
|
|
|
+ Date dayStartTime = new Date(DateTimeUtil.getMillisecondsSubDay());
|
|
|
|
+ // 获取当前时刻5分钟
|
|
|
|
+ Date dayEndTimeFor5 = DateTimeUtil.getMomentTimeFor5Minute(System.currentTimeMillis());
|
|
|
|
+ // 获取当日所有实际功率
|
|
|
|
+ QueryWrapper<PowerStationStatusData> powerStationStatusDataQueryWrapper = new QueryWrapper<>();
|
|
|
|
+ powerStationStatusDataQueryWrapper.between("time", dayStartTime, dayEndTimeFor5);
|
|
|
|
+ List<PowerStationStatusData> powerStationStatusDataList = powerStationStatusDataService.list(powerStationStatusDataQueryWrapper);
|
|
|
|
+ // 实际功率总和
|
|
|
|
+ BigDecimal realPowerSum = BigDecimal.ZERO;
|
|
|
|
+ // 理论功率总和
|
|
|
|
+ BigDecimal theoryPowerSum = BigDecimal.ZERO;
|
|
|
|
+ // 计算实际发电量
|
|
|
|
+ BigDecimal realGeneratingSum = BigDecimal.ZERO;
|
|
|
|
+ for (PowerStationStatusData powerStationStatusData : powerStationStatusDataList) {
|
|
|
|
+ // 统计实际功率总和
|
|
|
|
+ if (powerStationStatusData.getRealValue()!=null){
|
|
|
|
+ realPowerSum = realPowerSum.add(powerStationStatusData.getRealValue());
|
|
|
|
+ // 发电量 = 实际 * 0.08
|
|
|
|
+ realGeneratingSum = realGeneratingSum.add(powerStationStatusData.getRealValue().multiply(new BigDecimal("0.08")).setScale(2, RoundingMode.HALF_UP));
|
|
|
|
+ }
|
|
|
|
+ // 统计理论功率总和
|
|
|
|
+ if (powerStationStatusData.getTheoryValue()!=null){
|
|
|
|
+ theoryPowerSum = theoryPowerSum.add(powerStationStatusData.getTheoryValue());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ // 获取当日所有短期预测功率
|
|
|
|
+ Date dayEndTimeFor15 = DateTimeUtil.getMomentTimeFor15Minute(System.currentTimeMillis());
|
|
|
|
+ QueryWrapper<ForecastPowerShortTermRegulation> forecastPowerShortTermRegulationQueryWrapper = new QueryWrapper<>();
|
|
|
|
+ forecastPowerShortTermRegulationQueryWrapper.between("time", dayStartTime, dayEndTimeFor15);
|
|
|
|
+ List<ForecastPowerShortTermRegulation> forecastPowerShortTermRegulationList = forecastPowerShortTermRegulationService.list(forecastPowerShortTermRegulationQueryWrapper);
|
|
|
|
+ // 计算短期预测发电量
|
|
|
|
+ BigDecimal forecastGeneratingSum = BigDecimal.ZERO;
|
|
|
|
+ for (ForecastPowerShortTermRegulation forecastPowerShortTermRegulation : forecastPowerShortTermRegulationList) {
|
|
|
|
+ if (forecastPowerShortTermRegulation.getFpValue()!=null){
|
|
|
|
+ // 发电量 = 预测值 * 0.25
|
|
|
|
+ forecastGeneratingSum = forecastGeneratingSum.add(forecastPowerShortTermRegulation.getFpValue().multiply(new BigDecimal("0.25")).setScale(2, RoundingMode.HALF_UP));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ ProductionDataTotalDto productionDataTotalDto = new ProductionDataTotalDto();
|
|
|
|
+ productionDataTotalDto.setRealGeneratingSum(realGeneratingSum);
|
|
|
|
+ productionDataTotalDto.setForecastGeneratingSum(forecastGeneratingSum);
|
|
|
|
+ productionDataTotalDto.setRealPowerSum(realPowerSum);
|
|
|
|
+ productionDataTotalDto.setTheoryPowerSum(theoryPowerSum);
|
|
|
|
+ return productionDataTotalDto;
|
|
|
|
+ }
|
|
}
|
|
}
|