yuzixiang
2020-05-22 5c3994e0166baff540d323a779573299a56feec6
计算臭氧平缓平均值(更新)
6 files modified
208 ■■■■■ changed files
src/main/java/com/moral/controller/ReportController.java 65 ●●●● patch | view | raw | blame | history
src/main/java/com/moral/mapper/HistoryMapper.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/moral/service/HistoryService.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/impl/HistoryServiceImpl.java 98 ●●●● patch | view | raw | blame | history
src/main/java/com/moral/util/DatesUtil.java 22 ●●●● patch | view | raw | blame | history
src/main/resources/mapper/HistoryMapper.xml 16 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/controller/ReportController.java
@@ -1,14 +1,11 @@
package com.moral.controller;
import java.io.OutputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
@@ -19,6 +16,7 @@
import com.moral.util.DatesUtil;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
@@ -98,56 +96,12 @@
        outputStream.close();
        return new ResultBean<Boolean>(true);
    }
//计算臭氧平缓平均值并导出
    //计算臭氧平缓平均值并导出
    @GetMapping("O3Excel")
    public ResultBean<Boolean> getO3ExcelReport(HttpServletRequest request, HttpServletResponse response) throws Exception {
        Map<String, Object> parameters = getParametersStartingWith(request, null);
        String mac= (String) parameters.get("mac");
        String stime= (String) parameters.get("time");
        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM");
        Date time =format.parse(stime);
        List<String> stringListDate = DatesUtil.getAllTheDateOftheMonth(time);
        List<Map<String,Object>> maxList=new ArrayList<Map<String,Object>>();
        for (String sld : stringListDate) {
            Map<String,Object>  avgMap=new HashMap<String,Object>();
            List<String> listavg=new ArrayList<String>();
            String s1="";
            for(int i=0;i<24;i++){
                if (i<10){
                    sld=sld.substring(0,10);
                    sld=sld+" 0"+i+":00:00";
                    s1=DatesUtil.pinDate(sld);
                }else {
                    sld=sld.substring(0,10);
                    sld=sld+" "+i+":00:00";
                    s1=DatesUtil.pinDate(sld);
                }
                System.out.println(sld+"        "+s1);
                Map<String, Object> parm = new HashMap<String, Object>();
                parm.put("frontTime", sld);
                parm.put("afterTime", s1);
                parm.put("mac", mac);
                String avg = historyService.getO3AVG(parm);
                if (avg!=null){
                    listavg.add(avg);
                }
                }
            String maxO3="";
            if (listavg.size()!=0){
                String subs=sld.substring(0,10);
                String timef=subs+" 00:00:00";
                String timea=subs+" 23:59:59";
                int num=historyService.getNum(timef,timea);
                if (num==0){
                    maxO3="";
                }else {
                    maxO3= Collections.max(listavg);
                }
            }
            avgMap.put("time",sld.substring(0,10));
            avgMap.put("e15",maxO3);
            maxList.add(avgMap);
        }
        List<Map<String,Object>> maxList=historyService.getO3AVG(parameters);
        String[][] exportColumn = new String[2][];
        exportColumn[0] = new String[]{"时间", "20", "time"};
        String name = "O3浓度";
@@ -161,7 +115,8 @@
        outputStream.flush();
        outputStream.close();
        return new ResultBean<Boolean>(true);
        }
    }
    @GetMapping("newExcel")
src/main/java/com/moral/mapper/HistoryMapper.java
@@ -33,7 +33,7 @@
    List<Map<String, Object>> listGetSensorData(Map<String, Object> parameters);
    //获取臭氧平缓平均值
    String getO3AVG(Map<String, Object> parameters);
    List<Map<String, Object>> getO3AVG(Map<String, Object> parameters);
    int getNum(@Param("timef") String timef,
               @Param("timea") String timea);
src/main/java/com/moral/service/HistoryService.java
@@ -31,9 +31,8 @@
    List<List<Map<String, Object>>> getCarSensorData(Map<String, Object> parameters) throws Exception;
    //获取臭氧平缓平均值
    String getO3AVG(Map<String, Object> parameters);
    //获取一天的所有臭氧值
    List<Map<String, Object>> getO3AVG(Map<String, Object> parameters);
    int getNum(String timef,String timea);
}
src/main/java/com/moral/service/impl/HistoryServiceImpl.java
@@ -1,6 +1,7 @@
package com.moral.service.impl;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
@@ -10,16 +11,7 @@
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import javax.annotation.Resource;
@@ -43,6 +35,7 @@
import com.moral.service.ProfessionService;
import com.moral.util.AQICalculation;
import com.moral.util.DatesUtil;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
@@ -550,12 +543,85 @@
    }
    @Override
    public String getO3AVG(Map<String, Object> parameters) {
        return historyMapper.getO3AVG(parameters);
    }
    public List<Map<String,Object>> getO3AVG(Map<String, Object> parameters) {
        String mac= (String) parameters.get("mac");
        String stime= (String) parameters.get("time");
        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM");
        Date time = null;
        try {
            time = format.parse(stime);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        List<String> stringListDate = DatesUtil.getAllTheDateOftheMonth(time);
        List<Map<String,Object>> maxList=new ArrayList<Map<String,Object>>();
        for (String date : stringListDate) {
            System.out.println("------------------------------------------------");
            Map<String, Object> parm = new HashMap<String, Object>();
            DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            LocalDateTime time1 = LocalDateTime.parse(date + " 00:00:00", df);
            LocalDateTime time2 = time1.plusDays(1);
            String time3 = time2.toString().substring(0, 10);
            String nextDate = time3 + " 07:00:00";
            System.out.println("-----"+date);
            System.out.println(nextDate);
            parm.put("date", date);
            parm.put("nextDate", nextDate);
            parm.put("mac", mac);
            List<Map<String, Object>> listMap = historyMapper.getO3AVG(parm);
            System.out.println("size="+listMap.size());
            List list=new ArrayList();
            DatesUtil.getList(listMap,list);
            List list1=new ArrayList();
            String maxO3="";
            for (int i = 0; i <list.size() ; i++) {
                List elist=new ArrayList();
                List tlist=new ArrayList();
                Double sum=0.0;
                Double avg=0.0;
                for (Object o : (List)list.get(i)) {
                    Iterator<Map.Entry> iterator= ((Map)o).entrySet().iterator();
                    while(iterator.hasNext()) {
                        Map.Entry entry = iterator.next();
                        if (entry.getKey().equals("e15")){
                            elist.add(entry.getValue());
                        }
                    }
                }
                for (int j = 0; j <elist.size(); j++) {
                    sum+=Double.parseDouble((String) elist.get(j));
                    if (listMap.size()<=8 && listMap.size()>0){
                        avg=sum/listMap.size();
                    }else {
                        avg=sum/8;
                    }
                }
                if (avg==0.0){
                    list1.add("");
                }else {
                    BigDecimal b = new BigDecimal(avg);
                    double avg1 = b.setScale(4,BigDecimal.ROUND_HALF_UP).doubleValue();
                    list1.add(avg1);
                }
            }
            System.out.println(list1);
    @Override
    public int getNum(String timef, String timea) {
        return historyMapper.getNum(timef,timea);
            String timef=date+" 00:00:00";
            String timea=date+" 23:59:59";
            int num=historyMapper.getNum(timef,timea);
            if (num==0) {
                maxO3 = "";
            }else {
            if (list1.size()!=0){
                maxO3= ""+ Collections.max(list1);
            }else {
                maxO3="";
            }}
            Map<String,Object>  avgMap=new HashMap<String,Object>();
            avgMap.put("time",date);
            avgMap.put("e15",maxO3);
            maxList.add(avgMap);
        }
        return maxList;
    }
}
src/main/java/com/moral/util/DatesUtil.java
@@ -3,10 +3,7 @@
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.*;
public class DatesUtil {
    public static List<String> getAllTheDateOftheMonth(Date date) {
@@ -53,4 +50,21 @@
        return s;
    }
    public static void getList(List<Map<String, Object>> listMap,List list){
        if (listMap.size()<=8){
                list.add(listMap);
        }else{
        for (int i = 0; i < listMap.size(); i++) {
            List list1=new ArrayList();
            for (int j = i; j < i + 8; j++) {
                if (i==listMap.size()-7){
                    return;
                }else
                    list1.add(listMap.get(j));
            }
            list.add(list1);
        }}
    }
}
src/main/resources/mapper/HistoryMapper.xml
@@ -254,15 +254,17 @@
        ORDER BY
        h.time
    </select>
    <select id="getO3AVG" resultType="java.lang.String">
        select AVG(history_hourly.json->'$.e15[0]')
        FROM history_hourly
         where time <![CDATA[>=]]>#{frontTime}
         and time <![CDATA[<]]>#{afterTime}
         and mac=#{mac}
    </select>
    <select id="getNum" resultType="java.lang.Integer">
        select count(*) from history_hourly where time <![CDATA[>=]]> #{timef} and time <![CDATA[<=]]> #{timea}
    </select>
    <select id="getO3AVG" resultType="java.util.LinkedHashMap">
         select DATE_FORMAT(time,'%Y-%m-%d %H:%i:%s') time,json->'$.e15[0]' as e15
         FROM history_hourly
         where time <![CDATA[>=]]>#{date}
         and time <![CDATA[<]]>#{nextDate}
         and mac=#{mac}
         ORDER BY `time`
    </select>
</mapper>