Procházet zdrojové kódy

处理温、湿度 单独恢复 告警数据没有结束时间的问题

zhulu před 1 rokem
rodič
revize
54f0c8265c

+ 33 - 18
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotAlarmDataServiceImpl.java

@@ -153,31 +153,46 @@ public class IotAlarmDataServiceImpl extends ServiceImpl<IotAlarmDataMapper, Iot
                 iotSensorMapper.updateById(iotSensor);
             }
         }
-        if (isExpress && !isAlarm) {
-            //报警恢复
-            if( alarms.size() != 0){
-                if(alarms.size()>1)
+        else{
+            // 本次上传的设备状态数据 没有生成告警
+            if (isExpress && !isAlarm) {
+                //报警恢复
+                if( alarms.size() != 0){
+                    // 温湿度一个设备 存在同时2条告警的情况
+                    if(alarms.size()>1)
+                    {
+                        for (IotAlarmData oldAlarm : alarms) {
+                            oldAlarm.setEndTime(LocalDateTime.now());
+                            this.updateById(oldAlarm);
+                        }
+                    }
+                    else {
+                        IotAlarmData iotAlarmData = alarms.get(0);
+                        iotAlarmData.setEndTime(LocalDateTime.now());
+                        this.updateById(iotAlarmData);
+                    }
+                }
+
+                if (ObjectUtil.notEqual(iotSensor.getState(),0)) {
+                    iotSensor.setStateUpdateTime(LocalDateTime.now());
+                    iotSensor.setStateStartTime(LocalDateTime.now());
+                    iotSensor.setState(0);
+                    iotSensorMapper.updateById(iotSensor);
+                }
+            }
+            // 处理温湿度 一个设备 2 种告警, 可能会单个恢复的情况
+            else if(isAlarm && isExpress)
+            {
+                if(ObjectUtil.notEqual(list.size(),alarms.size()))
                 {
-                    for (IotAlarmData oldAlarm : alarms) {
+                    List<IotAlarmData> noAlarmData = alarms.stream().filter(x -> !list.stream().anyMatch(y -> ObjectUtil.equal(y.getFieldCode(), x.getFieldCode()))).collect(Collectors.toList());
+                    for (IotAlarmData oldAlarm : noAlarmData) {
                         oldAlarm.setEndTime(LocalDateTime.now());
                         this.updateById(oldAlarm);
                     }
                 }
-                else {
-                    IotAlarmData iotAlarmData = alarms.get(0);
-                    iotAlarmData.setEndTime(LocalDateTime.now());
-                    this.updateById(iotAlarmData);
-                }
-            }
-
-            if (ObjectUtil.notEqual(iotSensor.getState(),0)) {
-                iotSensor.setStateUpdateTime(LocalDateTime.now());
-                iotSensor.setStateStartTime(LocalDateTime.now());
-                iotSensor.setState(0);
-                iotSensorMapper.updateById(iotSensor);
             }
         }
-
     }
 
     @Override