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