|
@@ -2,13 +2,16 @@ package com.cpp.web.controller.largeScreen;
|
|
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.cpp.common.core.cache.LocalCache;
|
|
|
import com.cpp.common.core.domain.R;
|
|
|
import com.cpp.system.service.ISysConfigService;
|
|
|
+import com.cpp.web.domain.powerGeneration.DayPowerGeneration;
|
|
|
import com.cpp.web.domain.station.*;
|
|
|
import com.cpp.web.domain.station.enums.ElectricFieldTypeEnum;
|
|
|
import com.cpp.web.dto.largeScreen.ElectricFieldDataTotalDto;
|
|
|
import com.cpp.web.dto.largeScreen.ForecastGeneratingDataDto;
|
|
|
import com.cpp.web.dto.largeScreen.ProductionDataTotalDto;
|
|
|
+import com.cpp.web.service.powerGeneation.DayPowerGenerationService;
|
|
|
import com.cpp.web.service.station.*;
|
|
|
import com.cpp.web.utils.DateTimeUtil;
|
|
|
import com.cpp.web.utils.LatestDataUtil;
|
|
@@ -19,6 +22,7 @@ import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -49,6 +53,8 @@ public class LargeScreenController {
|
|
|
WindTowerStatusDataService windTowerStatusDataService;
|
|
|
@Autowired
|
|
|
WeatherStationStatusDataService weatherStationStatusDataService;
|
|
|
+ @Autowired
|
|
|
+ DayPowerGenerationService dayPowerGenerationService;
|
|
|
|
|
|
@GetMapping("/getBizData")
|
|
|
public R getBizData() {
|
|
@@ -116,7 +122,8 @@ public class LargeScreenController {
|
|
|
ProductionDataTotalDto productionDataTotalDto = calGenerating();
|
|
|
bizDataMap.put("productionDataTotalDto",productionDataTotalDto);
|
|
|
// 获取预测发电量
|
|
|
- calForecastGenerating();
|
|
|
+ Map forecastGeneratingMap = calForecastGenerating();
|
|
|
+ bizDataMap.put("forecastGeneratingMap",forecastGeneratingMap);
|
|
|
|
|
|
// 定义首页实际功率、可用、理论总和
|
|
|
BigDecimal realSum = BigDecimal.ZERO;
|
|
@@ -337,7 +344,7 @@ public class LargeScreenController {
|
|
|
}
|
|
|
}
|
|
|
// 获取中心侧预测的当日所有短期预测功率,前提判断上个月哪个预测准确率更准确用哪个模型
|
|
|
-
|
|
|
+// List<ForecastGeneratingDataDto> forecastGeneratingDataDtoList = calForecastGenerating();
|
|
|
|
|
|
|
|
|
|
|
@@ -362,28 +369,57 @@ public class LargeScreenController {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 统计首页未来15天预测总发电量
|
|
|
+ * 统计首页未来10天预测总发电量
|
|
|
* @return
|
|
|
*/
|
|
|
- private ForecastGeneratingDataDto calForecastGenerating(){
|
|
|
- // 获取未来15天的上报预测值
|
|
|
- Date startTime = DateTimeUtil.getDayStartTime(DateUtils.addDays(new Date(), 1).getTime());
|
|
|
- Date endTime = DateTimeUtil.getDayLastTime(DateUtils.addDays(new Date(), 15).getTime());
|
|
|
- QueryWrapper dqsbWrapper = new QueryWrapper<>();
|
|
|
- dqsbWrapper.eq("forecast_how_long_ago",1);
|
|
|
- dqsbWrapper.between("time", startTime, endTime);
|
|
|
- List<ForecastPowerShortTermRegulation> forecastPowerShortTermRegulationList = forecastPowerShortTermRegulationService.list(dqsbWrapper);
|
|
|
+ private Map calForecastGenerating(){
|
|
|
+ // 获取未来10天的中心侧模型预测发电量
|
|
|
+ int counts = -3;
|
|
|
+ // 定义日期格式
|
|
|
+ SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ // 定义开始日期和结束日期(使用Calendar对象)
|
|
|
+ Calendar currentDate = Calendar.getInstance();
|
|
|
+ Calendar endDate = Calendar.getInstance();
|
|
|
+ endDate.add(Calendar.DAY_OF_MONTH, counts);
|
|
|
+ List<DayPowerGeneration> dayPowerGenerationList = new ArrayList<>();
|
|
|
+ for (; !currentDate.before(endDate); currentDate.add(Calendar.DATE, -1)) {
|
|
|
+ QueryWrapper<DayPowerGeneration> generationWrapper = new QueryWrapper<>();
|
|
|
+ generationWrapper.eq("gen_date", formatter.format(currentDate.getTime()));
|
|
|
+ generationWrapper.eq("prediction_data_source", "云端下发");
|
|
|
+ dayPowerGenerationList = dayPowerGenerationService.list(generationWrapper);
|
|
|
+ if (!dayPowerGenerationList.isEmpty()){
|
|
|
+ // 查出数据就退出当前循环
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ // 否则,日期往前推一天,再查
|
|
|
+ }
|
|
|
+ }
|
|
|
// 按场时间分组
|
|
|
- Map<String, List<ForecastPowerShortTermRegulation>> shortTermDataGroup = forecastPowerShortTermRegulationList.stream()
|
|
|
- .collect(Collectors.groupingBy(
|
|
|
- s -> {
|
|
|
- Date localDateTime = s.getTime();
|
|
|
- return DateUtil.format(localDateTime, "yyyy-MM-dd");
|
|
|
- }
|
|
|
- ));
|
|
|
- System.out.println(shortTermDataGroup);
|
|
|
-
|
|
|
+ Map<String, List<DayPowerGeneration>> shortTermDataGroup = dayPowerGenerationList.stream().collect(Collectors.groupingBy(s->s.getTime()));
|
|
|
+ Map<String,List> forecastGeneratingMap = new HashMap<>();
|
|
|
+ // 图表x轴时间数据
|
|
|
+ List<String> xDataList = new ArrayList<>();
|
|
|
+ // 图表y轴发电量数据
|
|
|
+ List<BigDecimal> pDataList = new ArrayList<>();
|
|
|
|
|
|
- return null;
|
|
|
+ // 统计每天里所有电站发电量总和
|
|
|
+ if (shortTermDataGroup!=null){
|
|
|
+ List<Map.Entry<String, List<DayPowerGeneration>>> sortedGrouped = new ArrayList<>(shortTermDataGroup.entrySet());
|
|
|
+ sortedGrouped.sort(Map.Entry.comparingByKey());
|
|
|
+ sortedGrouped.forEach(entry->{
|
|
|
+ List<DayPowerGeneration> dayPowerGenerations = entry.getValue();
|
|
|
+ BigDecimal sum = BigDecimal.ZERO;
|
|
|
+ for (DayPowerGeneration dayPowerGeneration:dayPowerGenerations){
|
|
|
+ sum = sum.add(dayPowerGeneration.getForecastPowerGeneration());
|
|
|
+ }
|
|
|
+ // 封装每天发电总量
|
|
|
+ xDataList.add(entry.getKey().substring(5));
|
|
|
+ pDataList.add(sum);
|
|
|
+ forecastGeneratingMap.put("xData",xDataList);
|
|
|
+ forecastGeneratingMap.put("pData",pDataList);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ return forecastGeneratingMap;
|
|
|
}
|
|
|
}
|