|
@@ -106,4 +106,129 @@ public class UltraForecast16Controller {
|
|
resultMap.put("dataMap",dataMap);
|
|
resultMap.put("dataMap",dataMap);
|
|
return R.ok(resultMap);
|
|
return R.ok(resultMap);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ @GetMapping(value = {"/exportDataEvent/{cdqDate}","/exportDataEvent/{cdqDate}" })
|
|
|
|
+ public void exportDataEvent(
|
|
|
|
+ @PathVariable("cdqDate") Long cdqDate,
|
|
|
|
+ HttpServletResponse response) {
|
|
|
|
+
|
|
|
|
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
+ String fileName = "超短期16点位报表"+simpleDateFormat.format(new Date())+".xlsx";
|
|
|
|
+ response.setContentType("application/x-msdownload;charset=utf-8");
|
|
|
|
+
|
|
|
|
+ try (Workbook workbook = new XSSFWorkbook();ServletOutputStream out = response.getOutputStream()){
|
|
|
|
+ response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
|
|
|
|
+
|
|
|
|
+ // 获取场站超短期实时
|
|
|
|
+ Date cdqStartTime = new Date(cdqDate+1000*60*15);
|
|
|
|
+ Date cdqEndTime = new Date(cdqDate+1000*60*1440);
|
|
|
|
+ QueryWrapper<ForecastPowerUltraShortTermHis> cdqWrapper = new QueryWrapper<>();
|
|
|
|
+ cdqWrapper.between("forecast_time", cdqStartTime, cdqEndTime);
|
|
|
|
+ List<ForecastPowerUltraShortTermHis> cdqList = forecastPowerUltraShortTermHisService.list(cdqWrapper);
|
|
|
|
+ // 按照场站编号进行分组
|
|
|
|
+ Map<String, List<ForecastPowerUltraShortTermHis>> cdqListByStationCodeMap = cdqList.stream().collect(Collectors.groupingBy(r -> r.getStationCode()));
|
|
|
|
+
|
|
|
|
+ List<ElectricField> list = electricFieldService.list();
|
|
|
|
+ list.sort((o1, o2) -> o1.getName().compareTo(o2.getName()));
|
|
|
|
+ long startTime = cdqStartTime.getTime();
|
|
|
|
+ for (int j=0;j<list.size();j++){
|
|
|
|
+ ElectricField electricField = list.get(j);
|
|
|
|
+ Sheet sheet = workbook.createSheet(electricField.getName());
|
|
|
|
+ // 创建样式 - 水平垂直居中,带边框
|
|
|
|
+ CellStyle centerStyle = workbook.createCellStyle();
|
|
|
|
+ centerStyle.setAlignment(HorizontalAlignment.CENTER);
|
|
|
|
+ centerStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
|
|
|
+ centerStyle.setBorderTop(BorderStyle.THIN);
|
|
|
|
+ centerStyle.setBorderBottom(BorderStyle.THIN);
|
|
|
|
+ centerStyle.setBorderLeft(BorderStyle.THIN);
|
|
|
|
+ centerStyle.setBorderRight(BorderStyle.THIN);
|
|
|
|
+ // 创建表头
|
|
|
|
+ List<String> headList = new ArrayList<>();
|
|
|
|
+ headList.add("时间");
|
|
|
|
+ headList.add("第1点");
|
|
|
|
+ headList.add("第2点");
|
|
|
|
+ headList.add("第3点");
|
|
|
|
+ headList.add("第4点");
|
|
|
|
+ headList.add("第5点");
|
|
|
|
+ headList.add("第6点");
|
|
|
|
+ headList.add("第7点");
|
|
|
|
+ headList.add("第8点");
|
|
|
|
+ headList.add("第9点");
|
|
|
|
+ headList.add("第10点");
|
|
|
|
+ headList.add("第11点");
|
|
|
|
+ headList.add("第12点");
|
|
|
|
+ headList.add("第13点");
|
|
|
|
+ headList.add("第14点");
|
|
|
|
+ headList.add("第15点");
|
|
|
|
+ headList.add("第16点");
|
|
|
|
+
|
|
|
|
+ // 第一行 - 主表头
|
|
|
|
+ Row headerRow = sheet.createRow(0);
|
|
|
|
+ for (int p = 0; p < headList.size(); p++) {
|
|
|
|
+ Cell cell = headerRow.createCell(p);
|
|
|
|
+ cell.setCellValue(headList.get(p));
|
|
|
|
+ cell.setCellStyle(centerStyle);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ List<ForecastPowerUltraShortTermHis> forecastPowerUltraShortTermHisList = new ArrayList<>();
|
|
|
|
+ if (cdqListByStationCodeMap.get(electricField.getStationCode())!=null){
|
|
|
|
+ forecastPowerUltraShortTermHisList = cdqListByStationCodeMap.get(electricField.getStationCode());
|
|
|
|
+ }
|
|
|
|
+ Map<String,List<Object>> realPowerMap = new HashMap<>();
|
|
|
|
+ for(int p = 1;p<=16;p++){
|
|
|
|
+ int finalP = p;
|
|
|
|
+ List<ForecastPowerUltraShortTermHis> filterList = forecastPowerUltraShortTermHisList.stream().filter(t->t.getForecastHowLongAgo() == finalP && t.getForecastManufactor().equals(electricField.getBelongForecastManufactor())).collect(Collectors.toList());
|
|
|
|
+ long timeStep = 900000L;
|
|
|
|
+ if (startTime % timeStep != 0) {
|
|
|
|
+ startTime = startTime - (startTime % timeStep);
|
|
|
|
+ }
|
|
|
|
+ List<Object> ableDatas = new ArrayList<>();
|
|
|
|
+ for (long i = startTime; i <= cdqEndTime.getTime(); i = i + 900000L) {
|
|
|
|
+ long finalI = i;
|
|
|
|
+ List<ForecastPowerUltraShortTermHis> p1 = filterList.stream().filter(t -> t.getForecastTime().getTime() == finalI).collect(Collectors.toList());
|
|
|
|
+ if (p1 != null && p1.size() > 0) {
|
|
|
|
+ if (p1.get(0).getAbleValue().compareTo(new BigDecimal(-99)) == 0) {
|
|
|
|
+ ableDatas.add(0f);
|
|
|
|
+ } else {
|
|
|
|
+ ableDatas.add(p1.get(0).getAbleValue().floatValue());
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ ableDatas.add("");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ realPowerMap.put("value"+p,ableDatas);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ List<String> times = new ArrayList<>();
|
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
|
|
|
|
+ for (long i = startTime; i <= cdqEndTime.getTime(); i = i + 900000L) {
|
|
|
|
+ String timeStr = sdf.format(new Date(i));
|
|
|
|
+ if (timeStr.equals("00:00")){
|
|
|
|
+ times.add("24:00");
|
|
|
|
+ }
|
|
|
|
+ else{
|
|
|
|
+ times.add(timeStr);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for (int k=0;k<96;k++){
|
|
|
|
+ Row row = sheet.createRow(k + 1);
|
|
|
|
+ Cell cell0 = row.createCell(0);
|
|
|
|
+ cell0.setCellValue(times.get(k));
|
|
|
|
+ cell0.setCellStyle(centerStyle);
|
|
|
|
+ for (int t=1;t<=16;t++){
|
|
|
|
+ Cell cell = row.createCell(t);
|
|
|
|
+ cell.setCellValue(realPowerMap.get("value"+t).get(k).toString());
|
|
|
|
+ cell.setCellStyle(centerStyle);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 写入输出流
|
|
|
|
+ workbook.write(out);
|
|
|
|
+ out.flush();
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|