jinpengyong
2020-09-08 adde1ed1a99622c80a95dea83e294711d295c55c
微型站5分钟与半小时数据
11 files modified
227 ■■■■■ changed files
src/main/java/com/moral/controller/ScreenController.java 26 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/mapper/HistoryMinutelyMapper.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/HistoryMinutelyService.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/WeatherService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java 130 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/impl/WeatherServiceImpl.java 25 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/DeviceMapper.xml patch | view | raw | blame | history
src/main/resources/mapper/HistoryHourlyMapper.xml 2 ●●● patch | view | raw | blame | history
src/main/resources/mapper/HistoryMapper.xml 3 ●●●● patch | view | raw | blame | history
src/main/resources/mapper/HistoryMinutelyMapper.xml 30 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/MonitorPointMapper.xml 3 ●●●●● patch | view | raw | blame | history
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>