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); 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); } 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; } 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); } 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; } } 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; } } src/main/resources/mapper/DeviceMapper.xml
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 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} where time = #{time} and mac = #{mac} </select> </mapper> 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> 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>