src/main/java/com/moral/controller/ReportController.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/moral/mapper/HistoryMapper.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/moral/service/HistoryService.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/moral/service/impl/HistoryServiceImpl.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/moral/util/DatesUtil.java | ●●●●● patch | view | raw | blame | history | |
src/main/resources/mapper/HistoryMapper.xml | ●●●●● 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>