Ver código fonte

超短期16点位导出excel

xusl 2 dias atrás
pai
commit
6c5014e4e2

+ 1 - 1
ipp-ap/src/views/idp/data/ultraforecast16/index.vue

@@ -196,7 +196,7 @@ export default {
       }
     },
     exportDataEvent() {
-      this.$axios.get("/forecastReportController/exportDataEvent/" +this.ycDate + "/" + this.cdqDate+ "/" + this.sjDate+ "/" + this.agcDate, {
+      this.$axios.get("/ultraForecast16Controller/exportDataEvent/" + this.cdqDate, {
         responseType: 'blob'// 用于解决中文乱码
       }).then((response) => {
         this.loading = false

+ 125 - 0
ipp-idp/src/main/java/com/jiayue/ipp/idp/controller/UltraForecast16Controller.java

@@ -106,4 +106,129 @@ public class UltraForecast16Controller {
         resultMap.put("dataMap",dataMap);
         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();
+        }
+    }
 }