Browse Source

在线监测获取实时数据及计算

yuejiaying 4 years ago
parent
commit
d081bf3d62

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

@@ -5,13 +5,18 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.huaxu.dto.AlarmDetailsDto;
 import com.huaxu.dto.MonitorDataCollectDto;
+import com.huaxu.dto.MonitorDataDto;
 import com.huaxu.dto.OnlineDataDto;
-import com.huaxu.entity.SceneEntity;
+import com.huaxu.entity.MonitorDataEntity;
+import com.huaxu.entity.MonitorDataValueEntity;
 import com.huaxu.model.AjaxMessage;
 import com.huaxu.model.Pagination;
 import com.huaxu.model.ResultStatus;
+import com.huaxu.service.DeviceAttributeSpecsService;
 import com.huaxu.service.OnlineMonitorService;
 import com.huaxu.service.SceneService;
+import com.huaxu.util.ByteArrayUtils;
+import com.huaxu.util.RedisUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -19,8 +24,10 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 在线监测控制层
@@ -39,6 +46,10 @@ public class OnlineMonitorController {
     private OnlineMonitorService onlineMonitorService;
     @Autowired
     private SceneService sceneService;
+    @Autowired
+    private DeviceAttributeSpecsService deviceAttributeSpecsService;
+    @Autowired
+    private RedisUtil redisUtil;
 
     @RequestMapping(value="selectAlarmDetails" , method = RequestMethod.GET)
     @ApiOperation(value = "查询实时报警信息")
@@ -71,7 +82,26 @@ public class OnlineMonitorController {
         MonitorDataCollectDto monitorDataCollectDto=new MonitorDataCollectDto();
         monitorDataCollectDto.setSceneTypeName(sceneTypeName);
         monitorDataCollectDto.setSceneIds(sceneService.findByParentIdsLike(null));
-        return new AjaxMessage<>(ResultStatus.OK, onlineMonitorService.selectMapSuspension(monitorDataCollectDto));
+        List<MonitorDataCollectDto> result=onlineMonitorService.selectMapSuspension(monitorDataCollectDto);
+        GetOnlineData(result);//获取在线数据
+        monitorDataCollectDto.setType(1);
+        List<MonitorDataCollectDto> calculateRes=onlineMonitorService.selectSceneParam(monitorDataCollectDto);
+        CalculateOnlineData(result,calculateRes);//计算用水量、耗电量、耗药量
+        //按水量倒序排序 如果是水源按照取水量排序,其他按照供水量
+        result.sort(new Comparator<MonitorDataCollectDto>() {
+            @Override
+            public int compare(MonitorDataCollectDto o1, MonitorDataCollectDto o2) {
+                Double d1= sceneTypeName.equals("水源")?(o1.getIntakeWaterUsage()==null?0d:o1.getIntakeWaterUsage()):(o1.getYieldWaterUsage()==null?0d:o1.getYieldWaterUsage());
+                Double d2= sceneTypeName.equals("水源")?(o2.getIntakeWaterUsage()==null?0d:o2.getIntakeWaterUsage()):(o2.getYieldWaterUsage()==null?0d:o2.getYieldWaterUsage());
+                if(d1>d2){
+                    return -1;
+                }else if(d1.equals(d1)) {
+                    return 0;
+                }
+                return 0;
+            }
+        });
+        return new AjaxMessage<>(ResultStatus.OK, result);
     }
 
     @RequestMapping(value="selectMapParam" , method = RequestMethod.GET)
@@ -81,7 +111,12 @@ public class OnlineMonitorController {
         MonitorDataCollectDto monitorDataCollectDto=new MonitorDataCollectDto();
         monitorDataCollectDto.setSceneId(sceneId);
         monitorDataCollectDto.setSceneIds(sceneService.findByParentIdsLike(null));
-        return new AjaxMessage<>(ResultStatus.OK, onlineMonitorService.selectMapParam(monitorDataCollectDto));
+        List<MonitorDataCollectDto> result=onlineMonitorService.selectMapParam(monitorDataCollectDto);
+        GetOnlineData(result);//获取在线数据
+        monitorDataCollectDto.setType(1);
+        List<MonitorDataCollectDto> calculateRes=onlineMonitorService.selectSceneParam(monitorDataCollectDto);
+        CalculateOnlineData(result,calculateRes);//计算用水量、耗电量、耗药量
+        return new AjaxMessage<>(ResultStatus.OK, result);
     }
 
     @RequestMapping(value="selectPage" , method = RequestMethod.GET)
@@ -95,23 +130,182 @@ public class OnlineMonitorController {
         onlineDataDto.setSceneTypeName(sceneTypeName);
         onlineDataDto.setSceneName(sceneName);
         onlineDataDto.setSceneIds(sceneService.findByParentIdsLike(null));
-
         IPage<OnlineDataDto> iPage = new Page<>(pageNum, pageSize);
         iPage = onlineMonitorService.selectPage(iPage, onlineDataDto);
         Pagination<OnlineDataDto> pages = new Pagination<>(iPage);
+
+        MonitorDataCollectDto monitorDataCollectDto=new MonitorDataCollectDto();
+        List<Long> sceneIds = pages.getList().stream().map(OnlineDataDto::getSceneId).collect(Collectors.toList());
+        monitorDataCollectDto.setType(2);
+        monitorDataCollectDto.setSceneIds(sceneIds);
+        List<MonitorDataCollectDto> calculateRes=onlineMonitorService.selectSceneParam(monitorDataCollectDto);
+        GetCalOnlineData(pages.getList(),calculateRes);//获取在线数据及计算数据
         return new AjaxMessage<>(ResultStatus.OK, pages);
     }
 
     @RequestMapping(value="selectAlarmStats" , method = RequestMethod.GET)
     @ApiOperation(value = "查询设备报警分析")
     public AjaxMessage<List<Map<String, Object>>> selectAlarmStats(
-            @ApiParam(value = "一级场景类型名称", required = true) @RequestParam String sceneTypeName,
+            @ApiParam(value = "一级场景id", required = true) @RequestParam Long sceneId,
             @ApiParam(value = "查询天数 1、3、7", required = true) @RequestParam Integer days){
         AlarmDetailsDto alarmDetailsDto=new AlarmDetailsDto();
-        alarmDetailsDto.setSceneTypeName(sceneTypeName);
+        alarmDetailsDto.setId(sceneId);
         alarmDetailsDto.setDays(days);
         alarmDetailsDto.setSceneIds(sceneService.findByParentIdsLike(null));
         return new AjaxMessage<>(ResultStatus.OK, onlineMonitorService.selectAlarmStats(alarmDetailsDto));
     }
 
+    /**
+     * 获取在线数据
+     */
+    public void GetOnlineData(List<MonitorDataCollectDto> result){
+        for(MonitorDataCollectDto monDataCol : result) {
+            for(MonitorDataDto monData : monDataCol.getMonitorDataEntities()) {
+                //取缓存里的数据
+                byte[] bytes = redisUtil.get(("sms_water_"+monData.getDeviceCode()).getBytes());
+                if(bytes != null && bytes.length>0){
+                    MonitorDataEntity monitorDataEntity= (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get();
+                    //筛选该设备相同属性的值
+                    List<MonitorDataValueEntity>  attributeEntities=monitorDataEntity.getDataValues().stream().filter((MonitorDataValueEntity m)
+                            ->m.getAttributeId().equals(monData.getAttributeId())).collect(Collectors.toList());
+                    MonitorDataValueEntity  attributeEntity=attributeEntities.size()>0?attributeEntities.get(0):null;
+                    if(attributeEntity != null) {
+                        //赋值
+                        monData.setDataValue(attributeEntity.getDataValue());
+                        monData.setUnit(attributeEntity.getUnit());
+                        if (monData.getAttributeType() != null && (monData.getAttributeType().equals("1") || monData.getAttributeType().equals("2"))) {//如果是状态值 需转换
+                            String specsValue = attributeEntity.getDataValue() == null ? null : attributeEntity.getDataValue().toString();
+                            monData.setSpecsName(specsValue == null ? null : deviceAttributeSpecsService.selectSpecsName(attributeEntity.getAttributeId(), specsValue));
+                        }
+                    }
+                }
+            }
+        }
+    }
+    /**
+     * 计算数据
+     */
+    public void CalculateOnlineData(List<MonitorDataCollectDto> result,List<MonitorDataCollectDto> calculateRes){
+        for(MonitorDataCollectDto calculate :calculateRes ) {
+            for(MonitorDataCollectDto monDataCol : result) {
+                //相同场景 则计算
+                if(monDataCol.getSceneId().equals(calculate.getSceneId())) {
+                    for(MonitorDataDto monitorData : calculate.getMonitorDataEntities()){
+                        //取缓存里的数据
+                        byte[] bytes = redisUtil.get(("sms_water_"+monitorData.getDeviceCode()).getBytes());
+                        if(bytes != null && bytes.length>0) {
+                            MonitorDataEntity monitorDataEntity = (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get();
+                            //筛选该设备相同属性的值
+                            List<MonitorDataValueEntity> attributeEntities = monitorDataEntity.getDataValues().stream().filter((MonitorDataValueEntity m)
+                                    -> m.getAttributeId().equals(monitorData.getAttributeId())).collect(Collectors.toList());
+                            MonitorDataValueEntity  attributeEntity=attributeEntities.size()>0?attributeEntities.get(0):null;
+                            if (attributeEntity != null) {
+                                Double attributeDiffValue =0d;
+                                if(attributeEntity.getDataValue() != null && monitorData.getLatestValue() != null){
+                                    attributeDiffValue=attributeEntity.getDataValue() - monitorData.getLatestValue();
+                                }else if(attributeEntity.getDataValue() != null && monitorData.getLatestValue() == null) {
+                                    attributeDiffValue=attributeEntity.getDataValue();
+                                }
+                                Double attributeValue = monitorData.getSumValue() != null ? monitorData.getSumValue() + attributeDiffValue : attributeDiffValue;
+                                switch (monitorData.getAttributeType()) {
+                                    case "3":
+                                        monDataCol.setYieldWaterUsage(monDataCol.getYieldWaterUsage() != null ? monDataCol.getYieldWaterUsage() + attributeValue : attributeValue);
+                                        break;
+                                    case "4":
+                                        monDataCol.setIntakeWaterUsage(monDataCol.getIntakeWaterUsage() != null ? monDataCol.getIntakeWaterUsage() + attributeValue : attributeValue);
+                                        break;
+                                    case "5":
+                                        monDataCol.setPowerUsage(monDataCol.getPowerUsage() != null ? monDataCol.getPowerUsage() + attributeValue : attributeValue);
+                                        break;
+                                    case "6":
+                                        monDataCol.setDrugUsage(monDataCol.getDrugUsage() != null ? monDataCol.getDrugUsage() + attributeValue : attributeValue);
+                                        break;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    /**
+     * 获取在线数据及计算数据
+     */
+    public void GetCalOnlineData(List<OnlineDataDto> result,List<MonitorDataCollectDto> calculateRes){
+        for(MonitorDataCollectDto calculate :calculateRes ) {
+            for(OnlineDataDto monDataCol : result) {
+                //相同场景 则计算
+                if(monDataCol.getSceneId().equals(calculate.getSceneId())) {
+                    List<MonitorDataDto> pumpStatus=new ArrayList<>(0);//水泵状态
+                    for(MonitorDataDto monitorData : calculate.getMonitorDataEntities()){
+                        //取缓存里的数据
+                        byte[] bytes = redisUtil.get(("sms_water_"+monitorData.getDeviceCode()).getBytes());
+                        if(bytes != null && bytes.length>0) {
+                            MonitorDataEntity monitorDataEntity = (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get();
+                            //筛选该设备相同属性的值
+                            List<MonitorDataValueEntity> attributeEntities = monitorDataEntity.getDataValues().stream().filter((MonitorDataValueEntity m)
+                                    -> m.getAttributeId().equals(monitorData.getAttributeId())).collect(Collectors.toList());
+                            MonitorDataValueEntity  attributeEntity=attributeEntities.size()>0?attributeEntities.get(0):null;
+                            if (attributeEntity != null) {
+                                Double attributeDiffValue =0d;
+                                if(attributeEntity.getDataValue() != null && monitorData.getLatestValue() != null){
+                                    attributeDiffValue=attributeEntity.getDataValue() - monitorData.getLatestValue();
+                                }else if(attributeEntity.getDataValue() != null && monitorData.getLatestValue() == null) {
+                                    attributeDiffValue=attributeEntity.getDataValue();
+                                }
+                                Double attributeValue = monitorData.getSumValue() != null ? monitorData.getSumValue() + attributeDiffValue : attributeDiffValue;
+                                //实时数据
+                                monitorData.setDataValue(attributeEntity.getDataValue());
+                                monitorData.setUnit(attributeEntity.getUnit());
+                                switch (monitorData.getAttributeType()) {
+                                    case "3"://供水量or出水量
+                                        monDataCol.setYieldWaterUsage(monDataCol.getYieldWaterUsage() != null ? monDataCol.getYieldWaterUsage() + attributeValue : attributeValue);
+                                        break;
+                                    case "4"://取水量or进水量
+                                        monDataCol.setIntakeWaterUsage(monDataCol.getIntakeWaterUsage() != null ? monDataCol.getIntakeWaterUsage() + attributeValue : attributeValue);
+                                        break;
+                                    case "5"://耗电量
+                                        monDataCol.setPowerUsage(monDataCol.getPowerUsage() != null ? monDataCol.getPowerUsage() + attributeValue : attributeValue);
+                                        break;
+                                    case "6"://耗药量
+                                        monDataCol.setDrugUsage(monDataCol.getDrugUsage() != null ? monDataCol.getDrugUsage() + attributeValue : attributeValue);
+                                        break;
+                                    case "7"://取水PHor进水PH
+                                        monDataCol.setIntakePh(monitorData);
+                                        break;
+                                    case "8"://供水PHor出水PH
+                                        monDataCol.setYieldPh(monitorData);
+                                        break;
+                                    case "9"://取水浊度or进水浊度
+                                        monDataCol.setIntakeTurbidity(monitorData);
+                                        break;
+                                    case "10"://供水浊度or出水浊度
+                                        monDataCol.setYieldTurbidity(monitorData);
+                                        break;
+                                    case "11"://余氯
+                                        monDataCol.setResidualChlorine(monitorData);
+                                        break;
+                                    case "12"://水位
+                                        monDataCol.setWaterLevel(monitorData);
+                                        break;
+                                    case "13"://压力
+                                        monDataCol.setPressure(monitorData);
+                                        break;
+                                    case "14"://瞬时流量
+                                        monDataCol.setInstantFlow(monitorData);
+                                        break;
+                                    case "2"://水泵状态
+                                        String specsValue = attributeEntity.getDataValue() == null ? null : attributeEntity.getDataValue().toString();
+                                        monitorData.setSpecsName(specsValue == null ? null : deviceAttributeSpecsService.selectSpecsName(attributeEntity.getAttributeId(), specsValue));
+                                        pumpStatus.add(monitorData);
+                                        monDataCol.setPumpStatus(pumpStatus);
+                                        break;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
 }

+ 5 - 0
sms_water/src/main/java/com/huaxu/dao/OnlineMonitorMapper.java

@@ -52,4 +52,9 @@ public interface OnlineMonitorMapper {
      * @return
      */
     List<Map<String, Object>> selectAlarmStats(AlarmDetailsDto alarmDetailsDto);
+    /**
+     * 查询场景对应参数数据
+     * @return
+     */
+    List<MonitorDataCollectDto> selectSceneParam(MonitorDataCollectDto monitorDataCollectDto);
 }

+ 4 - 0
sms_water/src/main/java/com/huaxu/dto/MonitorDataCollectDto.java

@@ -85,4 +85,8 @@ public class MonitorDataCollectDto {
     @ApiModelProperty(value ="一级场景类型名称",hidden = true)
     @JsonIgnore
     private String sceneTypeName;
+
+    @ApiModelProperty(value ="在线监测类型 1查询需计算的属性、2查询监测列表的属性",hidden = true)
+    @JsonIgnore
+    private Integer type;
 }

+ 10 - 1
sms_water/src/main/java/com/huaxu/dto/MonitorDataDto.java

@@ -24,7 +24,7 @@ public class MonitorDataDto implements Serializable {
     @ApiModelProperty(value = "设备编号")
     private Integer deviceId;
     @ApiModelProperty(value = "设备属性编号")
-    private Integer attributeId;
+    private Long attributeId;
     @ApiModelProperty(value = "设备属性名称")
     private String attributeName;
     @ApiModelProperty(value = "采集数据")
@@ -38,4 +38,13 @@ public class MonitorDataDto implements Serializable {
     @ApiModelProperty(value = "属性类型标记",hidden = true)
     @JsonIgnore
     private String attributeType;
+    @ApiModelProperty(value = "设备标识",hidden = true)
+    @JsonIgnore
+    private String deviceCode;
+    @ApiModelProperty(value = "离线日报表今日总量",hidden = true)
+    @JsonIgnore
+    private Double sumValue;
+    @ApiModelProperty(value = "离线日报表今日最新值",hidden = true)
+    @JsonIgnore
+    private Double latestValue;
 }

+ 1 - 1
sms_water/src/main/java/com/huaxu/dto/OnlineDataDto.java

@@ -41,7 +41,7 @@ public class OnlineDataDto {
     private Double drugUsage;
 
     @ApiModelProperty("瞬时流量")
-    private Integer sceneState;
+    private MonitorDataDto instantFlow;
 
     @ApiModelProperty("供水PH、出水PH")
     private MonitorDataDto yieldPh;

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

@@ -4,7 +4,6 @@ package com.huaxu.service;
 import com.huaxu.dao.DeviceAttributeSpecsMapper;
 import com.huaxu.entity.DeviceAttributeSpecsEntity;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 
@@ -78,4 +77,16 @@ public class DeviceAttributeSpecsService extends ServiceImpl<DeviceAttributeSpec
     public DeviceAttributeSpecsEntity findDeviceAttributeSpecsById(Long id) {
         return deviceAttributeSpecsMapper.findDeviceAttributeSpecsById(id);
     }
+    /**
+     * 根据属性id和值获取规格名称
+    */
+    public String  selectSpecsName(Long attributeId,String specsValue){
+        DeviceAttributeSpecsEntity res= this.getOne(new QueryWrapper<DeviceAttributeSpecsEntity>().eq("ATTRIBUTE_ID", attributeId).
+                eq("SPECS_VALUE", specsValue));
+        if(res==null) {
+            res= this.getOne(new QueryWrapper<DeviceAttributeSpecsEntity>().eq("ATTRIBUTE_ID", attributeId).
+                    eq("SPECS_VALUE", '0'+specsValue));
+        }
+        return res==null?null:res.getSpecsName();
+    }
 }

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

@@ -43,4 +43,9 @@ public interface OnlineMonitorService {
      * @return
      */
     List<Map<String, Object>> selectAlarmStats(AlarmDetailsDto alarmDetailsDto);
+    /**
+     * 查询场景对应参数数据
+     * @return
+     */
+    List<MonitorDataCollectDto> selectSceneParam(MonitorDataCollectDto monitorDataCollectDto);
 }

+ 15 - 2
sms_water/src/main/java/com/huaxu/service/impl/OnlineMonitorImpl.java

@@ -109,8 +109,7 @@ public class OnlineMonitorImpl implements OnlineMonitorService {
      * @return
      */
     @Override
-    public List<Map<String, Object>> selectAlarmStats(AlarmDetailsDto alarmDetailsDto)
-    {
+    public List<Map<String, Object>> selectAlarmStats(AlarmDetailsDto alarmDetailsDto) {
         LoginUser loginUser = UserUtil.getCurrentUser();
         alarmDetailsDto.setTenantId(loginUser.getTenantId());
         alarmDetailsDto.setProgramItems(loginUser.getProgramItemList());
@@ -119,4 +118,18 @@ public class OnlineMonitorImpl implements OnlineMonitorService {
         alarmDetailsDto.setPermissonType(loginUser.getPermissonType());
         return onlineMonitorMapper.selectAlarmStats(alarmDetailsDto);
     }
+    /**
+     * 查询场景对应参数数据
+     * @return
+     */
+    @Override
+    public List<MonitorDataCollectDto> selectSceneParam(MonitorDataCollectDto monitorDataCollectDto){
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        monitorDataCollectDto.setTenantId(loginUser.getTenantId());
+        monitorDataCollectDto.setProgramItems(loginUser.getProgramItemList());
+        monitorDataCollectDto.setUserType(loginUser.getType());
+        //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+        monitorDataCollectDto.setPermissonType(loginUser.getPermissonType());
+        return onlineMonitorMapper.selectSceneParam(monitorDataCollectDto);
+    }
 }

+ 42 - 11
sms_water/src/main/resources/mapper/OnlineMonitorMapper.xml

@@ -16,6 +16,9 @@
             <result property="unit" column="unit" jdbcType="VARCHAR"/>
             <result property="isAlarm" column="is_Alarm" jdbcType="VARCHAR"/>
             <result property="attributeType" column="attribute_type" jdbcType="VARCHAR"/>
+            <result property="deviceCode" column="device_code" jdbcType="VARCHAR"/>
+            <result property="sumValue" column="sum_value" jdbcType="VARCHAR"/>
+            <result property="latestValue" column="latest_value" jdbcType="VARCHAR"/>
         </collection>
     </resultMap>
 
@@ -31,7 +34,8 @@
         ifnull(t5.remark, t5.`name`) attribute_name,
         t5.unit ,
         case when t5.attribute_id is  null then null when t6.id is null then 0 else 1 end is_alarm,
-        t5.attribute_type
+        t5.attribute_type,
+        if (t5.device_id is null, null, t4.device_code) device_code
     </sql>
 
     <sql id="sceneDeviceJoins">
@@ -144,7 +148,6 @@
     <select id="selectPage" resultType="com.huaxu.dto.OnlineDataDto">
         select t1.id scene_id,t1.scene_name
         from sms_scene t1
-        inner join sms_scene t2 on find_in_set(t1.id, t2.parent_scene_ids) and t2. status = 1
         inner join sms_scene_type t3 on t3.id = t1.scene_type_id and t3. status = 1
         where t1.parent_scene_id = 0 and t1. status = 1 and t3.scene_type_name = #{onlineDataDto.sceneTypeName}
         <if test="onlineDataDto.sceneIds != null and onlineDataDto.sceneIds.size() > 0">
@@ -153,7 +156,10 @@
                 #{item}
             </foreach>
         </if>
-
+        <if test="onlineDataDto.sceneName != null and onlineDataDto.sceneName != ''">
+            and t1.scene_name  like concat('%',#{onlineDataDto.sceneName},'%')
+        </if>
+        order by  t1.date_create
     </select>
     <!--查询设备报警分析-->
     <select id="selectAlarmStats" resultType="java.util.Map">
@@ -161,11 +167,11 @@
         t4.id,
         t4.device_name as "deviceName",
         count(1) as "alarmCount",
-        sum(timestampdiff(minute,t5.alarm_start_time,ifnull(t5.alarm_end_time,now()))) as "alarmduration"
+        sum(timestampdiff(minute,t6.alarm_start_time,ifnull(t6.alarm_end_time,now()))) as "alarmDuration"
         from sms_scene t1
         <include refid="sceneDeviceJoins"/>
         <include refid="alarmDetailsJoins"/>
-        where t1.parent_scene_id = 0 and t1. status = 1 and t3.scene_type_name = #{sceneTypeName}
+        where t1.parent_scene_id = 0 and t1. status = 1 and t1.id = #{id}
         <if test="sceneIds != null and sceneIds.size() > 0">
             and t1.id  in
             <foreach collection="sceneIds" item="item" open="(" close=")" separator=",">
@@ -173,22 +179,47 @@
             </foreach>
         </if>
         <if test="days != null">
-            and t5.alarm_start_time>DATE(NOW() + INTERVAL-#{days}+1 DAY)
+            and t6.alarm_start_time>DATE(NOW() + INTERVAL-#{days}+1 DAY)
         </if>
         group by t4.id,t4.device_name
     </select>
     <!--查询场景对应参数数据-->
     <select id="selectSceneParam" resultMap="monitorDataMap">
         select
-        <include refid="Base_Column_List"/>
+        t1.id scene_Id,
+        t1.scene_name ,
+        t5.device_id,
+        t5.attribute_id ,
+        ifnull(t5.remark, t5.`name`) attribute_name,
+        if(t6.id is null , 0 , 1 ) is_alarm,
+        t5.attribute_type,
+        if (t5.device_id is null, null, t4.device_code) device_code,
+        t8.sum_value,
+        t8.latest_value
         from sms_scene t1
         <include refid="sceneDeviceJoins"/>
-        <include refid="sceneAlarmJoins"/>
-        left join(
-        <include refid="attributeJoins"/> and a2.attribute_type in(2,3,4,5,6,7,8,9,10,11,12,13,14)
+        inner join(
+        <include refid="attributeJoins"/>
+        <if test="type == 1 ">
+            and a2.attribute_type in(3,4,5,6)
+        </if>
+        <if test="type == 2 ">
+        and a2.attribute_type in(2,3,4,5,6,7,8,9,10,11,12,13,14)
+        </if>
         )t5 on t5.device_id=t4.id
         left join sms_alarm_details t6 on t6.device_id=t4.id and t6. status = 1 and t6.attribute_id = t5.attribute_id and t6.state = 1
-        where t1.parent_scene_id = 0 and t1. status = 1 and t1.id = #{sceneId}
+        left join (
+            select b1.device_id,b1.attribute_id,sum(sum_value) as sum_value,max(latest_value) latest_value from sms_day_report b1
+            where b1.collect_date>=date(now())
+            group by b1.device_id,b1.attribute_id
+        )t8 on t8.attribute_id =t5.attribute_id and t8.device_id=t5.device_id
+        where t1.parent_scene_id = 0 and t1. status = 1
+        <if test="sceneTypeName != null and sceneTypeName != '' ">
+            and t3.scene_type_name = #{sceneTypeName}
+        </if>
+        <if test="sceneId != null and sceneId != '' ">
+            and t1.id = #{sceneId}
+        </if>
         <if test="sceneIds != null and sceneIds.size() > 0">
             and t1.id  in
             <foreach collection="sceneIds" item="item" open="(" close=")" separator=",">