From 5c3994e0166baff540d323a779573299a56feec6 Mon Sep 17 00:00:00 2001
From: yuzixiang <yzx123456>
Date: Fri, 22 May 2020 15:38:10 +0800
Subject: [PATCH] 计算臭氧平缓平均值(更新)

---
 src/main/java/com/moral/service/HistoryService.java          |    5 
 src/main/java/com/moral/service/impl/HistoryServiceImpl.java |   98 ++++++++++++++++++++----
 src/main/java/com/moral/util/DatesUtil.java                  |   22 ++++-
 src/main/java/com/moral/controller/ReportController.java     |   65 ++-------------
 src/main/java/com/moral/mapper/HistoryMapper.java            |    2 
 src/main/resources/mapper/HistoryMapper.xml                  |   16 ++-
 6 files changed, 122 insertions(+), 86 deletions(-)

diff --git a/src/main/java/com/moral/controller/ReportController.java b/src/main/java/com/moral/controller/ReportController.java
index 23dec7c..29ccd68 100644
--- a/src/main/java/com/moral/controller/ReportController.java
+++ b/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")
diff --git a/src/main/java/com/moral/mapper/HistoryMapper.java b/src/main/java/com/moral/mapper/HistoryMapper.java
index 2779451..404b31f 100644
--- a/src/main/java/com/moral/mapper/HistoryMapper.java
+++ b/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);
diff --git a/src/main/java/com/moral/service/HistoryService.java b/src/main/java/com/moral/service/HistoryService.java
index 5956c32..ea12763 100644
--- a/src/main/java/com/moral/service/HistoryService.java
+++ b/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);
 
 }
diff --git a/src/main/java/com/moral/service/impl/HistoryServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryServiceImpl.java
index 797a392..e0a6eec 100644
--- a/src/main/java/com/moral/service/impl/HistoryServiceImpl.java
+++ b/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;
     }
 }
diff --git a/src/main/java/com/moral/util/DatesUtil.java b/src/main/java/com/moral/util/DatesUtil.java
index 0e5ce58..2c73f85 100644
--- a/src/main/java/com/moral/util/DatesUtil.java
+++ b/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);
+        }}
+    }
+
 }
diff --git a/src/main/resources/mapper/HistoryMapper.xml b/src/main/resources/mapper/HistoryMapper.xml
index 603a438..0ab705d 100644
--- a/src/main/resources/mapper/HistoryMapper.xml
+++ b/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>
\ No newline at end of file

--
Gitblit v1.8.0