瀏覽代碼

告警阶段提交,处理主动离线消息

yf_zn 9 月之前
父節點
當前提交
824a36fdc3

+ 4 - 0
src/main/java/com/yunfeiyun/agmp/iots/device/serviceImp/BzyDeviceImpl.java

@@ -6,6 +6,7 @@ import com.yunfeiyun.agmp.common.utils.DateUtils;
 import com.yunfeiyun.agmp.common.utils.JSONUtils;
 import com.yunfeiyun.agmp.common.utils.StringUtils;
 import com.yunfeiyun.agmp.common.utils.reflect.ReflectUtils;
+import com.yunfeiyun.agmp.common.utils.spring.SpringUtils;
 import com.yunfeiyun.agmp.iot.common.constant.cmd.CmdDef;
 import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
 import com.yunfeiyun.agmp.iot.common.constant.mqtt.IotMqttConstant;
@@ -23,6 +24,7 @@ import com.yunfeiyun.agmp.iots.device.service.IBzyDevice;
 import com.yunfeiyun.agmp.iots.service.*;
 import com.yunfeiyun.agmp.iots.service.impl.IotBzyImgService;
 import com.yunfeiyun.agmp.iots.service.impl.IotDeviceAddressService;
+import com.yunfeiyun.agmp.iots.warn.service.WarnService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.http.util.TextUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -240,6 +242,8 @@ public class BzyDeviceImpl extends DeviceAbstractImpl implements IBzyDevice {
         newIotDevice.setDevStatus("0");
         newIotDevice.setDevOfflinedate(DateUtils.dateTimeNow());
         iIotDeviceService.updateIotDevice(newIotDevice);
+        //发送离线预警
+        SpringUtils.getBean(WarnService.class).processWarningOfflineData(newIotDevice, ext);
     }
 
 

+ 5 - 0
src/main/java/com/yunfeiyun/agmp/iots/device/serviceImp/CqCbdDeviceImpl.java

@@ -6,6 +6,7 @@ import com.yunfeiyun.agmp.common.utils.DateUtils;
 import com.yunfeiyun.agmp.common.utils.JSONUtils;
 import com.yunfeiyun.agmp.common.utils.StringUtils;
 import com.yunfeiyun.agmp.common.utils.reflect.ReflectUtils;
+import com.yunfeiyun.agmp.common.utils.spring.SpringUtils;
 import com.yunfeiyun.agmp.iot.common.constant.cmd.CmdDef;
 import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
 import com.yunfeiyun.agmp.iot.common.constant.mqtt.IotMqttConstant;
@@ -25,6 +26,7 @@ import com.yunfeiyun.agmp.iots.device.service.ICbdDevice;
 import com.yunfeiyun.agmp.iots.service.*;
 import com.yunfeiyun.agmp.iots.service.impl.IotCbdImgService;
 import com.yunfeiyun.agmp.iots.service.impl.IotDeviceAddressService;
+import com.yunfeiyun.agmp.iots.warn.service.WarnService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.http.util.TextUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -71,6 +73,7 @@ public class CqCbdDeviceImpl extends DeviceAbstractImpl implements ICbdDevice {
     @Autowired
     private IotDeviceAddressService iotDeviceAddressService;
 
+
     @Override
     public Object sendCmd(CmdModel cmdModel) throws Exception {
         log.info("【测报灯】发送指令 任务 cmdModel={}", cmdModel);
@@ -294,6 +297,8 @@ public class CqCbdDeviceImpl extends DeviceAbstractImpl implements ICbdDevice {
         newIotDevice.setDevStatus("0");
         newIotDevice.setDevOfflinedate(DateUtils.dateTimeNow());
         iIotDeviceService.updateIotDevice(newIotDevice);
+        //发送离线预警
+        SpringUtils.getBean(WarnService.class).processWarningOfflineData(newIotDevice, ext);
     }
 
     /**

+ 10 - 6
src/main/java/com/yunfeiyun/agmp/iots/device/serviceImp/IYfXctDeviceImpl.java

@@ -7,6 +7,7 @@ import com.yunfeiyun.agmp.common.utils.DateUtils;
 import com.yunfeiyun.agmp.common.utils.JSONUtils;
 import com.yunfeiyun.agmp.common.utils.StringUtils;
 import com.yunfeiyun.agmp.common.utils.reflect.ReflectUtils;
+import com.yunfeiyun.agmp.common.utils.spring.SpringUtils;
 import com.yunfeiyun.agmp.iot.common.constant.cmd.CmdDef;
 import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
 import com.yunfeiyun.agmp.iot.common.constant.mqtt.IotMqttConstant;
@@ -30,6 +31,7 @@ import com.yunfeiyun.agmp.iots.service.IIotDeviceconfigService;
 import com.yunfeiyun.agmp.iots.service.IIotDevicelasteddataService;
 import com.yunfeiyun.agmp.iots.service.impl.IotCbdImgService;
 import com.yunfeiyun.agmp.iots.service.impl.IotDeviceAddressService;
+import com.yunfeiyun.agmp.iots.warn.service.WarnService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.http.util.TextUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -39,7 +41,7 @@ import java.util.*;
 
 @Component(ServiceNameConst.SERVICE_YF_XCT)
 @Slf4j
-public class  IYfXctDeviceImpl extends DeviceAbstractImpl implements IYfXctDevice {
+public class IYfXctDeviceImpl extends DeviceAbstractImpl implements IYfXctDevice {
     @Autowired
     private MqttManager mqttManager;
 
@@ -239,6 +241,8 @@ public class  IYfXctDeviceImpl extends DeviceAbstractImpl implements IYfXctDevic
         newIotDevice.setDevStatus(IotDeviceStatusTypeEnum.OFFLINE.getCode());
         newIotDevice.setDevOfflinedate(DateUtils.dateTimeNow());
         iIotDeviceService.updateIotDevice(newIotDevice);
+        //发送离线预警
+        SpringUtils.getBean(WarnService.class).processWarningOfflineData(newIotDevice, ext);
     }
 
     /**
@@ -256,12 +260,12 @@ public class  IYfXctDeviceImpl extends DeviceAbstractImpl implements IYfXctDevic
         if (StringUtils.isEmpty(devUpdateddate)) {
             devUpdateddate = DateUtils.dateTimeNow();
         }
-        if(topic.startsWith(IotMqttConstant.YFXctTopic.TOPIC_XCT_PEST_IMG)){
+        if (topic.startsWith(IotMqttConstant.YFXctTopic.TOPIC_XCT_PEST_IMG)) {
             Object result = this.receivePicData(dataJson, devUpdateddate, topic, connectionId);
             log.info("【吸虫塔】图片数据处理完成");
             return result;
         }
-        if(topic.startsWith(IotMqttConstant.YFCbdTopic.TOPIC_CBD_REPORT_PREFIX)){
+        if (topic.startsWith(IotMqttConstant.YFCbdTopic.TOPIC_CBD_REPORT_PREFIX)) {
             String cmd = dataJson.getString("cmd");
             JSONObject ext = dataJson.getJSONObject("ext");
             if (TextUtils.isEmpty(cmd)) {
@@ -289,7 +293,7 @@ public class  IYfXctDeviceImpl extends DeviceAbstractImpl implements IYfXctDevic
      * @param connectionId
      * @return
      */
- 
+
     public Object receivePicData(JSONObject jsonObject, String devUpdateddate, String topic, String connectionId) {
         IotDevice oldIotDevice = findIotDevice(topic, jsonObject, connectionId);
         if (oldIotDevice == null) {
@@ -334,8 +338,8 @@ public class  IYfXctDeviceImpl extends DeviceAbstractImpl implements IYfXctDevic
      * @return
      */
     @Override
-    public IotDevice findIotDevice(String topic, JSONObject jobjMsg,String connectionId) {
-        String devId = mqttManager.getDevIdByTopic(connectionId,topic);
+    public IotDevice findIotDevice(String topic, JSONObject jobjMsg, String connectionId) {
+        String devId = mqttManager.getDevIdByTopic(connectionId, topic);
         return iIotDeviceService.selectIotDeviceByDevBid(devId);
     }
 }

+ 4 - 24
src/main/java/com/yunfeiyun/agmp/iots/device/serviceImp/XphYfQxzDeviceImpl.java

@@ -7,6 +7,7 @@ import com.yunfeiyun.agmp.common.service.LocationService;
 import com.yunfeiyun.agmp.common.utils.DateUtils;
 import com.yunfeiyun.agmp.common.utils.JSONUtils;
 import com.yunfeiyun.agmp.common.utils.StringUtils;
+import com.yunfeiyun.agmp.common.utils.spring.SpringUtils;
 import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
 import com.yunfeiyun.agmp.iot.common.constant.mqtt.IotMqttConstant;
 import com.yunfeiyun.agmp.iot.common.domain.*;
@@ -303,33 +304,12 @@ public class XphYfQxzDeviceImpl extends DeviceAbstractImpl implements IXphYfQxzD
             newIotDevice.setDevOfflinedate(devUpdateddate);
         }else if("online".equalsIgnoreCase(cmd)){
             newIotDevice.setDevStatus("1");
-
         }
         newIotDevice.setDevUpdateddate(devUpdateddate);
-
         iIotDeviceService.updateIotDevice(newIotDevice);
-        // 主动进行查询,以确保不是误判离线
-        // 新普惠设备不能控制,不用在查询检测
-//        if("offline".equalsIgnoreCase(cmd)){
-//            new Thread(new Runnable() {
-//                @Override
-//                public void run() {
-//                    try {
-//                        Thread.sleep(2*1000);
-//                    }catch (InterruptedException e){
-//                        e.printStackTrace();
-//                    }
-//                    //主动进行查询,以确保不是误判离线
-//                    log.info("【YFQXZ】主动进行查询,以确保不是误判离线" + iotDeviceOld);
-//                    YfQxzReqMsg reqMsg = new YfQxzReqMsg();
-//                    JSONObject jobjParams = new JSONObject();
-//                    jobjParams.put("type","data");
-//                    reqMsg.setExt(jobjParams);
-//
-//                    publishMsg(iotDeviceOld, reqMsg);
-//                }
-//            }).start();
-//        }
+        //发送离线预警
+        SpringUtils.getBean(WarnService.class).processWarningOfflineData(newIotDevice, dataJson);
+
     }
 
     @Override

+ 3 - 0
src/main/java/com/yunfeiyun/agmp/iots/device/serviceImp/YfQxzDeviceImpl.java

@@ -7,6 +7,7 @@ import com.yunfeiyun.agmp.common.service.LocationService;
 import com.yunfeiyun.agmp.common.utils.DateUtils;
 import com.yunfeiyun.agmp.common.utils.JSONUtils;
 import com.yunfeiyun.agmp.common.utils.StringUtils;
+import com.yunfeiyun.agmp.common.utils.spring.SpringUtils;
 import com.yunfeiyun.agmp.iot.common.constant.cmd.CmdDef;
 import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
 import com.yunfeiyun.agmp.iot.common.constant.mqtt.IotMqttConstant;
@@ -457,6 +458,8 @@ public class YfQxzDeviceImpl extends DeviceAbstractImpl implements IYfQxzDevice
             newIotDevice.setDevUpdateddate(devUpdateddate);
         }
         iIotDeviceService.updateIotDevice(newIotDevice);
+        //发送离线预警
+        SpringUtils.getBean(WarnService.class).processWarningOfflineData(newIotDevice, ext);
         // 主动进行查询,以确保不是误判离线
 
         if("offline".equalsIgnoreCase(cmd)){

+ 4 - 0
src/main/java/com/yunfeiyun/agmp/iots/device/serviceImp/YfScdDeviceImpl.java

@@ -5,6 +5,7 @@ import com.yunfeiyun.agmp.common.utils.DateUtils;
 import com.yunfeiyun.agmp.common.utils.JSONUtils;
 import com.yunfeiyun.agmp.common.utils.StringUtils;
 import com.yunfeiyun.agmp.common.utils.reflect.ReflectUtils;
+import com.yunfeiyun.agmp.common.utils.spring.SpringUtils;
 import com.yunfeiyun.agmp.iot.common.constant.cmd.CmdDef;
 import com.yunfeiyun.agmp.iot.common.constant.devicetype.IotDeviceDictConst;
 import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
@@ -17,6 +18,7 @@ import com.yunfeiyun.agmp.iots.service.IIotYfScddataService;
 import com.yunfeiyun.agmp.iots.device.service.IYfScdDevice;
 import com.yunfeiyun.agmp.iots.service.*;
 import com.yunfeiyun.agmp.iots.service.impl.IotDeviceAddressService;
+import com.yunfeiyun.agmp.iots.warn.service.WarnService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.http.util.TextUtils;
 import org.eclipse.paho.client.mqttv3.MqttException;
@@ -227,6 +229,8 @@ public class YfScdDeviceImpl extends DeviceAbstractImpl implements IYfScdDevice
         newIotDevice.setDevStatus("0");
         newIotDevice.setDevOfflinedate(DateUtils.dateTimeNow());
         iIotDeviceService.updateIotDevice(newIotDevice);
+        //发送离线预警
+        SpringUtils.getBean(WarnService.class).processWarningOfflineData(newIotDevice, dataJson);
 
         /**
          * 下发刷新指令,检测设备是否真离线

+ 4 - 1
src/main/java/com/yunfeiyun/agmp/iots/device/serviceImp/YfXycbIIIDeviceImpl.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson2.JSONObject;
 import com.yunfeiyun.agmp.common.utils.DateUtils;
 import com.yunfeiyun.agmp.common.utils.JSONUtils;
 import com.yunfeiyun.agmp.common.utils.StringUtils;
+import com.yunfeiyun.agmp.common.utils.spring.SpringUtils;
 import com.yunfeiyun.agmp.iot.common.constant.cmd.CmdDef;
 import com.yunfeiyun.agmp.iot.common.constant.devicetype.IotDeviceDictEnum;
 import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
@@ -19,6 +20,7 @@ import com.yunfeiyun.agmp.iots.service.IIotYfXycbIIIdataService;
 import com.yunfeiyun.agmp.iots.device.service.IYfXycbIIIDevice;
 import com.yunfeiyun.agmp.iots.service.*;
 import com.yunfeiyun.agmp.iots.service.impl.IotDeviceAddressService;
+import com.yunfeiyun.agmp.iots.warn.service.WarnService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.http.util.TextUtils;
 import org.eclipse.paho.client.mqttv3.MqttException;
@@ -205,7 +207,8 @@ public class YfXycbIIIDeviceImpl extends DeviceAbstractImpl implements IYfXycbII
         newIotDevice.setDevStatus("0");
         newIotDevice.setDevOfflinedate(devUpdateddate);
         iIotDeviceService.updateIotDevice(newIotDevice);
-
+        //发送离线预警
+        SpringUtils.getBean(WarnService.class).processWarningOfflineData(newIotDevice, dataJson);
         /**
          * 下发刷新指令,检测设备是否真离线
          */

+ 3 - 35
src/main/java/com/yunfeiyun/agmp/iots/service/impl/IotDeviceServiceImpl.java

@@ -2,15 +2,14 @@ package com.yunfeiyun.agmp.iots.service.impl;
 
 import com.yunfeiyun.agmp.common.utils.DateUtils;
 import com.yunfeiyun.agmp.common.utils.StringUtils;
-import com.yunfeiyun.agmp.common.web.system.service.ISysConfigService;
 import com.yunfeiyun.agmp.iot.common.constant.IotErrorCode;
 import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
 import com.yunfeiyun.agmp.iot.common.exception.IotBizException;
 import com.yunfeiyun.agmp.iot.common.model.device.IotDeviceStatusResVo;
-import com.yunfeiyun.agmp.iot.common.service.MongoService;
 import com.yunfeiyun.agmp.iots.device.mapper.IotDeviceMapper;
 import com.yunfeiyun.agmp.iots.service.IIotDeviceService;
 import com.yunfeiyun.agmp.iot.common.service.IotDeviceGeoLocationCommonService;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -28,18 +27,13 @@ import java.util.Map;
  * @date 2024-01-04
  */
 @Service
+@Slf4j
 public class IotDeviceServiceImpl implements IIotDeviceService {
 
     @Autowired
     private IotDeviceMapper iotDeviceMapper;
 
     @Autowired
-    private ISysConfigService sysConfigService;
-
-    @Autowired
-    private MongoService mongoService;
-
-    @Autowired
     private IotDeviceGeoLocationCommonService iotDeviceGeoLocationCommonService;
 
     /**
@@ -92,9 +86,6 @@ public class IotDeviceServiceImpl implements IIotDeviceService {
      */
     @Override
     public int updateIotDevice(IotDevice iotDevice) {
-        if (needFakeStatus(iotDevice.getDevBid())) {
-            iotDevice.setDevStatus("1");
-        }
         List<IotDevice> iotDeviceList = new ArrayList<>();
         iotDeviceList.add(iotDevice);
         return updateIotDeviceBatch(iotDeviceList);
@@ -106,11 +97,6 @@ public class IotDeviceServiceImpl implements IIotDeviceService {
     @Transactional(rollbackFor = Exception.class)
     @Override
     public int updateIotDeviceBatch(List<IotDevice> iotDeviceList) {
-        for (IotDevice iotDevice : iotDeviceList) {
-            if (needFakeStatus(iotDevice.getDevBid())) {
-                iotDevice.setDevStatus("1");
-            }
-        }
         int status = iotDeviceMapper.updateIotDeviceBatch(iotDeviceList);
         iotDeviceGeoLocationCommonService.insertOrUpdateBatchData(iotDeviceList);
         return status;
@@ -171,7 +157,7 @@ public class IotDeviceServiceImpl implements IIotDeviceService {
     @Override
     public void updateIotDeviceExtInfo(String devBid, String extInfo) {
         String updateDate = DateUtils.dateTimeNow();
-        iotDeviceMapper.updateIotDeviceExtInfo(devBid, extInfo,updateDate);
+        iotDeviceMapper.updateIotDeviceExtInfo(devBid, extInfo, updateDate);
     }
 
     @Override
@@ -191,22 +177,4 @@ public class IotDeviceServiceImpl implements IIotDeviceService {
     }
 
 
-    /**
-     * 是否是属于需要忽略状态的设备
-     *
-     * @param devBid
-     * @return
-     */
-    private boolean needFakeStatus(String devBid) {
-        String ignorStatusDeviceList = sysConfigService.selectConfigValueByCommonKey("iot_ignor_status_devicelist");
-        String[] ignorStatusDevBids = ignorStatusDeviceList.split(",");
-        //判断devbid是否在忽略状态设备列表中
-        for (String ignorDevBid : ignorStatusDevBids) {
-            if (ignorDevBid.equals(devBid)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
 }

+ 1 - 1
src/main/java/com/yunfeiyun/agmp/iots/task/IotStatusService.java

@@ -158,7 +158,7 @@ public class IotStatusService {
         //编辑离线
         iIotDeviceService.updateIotDevice(iotDevice);
         //发送预警
-        warnService.processWarningOfflineDataSyn(iotDevice);
+        warnService.processWarningOfflineData(iotDevice);
         log.info("【设备检测】【设备状态异常更新-设备类型{} 】设备标识:{} 设备编号 {} 设备名称 {} 异常状态 {}", iotDeviceStatusResVo.getDevtypeBid(), devBid, devCode, devName, iotDeviceStatusResVo.getDevStatus());
         reCreateDeviceTopic(iotDevice);
     }

+ 52 - 40
src/main/java/com/yunfeiyun/agmp/iots/warn/service/WarnService.java

@@ -11,6 +11,7 @@ import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
 import com.yunfeiyun.agmp.iot.common.domain.IotDevicefactor;
 import com.yunfeiyun.agmp.iot.common.domain.IotWarnconfig;
 import com.yunfeiyun.agmp.iot.common.enums.EnumWarnRuleOp;
+import com.yunfeiyun.agmp.iot.common.enums.IotDeviceStatusTypeEnum;
 import com.yunfeiyun.agmp.iots.service.IIotDevicefactorService;
 import com.yunfeiyun.agmp.iots.warn.model.WarnConfigInfo;
 import com.yunfeiyun.agmp.iots.warn.model.WarnInfoDto;
@@ -50,62 +51,27 @@ public class WarnService {
 
 
     /**
-     * 统一处理上报数据
+     * 【主】统一处理上报离线数据
      *
      * @param data 上报的数据对象
      *             param ext   上报的原始数据
      */
     public void processWarningOfflineData(IotDevice iotDevice, JSONObject data) {
         //转异步处理
-        processWarningReportDataSyn(iotDevice, data);
+        processWarningOfflineDataSyn(iotDevice, data);
     }
 
     /**
-     * 处理离线数据:针对主动上报的的离线消息
+     * 【主】处理离线数据:针对定时检查的离线
      *
      * @param iotDevice
-     * @param data
      */
-    public void processWarningOfflineDataSyn(IotDevice iotDevice, JSONObject data) {
-        CompletableFuture.runAsync(() -> {
-            // 获取该设备有哪些告警配置
-            IotWarnconfig warnConfigInfo = iotWarnBussinessService.selectIotWarnOfflineConfigInfo(iotDevice.getTid());
-            //存在离线配置,且开启
-            if (warnConfigInfo != null && "0".equals(warnConfigInfo.getWcStatus())) {
-                //离线
-                if (IotEnumOnlineStatus.OFFLINE.getStatus().equals(iotDevice.getDevStatus())) {
-                    WarnResult warnResult = new WarnResult();
-                    warnResult.setMessageId(warnResult.getUUId());
-                    warnResult.setDevId(iotDevice.getDevBid());
-                    warnResult.setTid(iotDevice.getTid());
-                    warnResult.setConfigId(warnConfigInfo.getWcBid());
-                    warnResult.setReportData(data.toJSONString());
-                    warnResult.setTargetReCount(warnConfigInfo.getWcRepeatnum());
-                    warnResult.setDevtypeBid(iotDevice.getDevtypeBid());
-                    warnResult.setConfig(warnConfigInfo);
-                    warnResult.setOffline(true);
-                    warnResult.setTriggered(true);
-                    warnResult.setMessage(WarnMessageBuilderUtil.buildWarningOfflineMessage(iotDevice.getDevtypeBid(), iotDevice.getDevCode(), iotDevice.getDevName(),iotDevice.getDevUpdateddate()));
-                    handleWarnRecord(warnResult);
-                }
-            } else {
-                log.error("[设备告警] tid{},没有离线告警配置或者已经关闭:{}", iotDevice.getTid(), warnConfigInfo);
-            }
-
-        }, threadPoolTaskExecutor);
-    }
-
-    /**
-     * 处理离线数据:针对定时检查的离线
-     *
-     * @param iotDevice
-     */
-    public void processWarningOfflineDataSyn(IotDevice iotDevice) {
+    public void processWarningOfflineData(IotDevice iotDevice) {
         processWarningOfflineDataSyn(iotDevice, JSONObject.from(iotDevice));
     }
 
     /**
-     * 统一处理上报数据
+     * 【主】统一处理上报数据
      *
      * @param data 上报的数据对象
      *             param ext   上报的原始数据
@@ -115,6 +81,52 @@ public class WarnService {
         processWarningReportDataSyn(iotDevice, data);
     }
 
+    private void processWarningOfflineDataSyn(IotDevice iotDevice, JSONObject data) {
+        try {
+            // 记录开始处理离线数据的日志
+            log.info("[设备告警] 开始处理设备{}的离线数据{}", iotDevice.getDevBid(),data);
+            // 不是离线的不处理
+            if (!IotDeviceStatusTypeEnum.OFFLINE.getCode().equals(iotDevice.getDevStatus())) {
+                log.info("[设备告警] 设备{}当前不是离线状态,跳过处理", iotDevice.getDevBid());
+                return;
+            }
+
+            CompletableFuture.runAsync(() -> {
+                // 获取该设备有哪些告警配置
+                IotWarnconfig warnConfigInfo = iotWarnBussinessService.selectIotWarnOfflineConfigInfo(iotDevice.getTid());
+
+                // 存在离线配置,且开启
+                if (warnConfigInfo != null && "0".equals(warnConfigInfo.getWcStatus())) {
+                    // 离线
+                    if (IotEnumOnlineStatus.OFFLINE.getStatus().equals(iotDevice.getDevStatus())) {
+                        WarnResult warnResult = new WarnResult();
+                        warnResult.setMessageId(warnResult.getUUId());
+                        warnResult.setDevId(iotDevice.getDevBid());
+                        warnResult.setTid(iotDevice.getTid());
+                        warnResult.setConfigId(warnConfigInfo.getWcBid());
+                        warnResult.setReportData(data.toJSONString());
+                        warnResult.setTargetReCount(warnConfigInfo.getWcRepeatnum());
+                        warnResult.setDevtypeBid(iotDevice.getDevtypeBid());
+                        warnResult.setConfig(warnConfigInfo);
+                        warnResult.setOffline(true);
+                        warnResult.setTriggered(true);
+                        warnResult.setMessage(WarnMessageBuilderUtil.buildWarningOfflineMessage(iotDevice.getDevtypeBid(), iotDevice.getDevCode(), iotDevice.getDevName(), iotDevice.getDevUpdateddate()));
+                        // 处理警告记录前的日志
+                        log.info("[设备告警] 正在为设备{}处理警告记录:{}", iotDevice.getDevBid(),warnResult);
+                        handleWarnRecord(warnResult);
+                    }
+                } else {
+                    // 日志记录没有离线告警配置或者已经关闭的情况
+                    log.error("[设备告警] tid{},没有离线告警配置或者已经关闭:{}", iotDevice.getDevBid(), warnConfigInfo);
+                }
+
+            }, threadPoolTaskExecutor);
+        } catch (Exception e) {
+            // 异常捕获时的日志记录
+            log.error("[设备告警] 在处理设备{}时发生异常:{}", iotDevice.getDevBid(), e.getMessage(), e);
+        }
+    }
+
 
     /**
      * 统一处理上报数据:异步处理