diff --git a/zc-business/src/main/java/com/zc/business/controller/DcMeteorologicalDetectorController.java b/zc-business/src/main/java/com/zc/business/controller/DcMeteorologicalDetectorController.java
index cd526d05..8e29a03a 100644
--- a/zc-business/src/main/java/com/zc/business/controller/DcMeteorologicalDetectorController.java
+++ b/zc-business/src/main/java/com/zc/business/controller/DcMeteorologicalDetectorController.java
@@ -53,5 +53,25 @@ public class DcMeteorologicalDetectorController  extends BaseController {
         List<DcMeteorologicalDetectorData> list = dcMeteorologicalDetectorDataService.selectlistVisibility(dcMeteorologicalDetectorData);
         return getDataTable(list);
     }
-
+    @ApiOperation("每小时统计气象设备信息列表")
+    @GetMapping("/deviceHour")
+    public TableDataInfo deviceHour(String deviceName,String specificDate)
+    {
+        List<Map<String,String>> list = dcMeteorologicalDetectorDataService.selectStatisticsTime(deviceName,specificDate);
+        return getDataTable(list);
+    }
+   @ApiOperation("按月统计每天气象设备信息列表")
+    @GetMapping("/deviceDay")
+    public TableDataInfo deviceDay(String deviceName,String specificDate)
+    {
+        List<Map<String,String>> list = dcMeteorologicalDetectorDataService.selectStatisticsDay(deviceName,specificDate);
+        return getDataTable(list);
+    }
+    @ApiOperation("按年统计每月气象设备信息列表")
+    @GetMapping("/deviceYears")
+    public TableDataInfo deviceYears(String deviceName,String specificDate)
+    {
+        List<Map<String,String>> list = dcMeteorologicalDetectorDataService.selectStatisticsYears(deviceName,specificDate);
+        return getDataTable(list);
+    }
 }
diff --git a/zc-business/src/main/java/com/zc/business/mapper/DcMeteorologicalDetectorDataMapper.java b/zc-business/src/main/java/com/zc/business/mapper/DcMeteorologicalDetectorDataMapper.java
index cd75db0a..a3387bdd 100644
--- a/zc-business/src/main/java/com/zc/business/mapper/DcMeteorologicalDetectorDataMapper.java
+++ b/zc-business/src/main/java/com/zc/business/mapper/DcMeteorologicalDetectorDataMapper.java
@@ -5,6 +5,7 @@ import java.util.Map;
 
 import com.zc.business.domain.DcMeteorologicalDetectorData;
 import com.zc.business.domain.MdDeviceData;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 气象检测器数据Mapper接口
@@ -63,6 +64,7 @@ public interface DcMeteorologicalDetectorDataMapper
     int deleteDcMeteorologicalDetectorDataByIds(Long[] ids);
 //统计
     List<Map<String, String>> selectStatistics(String deviceName);
+    List<Map<String, String>> selectStatisticsTime(@Param("deviceName") String deviceName ,@Param("specificDate") String specificDate);
 
     List<DcMeteorologicalDetectorData> selectlistAll(DcMeteorologicalDetectorData dcMeteorologicalDetectorData);
 
@@ -74,4 +76,8 @@ public interface DcMeteorologicalDetectorDataMapper
      * @return
      */
     List<DcMeteorologicalDetectorData> selectDeviceNameList(String deviceName);
+
+    List<Map<String, String>> selectStatisticsDay(@Param("deviceName") String deviceName,@Param("specificDate") String specificDate);
+
+    List<Map<String, String>> selectStatisticsYears(@Param("deviceName") String deviceName,@Param("specificDate") String specificDate);
 }
diff --git a/zc-business/src/main/java/com/zc/business/service/IDcMeteorologicalDetectorDataService.java b/zc-business/src/main/java/com/zc/business/service/IDcMeteorologicalDetectorDataService.java
index a01e5986..6a56af4d 100644
--- a/zc-business/src/main/java/com/zc/business/service/IDcMeteorologicalDetectorDataService.java
+++ b/zc-business/src/main/java/com/zc/business/service/IDcMeteorologicalDetectorDataService.java
@@ -64,6 +64,14 @@ public interface IDcMeteorologicalDetectorDataService
 //统计当天 没小时温度
     List<Map<String,String>> selectStatistics(String deviceName);
 
+    /**
+     * 按时间统计气象设备信息列表
+     * @param deviceName
+     * @param specificDate
+     * @return
+     */
+    List<Map<String,String>> selectStatisticsTime(String deviceName,String specificDate);
+
     List<DcMeteorologicalDetectorData> selectlistAll(DcMeteorologicalDetectorData dcMeteorologicalDetectorData);
 
     List<DcMeteorologicalDetectorData> selectlistVisibility(DcMeteorologicalDetectorData dcMeteorologicalDetectorData);
@@ -74,4 +82,8 @@ public interface IDcMeteorologicalDetectorDataService
      * @return
      */
     List<DcMeteorologicalDetectorData>  selectDeviceNameList(String deviceName);
+
+    List<Map<String, String>> selectStatisticsDay(String deviceName, String specificDate);
+
+    List<Map<String, String>> selectStatisticsYears(String deviceName, String specificDate);
 }
diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcMeteorologicalDetectorDataServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcMeteorologicalDetectorDataServiceImpl.java
index 51cdff13..29188473 100644
--- a/zc-business/src/main/java/com/zc/business/service/impl/DcMeteorologicalDetectorDataServiceImpl.java
+++ b/zc-business/src/main/java/com/zc/business/service/impl/DcMeteorologicalDetectorDataServiceImpl.java
@@ -105,6 +105,15 @@ public class DcMeteorologicalDetectorDataServiceImpl implements IDcMeteorologica
     public List<Map<String,String>> selectStatistics(String deviceName) {
         return dcMeteorologicalDetectorDataMapper.selectStatistics(deviceName);
     }
+    /**
+     * 按时间统计气象设备信息列表
+     * @param deviceName
+     * @param specificDate
+     * @return
+     */
+    public List<Map<String,String>> selectStatisticsTime(String deviceName,String specificDate) {
+        return dcMeteorologicalDetectorDataMapper.selectStatisticsTime(deviceName,specificDate);
+    }
 
     @Override
     public List<DcMeteorologicalDetectorData> selectlistAll(DcMeteorologicalDetectorData dcMeteorologicalDetectorData) {
@@ -125,4 +134,20 @@ public class DcMeteorologicalDetectorDataServiceImpl implements IDcMeteorologica
     public List<DcMeteorologicalDetectorData>  selectDeviceNameList(String deviceName) {
         return dcMeteorologicalDetectorDataMapper.selectDeviceNameList(deviceName);
     }
+
+    @Override
+    public List<Map<String, String>> selectStatisticsDay(String deviceName, String specificDate) {
+        if (specificDate==null || specificDate.equals("")){
+            specificDate=DateUtils.getDate();
+        }
+        return dcMeteorologicalDetectorDataMapper.selectStatisticsDay(deviceName,specificDate);
+    }
+
+    @Override
+    public List<Map<String, String>> selectStatisticsYears(String deviceName, String specificDate) {
+        if (specificDate==null || specificDate.equals("")){
+            specificDate=DateUtils.getDate();
+        }
+        return dcMeteorologicalDetectorDataMapper.selectStatisticsYears(deviceName,specificDate);
+    }
 }
diff --git a/zc-business/src/main/resources/mapper/business/DcMeteorologicalDetectorDataMapper.xml b/zc-business/src/main/resources/mapper/business/DcMeteorologicalDetectorDataMapper.xml
index 94f1781a..6f4421ab 100644
--- a/zc-business/src/main/resources/mapper/business/DcMeteorologicalDetectorDataMapper.xml
+++ b/zc-business/src/main/resources/mapper/business/DcMeteorologicalDetectorDataMapper.xml
@@ -37,6 +37,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="date"    column="date"    />
         <result property="avgTemperature"    column="avg_temperature"    />
         <result property="avgVisibility"    column="avg_visibility"    />
+        <result property="month"    column="month"    />
     </resultMap>
     <sql id="selectDcMeteorologicalDetectorDataVo">
         select id, iot_device_id, rainfall, visibility_type, visibility,  atmospheric_pressure, temperature, humidity, wind_direction, wind_speed, precipitation_type, wet_slippery_coefficient,remote_road_surface_temperature, remote_road_surface_status,  water_film_ice_snow_value,create_time,stake_mark,device_name,direction from dc_meteorological_detector_data
@@ -156,23 +157,54 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             COALESCE(ROUND(AVG(dc.visibility), 2), 0) AS avg_visibility
         FROM
             (
-            SELECT 0 AS time_slot UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
-            UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
-            UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12 UNION ALL SELECT 13
-            UNION ALL SELECT 14 UNION ALL SELECT 15 UNION ALL SELECT 16 UNION ALL SELECT 17
-            UNION ALL SELECT 18 UNION ALL SELECT 19 UNION ALL SELECT 20 UNION ALL SELECT 21
-            UNION ALL SELECT 22 UNION ALL SELECT 23
+                SELECT 0 AS time_slot UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
+                UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
+                UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12 UNION ALL SELECT 13
+                UNION ALL SELECT 14 UNION ALL SELECT 15 UNION ALL SELECT 16 UNION ALL SELECT 17
+                UNION ALL SELECT 18 UNION ALL SELECT 19 UNION ALL SELECT 20 UNION ALL SELECT 21
+                UNION ALL SELECT 22 UNION ALL SELECT 23
             ) AS h
-            LEFT JOIN
+                LEFT JOIN
             dc_meteorological_detector_data dc
-        ON
-            DATE(dc.create_time) = CURDATE()
-            AND HOUR(dc.create_time) = h.time_slot
-            AND dc.device_name = #{deviceName}
+            ON
+                DATE(dc.create_time) = CURDATE()
+                    AND HOUR(dc.create_time) = h.time_slot
+                    AND dc.device_name = #{deviceName}
         GROUP BY
             h.time_slot,
             date;
     </select>
+    <select id="selectStatisticsTime" resultMap="countMap" resultType="map">
+        SELECT
+        h.time_slot,
+        DATE(dc.create_time) AS date,
+        COALESCE(ROUND(AVG(dc.temperature), 2), 0) AS avg_temperature,
+        COALESCE(ROUND(AVG(dc.visibility), 2), 0) AS avg_visibility
+        FROM
+        (
+        SELECT 0 AS time_slot UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
+        UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
+        UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12 UNION ALL SELECT 13
+        UNION ALL SELECT 14 UNION ALL SELECT 15 UNION ALL SELECT 16 UNION ALL SELECT 17
+        UNION ALL SELECT 18 UNION ALL SELECT 19 UNION ALL SELECT 20 UNION ALL SELECT 21
+        UNION ALL SELECT 22 UNION ALL SELECT 23
+        ) AS h
+        LEFT JOIN
+        dc_meteorological_detector_data dc
+        ON
+        <if test="specificDate != null and specificDate !=''">
+            DATE(dc.create_time) = #{specificDate}
+        </if>
+        <if test="specificDate == null or specificDate=='' ">
+            DATE(dc.create_time) = CURDATE()
+        </if>
+        AND HOUR(dc.create_time) = h.time_slot
+        AND dc.device_name = #{deviceName}
+        GROUP BY
+        h.time_slot,
+        date;
+
+    </select>
 
     <select id="selectlistAll" parameterType="com.zc.business.domain.DcMeteorologicalDetectorData" resultMap="DcMeteorologicalDetectorDataResult">
         SELECT
@@ -255,4 +287,63 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             AND DATE(m.create_time) = CURDATE()
         </where>
     </select>
+    <select id="selectStatisticsDay" resultMap="countMap" resultType="map">
+        WITH RECURSIVE dates_in_month AS (
+        SELECT DATE_FORMAT(STR_TO_DATE(#{specificDate}, '%Y-%m-%d'), '%Y-%m-01') AS date
+        UNION ALL
+        SELECT DATE_ADD(date, INTERVAL 1 DAY)
+        FROM dates_in_month
+        <where>
+            date &lt; LAST_DAY(#{specificDate})
+        </where>
+        )
+        SELECT
+        d.date,
+        COALESCE(ROUND(AVG(dc.temperature), 2), 0) AS avg_temperature,
+        COALESCE(ROUND(AVG(dc.visibility), 2), 0) AS avg_visibility
+        FROM
+        dates_in_month d
+        LEFT JOIN
+        dc_meteorological_detector_data dc
+        ON
+        DATE(dc.create_time) = d.date
+        AND dc.device_name = #{deviceName}
+        GROUP BY
+        d.date
+        ORDER BY
+        d.date ASC;
+
+    </select>
+
+        <select id="selectStatisticsYears" resultMap="countMap" resultType="map">
+
+            WITH RECURSIVE months_of_year AS (
+            SELECT 1 AS month
+            UNION ALL
+            SELECT month + 1
+            FROM months_of_year
+            <where>
+                month &lt; 12
+            </where>
+
+            ),
+            monthly_data AS (
+            SELECT
+            DATE_FORMAT(CONCAT(YEAR(#{specificDate}), '-', LPAD(month, 2, '0'), '-01'), '%Y-%m') AS month,
+            ROUND(AVG(COALESCE(dc.temperature, 0)), 2) AS avg_temperature,
+            ROUND(AVG(COALESCE(dc.visibility, 0)), 2) AS avg_visibility
+            FROM
+            months_of_year
+            LEFT JOIN dc_meteorological_detector_data dc
+            ON YEAR(dc.create_time) = YEAR(#{specificDate})
+            AND MONTH(dc.create_time) = months_of_year.month
+            AND dc.device_name = #{deviceName}
+            GROUP BY
+            month
+            )
+            SELECT * FROM monthly_data order by monthly_data.month asc ;
+    </select>
+
+
+
 </mapper>
\ No newline at end of file