cjl
2023-11-15 d117d3af15dddc4f07baffa8b5bf6b727c05de7c
screen-api/src/main/java/com/moral/api/controller/SysTestController.java
@@ -32,6 +32,7 @@
import java.awt.*;
import java.io.*;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.*;
import java.util.List;
@@ -55,19 +56,21 @@
    @GetMapping("resultWord")
    public void adresultWordd(HttpServletResponse response,String time,String endTime) {
       // for(int i = 495;i<1095;i++){
            List<SysTest> listAll = sysTestService.listAll(time,endTime,null);
        String ks = "2023-08-06";
        for(int i =1;i<2;i++){
            Date ksDate = DateUtils.convertDate(ks);
            List<SysTest> listAll = sysTestService.listAll(ks,null,null);
            if(CollectionUtils.isEmpty(listAll)){
                return;
            }
          /*  Date endTime =listAll.get(0).getTime();
            String endTimeStr = DateUtils.dateToDateString(endTime,DateUtils.yyyyMMdd_EN);
            String endTimeStr = DateUtils.dateToDateString(ksDate,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);
     //   }
            downloadWord(fileName, map, response,"空气质量日报"+endTimeStr+".docx");
            ks = DateUtils.dateToDateString(DateUtils.addDays(ksDate,1),DateUtils.yyyy_MM_dd_EN);
        }
    }
    @GetMapping("excelM")
    public void excelM(HttpServletResponse response,String time,String endTime) {
@@ -113,9 +116,10 @@
    @GetMapping("resultWordWeek")
    public void resultWordWeek(HttpServletResponse response) {
        String ks = "2020-06-22";
        String ks = "2023-06-19";
        Date ksDate = DateUtils.convertDate(ks);
        for(int i = 0;i<157;i++){
        int num = 157;
        for(int i = 0;i<8;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);
@@ -126,17 +130,19 @@
            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);
            Map<String,Object> map = resultWeekMap(listAll,num,time1+"-"+endTime1);
            downloadWord(fileName, map, response,"空气质量周报"+time+".docx");
            ksDate =  DateUtils.addDays(ksDate,7);
            num++;
        }
    }
    @GetMapping("resultWordMonth")
    public void resultWordMonth(HttpServletResponse response) {
        String ks = "2020-06-01";
        Date ksDate = DateUtils.convertDate(ks);
        String ks = "2023-07-01";
        Date ksDate = DateUtils.convertDate(ks);
        for(int i = 0;i<1;i++){
            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);
@@ -144,12 +150,14 @@
            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);
            List<SysTest> listDay = sysTestService.listAll(time,endTime,null);
            String  fileName = "空气质量月报.docx";
            String time1 = DateUtils.dateToDateString(ksDate,"yyyy年MM月");
            Long days = DateUtils.getQuotByDays(DateUtils.dateToDateString(listDay.get(0).getTime()),DateUtils.dateToDateString(listDay.get(listDay.size()-1).getTime()));
            Map<String,Object> map = resultWeekMap(listAll,time1,listDay,days.intValue());
            downloadWord(fileName, map, response,"空气质量月报"+time1+".docx");
           ksDate =  DateUtils.addMonths(ksDate,1);
        }
    }
@@ -157,7 +165,7 @@
        String path = getPath(fileName);//我这放 resources包下
        try {
            //获取模板文档
            OutputStream out = new FileOutputStream("E:\\home\\week\\" + newFileName);
            OutputStream out = new FileOutputStream("E:\\home\\week1\\" + newFileName);
            File rootFile = new File(ResourceUtils.getURL("classpath:").getPath());
            File file= new File(rootFile, path);
            XWPFDocument word = WordExportUtil.exportWord07(file.getPath(), params);
@@ -267,15 +275,245 @@
            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);
        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);
        ImageEntity imageEntity = pieChart("测试",datas, 500, 300);*/
        resultMap.put("主要内容",bodyName);
        return resultMap;
    }
    private Map<String,Object> resultWeekMap(List<SysTest> listAll,String weekTime,List<SysTest> listDay,int days){
        Map<String,Object> resultMap = new HashMap<>();
        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);
        resultMap.putAll(month(listDay,days+1));
        return resultMap;
    }
    private Map<String,Object> month(List<SysTest> listDay, int days){
        Map<String,Object> map = new HashMap<>();
        map.put("沙优良",0);
        map.put("友优良",0);
        map.put("沙优",0);
        map.put("沙良",0);
        map.put("沙轻",0);
        map.put("沙中",0);
        map.put("沙重",0);
        map.put("沙严",0);
        map.put("友优",0);
        map.put("友良",0);
        map.put("友轻",0);
        map.put("友中",0);
        map.put("友重",0);
        map.put("友严",0);
        map.put("中优",0);
        map.put("中良",0);
        map.put("中轻",0);
        map.put("中中",0);
        map.put("中重",0);
        map.put("中严",0);
        Map<String,Integer> map1 = new HashMap<>();
        Map<String,Integer> map11 = new HashMap<>();
        Map<String,Integer> map111 = new HashMap<>();
        Map<String,Integer> map2 = new HashMap<>();
        Map<String,Integer> map22 = new HashMap<>();
        Map<String,Integer> map222 = new HashMap<>();
        List<Integer> list1 = Arrays.asList(0,0);
        List<Integer> list2 = Arrays.asList(0,0);
        List<Integer> list3 = Arrays.asList(0,0);
        String name = "沙";
        String levelName = "优";
        for(SysTest s : listDay){
            if(s.getName().contains("友")){
                name = "友";
            }else if(s.getName().contains("中")){
                name = "中";
            }else {
                name = "沙";
            }
            if(Double.parseDouble(s.getAqi()) <= 50){
                levelName = "优";
            }else if(Double.parseDouble(s.getAqi()) <= 100){
                levelName = "良";
            }else if(Double.parseDouble(s.getAqi()) <= 150){
                levelName = "轻";
            }else if(Double.parseDouble(s.getAqi()) <= 200){
                levelName = "中";
            }else if(Double.parseDouble(s.getAqi()) <= 300){
                levelName = "重";
            }else {
                levelName = "严";
            }
            if(StringUtils.isNotEmpty(s.getSu()) && s.getName().contains("沙")){
                s.setSu(s.getSu().equals("-")?"无":s.getSu());
                if(map1.containsKey(s.getSu())){
                    map1.put(s.getSu(),map1.get(s.getSu())+1);
                }else {
                    map1.put(s.getSu(),1);
                }
            }
            if(StringUtils.isNotEmpty(s.getSu())&& s.getName().contains("友")){
                s.setSu(s.getSu().equals("-")?"无":s.getSu());
                if(map11.containsKey(s.getSu())){
                    map11.put(s.getSu(),map11.get(s.getSu())+1);
                }else {
                    map11.put(s.getSu(),1);
                }
            }
            if(StringUtils.isNotEmpty(s.getSu())&&s.getName().contains("中")){
                s.setSu(s.getSu().equals("-")?"无":s.getSu());
                if(map111.containsKey(s.getSu())){
                    map111.put(s.getSu(),map111.get(s.getSu())+1);
                }else {
                    map111.put(s.getSu(),1);
                }
            }
            if(Double.parseDouble(s.getAqi()) <= 100){
                if(map.containsKey(name+"优良")){
                    map.put(name+"优良",Integer.parseInt(map.get(name+"优良").toString())+1);
                }else {
                    map.put(name+"优良",1);
                }
            }else {
                if(map.containsKey(name+"污染")){
                    map.put(name+"污染",Integer.parseInt(map.get(name+"污染").toString())+1);
                }else {
                    map.put(name+"污染",1);
                }
                if(StringUtils.isNotEmpty(s.getSu())&& s.getName().contains("沙") && s.getSu().contains("PM2.5")){
                    list1.set(0,list1.get(0)+1);
                }else if(StringUtils.isNotEmpty(s.getSu())&& s.getName().contains("沙") && s.getSu().contains("O3")){
                    list1.set(1,list1.get(1)+1);
                }
                if(StringUtils.isNotEmpty(s.getSu())&& s.getName().contains("友") && s.getSu().contains("PM2.5")){
                    list2.set(0,list2.get(0)+1);
                }else if(StringUtils.isNotEmpty(s.getSu())&& s.getName().contains("友") && s.getSu().contains("O3")){
                    list2.set(1,list2.get(1)+1);
                }
                if(StringUtils.isNotEmpty(s.getSu())&& s.getName().contains("中") && s.getSu().contains("PM2.5")){
                    list3.set(0,list3.get(0)+1);
                }else if(StringUtils.isNotEmpty(s.getSu())&& s.getName().contains("中") && s.getSu().contains("O3")){
                    list3.set(1,list3.get(1)+1);
                }
            }
            if(map.containsKey(name+levelName)){
                map.put(name+levelName,Integer.parseInt(map.get(name+levelName).toString())+1);
            }else {
                map.put(name+levelName,1);
            }
            String level = levelName;
            if(level.equals("轻")){
                level = "轻度污染";
            }else if(level.equals("中")){
                level = "中度污染";
            }else if(level.equals("重")){
                level = "重度污染";
            }else if(level.equals("严")){
                level = "严重污染";
            }
            if(s.getName().contains("沙")){
                if(map2.containsKey(levelName)){
                    map2.put(levelName,map2.get(levelName)+1);
                }else {
                    map2.put(levelName,1);
                }
            }else if(s.getName().contains("友")){
                if(map22.containsKey(levelName)){
                    map22.put(levelName,map22.get(levelName)+1);
                }else {
                    map22.put(levelName,1);
                }
            }else if(s.getName().contains("中")){
                if(map222.containsKey(levelName)){
                    map222.put(levelName,map222.get(levelName)+1);
                }else {
                    map222.put(levelName,1);
                }
            }
        }
        BigDecimal zb1 = BigDecimal.valueOf(Integer.parseInt(map.get("沙优良").toString())*100).divide(BigDecimal.valueOf(days),2,BigDecimal.ROUND_HALF_UP);
        map.put("沙优良占比",zb1.toString()+"%");
        BigDecimal zb2 = BigDecimal.valueOf(Integer.parseInt(map.get("友优良").toString())*100).divide(BigDecimal.valueOf(days),2,BigDecimal.ROUND_HALF_UP);
        map.put("友优良占比",zb2.toString()+"%");
        BigDecimal zb3 = BigDecimal.valueOf(Integer.parseInt(map.get("中优良").toString())*100).divide(BigDecimal.valueOf(days),2,BigDecimal.ROUND_HALF_UP);
        map.put("中优良占比",zb3.toString()+"%");
        ImageEntity imageEntity2 = pieChart("空气质量等级占比分布图",map2, 500, 300);
        map.put("沙空气饼图",imageEntity2);
        ImageEntity imageEntity22 = pieChart("空气质量等级占比分布图",map22, 500, 300);
        map.put("友空气饼图",imageEntity22);
        ImageEntity imageEntity222 = pieChart("空气质量等级占比分布图",map222, 500, 300);
        map.put("中空气饼图",imageEntity222);
        ImageEntity imageEntity1 = pieChart("首要污染物占比分布图",map1, 500, 300);
        map.put("沙首污饼图",imageEntity1);
        ImageEntity imageEntity11 = pieChart("首要污染物占比分布图",map11, 500, 300);
        map.put("友首污饼图",imageEntity11);
        ImageEntity imageEntity111 = pieChart("首要污染物占比分布图",map111, 500, 300);
        map.put("中首污饼图",imageEntity111);
        StringBuffer buffer = new StringBuffer();
        if(!list1.get(0).equals(0)){
            BigDecimal num = BigDecimal.valueOf(list1.get(0)*100).divide(BigDecimal.valueOf(Integer.parseInt(map.get("沙污染").toString())),2,BigDecimal.ROUND_HALF_UP);
            buffer.append("PM2.5(占比"+num+"%),");
        }
        if(!list1.get(1).equals(0)){
            BigDecimal num = BigDecimal.valueOf(list1.get(1)*100).divide(BigDecimal.valueOf(Integer.parseInt(map.get("沙污染").toString())),2,BigDecimal.ROUND_HALF_UP);
            buffer.append("O3(占比"+num+"%),");
        }
        map.put("沙污染占比",buffer.toString().length()>0?"首要污染物为"+buffer.toString():new StringBuffer());
        StringBuffer buffer1 = new StringBuffer();
        if(!list2.get(0) .equals(0)){
            BigDecimal num = BigDecimal.valueOf(list2.get(0)*100).divide(BigDecimal.valueOf(Integer.parseInt(map.get("友污染").toString())),2,BigDecimal.ROUND_HALF_UP);
            buffer1.append("PM2.5(占比"+num+"%),");
        }
        if(!list2.get(1) .equals(0)){
            BigDecimal num = BigDecimal.valueOf(list2.get(1)*100).divide(BigDecimal.valueOf(Integer.parseInt(map.get("友污染").toString())),2,BigDecimal.ROUND_HALF_UP);
            buffer1.append("O3(占比"+num+"%),");
        }
        map.put("友污染占比",buffer1.toString().length()>0?"首要污染物为"+buffer1.toString():new StringBuffer());
        StringBuffer buffer2 = new StringBuffer();
        if(!list3.get(0) .equals(0)){
            BigDecimal num = BigDecimal.valueOf(list3.get(0)*100).divide(BigDecimal.valueOf(Integer.parseInt(map.get("中污染").toString())),2,BigDecimal.ROUND_HALF_UP);
            buffer2.append("PM2.5(占比"+num+"%),");
        }
        if(!list3.get(1).equals(0)){
            BigDecimal num = BigDecimal.valueOf(list3.get(1)*100).divide(BigDecimal.valueOf(Integer.parseInt(map.get("中污染").toString())),2,BigDecimal.ROUND_HALF_UP);
            buffer2.append("O3(占比"+num+"%),");
        }
        map.put("中污染占比",buffer2.toString().length()>0?"首要污染物为"+buffer2.toString():new StringBuffer());
        return map;
    }
    private String stringButterStr(List<SysTest> listAll){
        // 0 一样1 两高 2两低,3高,低
@@ -568,15 +806,23 @@
            ksDate =  DateUtils.addMonths(ksDate,1);
        }*/
        String ks = "2023-06-22";
        for(int i =1;i<46;i++){
            Date ksDate = DateUtils.convertDate(ks);
            System.out.println("开始:"+DateUtils.dateToDateString(ksDate,DateUtils.yyyy_MM_dd_EN));
        String ks = "2020-06-22";
            ks = DateUtils.dateToDateString(DateUtils.addDays(ksDate,1),DateUtils.yyyy_MM_dd_EN);
            System.out.println("结束:"+ks);
        }
        /*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);
        }
        }*/
    }