From adde1ed1a99622c80a95dea83e294711d295c55c Mon Sep 17 00:00:00 2001 From: jinpengyong <jpy123456> Date: Tue, 08 Sep 2020 14:46:43 +0800 Subject: [PATCH] 微型站5分钟与半小时数据 --- src/main/java/com/moral/service/HistoryMinutelyService.java | 3 src/main/java/com/moral/mapper/HistoryMinutelyMapper.java | 3 src/main/resources/mapper/DeviceMapper.xml | 10 +- src/main/resources/mapper/HistoryMinutelyMapper.xml | 30 +++++++ src/main/resources/mapper/MonitorPointMapper.xml | 3 src/main/resources/mapper/HistoryMapper.xml | 5 src/main/java/com/moral/service/WeatherService.java | 2 src/main/resources/mapper/HistoryHourlyMapper.xml | 2 src/main/java/com/moral/controller/ScreenController.java | 26 ++++++ src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java | 130 ++++++++++++++++++++++++++++++++ src/main/java/com/moral/service/impl/WeatherServiceImpl.java | 25 ++++++ 11 files changed, 230 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/moral/controller/ScreenController.java b/src/main/java/com/moral/controller/ScreenController.java index 867b4ec..68e80ef 100644 --- a/src/main/java/com/moral/controller/ScreenController.java +++ b/src/main/java/com/moral/controller/ScreenController.java @@ -2030,7 +2030,7 @@ } @GetMapping("weatherData") - @ApiOperation(value = "������city���������������������������", notes = "������city���������������������������") + @ApiOperation(value = "������city���������������������������������", notes = "������city���������������������������������") @ApiImplicitParams(value = { @ApiImplicitParam(name = "city", value = "���������", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "time", value = "������(���������2020-03-19)", required = true, paramType = "query", dataType = "String")}) @@ -2040,6 +2040,30 @@ return new ResultBean<List<Map<String, Object>>>(weatherList); } + @GetMapping("weatherDataDay") + @ApiOperation(value = "������city���������������������", notes = "������city���������������������") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "city", value = "���������", required = true, paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "time", value = "������(���������2020-03-19)", required = true, paramType = "query", dataType = "String")}) + public ResultBean<List<Map<String, Object>>> getWeatherDataByDay(HttpServletRequest request) throws Exception { + Map<String, Object> parameters = getParametersStartingWith(request, null); + List<Map<String, Object>> weatherList = weatherService.getWeatherDataByDay(parameters); + return new ResultBean<List<Map<String, Object>>>(weatherList); + } + + @GetMapping("monitorDeviceData") + @ApiOperation(value = "���������������5������������������������", notes = "���������������5������������������������") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "city", value = "���������", required = true, paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "time", value = "������(���������2020-03-15)", required = true, paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "type", value = "������(5���������m,������������h)", required = true, paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "range", value = "������������������������(������������������m,���������a)", required = true, paramType = "query", dataType = "String")}) + public ResultBean<List<Map<String, Object>>> get5MinutesOrHalfHour(HttpServletRequest request) throws Exception { + Map<String, Object> parameters = getParametersStartingWith(request, null); + List<Map<String, Object>> deviceData = historyMinutelyService.get5MinutesOrHalfHour(parameters); + return new ResultBean<List<Map<String, Object>>>(deviceData); + } + @PostMapping("updateForecastWeather") public void updateForecastWeather(HttpServletRequest request){ Map<String, Object> parameters = getParametersStartingWith(request, null); diff --git a/src/main/java/com/moral/mapper/HistoryMinutelyMapper.java b/src/main/java/com/moral/mapper/HistoryMinutelyMapper.java index ecb0b2d..516b9ec 100644 --- a/src/main/java/com/moral/mapper/HistoryMinutelyMapper.java +++ b/src/main/java/com/moral/mapper/HistoryMinutelyMapper.java @@ -31,4 +31,7 @@ List<Map<String, Object>> getDevicesAvgDataToExcel(Map<String, Object> parameters); List<Map<String, Object>> getDevicesSensorsAvgDataToExcel(Map<String, Object> parameters); + + Map<String,Object> get5MiutesOrHalfHourByDay(Map<String, Object> parameters); + } diff --git a/src/main/java/com/moral/service/HistoryMinutelyService.java b/src/main/java/com/moral/service/HistoryMinutelyService.java index 45b8517..9c60e09 100644 --- a/src/main/java/com/moral/service/HistoryMinutelyService.java +++ b/src/main/java/com/moral/service/HistoryMinutelyService.java @@ -30,4 +30,7 @@ List<Map<String, Object>> getDevicesAvgDataToExcel(Map<String, Object> parameters) throws Exception; List<Map<String, Object>> getDevicesSensorsAvgDataToExcel(Map<String, Object> parameters) throws Exception; + + List<Map<String,Object>> get5MinutesOrHalfHour(Map<String, Object> parameters) throws ParseException; + } diff --git a/src/main/java/com/moral/service/WeatherService.java b/src/main/java/com/moral/service/WeatherService.java index 27c570f..312a106 100644 --- a/src/main/java/com/moral/service/WeatherService.java +++ b/src/main/java/com/moral/service/WeatherService.java @@ -14,5 +14,7 @@ List<Map<String, Object>> getWeatherData(Map<String, Object> parameters) throws ParseException; + List<Map<String, Object>> getWeatherDataByDay(Map<String, Object> parameters) throws ParseException; + void updateForecastWeather(Map<String, Object> parameters); } diff --git a/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java index 5d0c824..ed28222 100644 --- a/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java +++ b/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java @@ -2,6 +2,7 @@ import java.math.BigDecimal; import java.text.ParseException; +import java.text.SimpleDateFormat; import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; @@ -17,6 +18,7 @@ import java.util.Date; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -44,14 +46,22 @@ import com.moral.common.util.ReportTimeFormat; import com.moral.common.util.ResourceUtil; import com.moral.common.util.ValidateUtil; +import com.moral.entity.Area; +import com.moral.entity.City; +import com.moral.entity.MonitorPoint; +import com.moral.entity.Province; import com.moral.entity.Sensor; import com.moral.entity.charts.DataCondition; import com.moral.entity.charts.LineChartCriteria; import com.moral.entity.charts.TimePeriod; import com.moral.mapper.AlarmDailyMapper; +import com.moral.mapper.AreaMapper; +import com.moral.mapper.CityMapper; import com.moral.mapper.DeviceMapper; import com.moral.mapper.HistoryMapper; import com.moral.mapper.HistoryMinutelyMapper; +import com.moral.mapper.MonitorPointMapper; +import com.moral.mapper.ProvinceMapper; import com.moral.mapper.SensorMapper; import com.moral.service.HistoryMinutelyService; @@ -76,6 +86,18 @@ @Resource private AlarmDailyMapper alarmDailyMapper; + + @Resource + private AreaMapper areaMapper; + + @Resource + private ProvinceMapper provinceMapper; + + @Resource + private CityMapper cityMapper; + + @Resource + private MonitorPointMapper monitorPointMapper; @Override public Map<String, Object> getDayAQIByDevice(Map<String, Object> parameters) { @@ -738,4 +760,112 @@ return historyMinutelyMapper.getDevicesSensorsAvgDataToExcel(parameters); } + + @Override + public List<Map<String, Object>> get5MinutesOrHalfHour(Map<String, Object> parameters) throws ParseException { + if (parameters.get("city") == null) { + return new ArrayList<Map<String, Object>>(); + } + String string = parameters.get("time").toString(); + String year = string.substring(0, 4); + String[] split = string.substring(5).split("-"); + String month = split[0]; + String day = split[1]; + if (split[0].length() < 2) { + month = 0 + split[0]; + } + if (split[1].length() < 2) { + day = 0 + split[1]; + } + String time = year + "-" + month + "-" + day; + String cityName = parameters.get("city").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String type = parameters.get("type").toString(); + String range = parameters.get("range").toString(); + Area area = areaMapper.getAreaByName(cityName); + Integer code; + String name; + if (area == null) { + City city = cityMapper.getCityByName(cityName); + if (city == null) { + Province province = provinceMapper.getProvinceByName(cityName); + code = province.getProvinceCode(); + name = province.getProvinceName(); + } else { + code = city.getCityCode(); + name = city.getCityName(); + } + } else { + code = area.getAreaCode(); + name = area.getAreaName(); + } + parameters.put("cityCode", code); + parameters.put("name", name); + Map<String, Object> map = new HashMap<>(); + if (code.toString().endsWith("0000")) { + map.put("provinceCode", code); + } else if (code.toString().endsWith("00")) { + map.put("cityCode", code); + } else { + map.put("areaCode", code); + } + //List<String> sensorKeys = sensorMapper.getSensorKeys(); + + List<String> sensorKeys = new ArrayList<String>(); + Collections.addAll(sensorKeys, "e1", "e2", "e3", "e4", "e5", "e6", "e7", "e10", "e11", "e12", "e13", "e14", "e15" + , "e16", "e17", "e18", "e21", "e23", "e25", "e26", "e27", "e28", "e31", "e33", "e45", "e49", "e97", "e98", "e102"); + + String timeUnits = "minutely_" + time.substring(0, 7).replace("-", ""); + map.put("sensorKeys", sensorKeys); + map.put("timeUnits", timeUnits); + Calendar cal = Calendar.getInstance(); + List<Map<String, Object>> resultList = new ArrayList<>(); + int seg; + long startTime; + long endTime; + int minuteChange; + if ("m".equals(type)) { + cal.setTime(sdf.parse(time + " 00:05:00")); + startTime = cal.getTimeInMillis(); + cal.add(Calendar.DAY_OF_MONTH, 1); + endTime = cal.getTimeInMillis(); + seg = 5 * 60 * 1000; + minuteChange = -5; + } else { + cal.setTime(sdf.parse(time + " 00:30:00")); + startTime = cal.getTimeInMillis(); + cal.add(Calendar.DAY_OF_MONTH, 1); + endTime = cal.getTimeInMillis(); + seg = 30 * 60 * 1000; + minuteChange = -30; + } + for (long time1 = startTime; time1 < endTime; time1 += seg) { + Date end = new Date(time1); + cal.setTime(end); + cal.add(Calendar.MINUTE, minuteChange); + Date start = cal.getTime(); + map.put("start", start); + map.put("end", end); + Map<String, Object> dataMap = historyMinutelyMapper.get5MiutesOrHalfHourByDay(map); + if (dataMap == null) { + break; + } + dataMap.put("time", sdf.format(end)); + dataMap.put("city", name); + Set<String> set = dataMap.keySet(); + Iterator<String> it = set.iterator(); + List<String> listKey = new ArrayList<>(); + while (it.hasNext()) { + String key = it.next(); + if (dataMap.get(key) == null || "".equals(dataMap.get(key))) { + listKey.add(key); + } + } + for (String key : listKey) { + dataMap.remove(key); + } + resultList.add(dataMap); + } + return resultList; + } } diff --git a/src/main/java/com/moral/service/impl/WeatherServiceImpl.java b/src/main/java/com/moral/service/impl/WeatherServiceImpl.java index 11efcb7..171dd63 100644 --- a/src/main/java/com/moral/service/impl/WeatherServiceImpl.java +++ b/src/main/java/com/moral/service/impl/WeatherServiceImpl.java @@ -796,6 +796,31 @@ } } + @Override + public List<Map<String, Object>> getWeatherDataByDay(Map<String, Object> parameters) throws ParseException { + String selectTime = parameters.get("time").toString(); + String cityName = parameters.get("city").toString(); + Area area = areaMapper.getAreaByName(cityName); + Integer code; + String name; + if (area == null) { + City city = cityMapper.getCityByName(cityName); + if (city == null) { + Province province = provinceMapper.getProvinceByName(cityName); + code = province.getProvinceCode(); + name = province.getProvinceName(); + } else { + code = city.getCityCode(); + name = city.getCityName(); + } + } else { + code = area.getAreaCode(); + name = area.getAreaName(); + } + parameters.put("cityCode", code); + parameters.put("name", name); + return null; + } } diff --git a/src/main/resources/mapper/DeviceMapper.xml b/src/main/resources/mapper/DeviceMapper.xml index a4412cf..67c9412 100644 --- a/src/main/resources/mapper/DeviceMapper.xml +++ b/src/main/resources/mapper/DeviceMapper.xml @@ -514,12 +514,12 @@ ) </select> - <select id="getDeviceListByMonitorPointIds" resultType="com.moral.entity.Device"> - select * from device where monitor_point_id in - <foreach item="item" collection="list" index="index" open="(" separator="," close=")">#{item}</foreach> - </select> + <select id="getDeviceListByMonitorPointIds" resultType="com.moral.entity.Device"> + select * from device where monitor_point_id in + <foreach item="item" collection="list" index="index" open="(" separator="," close=")">#{item}</foreach> + </select> - <select id="selectAllFieldByMac" resultType="java.util.Map"> + <select id="selectAllFieldByMac" resultType="java.util.Map"> SELECT * FROM device WHERE mac = #{mac} diff --git a/src/main/resources/mapper/HistoryHourlyMapper.xml b/src/main/resources/mapper/HistoryHourlyMapper.xml index 46f16e7..bcd20eb 100644 --- a/src/main/resources/mapper/HistoryHourlyMapper.xml +++ b/src/main/resources/mapper/HistoryHourlyMapper.xml @@ -67,7 +67,7 @@ <select id="getBeamByMacs" resultType="java.util.Map"> SELECT - DATE_FORMAT(h.time,'%Y-%m-%d %H:%i:%s') time, + DATE_FORMAT(h.time,#{typeFormat}) time, avg(h.json->'$.e12[0]') beam FROM history_hourly h WHERE h.mac in diff --git a/src/main/resources/mapper/HistoryMapper.xml b/src/main/resources/mapper/HistoryMapper.xml index c4ba95d..4ed149c 100644 --- a/src/main/resources/mapper/HistoryMapper.xml +++ b/src/main/resources/mapper/HistoryMapper.xml @@ -278,6 +278,7 @@ <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 @@ -286,10 +287,10 @@ and mac=#{mac} ORDER BY `time` </select> + <select id="getJsonData" resultType="java.lang.String"> - select `json` from ${table} + select `json` from ${table} where time = #{time} and mac = #{mac} </select> - </mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/HistoryMinutelyMapper.xml b/src/main/resources/mapper/HistoryMinutelyMapper.xml index ac1e709..07749a1 100644 --- a/src/main/resources/mapper/HistoryMinutelyMapper.xml +++ b/src/main/resources/mapper/HistoryMinutelyMapper.xml @@ -268,4 +268,34 @@ order by rs.monitorPointName </select> + <select id="get5MiutesOrHalfHourByDay" resultType="java.util.LinkedHashMap"> + SELECT + <foreach collection="sensorKeys" separator="," item="sensorKey"> + AVG(h.json->'$.${sensorKey}[0]') AS '${sensorKey}' + </foreach> + FROM + history_${timeUnits} h inner join + (select mac from device where monitor_point_id in + ( + select id from monitor_point + where + <if test="areaCode != null"> + area_code = #{areaCode} + </if> + + <if test="cityCode != null"> + city_code = #{cityCode} + </if> + + <if test="provinceCode != null"> + province_code = #{provinceCode} + </if> + ) + and is_delete=0) m + on h.mac=m.mac + and h.time>=#{start} + and h.time <![CDATA[<]]> #{end} + ORDER BY + h.time + </select> </mapper> diff --git a/src/main/resources/mapper/MonitorPointMapper.xml b/src/main/resources/mapper/MonitorPointMapper.xml index b6a90f0..d6569a6 100644 --- a/src/main/resources/mapper/MonitorPointMapper.xml +++ b/src/main/resources/mapper/MonitorPointMapper.xml @@ -200,5 +200,8 @@ <if test="cityCode != null"> city_code = #{cityCode} </if> + <if test="provinceCode != null"> + province_code = #{provinceCode} + </if> </select> </mapper> \ No newline at end of file -- Gitblit v1.8.0