浏览代码

设备图表报表接口

wangli 4 年之前
父节点
当前提交
63b15f14d4

+ 52 - 23
sms_water/src/main/java/com/huaxu/controller/MonitorDataReportController.java

@@ -1,6 +1,8 @@
 package com.huaxu.controller;
 
+import com.huaxu.dto.DeviceDto;
 import com.huaxu.dto.MonitorDataChartReportDeviceDto;
+import com.huaxu.entity.DeviceEntity;
 import com.huaxu.entity.MonitorDataEntity;
 import com.huaxu.model.AjaxMessage;
 import com.huaxu.model.ResultStatus;
@@ -32,22 +34,13 @@ public class MonitorDataReportController {
     private MonitorDataReportService monitorDataReportService;
 
     @RequestMapping(value = "MonitorDataChartReport",method = RequestMethod.GET)
-    @ApiOperation(value = "二供——图表")
+    @ApiOperation(value = "统计分析——图表")
     public AjaxMessage<List<MonitorDataChartReportDeviceDto>> MonitorDataChartReport(
             @ApiParam(value = "场景id", required = true) @RequestParam Long sceneId,
             @ApiParam(value = "时间", required = true) @RequestParam String reportDate,
             @ApiParam(value = "类型,1年2月3日", required = true) @RequestParam Integer reportType
     ){
-        LocalDate localDate =LocalDate.now();
-        if(reportType !=null && reportType ==1){
-            reportDate = reportDate+"-01-01";
-        }else
-        if(reportType !=null && reportType ==2){
-            reportDate = reportDate+"-01";
-        }
-        if(null != reportDate){
-            localDate = LocalDate.parse(reportDate,DateTimeFormatter.ofPattern("yyyy-MM-dd"));
-        }
+        LocalDate localDate = getLocalDate(reportDate, reportType);
         if(sceneId != null){
             if(reportType != null && reportType ==1){
                 return new AjaxMessage<>(ResultStatus.OK, monitorDataReportService.MonitorDataChartReportByYear(sceneId,localDate.getYear()));
@@ -63,23 +56,14 @@ public class MonitorDataReportController {
     }
 
     @RequestMapping(value = "MonitorDataCompareReport",method = RequestMethod.GET)
-    @ApiOperation(value = "二供——对比,按集合顺序取,能耗——水质——报警")
+    @ApiOperation(value = "统计分析——对比,按集合顺序取,能耗——水质——报警")
     public AjaxMessage<List<List<MonitorDataChartReportDeviceDto>>> MonitorDataCompareReport(
             @ApiParam(value = "场景ids", required = true) @RequestParam List<Long> sceneIds,
             @ApiParam(value = "日期,格式:2020-12-12", required = true) @RequestParam String reportDate,
             @ApiParam(value = "类型,1年2月3日", required = true) @RequestParam Integer reportType
     ){
-        LocalDate localDate =LocalDate.now();
-        if(reportType !=null && reportType ==1){
-            reportDate = reportDate+"-01-01";
-        }else
-        if(reportType !=null && reportType ==2){
-            reportDate = reportDate+"-01";
-        }
-        if(null != reportDate){
-            localDate = LocalDate.parse(reportDate,DateTimeFormatter.ofPattern("yyyy-MM-dd"));
-        }
-       List<List<MonitorDataChartReportDeviceDto>> reportList=new ArrayList<>();
+        LocalDate localDate = getLocalDate(reportDate, reportType);
+        List<List<MonitorDataChartReportDeviceDto>> reportList=new ArrayList<>();
         if(sceneIds != null && sceneIds.size() > 0){
 
             //能耗(供水量3、耗电量5)
@@ -95,4 +79,49 @@ public class MonitorDataReportController {
         }
         return new AjaxMessage<>(ResultStatus.OK, reportList);
     }
+
+    @RequestMapping(value = "getLocalDate",method = RequestMethod.GET)
+    @ApiOperation(value = "补充完整时间")
+    private LocalDate getLocalDate(@RequestParam @ApiParam(value = "日期,格式:2020-12-12", required = true) String reportDate,
+                                   @RequestParam @ApiParam(value = "类型,1年2月3日", required = true) Integer reportType) {
+        LocalDate localDate = LocalDate.now();
+        if (reportType != null && reportType == 1) {
+            reportDate = reportDate + "-01-01";
+        } else if (reportType != null && reportType == 2) {
+            reportDate = reportDate + "-01";
+        }
+        if (null != reportDate) {
+            localDate = LocalDate.parse(reportDate, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+        }
+        return localDate;
+    }
+
+
+    @RequestMapping(value = "getDeviceBySceneTypeName",method = RequestMethod.GET)
+    @ApiOperation(value = "按场景类型查询设备(压力、流量、水质等)")
+    public AjaxMessage<List<DeviceEntity>> getDeviceBySceneTypeName(
+            @ApiParam(value = "场景类型", required = true) @RequestParam String sceneTypeName
+    ){
+
+        return new AjaxMessage<>(ResultStatus.OK, monitorDataReportService.getDeviceBySceneTypeName(sceneTypeName));
+    }
+
+
+    @RequestMapping(value = "MonitorDataChartReportByDevice",method = RequestMethod.GET)
+    @ApiOperation(value = "统计分析——压力")
+    public AjaxMessage<List<MonitorDataChartReportDeviceDto>> MonitorDataChartReportByDevice(
+            @ApiParam(value = "设备id", required = true) @RequestParam List<Long> deviceIds,
+            @ApiParam(value = "时间", required = true) @RequestParam String reportDate,
+            @ApiParam(value = "日期类型,1年报2月报3日报", required = true) @RequestParam Integer reportType,
+            @ApiParam(value = "统计类型,1压力2流量3水质", required = true) @RequestParam Integer searchType
+    ){
+        LocalDate localDate = getLocalDate(reportDate, reportType);
+        if(deviceIds != null && deviceIds.size()>0){
+            return new AjaxMessage<>(ResultStatus.OK,  monitorDataReportService.MonitorDataDeviceReport(reportType,deviceIds,searchType,localDate.getYear(),localDate.getMonthValue(),localDate.getDayOfMonth()));
+        }
+        return new AjaxMessage<>(ResultStatus.OK);
+    }
+
+
+
 }

+ 21 - 0
sms_water/src/main/java/com/huaxu/dao/MonitorDataReportMapper.java

@@ -1,6 +1,7 @@
 package com.huaxu.dao;
 
 import com.huaxu.dto.MonitorDataChartReportDeviceDto;
+import com.huaxu.entity.DeviceEntity;
 import com.huaxu.model.ProgramItem;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -67,4 +68,24 @@ public interface MonitorDataReportMapper {
                                                             @Param("beginDate") LocalDate beginDate, @Param("endDate")LocalDate endDate,
                                                             @Param("tenantId")String tenantId, @Param("userType")String userType, @Param("permissonType")Integer permissonType,
                                                             @Param("programItems")List<ProgramItem> programItems);
+
+    List<DeviceEntity> getDeviceBySceneTypeName(@Param("sceneTypeName") String sceneTypeName,@Param("tenantId")String tenantId, @Param("userType")String userType, @Param("permissonType")Integer permissonType,
+                                                @Param("programItems")List<ProgramItem> programItems);
+
+
+    List<MonitorDataChartReportDeviceDto> MonitorDataDeviceReportByDay(@Param("deviceIds")List<Long> deviceIds, @Param("searchType")Integer searchType,
+                                                                              @Param("year")Integer year, @Param("month")Integer month, @Param("day")Integer day,
+                                                                              @Param("tenantId")String tenantId,@Param("userType")String userType,@Param("permissonType")Integer permissonType,
+                                                                              @Param("programItems")List<ProgramItem> programItems);
+    List<MonitorDataChartReportDeviceDto> MonitorDataDeviceReportByMonth(@Param("deviceIds")List<Long> deviceIds, @Param("searchType")Integer searchType,
+                                                                               @Param("year")Integer year, @Param("month")Integer month,
+                                                                               @Param("tenantId")String tenantId,@Param("userType")String userType,@Param("permissonType")Integer permissonType,
+                                                                               @Param("programItems")List<ProgramItem> programItems);
+    List<MonitorDataChartReportDeviceDto> MonitorDataDeviceReportByYear(@Param("deviceIds")List<Long> deviceIds, @Param("searchType")Integer searchType,
+                                                                               @Param("year")Integer year,
+                                                                               @Param("tenantId")String tenantId,@Param("userType")String userType,@Param("permissonType")Integer permissonType,
+                                                                               @Param("programItems")List<ProgramItem> programItems);
+
+
+
 }

+ 4 - 0
sms_water/src/main/java/com/huaxu/service/MonitorDataReportService.java

@@ -1,6 +1,7 @@
 package com.huaxu.service;
 
 import com.huaxu.dto.MonitorDataChartReportDeviceDto;
+import com.huaxu.entity.DeviceEntity;
 
 import java.util.List;
 
@@ -26,4 +27,7 @@ public interface MonitorDataReportService {
     //能耗对比
     List<MonitorDataChartReportDeviceDto> MonitorDataEnergyReport(Integer type,List<Long>  sceneIds,Integer year,Integer month ,Integer day);
 
+    List<DeviceEntity> getDeviceBySceneTypeName(String sceneTypeName);
+
+    List<MonitorDataChartReportDeviceDto> MonitorDataDeviceReport(Integer type,List<Long>  deviceIds, Integer searchType,Integer year,Integer month ,Integer day);
 }

+ 28 - 0
sms_water/src/main/java/com/huaxu/service/impl/MonitorDataReportServiceImpl.java

@@ -4,6 +4,7 @@ import com.huaxu.dao.MonitorDataReportMapper;
 import com.huaxu.dto.MonitorDataChartReportAttributeDto;
 import com.huaxu.dto.MonitorDataChartReportDeviceDto;
 import com.huaxu.dto.MonitorDataChartReportValueDto;
+import com.huaxu.entity.DeviceEntity;
 import com.huaxu.model.LoginUser;
 import com.huaxu.service.MonitorDataReportService;
 import com.huaxu.util.UserUtil;
@@ -211,4 +212,31 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
         }
         return monitorDataChartReportDeviceDtos;
     }
+
+    public List<DeviceEntity> getDeviceBySceneTypeName(String sceneTypeName){
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        return monitorDataReportMapper.getDeviceBySceneTypeName(sceneTypeName,loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+    }
+
+    public List<MonitorDataChartReportDeviceDto> MonitorDataDeviceReport(Integer type,List<Long>  deviceIds, Integer searchType,Integer year,Integer month ,Integer day){
+
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        List<MonitorDataChartReportDeviceDto> monitorDataChartReportDeviceDtos = null;
+        if(type != null && type == 3){
+            monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataDeviceReportByDay(deviceIds,searchType,year,month,day,
+                    loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        } else if(type != null && type == 2){
+            monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataDeviceReportByMonth(deviceIds,searchType,year,month,
+                    loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        } else if(type != null && type == 1){
+            monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataDeviceReportByYear(deviceIds,searchType,year,
+                    loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        }
+        if(monitorDataChartReportDeviceDtos != null){
+            FillLoseData(monitorDataChartReportDeviceDtos,type,year,month,day);
+        }
+        return monitorDataChartReportDeviceDtos;
+    }
+
+
 }

+ 4 - 4
sms_water/src/main/resources/mapper/AlarmDetailMapper.xml

@@ -186,16 +186,16 @@
 
     <!-- 新增所有列 -->
     <insert id="insert" keyProperty="id" useGeneratedKeys="true">
-        INSERT INTO  sms_alarm_details (  TENANT_ID ,  DEVICE_ID ,  COMPANY_ORG_ID ,  DEPT_ORG_ID ,  ALARM_TYPE ,  ATTRIBUTE_ID ,  ALARM_VALUE ,  ALARM_CONTENT ,  ALARM_START_TIME ,  ALARM_END_TIME ,  STATE ,  OP_STATE ,  REMARK ,  STATUS ,  DATE_CREATE ,  CREATE_BY ,  DATE_UPDATE ,  UPDATE_BY , MIN_VALUE, MAX_VALUE, ALARM_SETTING_ID )
-        VALUES ( #{tenantId} ,  #{deviceId} ,  #{companyOrgId} ,  #{deptOrgId} ,  #{alarmType} ,  #{attributeId} ,  #{alarmValue} ,  #{alarmContent} ,  #{alarmStartTime} ,  #{alarmEndTime} ,  #{state} ,  #{opState} ,  #{remark} ,  #{status} ,  #{dateCreate} ,  #{createBy} ,  #{dateUpdate} ,  #{updateBy},#{minValue} ,#{maxValue}, #{alarmSettingId} )
+        INSERT INTO  sms_alarm_details (  TENANT_ID , PARENT_SCENE_ID, PARENT_SCENE_NAME, SCENE_ID, SCENE_NAME, DEVICE_ID ,  COMPANY_ORG_ID ,  DEPT_ORG_ID ,  ALARM_TYPE ,  ATTRIBUTE_ID ,  ALARM_VALUE ,  ALARM_CONTENT ,  ALARM_START_TIME ,  ALARM_END_TIME ,  STATE ,  OP_STATE ,  REMARK ,  STATUS ,  DATE_CREATE ,  CREATE_BY ,  DATE_UPDATE ,  UPDATE_BY , MIN_VALUE, MAX_VALUE, ALARM_SETTING_ID )
+        VALUES ( #{tenantId} , #{parentSceneId} ,#{parentSceneName} ,#{sceneId} ,#{sceneName} , #{deviceId} ,  #{companyOrgId} ,  #{deptOrgId} ,  #{alarmType} ,  #{attributeId} ,  #{alarmValue} ,  #{alarmContent} ,  #{alarmStartTime} ,  #{alarmEndTime} ,  #{state} ,  #{opState} ,  #{remark} ,  #{status} ,  #{dateCreate} ,  #{createBy} ,  #{dateUpdate} ,  #{updateBy},#{minValue} ,#{maxValue}, #{alarmSettingId} )
     </insert>
 
     <!-- 批量新增 -->
     <insert id="batchInsert">
-        INSERT INTO  sms_alarm_details (  TENANT_ID ,  DEVICE_ID ,  COMPANY_ORG_ID ,  DEPT_ORG_ID ,  ALARM_TYPE ,  ATTRIBUTE_ID ,  ALARM_VALUE ,  ALARM_CONTENT ,  ALARM_START_TIME ,  ALARM_END_TIME ,  STATE ,  OP_STATE ,  REMARK ,  STATUS ,  DATE_CREATE ,  CREATE_BY ,  DATE_UPDATE ,  UPDATE_BY, MIN_VALUE, MAX_VALUE,ALARM_SETTING_ID )
+        INSERT INTO  sms_alarm_details (  TENANT_ID , PARENT_SCENE_ID, PARENT_SCENE_NAME, SCENE_ID, SCENE_NAME, DEVICE_ID ,  COMPANY_ORG_ID ,  DEPT_ORG_ID ,  ALARM_TYPE ,  ATTRIBUTE_ID ,  ALARM_VALUE ,  ALARM_CONTENT ,  ALARM_START_TIME ,  ALARM_END_TIME ,  STATE ,  OP_STATE ,  REMARK ,  STATUS ,  DATE_CREATE ,  CREATE_BY ,  DATE_UPDATE ,  UPDATE_BY, MIN_VALUE, MAX_VALUE,ALARM_SETTING_ID )
         values
         <foreach collection="alarmDetails" item="item" index="index" separator=",">
-            ( #{item.tenantId} ,  #{item.deviceId} ,  #{item.companyOrgId} ,  #{item.deptOrgId} ,  #{item.alarmType} ,  #{item.attributeId} ,  #{item.alarmValue} ,  #{item.alarmContent} ,  #{item.alarmStartTime} ,  #{item.alarmEndTime} ,  #{item.state} ,  #{item.opState} ,  #{item.remark} ,  #{item.status} ,  #{item.dateCreate} ,  #{item.createBy} ,  #{item.dateUpdate} ,  #{item.updateBy} ,#{item.minValue} ,#{item.maxValue},#{item.alarmSettingId})
+            ( #{item.tenantId} , #{item.parentSceneId} ,#{item.parentSceneName} ,#{item.sceneId} ,#{item.sceneName} , #{item.deviceId} ,  #{item.companyOrgId} ,  #{item.deptOrgId} ,  #{item.alarmType} ,  #{item.attributeId} ,  #{item.alarmValue} ,  #{item.alarmContent} ,  #{item.alarmStartTime} ,  #{item.alarmEndTime} ,  #{item.state} ,  #{item.opState} ,  #{item.remark} ,  #{item.status} ,  #{item.dateCreate} ,  #{item.createBy} ,  #{item.dateUpdate} ,  #{item.updateBy} ,#{item.minValue} ,#{item.maxValue},#{item.alarmSettingId})
         </foreach>
     </insert>
 

+ 257 - 5
sms_water/src/main/resources/mapper/MonitorDataReportMapper.xml

@@ -26,6 +26,7 @@
         left join sms_device_attribute da on da.id=r.ATTRIBUTE_ID
         left join sms_device d on d.id=r.DEVICE_ID
     </sql>
+    <!-- 图表 -->
     <select id="MonitorDataChartReportByDay" resultMap="MonitorDataChartReportMap">
         SELECT
             r.`HOUR` AS "dateLabel",
@@ -184,7 +185,7 @@
         ORDER BY r.`month` ASC
     </select>
 
-
+    <!-- 对比————用水量、耗电量 -->
     <select id="MonitorDataEnergyReportByDay" resultMap="MonitorDataChartReportMap">
         SELECT
             r.`HOUR` AS "dateLabel",
@@ -354,7 +355,7 @@
         order by r.`month` asc
     </select>
 
-
+    <!-- 对比————PH、余氯、浊度 -->
     <select id="MonitorDataQualityReportByDay" resultMap="MonitorDataChartReportMap">
         SELECT
         r.`HOUR` AS "dateLabel",
@@ -524,9 +525,7 @@
         order by r.`month` asc
     </select>
 
-
-
-
+    <!-- 对比————报警 -->
     <select id="DeviceAlarmReport" resultMap="MonitorDataChartReportMap">
         select
         a.*,DATE_ADD(#{beginDate},INTERVAL a.dateLabel-1 ${dateType}) as "date"
@@ -593,5 +592,258 @@
         )a
         order by deviceName,dateLabel
     </select>
+    <!-- 根据场景类型查询设备-->
+    <select id="getDeviceBySceneTypeName" resultType="com.huaxu.entity.DeviceEntity">
+    select
+        distinct d.DEVICE_NAME as "deviceName",d.id
+    from sms_scene_type st
+    left join sms_scene s on s.SCENE_TYPE_ID =st.id
+    left join sms_device_scene ds on ds.SCENE_ID=s.ID
+    left join sms_device d on d.id=ds.DEVICE_ID
+    where st.SCENE_TYPE_NAME=#{sceneTypeName}
+    <if test="tenantId != null and tenantId != '' ">
+        and d.tenant_id = #{tenantId}
+    </if>
+    <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
+        <if test="permissonType == 5 or permissonType == 2">
+            and ( d.DEPT_ORG_ID in
+            <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                #{item.orgId}
+            </foreach>
+            or
+            d.COMPANY_ORG_ID in
+            <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                #{item.orgId}
+            </foreach>
+            )
+        </if>
+        <if test="permissonType == 4 or permissonType == 3">
+            and d.DEPT_ORG_ID in
+            <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                #{item.orgId}
+            </foreach>
+        </if>
+        <if test="permissonType == 1">
+            and d.COMPANY_ORG_ID in
+            <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                #{item.orgId}
+            </foreach>
+            and (d.DEPT_ORG_ID is null or d.DEPT_ORG_ID =0)
+        </if>
+    </if>
+
+</select>
+
+    <!-- 设备报表 -->
+    <select id="MonitorDataDeviceReportByDay" resultMap="MonitorDataChartReportMap">
+        SELECT
+            d.DEVICE_NAME AS "deviceName",
+            p.parm_type AS "attributeType",
+            IF( p.parm_type = 13, '压力',
+                IF( p.parm_type = 14, '瞬时流量',
+                    IF( p.parm_type = 16, '流速',
+                        IF( p.parm_type = 7, 'PH',
+                            IF( p.parm_type = 15, 'COD',
+                                IF( p.parm_type = 9, '浊度',
+                                    IF( p.parm_type = 11, '余氯', '' )))))))
+            AS "attributeName",
+            da.unit AS "unit",
+            r.`HOUR` AS "dateLabel",
+            ifnull( ROUND( sum( r.AVG_VALUE ), 2 ), 0 ) AS "data",
+            max( r.COLLECT_DATE ) AS "date"
+        FROM sms_device_parm p
+        LEFT JOIN sms_day_report r ON p.DEVICE_ID = r.DEVICE_ID AND p.ATTRIBUTE_ID = r.ATTRIBUTE_ID
+        left join sms_device_attribute  da ON da.id = p.ATTRIBUTE_ID
+        LEFT JOIN sms_device d ON d.id = p.DEVICE_ID
+        WHERE p.`STATUS`= 1   and d.ENABLE_STATE = 1
+        AND r.YEAR = #{year}  and r.month=#{month}  and r.day=#{day}
+        <if test="searchType != null and searchType == 1">
+            and p.parm_type = 13
+        </if>
+        <if test="searchType != null and searchType == 2">
+            and p.parm_type in (14,16)
+        </if>
+        <if test="searchType != null and searchType == 3">
+            and p.parm_type in (7,9,11,15)
+        </if>
+        <if test="deviceIds != null and deviceIds.size()>0">
+            and d.id in
+            <foreach collection="deviceIds" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="tenantId != null and tenantId != '' ">
+            and d.tenant_id = #{tenantId}
+        </if>
+        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
+            <if test="permissonType == 5 or permissonType == 2">
+                and ( d.DEPT_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                or
+                d.COMPANY_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                )
+            </if>
+            <if test="permissonType == 4 or permissonType == 3">
+                and d.DEPT_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+            </if>
+            <if test="permissonType == 1">
+                and d.COMPANY_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                and (d.DEPT_ORG_ID is null or d.DEPT_ORG_ID =0)
+            </if>
+        </if>
+        GROUP BY d.id, p.parm_type,da.unit,r.HOUR
+        order by r.`hour` asc
+    </select>
+    <select id="MonitorDataDeviceReportByMonth" resultMap="MonitorDataChartReportMap">
+        SELECT
+        d.DEVICE_NAME AS "deviceName",
+        p.parm_type AS "attributeType",
+        IF( p.parm_type = 13, '压力',
+            IF( p.parm_type = 14, '瞬时流量',
+                IF( p.parm_type = 16, '流速',
+                    IF( p.parm_type = 7, 'PH',
+                        IF( p.parm_type = 15, 'COD',
+                            IF( p.parm_type = 9, '浊度',
+                                IF( p.parm_type = 11, '余氯', '' )))))))
+        AS "attributeName",
+        da.unit AS "unit",
+        r.`day` AS "dateLabel",
+        ifnull( ROUND( sum( r.AVG_VALUE ), 2 ), 0 ) AS "data",
+        max( r.COLLECT_DATE ) AS "date"
+        FROM sms_device_parm p
+        LEFT JOIN sms_month_report r ON p.DEVICE_ID = r.DEVICE_ID AND p.ATTRIBUTE_ID = r.ATTRIBUTE_ID
+        left join sms_device_attribute  da ON da.id = p.ATTRIBUTE_ID
+        LEFT JOIN sms_device d ON d.id = p.DEVICE_ID
+        WHERE p.`STATUS`= 1   and d.ENABLE_STATE = 1
+        AND r.YEAR = #{year}  and r.month=#{month}
+        <if test="searchType != null and searchType == 1">
+            and p.parm_type = 13
+        </if>
+        <if test="searchType != null and searchType == 2">
+            and p.parm_type in (14,16)
+        </if>
+        <if test="searchType != null and searchType == 3">
+            and p.parm_type in (7,9,11,15)
+        </if>
+        <if test="deviceIds != null and deviceIds.size()>0">
+            and d.id in
+            <foreach collection="deviceIds" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="tenantId != null and tenantId != '' ">
+            and d.tenant_id = #{tenantId}
+        </if>
+        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
+            <if test="permissonType == 5 or permissonType == 2">
+                and ( d.DEPT_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                or
+                d.COMPANY_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                )
+            </if>
+            <if test="permissonType == 4 or permissonType == 3">
+                and d.DEPT_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+            </if>
+            <if test="permissonType == 1">
+                and d.COMPANY_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                and (d.DEPT_ORG_ID is null or d.DEPT_ORG_ID =0)
+            </if>
+        </if>
+        GROUP BY d.id, p.parm_type,r.day
+        order by r.day asc
+    </select>
+    <select id="MonitorDataDeviceReportByYear" resultMap="MonitorDataChartReportMap">
+        SELECT
+        d.DEVICE_NAME AS "deviceName",
+        p.parm_type AS "attributeType",
+        IF( p.parm_type = 13, '压力',
+            IF( p.parm_type = 14, '瞬时流量',
+                IF( p.parm_type = 16, '流速',
+                    IF( p.parm_type = 7, 'PH',
+                        IF( p.parm_type = 15, 'COD',
+                            IF( p.parm_type = 9, '浊度',
+                                IF( p.parm_type = 11, '余氯', '' )))))))
+        AS "attributeName",
+        da.unit AS "unit",
+        r.month AS "dateLabel",
+        ifnull( ROUND( sum( r.AVG_VALUE ), 2 ), 0 ) AS "data",
+        max( r.COLLECT_DATE ) AS "date"
+        FROM sms_device_parm p
+        LEFT JOIN sms_year_report r ON p.DEVICE_ID = r.DEVICE_ID AND p.ATTRIBUTE_ID = r.ATTRIBUTE_ID
+        left join sms_device_attribute  da ON da.id = p.ATTRIBUTE_ID
+        LEFT JOIN sms_device d ON d.id = p.DEVICE_ID
+        WHERE p.`STATUS`= 1   and d.ENABLE_STATE = 1
+        AND r.YEAR = #{year}
+        <if test="searchType != null and searchType == 1">
+            and p.parm_type = 13
+        </if>
+        <if test="searchType != null and searchType == 2">
+            and p.parm_type in (14,16)
+        </if>
+        <if test="searchType != null and searchType == 3">
+            and p.parm_type in (7,9,11,15)
+        </if>
+        <if test="deviceIds != null and deviceIds.size()>0">
+            and d.id in
+            <foreach collection="deviceIds" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="tenantId != null and tenantId != '' ">
+            and d.tenant_id = #{tenantId}
+        </if>
+        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
+            <if test="permissonType == 5 or permissonType == 2">
+                and ( d.DEPT_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                or
+                d.COMPANY_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                )
+            </if>
+            <if test="permissonType == 4 or permissonType == 3">
+                and d.DEPT_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+            </if>
+            <if test="permissonType == 1">
+                and d.COMPANY_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                and (d.DEPT_ORG_ID is null or d.DEPT_ORG_ID =0)
+            </if>
+        </if>
+        GROUP BY d.id, p.parm_type,r.month
+        order by r.`month` asc
+    </select>
 
 </mapper>