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