From 66fd957202742202804a614c766b9b973a26d836 Mon Sep 17 00:00:00 2001 From: jinpengyong <jpy123456> Date: Thu, 07 May 2020 17:15:04 +0800 Subject: [PATCH] update --- src/main/java/com/moral/service/HistoryMinutelyService.java | 2 src/main/java/com/moral/mapper/HistoryMinutelyMapper.java | 2 src/main/resources/mapper/HistoryMinutelyMapper.xml | 16 -- src/main/java/com/moral/controller/ReportController.java | 89 ++++++++---- src/main/resources/mapper/HangzhouAqiMapper.xml | 72 ++++++---- src/main/java/com/moral/service/HangzhouAqiService.java | 3 src/main/java/com/moral/controller/ScreenController.java | 110 +++++---------- src/main/java/com/moral/service/impl/HangzhouAqiServiceImpl.java | 57 ++++++++ src/main/java/com/moral/mapper/HangzhouAqiMapper.java | 1 src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java | 10 - 10 files changed, 199 insertions(+), 163 deletions(-) diff --git a/src/main/java/com/moral/controller/ReportController.java b/src/main/java/com/moral/controller/ReportController.java index 5d90395..d3c7e6c 100644 --- a/src/main/java/com/moral/controller/ReportController.java +++ b/src/main/java/com/moral/controller/ReportController.java @@ -4,6 +4,8 @@ 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; @@ -99,23 +101,13 @@ @GetMapping("newExcel") public ResultBean<Boolean> getNExcelReport(HttpServletRequest request, HttpServletResponse response) throws Exception { Map<String, Object> parameters = getParametersStartingWith(request, null); - List<Map<String, Object>> list = historyMinutelyService.getMonitorPointOrDeviceAvgData(parameters); - ArrayList<String> sensorKeys = (ArrayList<String>) parameters.get("sensorKeys"); - for (Map<String, Object> map : list) { - for (String sensorKey : sensorKeys) { - if (map.get(sensorKey) == null) { - map.put(sensorKey, ""); - } - } - } - String type = parameters.get("type").toString(); String time = parameters.get("time").toString(); - String timeb = ""; + String timeb; if (parameters.get("timeb") == null) { - timeb = parameters.get("time").toString(); - } else { - timeb = parameters.get("timeb").toString(); + timeb = time; + }else { + timeb=parameters.get("timeb").toString(); } String[] endTimes = timeb.split("-"); @@ -123,21 +115,12 @@ String beginTime = ""; String endTime = ""; List<String> monthList1 = new ArrayList<>(); - monthList1.add("01"); - monthList1.add("03"); - monthList1.add("05"); - monthList1.add("07"); - monthList1.add("08"); - monthList1.add("10"); - monthList1.add("12"); + Collections.addAll(monthList1,"01","03","05","07","08","10","12"); List<String> monthList2 = new ArrayList<>(); - monthList2.add("04"); - monthList2.add("06"); - monthList2.add("09"); - monthList2.add("11"); + Collections.addAll(monthList2,"04","06","09","11"); + Integer year = Integer.valueOf(endTimes[0]); int i = 0; - if (type.equals("year")) { dateFormat = "yyyy-MM"; beginTime = time + "-01"; @@ -163,11 +146,11 @@ beginTime = time + " 00"; endTime = timeb + " 23"; i = Calendar.HOUR_OF_DAY; - } else if (type.equals("hour")) { - dateFormat = "yyyy-MM-dd HH:mm"; - beginTime = time + ":00:00"; - endTime = timeb + ":59:00"; - i = Calendar.MINUTE; + }else if(type.equals("hour")){ + dateFormat="yyyy-MM-dd HH:mm"; + beginTime=time+":00:00"; + endTime=timeb+":59:00"; + i=Calendar.MINUTE; } SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); @@ -182,6 +165,50 @@ resultList.add(map); } + if(type.equals("year")){ + SimpleDateFormat sd = new SimpleDateFormat("yyyy"); + Date dt = sd.parse(timeb); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(dt); + calendar.add(Calendar.YEAR, 1); + Date dt1 = calendar.getTime(); + timeb = sd.format(dt1); + }else if(type.equals("month")){ + SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM"); + Date dt = sd.parse(timeb); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(dt); + calendar.add(Calendar.MONTH, 1); + Date dt1 = calendar.getTime(); + timeb = sd.format(dt1); + }else if(type.equals("day")){ + SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd"); + Date dt = sd.parse(timeb); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(dt); + calendar.add(Calendar.DAY_OF_MONTH, 1); + Date dt1 = calendar.getTime(); + timeb = sd.format(dt1); + }else if(type.equals("hour")){ + SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH"); + Date dt = sd.parse(timeb); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(dt); + calendar.add(Calendar.HOUR_OF_DAY, 1); + Date dt1 = calendar.getTime(); + timeb = sd.format(dt1); + } + parameters.put("timeb",timeb); + List<Map<String, Object>> list = historyMinutelyService.getMonitorPointOrDeviceAvgData(parameters); + ArrayList<String> sensorKeys = (ArrayList<String>)parameters.get("sensorKeys"); + for (Map<String, Object> map : list) { + for (String sensorKey : sensorKeys) { + if(map.get(sensorKey)==null){ + map.put(sensorKey,""); + } + } + } + for (Map<String, Object> map : resultList) { for (Map<String, Object> resultMap : list) { if (resultMap.get("time").equals(map.get("time"))) { diff --git a/src/main/java/com/moral/controller/ScreenController.java b/src/main/java/com/moral/controller/ScreenController.java index fea81f7..63ba21f 100644 --- a/src/main/java/com/moral/controller/ScreenController.java +++ b/src/main/java/com/moral/controller/ScreenController.java @@ -17,7 +17,6 @@ import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; -import org.apache.commons.lang.StringUtils; import org.apache.commons.net.ftp.FTPClient; import org.apache.log4j.Logger; import org.dom4j.Document; @@ -839,45 +838,15 @@ parameters.put("monitorPointId", parameters.remove("monitorPoint")); parameters.put("areaCode", parameters.remove("areaCode")); String[] sensorKeys = parameters.remove("sensorKey").toString().split(","); + String type = parameters.get("type").toString(); String s = sensorKeys[0]; parameters.put("sensors", Arrays.asList(sensorKeys)); parameters.put("sensors2", s); - List<Map<String, Object>> monitorList = historyMinutelyService.getMonitorPointOrDeviceAvgData(parameters); - String type = parameters.get("type").toString(); - ArrayList<Map<String, Object>> resultList = new ArrayList<>(); - String sensorKey1 = s; - switch (s) { - case "e1": - sensorKey1 = "PM2_5"; - break; - case "e2": - sensorKey1 = "PM10"; - break; - case "e10": - sensorKey1 = "CO"; - break; - case "e11": - sensorKey1 = "SO2"; - break; - case "e15": - sensorKey1 = "O3"; - break; - case "e16": - sensorKey1 = "NO2"; - break; - default: - break; - } - parameters.put("sensors1", sensorKey1); - List<Map<String, Object>> areaList = historyMinutelyService.getAreaAvgDataByAreaCode(parameters); - if (areaList.isEmpty()) { - Integer areaCode = Integer.valueOf(request.getParameter("areaCode")); - areaCode = hangzhouAqiService.queryCityCode(areaCode); - parameters.remove("areaCode"); - parameters.put("areaCode", String.valueOf(areaCode)); - areaList = historyMinutelyService.getAreaAvgDataByAreaCode(parameters); - } + ArrayList<Map<String, Object>> resultList = new ArrayList<>(); + + List<Map<String, Object>> monitorList = historyMinutelyService.getMonitorPointOrDeviceAvgData(parameters); + List<Map<String, Object>> areaList = hangzhouAqiService.getAreaAvgDataByAreaCode(parameters); if (areaList.isEmpty() && monitorList.isEmpty()) { return new ResultBean<List<Map<String, Object>>>(resultList); @@ -911,7 +880,6 @@ String time = map.get("time").toString(); time = time.substring(time.length() - 2); map.put("time", Integer.valueOf(time)); - } for (Map<String, Object> m : monitorList) { @@ -920,7 +888,7 @@ m.put("time", Integer.valueOf(time)); } - Integer maxTime = 0; + Integer maxTime; Map<String, Object> areaMap = areaList.get(areaList.size() - 1); Integer areaMax = Integer.valueOf(areaMap.get("time").toString()); Map<String, Object> monitorMap = monitorList.get(monitorList.size() - 1); @@ -951,59 +919,53 @@ } else { resultList.set(time - 1, map); } - } - if (type.equals("day")) { - for (int i = 0; i < resultList.size(); i++) { - if (resultList.get(i) == null) { - Map<String, Object> hashMap = new HashMap<>(); + for (int i = 0; i <resultList.size() ; i++) { + if (resultList.get(i) == null) { + Map<String, Object> hashMap = new HashMap<>(); + if(type.equals("day")){ hashMap.put("time", i); - hashMap.put(s, ""); - resultList.set(i, hashMap); - } - } - } else { - for (int i = 0; i < resultList.size(); i++) { - if (resultList.get(i) == null) { - Map<String, Object> hashMap = new HashMap<>(); + }else { hashMap.put("time", i + 1); - hashMap.put(s, ""); - resultList.set(i, hashMap); } + hashMap.put(s, ""); + resultList.set(i, hashMap); } } - for (Map<String, Object> map : resultList) { - List<Object> values = new ArrayList<>(); - for (Map<String, Object> map1 : monitorList) { - if (map.get("time").toString().equals(map1.get("time").toString())) { - values.add(map.remove(s)); - values.add(map1.remove(s)); - map.put("values", values); - } + for (Map<String, Object> map1 : monitorList) { + ArrayList<String> values = new ArrayList<>(); + Integer time = Integer.valueOf(map1.get("time").toString()); + Map<String, Object> map; + if (type.equals("day")) { + map = resultList.get(time); + } else { + map = resultList.get(time - 1); } + values.add(map.remove(s).toString()); + values.add(map1.get(s).toString()); + map.put("values", values); } for (Map<String, Object> map : resultList) { - List<Object> values = new ArrayList<>(); if (map.containsKey(s)) { - values.add(map.remove(s)); + ArrayList<String> values = new ArrayList<>(); + values.add(map.remove(s).toString()); values.add(""); - map.put("values", values); - } - } - List<Map<String, Object>> mapList = new ArrayList<>(); - for (Map<String, Object> map : resultList) { - String values = map.get("values").toString(); - String string = StringUtils.strip(values, "[]"); - String[] strings = string.split(","); - if (!strings[0].equals("") || !strings[1].equals(" ")) { - mapList.add(map); + map.put("values",values); } } - return new ResultBean<List<Map<String, Object>>>(mapList); + Iterator<Map<String, Object>> it = resultList.iterator(); + while(it.hasNext()){ + Map<String, Object> next = it.next(); + ArrayList<String> values = (ArrayList<String>)next.get("values"); + if(values.get(0).equals("")&&values.get(1).equals("")){ + it.remove(); + } + } + return new ResultBean<List<Map<String, Object>>>(resultList); } @GetMapping("getmpoint-byid") diff --git a/src/main/java/com/moral/mapper/HangzhouAqiMapper.java b/src/main/java/com/moral/mapper/HangzhouAqiMapper.java index 76cdbcf..9a61b07 100644 --- a/src/main/java/com/moral/mapper/HangzhouAqiMapper.java +++ b/src/main/java/com/moral/mapper/HangzhouAqiMapper.java @@ -16,5 +16,6 @@ Integer queryCityCode(@Param("areaCode") Integer areaCode); + List<Map<String, Object>> getAreaAvgDataByAreaCode(Map<String, Object> parameters); } diff --git a/src/main/java/com/moral/mapper/HistoryMinutelyMapper.java b/src/main/java/com/moral/mapper/HistoryMinutelyMapper.java index ca530b5..ecb0b2d 100644 --- a/src/main/java/com/moral/mapper/HistoryMinutelyMapper.java +++ b/src/main/java/com/moral/mapper/HistoryMinutelyMapper.java @@ -16,8 +16,6 @@ List<Map<String, Object>> getMonitorPointOrDeviceAvgData(Map<String, Object> parameters); - List<Map<String, Object>> getAreaAvgDataByAreaCode(Map<String, Object> parameters); - /** * @param sensorKeys * @param timePeriod diff --git a/src/main/java/com/moral/service/HangzhouAqiService.java b/src/main/java/com/moral/service/HangzhouAqiService.java index 041bdc6..eca4008 100644 --- a/src/main/java/com/moral/service/HangzhouAqiService.java +++ b/src/main/java/com/moral/service/HangzhouAqiService.java @@ -13,4 +13,7 @@ public List<Map<String, Object>> queryAqi24Hours(@NotNull Integer orgId); public Integer queryCityCode(@NotNull Integer areaCode); + + List<Map<String, Object>> getAreaAvgDataByAreaCode(Map<String, Object> parameters) throws Exception; + } diff --git a/src/main/java/com/moral/service/HistoryMinutelyService.java b/src/main/java/com/moral/service/HistoryMinutelyService.java index 7ce8b6f..45b8517 100644 --- a/src/main/java/com/moral/service/HistoryMinutelyService.java +++ b/src/main/java/com/moral/service/HistoryMinutelyService.java @@ -21,8 +21,6 @@ Map<String, Object> getAverageBySensor(Map<String, Object> parameters); - List<Map<String, Object>> getAreaAvgDataByAreaCode(Map<String, Object> parameters) throws Exception; - Map<String, List<List<Double>>> queryLineChartDateByCrieria(LineChartCriteria lineChartCriteria); void convertQueryParam(Map<String, Object> parameters) throws ParseException; diff --git a/src/main/java/com/moral/service/impl/HangzhouAqiServiceImpl.java b/src/main/java/com/moral/service/impl/HangzhouAqiServiceImpl.java index f3feac4..445693c 100644 --- a/src/main/java/com/moral/service/impl/HangzhouAqiServiceImpl.java +++ b/src/main/java/com/moral/service/impl/HangzhouAqiServiceImpl.java @@ -18,6 +18,7 @@ import com.moral.mapper.HangzhouAqiMapper; import com.moral.mapper.OrganizationMapper; import com.moral.service.HangzhouAqiService; +import com.moral.service.HistoryMinutelyService; /** * @Auther: fengxiang @@ -30,6 +31,9 @@ private OrganizationMapper organizationMapper; @Resource private HangzhouAqiMapper hangzhouAqiMapper; + + @Resource + private HistoryMinutelyService historyMinutelyService; public List<Map> queryAqiOfTimePeriod(String code, TimePeriod timePeriod) { return hangzhouAqiMapper.selectAqisByCodeAndTimePeriod(code, timePeriod); @@ -109,4 +113,57 @@ public Integer queryCityCode(Integer areaCode) { return hangzhouAqiMapper.queryCityCode(areaCode); } + + @Override + public List<Map<String, Object>> getAreaAvgDataByAreaCode(Map<String, Object> parameters) throws Exception { + historyMinutelyService.convertQueryParam(parameters); + if (!ObjectUtils.isEmpty(parameters.get("compensate"))) { + parameters.put("timeUnits", "10min"); + } + + String sensors2 = parameters.get("sensors2").toString(); + + String sensors1 = sensors2; + String sensors=""; + switch (sensors2) { + case "e1": + sensors1 = "PM2_5"; + sensors="PM25C"; + break; + case "e2": + sensors1 = "PM10"; + sensors="PM10C"; + break; + case "e10": + sensors1 = "CO"; + sensors="COC"; + break; + case "e11": + sensors1 = "SO2"; + sensors="SO2C"; + break; + case "e15": + sensors1 = "O3"; + sensors="O3C"; + break; + case "e16": + sensors1 = "NO2"; + sensors="NO2C"; + break; + default: + break; + } + + parameters.put("sensors1", sensors1); + parameters.put("sensors",sensors); + List<Map<String, Object>> areaList = hangzhouAqiMapper.getAreaAvgDataByAreaCode(parameters); + if (areaList.isEmpty()) { + Integer areaCode = Integer.valueOf(parameters.get("areaCode").toString()); + areaCode = hangzhouAqiMapper.queryCityCode(areaCode); + parameters.put("areaCode", String.valueOf(areaCode)); + areaList = hangzhouAqiMapper.getAreaAvgDataByAreaCode(parameters); + } + return areaList; + + } } diff --git a/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java index f435eee..5d0c824 100644 --- a/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java +++ b/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java @@ -361,16 +361,6 @@ } @Override - public List<Map<String, Object>> getAreaAvgDataByAreaCode(Map<String, Object> parameters) throws Exception { - convertQueryParam(parameters); - if (!ObjectUtils.isEmpty(parameters.get("compensate"))) { - parameters.put("timeUnits", "10min"); - } - return historyMinutelyMapper.getAreaAvgDataByAreaCode(parameters); - - } - - @Override public void convertQueryParam(Map<String, Object> parameters) throws ParseException { if (!parameters.containsKey("field")) { // String type = (String) parameters.get("type"); diff --git a/src/main/resources/mapper/HangzhouAqiMapper.xml b/src/main/resources/mapper/HangzhouAqiMapper.xml index 81fe13b..26e4898 100644 --- a/src/main/resources/mapper/HangzhouAqiMapper.xml +++ b/src/main/resources/mapper/HangzhouAqiMapper.xml @@ -1,21 +1,21 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.moral.mapper.HangzhouAqiMapper"> - <resultMap id="BaseResultMap" type="com.moral.entity.HangzhouAqi"> - <id column="time" property="time" jdbcType="TIMESTAMP"/> - <result column="aqi_json" property="aqiJson" jdbcType="OTHER"/> - <result column="city_code" property="cityCode" jdbcType="VARCHAR"/> - </resultMap> - <sql id="Base_Column_List"> + <resultMap id="BaseResultMap" type="com.moral.entity.HangzhouAqi"> + <id column="time" property="time" jdbcType="TIMESTAMP"/> + <result column="aqi_json" property="aqiJson" jdbcType="OTHER"/> + <result column="city_code" property="cityCode" jdbcType="VARCHAR"/> + </resultMap> + <sql id="Base_Column_List"> time, aqi_json, city_code </sql> - <!--<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.util.Date" >--> - <!--select--> - <!--<include refid="Base_Column_List" />--> - <!--from hangzhou_aqi--> - <!--where time = #{time,jdbcType=TIMESTAMP}--> - <!--</select>--> - <select id="selectAqisByCodeAndTimePeriod" resultType="map" parameterType="java.util.Date"> + <!--<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.util.Date" >--> + <!--select--> + <!--<include refid="Base_Column_List" />--> + <!--from hangzhou_aqi--> + <!--where time = #{time,jdbcType=TIMESTAMP}--> + <!--</select>--> + <select id="selectAqisByCodeAndTimePeriod" resultType="map" parameterType="java.util.Date"> select aqi_json->'$.AQI' as aqi,DATE_FORMAT(time,'${@com.moral.common.util.ReportTimeFormat@toMySqlTimeFormat(timePeriod.timeUnits)}') as 'time' from hangzhou_aqi @@ -33,22 +33,38 @@ order by time asc </select> - <select id="getAqisByOrganizationId" resultType="map"> - SELECT - h.aqi_json ->> '$.AQI' * 1 aqi, - DATE_FORMAT( h.time, '%H' ) * 1 time - FROM - hangzhou_aqi h - <where> - h.city_code = #{cityCode} - AND h.time <![CDATA[<]]> #{end} - </where> - ORDER BY - h.time DESC - LIMIT 24 - </select> + <select id="getAqisByOrganizationId" resultType="map"> + SELECT + h.aqi_json ->> '$.AQI' * 1 aqi, + DATE_FORMAT( h.time, '%H' ) * 1 time + FROM + hangzhou_aqi h + <where> + h.city_code = #{cityCode} + AND h.time <![CDATA[<]]> #{end} + </where> + ORDER BY + h.time DESC + LIMIT 24 + </select> - <select id="queryCityCode" resultType="integer"> + <select id="queryCityCode" resultType="integer"> select city_code from area where area_code = #{areaCode} </select> + + <select id="getAreaAvgDataByAreaCode" resultType="java.util.Map"> + SELECT + DATE_FORMAT(time, #{typeFormat}) time, + round(AVG(case when aqi_json->'$.${sensors}' is null then aqi_json->'$.${sensors1}' else aqi_json->'$.${sensors}' end),4) as '${sensors2}' + FROM + hangzhou_aqi ha + WHERE + ha.time >= #{start} + AND ha.time <![CDATA[<]]> #{end} + AND ha.city_code = #{areaCode} + GROUP BY + DATE_FORMAT(time, #{typeFormat}) + ORDER BY + time + </select> </mapper> diff --git a/src/main/resources/mapper/HistoryMinutelyMapper.xml b/src/main/resources/mapper/HistoryMinutelyMapper.xml index 3f4c176..c202150 100644 --- a/src/main/resources/mapper/HistoryMinutelyMapper.xml +++ b/src/main/resources/mapper/HistoryMinutelyMapper.xml @@ -104,22 +104,6 @@ time </select> - <select id="getAreaAvgDataByAreaCode" resultType="java.util.Map"> - SELECT - DATE_FORMAT(time, #{typeFormat}) time, - AVG(aqi_json->'$.${sensors1}') AS '${sensors2}' - FROM - hangzhou_aqi ha - WHERE - ha.time >= #{start} - AND ha.time <![CDATA[<]]> #{end} - AND ha.city_code = #{areaCode} - GROUP BY - DATE_FORMAT(time, #{typeFormat}) - ORDER BY - time - </select> - <select id="selectLineChartDateByCrieria" resultType="java.util.Map"> SELECT <choose> -- Gitblit v1.8.0