فهرست منبع

修改报警条件实时报警结束

yuejiaying 4 سال پیش
والد
کامیت
f7f6b2035a

+ 5 - 0
sms_water/src/main/java/com/huaxu/controller/AlarmSettingController.java

@@ -52,6 +52,9 @@ public class AlarmSettingController {
     @ApiOperation(value = "删除报警配置信息")
     public AjaxMessage<Boolean> deleteByAlarmIds(@ApiParam(value = "报警配置ids", required = true) @RequestBody Long[] ids) {
         boolean result = alarmSettingService.deleteByAlarmIds(ids);
+        //修改实时报警数据
+        LoginUser currentUser = UserUtil.getCurrentUser();
+        alarmSettingService.updateRealtimeAlarm(ids,currentUser.getUsername());
         return new AjaxMessage<>(ResultStatus.OK, result);
     }
     /**
@@ -69,6 +72,8 @@ public class AlarmSettingController {
         LoginUser currentUser = UserUtil.getCurrentUser();
         alarmSetting.setUpdateBy(currentUser.getUsername());
         boolean result = alarmSettingService.updateByAlarmId(alarmSetting);
+        //修改实时报警数据
+        alarmSettingService.updateRealtimeAlarm(new Long[]{alarmSetting.getId().longValue()},currentUser.getUsername());
         return new AjaxMessage<>(ResultStatus.OK, result);
     }
     /**

+ 8 - 0
sms_water/src/main/java/com/huaxu/dao/AlarmSettingMapper.java

@@ -33,4 +33,12 @@ public interface AlarmSettingMapper extends BaseMapper<AlarmSetting> {
      * @return
      */
     List<AlarmSettingDto> selectAttributes(@Param("deviceId")Integer deviceId,@Param("sceneId")Integer sceneId);
+    /**
+     * 修改实时报警数据
+     *
+     * @param ids 报警设置id
+     * @param updateBy 修改人
+     * @return
+     */
+    Integer updateRealtimeAlarm(@Param("ids")List<Long> ids,@Param("updateBy")String updateBy);
 }

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

@@ -1,5 +1,7 @@
 package com.huaxu.dto;
 
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.huaxu.common.converter.Double3Serializer;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -14,20 +16,23 @@ public class DistributeIntervalDto {
      * 分布值
      */
     @ApiModelProperty("分布值")
-    private int[] DistributeValue;
+    private int[] distributeValue;
     /**
      * 平均值
      */
+    @JsonSerialize(using = Double3Serializer.class)
     @ApiModelProperty("平均值")
     private Double avgValue;
     /**
      * 最大值
      */
+    @JsonSerialize(using = Double3Serializer.class)
     @ApiModelProperty("最大值")
     private Double maxValue;
     /**
      * 最小值
      */
+    @JsonSerialize(using = Double3Serializer.class)
     @ApiModelProperty("最小值")
     private Double minValue;
     /**

+ 9 - 0
sms_water/src/main/java/com/huaxu/service/AlarmSettingService.java

@@ -77,4 +77,13 @@ public class AlarmSettingService extends ServiceImpl<AlarmSettingMapper, AlarmSe
     public List<AlarmSettingDto> selectAttributes(Integer deviceId,Integer sceneId){
         return alarmSettingMapper.selectAttributes(deviceId,sceneId);
     }
+    /**
+     * 修改实时报警数据
+     *
+     * @param
+     * @return
+     */
+    public Integer updateRealtimeAlarm(Long[] ids,String updateBy) {
+        return alarmSettingMapper.updateRealtimeAlarm(Arrays.asList(ids),updateBy);
+    }
 }

+ 59 - 79
sms_water/src/main/java/com/huaxu/service/impl/OnlineMonitorImpl.java

@@ -12,6 +12,7 @@ import com.huaxu.service.OnlineMonitorService;
 import com.huaxu.util.ByteArrayUtils;
 import com.huaxu.util.RedisUtil;
 import com.huaxu.util.UserUtil;
+import io.swagger.annotations.ApiModelProperty;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -203,35 +204,7 @@ public class OnlineMonitorImpl implements OnlineMonitorService {
         //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
         monitorDataCollectDto.setPermissonType(loginUser.getPermissonType());
         List<MonitorDataCollectDto> result=onlineMonitorMapper.selectDeviceMapParam(monitorDataCollectDto);
-        for(MonitorDataCollectDto monDataCol :result) {
-            //取缓存里的数据
-            byte[] bytes = redisUtil.get(("sms_water_" + monDataCol.getDeviceCode()).getBytes());
-            MonitorDataEntity monitorDataEntity = null;
-            if (bytes != null && bytes.length > 0) {
-                monitorDataEntity = (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get();
-                SimpleDateFormat formatdate = new SimpleDateFormat("YYYY-MM-dd");//日期算换格式
-                monDataCol.setCollectDate(monitorDataEntity.getCollectDate());
-            }
-            for (MonitorDataDto monData : monDataCol.getMonitorDataEntities()) {
-                if (monitorDataEntity != null) {
-                    //筛选该设备相同属性的值
-                    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"))) {//如果是状态值 需转换
-                            DecimalFormat decimalFormat = new DecimalFormat("###################.###########");//去掉末尾小数点
-                            String specsValue = attributeEntity.getDataValue() == null ? null : decimalFormat.format(attributeEntity.getDataValue());
-                            monData.setSpecsName(specsValue == null ? null : deviceAttributeSpecsService.selectSpecsName(attributeEntity.getAttributeId(), specsValue));
-                        }
-                    }
-
-                }
-            }
-        }
+        GetCalMonitorData(result,new ArrayList<MonitorDataCollectDto>());
         return result;
     }
     /**
@@ -271,35 +244,7 @@ public class OnlineMonitorImpl implements OnlineMonitorService {
         onlineDataDto.setPermissonType(loginUser.getPermissonType());
 
         List<MonitorDataCollectDto> result=onlineMonitorMapper.statsDeviceParm(onlineDataDto);
-        for(MonitorDataCollectDto monDataCol :result) {
-            //取缓存里的数据
-            byte[] bytes = redisUtil.get(("sms_water_" + monDataCol.getDeviceCode()).getBytes());
-            MonitorDataEntity monitorDataEntity = null;
-            if (bytes != null && bytes.length > 0) {
-                monitorDataEntity = (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get();
-                SimpleDateFormat formatdate = new SimpleDateFormat("YYYY-MM-dd");//日期算换格式
-                monDataCol.setCollectDate(monitorDataEntity.getCollectDate());
-            }
-            for (MonitorDataDto monitorData : monDataCol.getMonitorDataEntities()) {
-                if (monitorDataEntity != null) {
-                    SimpleDateFormat formatdate = new SimpleDateFormat("YYYY-MM-dd");//日期算换格式
-                    //计算今日数据
-                    if (formatdate.format(new Date()).equals(formatdate.format(monitorDataEntity.getCollectDate()))) {
-                        //筛选该设备相同属性的值
-                        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 attributeValue = 0d;
-                            if (attributeEntity.getDataValue() != null && monitorData.getLatestValue() != null) {
-                                attributeValue = attributeEntity.getDataValue() - monitorData.getLatestValue();
-                            }
-                            monDataCol.setYieldWaterUsage(monDataCol.getYieldWaterUsage() != null ? monDataCol.getYieldWaterUsage() + attributeValue : attributeValue);
-                        }
-                    }
-                }
-            }
-        }
+        GetCalMonitorData(result,result);
         return result;
     }
     /**
@@ -320,6 +265,8 @@ public class OnlineMonitorImpl implements OnlineMonitorService {
         if(onlineDataDto.getSceneTypeName().equals("压力")){
             deviceCount=new int[5];
         }
+        Double avgValue=null,maxValue=null,minValue=null;
+        String maxDeviceName=null,minDeviceName=null;
         List<MonitorDataCollectDto> result=onlineMonitorMapper.statsDeviceParm(onlineDataDto);
         for(MonitorDataCollectDto monDataCol :result) {
             //取缓存里的数据
@@ -327,11 +274,10 @@ public class OnlineMonitorImpl implements OnlineMonitorService {
             MonitorDataEntity monitorDataEntity = null;
             if (bytes != null && bytes.length > 0) {
                 monitorDataEntity = (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get();
-                SimpleDateFormat formatdate = new SimpleDateFormat("YYYY-MM-dd");//日期算换格式
-                monDataCol.setCollectDate(monitorDataEntity.getCollectDate());
             }
             for (MonitorDataDto monitorData : monDataCol.getMonitorDataEntities()) {
                 if (monitorDataEntity != null) {
+                    monDataCol.setCollectDate(monitorDataEntity.getCollectDate());
                     SimpleDateFormat formatdate = new SimpleDateFormat("YYYY-MM-dd");//日期算换格式
                     //筛选该设备相同属性的值
                     List<MonitorDataValueEntity> attributeEntities = monitorDataEntity.getDataValues().stream().filter((MonitorDataValueEntity m)
@@ -341,6 +287,22 @@ public class OnlineMonitorImpl implements OnlineMonitorService {
                        Double dataValue= attributeEntity.getDataValue();
                        if(dataValue!=null){
                            if(onlineDataDto.getSceneTypeName().equals("压力")){
+                               avgValue=avgValue==null?dataValue:(avgValue+dataValue)/2;
+                               boolean isMaxEquals=dataValue.equals(maxValue);
+                               boolean isMinEquals=dataValue.equals(minValue);
+                               if(isMaxEquals) {
+                                   maxDeviceName += monDataCol.getDeviceName();
+                               }else if(isMinEquals){
+                                   minDeviceName+=monDataCol.getDeviceName();
+                               }
+                               maxValue=Math.max(maxValue==null?dataValue:maxValue,dataValue);
+                               minValue=Math.min(minValue==null?dataValue:minValue,dataValue);
+                               if(maxValue.equals(dataValue)&&!isMaxEquals) {
+                                   maxDeviceName = monDataCol.getDeviceName();
+                               }
+                               if(minValue.equals(dataValue)&&!isMinEquals) {
+                                   minDeviceName = monDataCol.getDeviceName();
+                               }
                                if(dataValue<=0.2){
                                    deviceCount[0]++;
                                }else if(dataValue<=0.25) {
@@ -374,6 +336,11 @@ public class OnlineMonitorImpl implements OnlineMonitorService {
         }
         DistributeIntervalDto distributeIntervalDto=new DistributeIntervalDto();
         distributeIntervalDto.setDistributeValue(deviceCount);
+        distributeIntervalDto.setAvgValue(avgValue);
+        distributeIntervalDto.setMaxValue(maxValue);
+        distributeIntervalDto.setMinValue(minValue);
+        distributeIntervalDto.setMaxDeviceName(maxDeviceName);
+        distributeIntervalDto.setMinDeviceName(minDeviceName);
         return distributeIntervalDto;
     }
     /**
@@ -420,14 +387,23 @@ public class OnlineMonitorImpl implements OnlineMonitorService {
      */
     public void GetCalMonitorData(List<MonitorDataCollectDto> result,List<MonitorDataCollectDto> calculateRes){
         for(MonitorDataCollectDto monDataCol : result) {
+            MonitorDataEntity monitorDataEntity =null;
+            if(monDataCol.getDeviceId()!=null) {
+                //取缓存里的数据
+                byte[] bytes = redisUtil.get(("sms_water_"+monDataCol.getDeviceCode()).getBytes());
+                if(bytes != null && bytes.length>0) {
+                    monitorDataEntity = (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get();}
+            }
             //获取最新数据 更新
             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();
-                    SimpleDateFormat formatdate = new SimpleDateFormat("YYYY-MM-dd");//日期算换格式
+                if(monDataCol.getDeviceId()==null) {
+                    byte[] bytes = redisUtil.get(("sms_water_"+monData.getDeviceCode()).getBytes());
+                    if(bytes != null && bytes.length>0) {
+                        monitorDataEntity = (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get();}
+                }
+                if(monitorDataEntity != null) {
                     monDataCol.setCollectDate(monitorDataEntity.getCollectDate());
+                    SimpleDateFormat formatdate = new SimpleDateFormat("YYYY-MM-dd");//日期算换格式
                     //筛选该设备相同属性的值
                     List<MonitorDataValueEntity>  attributeEntities=monitorDataEntity.getDataValues().stream().filter((MonitorDataValueEntity m)
                             ->m.getAttributeId().equals(monData.getAttributeId())).collect(Collectors.toList());
@@ -446,13 +422,16 @@ public class OnlineMonitorImpl implements OnlineMonitorService {
             }
             //计算数据 更新
             for(MonitorDataCollectDto calculate :calculateRes ) {
-                //相同场景 则计算
-                if(monDataCol.getSceneId().equals(calculate.getSceneId())) {
+                //相同场景或设备 则取值计算
+                if((monDataCol.getDeviceId()==null&&monDataCol.getSceneId().equals(calculate.getSceneId()))||
+                    (monDataCol.getDeviceId()!=null&&monDataCol.getDeviceId().equals(calculate.getDeviceId()))) {
                     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();
+                        if(monDataCol.getDeviceId()==null) {
+                            byte[] bytes = redisUtil.get(("sms_water_"+monitorData.getDeviceCode()).getBytes());
+                            if(bytes != null && bytes.length>0) {
+                                monitorDataEntity = (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get();}
+                        }
+                        if(monitorDataEntity != null) {
                             SimpleDateFormat formatdate = new SimpleDateFormat("YYYY-MM-dd");//日期算换格式
                             //计算今日数据
                             if(formatdate.format(new Date()).equals(formatdate.format(monitorDataEntity.getCollectDate()))) {
@@ -467,6 +446,7 @@ public class OnlineMonitorImpl implements OnlineMonitorService {
                                     }
                                     switch (monitorData.getAttributeType()) {
                                         case "3":
+                                        case "16":
                                             monDataCol.setYieldWaterUsage(monDataCol.getYieldWaterUsage() != null ? monDataCol.getYieldWaterUsage() + attributeValue : attributeValue);
                                             break;
                                         case "4":
@@ -492,17 +472,17 @@ public class OnlineMonitorImpl implements OnlineMonitorService {
      */
     public void GetCalOnlineData(List<OnlineDataDto> result,List<MonitorDataCollectDto> calculateRes){
         for(MonitorDataCollectDto calculate :calculateRes ) {
+            MonitorDataEntity monitorDataEntity =null;
+            if(calculate.getDeviceId()!=null) {
+                //取缓存里的数据
+                byte[] bytes = redisUtil.get(("sms_water_"+calculate.getDeviceCode()).getBytes());
+                if(bytes != null && bytes.length>0) {
+                    monitorDataEntity = (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get();}
+            }
             for(OnlineDataDto monDataCol : result) {
-                //相同场景 则取值计算
+                //相同场景或设备 则取值计算
                 if((monDataCol.getDeviceId()==null&&monDataCol.getSceneId().equals(calculate.getSceneId()))||
                    (monDataCol.getDeviceId()!=null&&monDataCol.getDeviceId().equals(calculate.getDeviceId()))) {
-                    MonitorDataEntity monitorDataEntity =null;
-                    if(monDataCol.getDeviceId()!=null) {
-                        //取缓存里的数据
-                        byte[] bytes = redisUtil.get(("sms_water_"+monDataCol.getDeviceCode()).getBytes());
-                        if(bytes != null && bytes.length>0) {
-                            monitorDataEntity = (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get();}
-                    }
                     List<MonitorDataDto> pumpStatus=new ArrayList<>(0);//水泵状态
                     for(MonitorDataDto monitorData : calculate.getMonitorDataEntities()){
                         if(monDataCol.getDeviceId()==null) {

+ 10 - 0
sms_water/src/main/resources/mapper/AlarmSettingMapper.xml

@@ -103,4 +103,14 @@
         order by t3.seq
     </select>
 
+    <!-- 修改实时报警数据 -->
+    <update id="updateRealtimeAlarm">
+        update  sms_alarm_details
+        set state  = 0,alarm_end_time  = now(),date_update  = now(),update_by  = #{updateBy}
+        where  state  = 1 and alarm_setting_id IN
+        <foreach collection="ids" item="item" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+    </update>
+
 </mapper>

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

@@ -319,7 +319,7 @@
     </select>
     <!--查询设备地图参数数据-->
     <select id="selectDeviceMapParam" resultMap="deviceDataMap">
-        select  distinct t1.id device_id,t1.device_code,t1.device_name,t1.point_x,point_y,t1.address,t2.attribute_id, ifnull(t2.remark, t3.`name`) attribute_name,t3.unit,
+        select distinct t1.id device_id,t1.device_code,t1.device_name,t1.point_x,point_y,t1.address,t2.attribute_id, ifnull(t2.remark, t3.`name`) attribute_name,t3.unit,
          case when t2.attribute_id is  null then null when t6.id is null then 0 else 1 end is_alarm, if (t4.alarm_count>0, 1, 0) scene_state
         from sms_device  t1
         left join sms_device_parm t2 on t2.device_id=t1.id and t2.is_map=1