Ver código fonte

Merge remote-tracking branch 'origin/master'

wangyangyang 4 anos atrás
pai
commit
cda510907a

+ 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);
+    }
+
+
+
 }

+ 2 - 2
sms_water/src/main/java/com/huaxu/controller/OnlineMonitorController.java

@@ -177,7 +177,7 @@ public class OnlineMonitorController {
 
     @RequestMapping(value="statsDeviceParmCount" , method = RequestMethod.GET)
     @ApiOperation(value = "统计压力、瞬时流量的分布区间")
-    public AjaxMessage<int[]> statsDeviceParmCount(
+    public AjaxMessage<DistributeIntervalDto> statsDeviceParmCount(
             @ApiParam(value = "场景类型名称", required = true) @RequestParam String sceneTypeName,
             @ApiParam(value = "场景id", required = false) @RequestParam(required = false) Long sceneId,
             @ApiParam(value = "设备名称", required = false) @RequestParam(required = false) String deviceName){
@@ -191,7 +191,7 @@ public class OnlineMonitorController {
         onlineDataDto.setSceneId(sceneId);
         onlineDataDto.setDeviceName(deviceName);
         onlineDataDto.setSceneIds(sceneService.findByParentIdsLike(null));
-        int[] result=onlineMonitorService.statsDeviceParmCount(onlineDataDto);
+        DistributeIntervalDto result=onlineMonitorService.statsDeviceParmCount(onlineDataDto);
         return new AjaxMessage<>(ResultStatus.OK, result);
     }
 

+ 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);
+
+
+
 }

+ 43 - 0
sms_water/src/main/java/com/huaxu/dto/DistributeIntervalDto.java

@@ -0,0 +1,43 @@
+package com.huaxu.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel("分布区间")
+public class DistributeIntervalDto {
+    private static final long serialVersionUID = 460807634914426955L;
+    /**
+     * 分布值
+     */
+    @ApiModelProperty("分布值")
+    private int[] DistributeValue;
+    /**
+     * 平均值
+     */
+    @ApiModelProperty("平均值")
+    private Double avgValue;
+    /**
+     * 最大值
+     */
+    @ApiModelProperty("最大值")
+    private Double maxValue;
+    /**
+     * 最小值
+     */
+    @ApiModelProperty("最小值")
+    private Double minValue;
+    /**
+     * 最大值设备名称
+     */
+    @ApiModelProperty("最大值设备名称")
+    private String maxDeviceName;
+    /**
+     * 最小值设备名称
+     */
+    @ApiModelProperty("最小值设备名称")
+    private String minDeviceName;
+}

+ 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);
 }

+ 1 - 1
sms_water/src/main/java/com/huaxu/service/OnlineMonitorService.java

@@ -72,7 +72,7 @@ public interface OnlineMonitorService {
      * 统计压力、瞬时流量的分布区间
      * @return
      */
-    int[] statsDeviceParmCount(OnlineDataDto onlineDataDto);
+    DistributeIntervalDto statsDeviceParmCount(OnlineDataDto onlineDataDto);
     /**
      * 管网分页查询
      * @return

+ 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;
+    }
+
+
 }

+ 5 - 3
sms_water/src/main/java/com/huaxu/service/impl/OnlineMonitorImpl.java

@@ -307,7 +307,7 @@ public class OnlineMonitorImpl implements OnlineMonitorService {
      * @return
      */
     @Override
-    public int[] statsDeviceParmCount(OnlineDataDto onlineDataDto)
+    public DistributeIntervalDto statsDeviceParmCount(OnlineDataDto onlineDataDto)
     {
         LoginUser loginUser = UserUtil.getCurrentUser();
         onlineDataDto.setTenantId(loginUser.getTenantId());
@@ -372,7 +372,9 @@ public class OnlineMonitorImpl implements OnlineMonitorService {
                 }
             }
         }
-        return deviceCount;
+        DistributeIntervalDto distributeIntervalDto=new DistributeIntervalDto();
+        distributeIntervalDto.setDistributeValue(deviceCount);
+        return distributeIntervalDto;
     }
     /**
      * 管网分页查询
@@ -504,7 +506,7 @@ public class OnlineMonitorImpl implements OnlineMonitorService {
                     List<MonitorDataDto> pumpStatus=new ArrayList<>(0);//水泵状态
                     for(MonitorDataDto monitorData : calculate.getMonitorDataEntities()){
                         if(monDataCol.getDeviceId()==null) {
-                            byte[] bytes = redisUtil.get(("sms_water_"+monDataCol.getDeviceCode()).getBytes());
+                            byte[] bytes = redisUtil.get(("sms_water_"+monitorData.getDeviceCode()).getBytes());
                             if(bytes != null && bytes.length>0) {
                                 monitorDataEntity = (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get();}
                         }

+ 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>

+ 14 - 8
sms_water/src/main/resources/mapper/OnlineMonitorMapper.xml

@@ -262,10 +262,13 @@
         from sms_scene t1
         <include refid="sceneDeviceJoins"/>
         left join (
-            select b1.device_id,b1.attribute_id,max(latest_value) latest_value
+            select c1.device_id,c1.attribute_id,c1.latest_value
+            from sms_day_report c1
+            inner join (
+            select b1.device_id,b1.attribute_id,max(b1.collect_date) collect_date
             from sms_day_report b1
             where b1.year = year(now() + interval-1 day) and b1.month = month(now() + interval-1 day) and b1.day = day(now() + interval-1 day)
-            group by b1.device_id,b1.attribute_id
+            group by b1.device_id,b1.attribute_id )c2 on c1.device_id=c2.device_id and  c1.attribute_id=c2.attribute_id and c1.collect_date=c2.collect_date
         )t8 on t8.device_id=t2.device_id and t8.attribute_id =t5.attribute_id
         where t1.parent_scene_id = 0 and t1. status = 1
         <if test="type == 1 ">
@@ -388,7 +391,7 @@
     <select id="statsDeviceParm" resultMap="deviceDataMap">
         SELECT t6.id device_id,t6.device_code,t6.device_name,t7.attribute_id,t7.parm_type attribute_type,
          case when t7.attribute_id is  null then null when t8.id is null then 0 else 1 end is_alarm
-        <if test="type == 4 ">,t8.latest_value</if>
+        <if test="type == 4 ">,t9.latest_value</if>
         from sms_scene t1
         <include refid="deviceInnerJoins"/>
         left join sms_device_parm t7 on  t7.scene_id=t2.scene_id and  t7.device_id=t2.device_id
@@ -404,11 +407,14 @@
         <if test="type == 4 ">
             and t7.parm_type in(16)
             left join (
-            select b1.device_id,b1.attribute_id,max(latest_value) latest_value
-            from sms_day_report b1
-            where b1.year = year(now() + interval-1 day) and b1.month = month(now() + interval-1 day) and b1.day = day(now() + interval-1 day)
-            group by b1.device_id,b1.attribute_id
-            )t8 on t8.device_id=t2.device_id and t8.attribute_id =t7.attribute_id
+                select c1.device_id,c1.attribute_id,c1.latest_value
+                from sms_day_report c1
+                inner join (
+                select b1.device_id,b1.attribute_id,max(b1.collect_date) collect_date
+                from sms_day_report b1
+                where b1.year = year(now() + interval-1 day) and b1.month = month(now() + interval-1 day) and b1.day = day(now() + interval-1 day)
+                group by b1.device_id,b1.attribute_id )c2 on c1.device_id=c2.device_id and  c1.attribute_id=c2.attribute_id and c1.collect_date=c2.collect_date
+            )t9 on t9.device_id=t2.device_id and t9.attribute_id =t7.attribute_id
         </if>
         <if test="type == 5 ">
             and t7.parm_type in(14)

+ 1 - 1
sms_water/src/main/resources/mapper/SceneMapper.xml

@@ -302,7 +302,7 @@
     </select>
     <!--根据场景id查询一级场景信息-->
     <select id="findParentSceneById" resultType="com.huaxu.entity.SceneEntity">
-        select t2.id as "parentSceneId",t2.scene_name as "parentScenename"
+        select t1.scene_name as "sceneName",t2.id as "parentSceneId",t2.scene_name as "parentSceneName"
         from sms_scene t1
         left join sms_scene t2 on substring_index(substring_index(t1.parent_scene_ids, ',', 2), ',', -1)=t2.id
         where t1.id=#{id}