From c0dbb0919f55662751009d66641657c5828cc65e Mon Sep 17 00:00:00 2001
From: cjl <276999030@qq.com>
Date: Thu, 03 Aug 2023 15:08:56 +0800
Subject: [PATCH] feat:空气质量报告

---
 screen-api/src/main/java/com/moral/api/controller/SysTestController.java |  284 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 262 insertions(+), 22 deletions(-)

diff --git a/screen-api/src/main/java/com/moral/api/controller/SysTestController.java b/screen-api/src/main/java/com/moral/api/controller/SysTestController.java
index 36f131a..aa0e1f3 100644
--- a/screen-api/src/main/java/com/moral/api/controller/SysTestController.java
+++ b/screen-api/src/main/java/com/moral/api/controller/SysTestController.java
@@ -1,6 +1,11 @@
 package com.moral.api.controller;
 
+import cn.afterturn.easypoi.entity.ImageEntity;
 import cn.afterturn.easypoi.word.WordExportUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.moral.api.dto.SysTestDTO;
 import com.moral.api.entity.SysTest;
 import com.moral.api.service.SysTestService;
 import com.moral.util.DateUtils;
@@ -9,18 +14,27 @@
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.xwpf.usermodel.XWPFDocument;
+import org.jfree.chart.ChartFactory;
+import org.jfree.chart.ChartUtils;
+import org.jfree.chart.JFreeChart;
+import org.jfree.chart.StandardChartTheme;
+import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
+import org.jfree.chart.plot.PiePlot;
+import org.jfree.data.general.DefaultPieDataset;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.Assert;
 import org.springframework.util.ResourceUtils;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletResponse;
-import java.io.File;
-import java.io.OutputStream;
+import java.awt.*;
+import java.io.*;
 import java.lang.reflect.Field;
 import java.net.URLEncoder;
 import java.util.*;
+import java.util.List;
 import java.util.stream.Collectors;
 
 /**
@@ -40,39 +54,117 @@
 
 
     @GetMapping("resultWord")
-    public void adresultWordd(HttpServletResponse response,String time) {
-        List<SysTest> listAll = sysTestService.listAll(time,"2022-06-22",null);
+    public void adresultWordd(HttpServletResponse response,String time,String endTime) {
+       // for(int i = 495;i<1095;i++){
+            List<SysTest> listAll = sysTestService.listAll(time,endTime,null);
+            if(CollectionUtils.isEmpty(listAll)){
+                return;
+            }
+          /*  Date endTime =listAll.get(0).getTime();
+            String endTimeStr = DateUtils.dateToDateString(endTime,DateUtils.yyyyMMdd_EN);
+            String  fileName = "������������������.docx";
+            Map<String,Object> map = resultMap(listAll);
+            downloadWord(fileName, map, response,"������������������"+endTimeStr+".docx");*/
+          //  time = DateUtils.dateToDateString(DateUtils.addDays(endTime,1),DateUtils.yyyy_MM_dd_EN);
+     //   }
+    }
+
+    @GetMapping("excelM")
+    public void excelM(HttpServletResponse response,String time,String endTime) {
+        // for(int i = 495;i<1095;i++){
+        String ks = "2020-06-01";
+        Date ksDate = DateUtils.convertDate(ks);
+        List<SysTest> result = new ArrayList<>();
+        for(int i = 0;i<37;i++){
+            Date jsDate =  DateUtils.getLastDayOfCurrMonth(ksDate);
+            List<SysTest> listAll = sysTestService.listAllAvg(DateUtils.dateToDateString(ksDate,DateUtils.yyyy_MM_dd_EN),DateUtils.dateToDateString(jsDate,DateUtils.yyyy_MM_dd_EN),null);
+            System.out.println("���������"+DateUtils.dateToDateString(ksDate,DateUtils.yyyy_MM_dd_EN));
+            System.out.println("���������"+DateUtils.dateToDateString(jsDate,DateUtils.yyyy_MM_dd_EN));
+            ksDate =  DateUtils.addMonths(ksDate,1);
+            result.addAll(listAll);
+        }
+
+        if(CollectionUtils.isEmpty(result)){
+            return;
+        }
+        String path = "D:\\���������������������.xls";
+        WriteSheet build = EasyExcel.writerSheet("������������").head(SysTestDTO.class).build();
+        // ������ easyexcel ��������������������� ������ ������������������������excel������������������������������execl������������������������java���������������������
+        ExcelWriter excelWriter = EasyExcel.write(path, SysTestDTO.class).build();
+        excelWriter.write(result, build);
+        excelWriter.finish();
+    }
+
+    @GetMapping("excelDay")
+    public void excelDay(HttpServletResponse response,String time,String endTime) {
+
+        List<SysTest> listAll = sysTestService.listAll(time,endTime,null);
+
         if(CollectionUtils.isEmpty(listAll)){
             return;
         }
-        Date endTime =listAll.get(0).getTime();
-        String endTimeStr = DateUtils.dateToDateString(endTime,DateUtils.yyyyMMdd_EN);
-        String  fileName = "������������������.docx";
-        Map<String,Object> map = resultMap(listAll);
-
-        //���������map
-       // Map result = JSON.parseObject(JSON.toJSONString(entity), Map.class);
-        //        Map<String, Object> result = EasyPoiUtil.entityToMap(entity);
-        downloadWord(fileName, map, response,"������������������"+endTimeStr+".docx");
-
-
-
+        String path = "D:\\���������������������.xls";
+        WriteSheet build = EasyExcel.writerSheet("������������").head(SysTestDTO.class).build();
+        // ������ easyexcel ��������������������� ������ ������������������������excel������������������������������execl������������������������java���������������������
+        ExcelWriter excelWriter = EasyExcel.write(path, SysTestDTO.class).build();
+        excelWriter.write(listAll, build);
+        excelWriter.finish();
     }
 
+    @GetMapping("resultWordWeek")
+    public void resultWordWeek(HttpServletResponse response) {
+        String ks = "2020-06-22";
+        Date ksDate = DateUtils.convertDate(ks);
+        for(int i = 0;i<157;i++){
+            Date jsDate =  DateUtils.addDays(ksDate,6);
+            String time = DateUtils.dateToDateString(ksDate,DateUtils.yyyy_MM_dd_EN);
+            String endTime = DateUtils.dateToDateString(jsDate,DateUtils.yyyy_MM_dd_EN);
+            List<SysTest> listAll = sysTestService.listAllAvg(time,endTime,null);
+            if(CollectionUtils.isEmpty(listAll)){
+                return;
+            }
+            String  fileName = "������������������.docx";
+            String time1 = DateUtils.dateToDateString(ksDate,"yyyy.MM.dd");
+            String endTime1= DateUtils.dateToDateString(jsDate,"yyyy.MM.dd");
+            Map<String,Object> map = resultWeekMap(listAll,i+1,time1+"-"+endTime1);
+            downloadWord(fileName, map, response,"������������������"+time+".docx");
+            ksDate =  DateUtils.addDays(ksDate,7);
+        }
+    }
+
+    @GetMapping("resultWordMonth")
+    public void resultWordMonth(HttpServletResponse response) {
+        String ks = "2020-06-01";
+        Date ksDate = DateUtils.convertDate(ks);
+
+            Date jsDate =  DateUtils.getLastDayOfCurrMonth(ksDate);;
+            String time = DateUtils.dateToDateString(ksDate,DateUtils.yyyy_MM_dd_EN);
+            String endTime = DateUtils.dateToDateString(jsDate,DateUtils.yyyy_MM_dd_EN);
+            List<SysTest> listAll = sysTestService.listAllAvg(time,endTime,null);
+            if(CollectionUtils.isEmpty(listAll)){
+                return;
+            }
+            String  fileName = "������������������.docx";
+            String time1 = DateUtils.dateToDateString(ksDate,"yyyy.MM.dd");
+            String endTime1= DateUtils.dateToDateString(jsDate,"yyyy.MM.dd");
+            Map<String,Object> map = resultWeekMap(listAll,1,time1+"-"+endTime1);
+            downloadWord(fileName, map, response,"������������������"+time+".docx");
+            //ksDate =  DateUtils.addDays(ksDate,7);
+
+    }
 
     public static void downloadWord(String fileName, Map<String, Object> params, HttpServletResponse response,String newFileName) {
         String path = getPath(fileName);//��������� resources������
         try {
             //������������������
-
+            OutputStream out = new FileOutputStream("E:\\home\\week\\" + newFileName);
             File rootFile = new File(ResourceUtils.getURL("classpath:").getPath());
             File file= new File(rootFile, path);
-
             XWPFDocument word = WordExportUtil.exportWord07(file.getPath(), params);
             response.setCharacterEncoding("utf-8");
             response.setContentType("multipart/form-data");
             response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(newFileName, "utf-8"));
-            OutputStream out = response.getOutputStream();
+            //OutputStream out = response.getOutputStream();
             word.write(out);
             out.flush();
             out.close();
@@ -146,11 +238,44 @@
             resultMap.put(name+"S", StringUtils.isNotEmpty(s.getSu())?s.getSu():"--");
         }
 
-        String bodyName = stringButterStr(listAll);
+         //������
+         String bodyName = stringButterStr(listAll);
+
         resultMap.put("������������",bodyName);
         return resultMap;
     }
-
+    private Map<String,Object> resultWeekMap(List<SysTest> listAll,int week,String weekTime){
+        Map<String,Object> resultMap = new HashMap<>();
+        resultMap.put("���",week);
+        resultMap.put("������",weekTime);
+        String name = "���";
+        for(SysTest s : listAll){
+            if(s.getName().contains("���")){
+                name = "���";
+            }else if(s.getName().contains("���")){
+                name = "���";
+            }else {
+                name = "���";
+            }
+            resultMap.put(name+"AQI", StringUtils.isNotEmpty(s.getAqi())?s.getAqi():"--");
+            resultMap.put(name+"PM10", StringUtils.isNotEmpty(s.getPm10())?s.getPm10():"--");
+            resultMap.put(name+"PM2", StringUtils.isNotEmpty(s.getPm25())?s.getPm25():"--");
+            resultMap.put(name+"SO2", StringUtils.isNotEmpty(s.getSo2())?s.getSo2():"--");
+            resultMap.put(name+"NO2", StringUtils.isNotEmpty(s.getNo2())?s.getNo2():"--");
+            resultMap.put(name+"CO", StringUtils.isNotEmpty(s.getCo())?s.getCo():"--");
+            resultMap.put(name+"O3", StringUtils.isNotEmpty(s.getO3())?s.getO3():"--");
+            resultMap.put(name+"TV", StringUtils.isNotEmpty(s.getVoc())?s.getVoc():"--");
+            resultMap.put(name+"S", StringUtils.isNotEmpty(s.getSu())?s.getSu():"--");
+        }
+       // String bodyName = stringButterStrWeek(listAll);
+        HashMap<String, Integer> datas = new HashMap<>(3);
+        datas.put("������",10);
+        datas.put("������",20);
+        datas.put("������",40);
+        ImageEntity imageEntity = pieChart("������",datas, 500, 300);
+        resultMap.put("������������",imageEntity);
+        return resultMap;
+    }
     private String stringButterStr(List<SysTest> listAll){
 
         // 0 ������1 ������ 2���������3���������
@@ -279,7 +404,41 @@
 
     }
 
-
+    private String stringButterStrWeek(List<SysTest> listAll){
+        StringBuffer stringBuffer = new StringBuffer();
+        SysTest result0 = listAll.get(0);
+        SysTest result1 = listAll.get(1);
+        SysTest result2 = listAll.get(2);
+        Map<String,String> pm10 = nameCode(result0.getName(),result1.getName(),result2.getName(),result0.getPm10(),result1.getPm10(),result2.getPm10());
+        Map<String,String> pm25 = nameCode(result0.getName(),result1.getName(),result2.getName(),result0.getPm25(),result1.getPm25(),result2.getPm25());
+        Map<String,String> so = nameCode(result0.getName(),result1.getName(),result2.getName(),result0.getSo2(),result1.getSo2(),result2.getSo2());
+        Map<String,String> no = nameCode(result0.getName(),result1.getName(),result2.getName(),result0.getNo2(),result1.getNo2(),result2.getNo2());
+        Map<String,String> co = nameCode(result0.getName(),result1.getName(),result2.getName(),result0.getCo(),result1.getCo(),result2.getCo());
+        Map<String,String> o3 = nameCode(result0.getName(),result1.getName(),result2.getName(),result0.getO3(),result1.getO3(),result2.getO3());
+        if(pm10.isEmpty()&& pm25.isEmpty()&&so.isEmpty()&& no.isEmpty()&& co.isEmpty()&& o3.isEmpty()){
+            return stringBuffer.toString();
+        }
+        stringBuffer.append("���������");
+        if(!pm10.isEmpty()){
+            stringBuffer.append("PM10���������������"+pm10.get("high")+"������������������"+pm10.get("low")+"���");
+        }
+        if(!pm25.isEmpty()){
+            stringBuffer.append("PM2.5���������������"+pm25.get("high")+"������������������"+pm25.get("low")+"���");
+        }
+        if(!so.isEmpty()){
+            stringBuffer.append("SO2���������������"+so.get("high")+"������������������"+so.get("low")+"���");
+        }
+        if(!no.isEmpty()){
+            stringBuffer.append("NO2���������������"+no.get("high")+"������������������"+no.get("low")+"���");
+        }
+        if(!co.isEmpty()){
+            stringBuffer.append("CO���������������"+co.get("high")+"������������������"+co.get("low")+"���");
+        }
+        if(!o3.isEmpty()){
+            stringBuffer.append("O3���������������"+o3.get("high")+"������������������"+o3.get("low")+"���");
+        }
+        return stringBuffer.toString();
+    }
     private Map<String,String> nameCode(String name1,String name2,String name3,String nums1,String nums2,String nums3){
         double num1 = StringUtils.isNotEmpty(nums1)?Double.parseDouble(nums1):0;
         double num2 = StringUtils.isNotEmpty(nums2)?Double.parseDouble(nums2):0;
@@ -338,8 +497,89 @@
         return map;
 
     }
+    private static String tempImgPath="E:\\home\\image\\tempJfree.jpg";
+    private static byte[] imgToByte(){
+        File file = new File(tempImgPath);
+        byte[] buffer = null;
+        try {
+            FileInputStream fis = new FileInputStream(file);
+            ByteArrayOutputStream bos = new ByteArrayOutputStream(1000);
+            byte[] b = new byte[1000];
+            int n;
+            while ((n = fis.read(b)) != -1) {
+                bos.write(b, 0, n);
+            }
+            fis.close();
+            bos.close();
+            buffer = bos.toByteArray();
+        } catch (IOException e) {
+            log.error(e.getMessage());
+        }
+        //������������������
+        //file.delete();
+        return buffer;
+    }
+    public ImageEntity pieChart(String title, Map<String, Integer> datas, int width, int height) {
+
+        //������������������
+        StandardChartTheme standardChartTheme = new StandardChartTheme("CN");
+        //������������������
+        standardChartTheme.setExtraLargeFont(new Font("������", Font.BOLD, 20));
+        //���������������������
+        standardChartTheme.setRegularFont(new Font("������", Font.PLAIN, 15));
+        //���������������������
+        standardChartTheme.setLargeFont(new Font("������", Font.PLAIN, 15));
+        //������������������
+        ChartFactory.setChartTheme(standardChartTheme);
+
+        //������jfree���������������������������
+        DefaultPieDataset pds = new DefaultPieDataset();
+        datas.forEach(pds::setValue);
+        //���������������������������������������������������������������������tooltips������������������������
+        JFreeChart chart = ChartFactory.createPieChart(title, pds, true, false, false);
+        //���������������
+        chart.setTextAntiAlias(false);
+        PiePlot plot = (PiePlot) chart.getPlot();
+        plot.setNoDataMessage("������������");
+        //���������������������
+        plot.setIgnoreNullValues(true);
+        plot.setBackgroundAlpha(0f);
+        //������������������������
+        plot.setShadowPaint(new Color(255,255,255));
+        //���������������������(������{0})
+        plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}({1})/{2}"));
+        try {
+            ChartUtils.saveChartAsJPEG(new File(tempImgPath), chart, width, height);
+        } catch (IOException e1) {
+            log.error("������������������������");
+        }
+        ImageEntity imageEntity = new ImageEntity(imgToByte(), width, height);
+        Assert.notNull(imageEntity.getData(),"������������������������������");
+        return imageEntity;
+    }
+
+    public static void main(String[] args) {
+        /*String ks = "2020-06-01";
+        Date ksDate = DateUtils.convertDate(ks);
+        for(int i = 0;i<37;i++){
+            Date jsDate =  DateUtils.getLastDayOfCurrMonth(ksDate);
+            System.out.println("���������"+DateUtils.dateToDateString(ksDate,DateUtils.yyyy_MM_dd_EN));
+            System.out.println("���������"+DateUtils.dateToDateString(jsDate,DateUtils.yyyy_MM_dd_EN));
+            ksDate =  DateUtils.addMonths(ksDate,1);
+        }*/
 
 
+        String ks = "2020-06-22";
+        Date ksDate = DateUtils.convertDate(ks);
+        for(int i = 0;i<157;i++){
+            Date jsDate =  DateUtils.addDays(ksDate,6);
+            System.out.println("���������"+DateUtils.dateToDateString(ksDate,DateUtils.yyyy_MM_dd_EN));
+            System.out.println("���������"+DateUtils.dateToDateString(jsDate,DateUtils.yyyy_MM_dd_EN));
+            ksDate =  DateUtils.addDays(ksDate,7);
+        }
+
+
+    }
 
 
 }

--
Gitblit v1.8.0