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