Jelajahi Sumber

优化 设备离线检测增加待激活设备离线检测

zhaiyifei 1 tahun lalu
induk
melakukan
7691993448

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

@@ -5,6 +5,7 @@ import com.yunfeiyun.agmp.common.utils.StringUtils;
 import com.yunfeiyun.agmp.common.utils.spring.SpringUtils;
 import com.yunfeiyun.agmp.iot.common.constant.devicetype.IotDeviceDictConst;
 import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
+import com.yunfeiyun.agmp.iot.common.enums.IotDeviceStatusTypeEnum;
 import com.yunfeiyun.agmp.iot.common.model.device.IotDeviceStatusResVo;
 import com.yunfeiyun.agmp.iots.core.manager.ConnectionManager;
 import com.yunfeiyun.agmp.iots.service.IIotDeviceService;
@@ -42,19 +43,18 @@ public class IotStatusService {
     @PostConstruct
     void init() {
         // 目前基于已经实现将最新数据放到DeviceConfig的设备,没有的将进行实现
-        validateDeviceType.add(IotDeviceDictConst.TYPE_YF_CBD);// 云飞测报灯
-        validateDeviceType.add(IotDeviceDictConst.TYPE_YF_BZY);// 云飞孢子仪
-        validateDeviceType.add(IotDeviceDictConst.TYPE_YF_SCD);// 云飞杀虫灯
-        validateDeviceType.add(IotDeviceDictConst.TYPE_YF_SQZ);// 云飞墒情站
-        validateDeviceType.add(IotDeviceDictConst.TYPE_YF_QXZ);// 云飞环境监测
-        validateDeviceType.add(IotDeviceDictConst.TYPE_XPH_YF_GSSQ);// 新浦会管式墒情
-        validateDeviceType.add(IotDeviceDictConst.TYPE_XPH_YF_SQZ);// 新浦会云飞墒情站
-        validateDeviceType.add(IotDeviceDictConst.TYPE_ADZN_GSSQ);// 爱迪智农管式墒情
-        validateDeviceType.add(IotDeviceDictConst.TYPE_YF_XYCB_2);// 性诱测报2.0
-        validateDeviceType.add(IotDeviceDictConst.TYPE_YF_XYCB_III);// 云飞-性诱测报灯III
-        validateDeviceType.add(IotDeviceDictConst.TYPE_ZJSF_XYCB);// 中捷四方性诱
-        validateDeviceType.add(IotDeviceDictConst.TYPE_YF_XCT);// 云飞吸虫塔
-
+//        validateDeviceType.add(IotDeviceDictConst.TYPE_YF_CBD);// 云飞测报灯
+//        validateDeviceType.add(IotDeviceDictConst.TYPE_YF_BZY);// 云飞孢子仪
+//        validateDeviceType.add(IotDeviceDictConst.TYPE_YF_SCD);// 云飞杀虫灯
+//        validateDeviceType.add(IotDeviceDictConst.TYPE_YF_SQZ);// 云飞墒情站
+//        validateDeviceType.add(IotDeviceDictConst.TYPE_YF_QXZ);// 云飞环境监测
+//        validateDeviceType.add(IotDeviceDictConst.TYPE_XPH_YF_GSSQ);// 新浦会管式墒情
+//        validateDeviceType.add(IotDeviceDictConst.TYPE_XPH_YF_SQZ);// 新浦会云飞墒情站
+//        validateDeviceType.add(IotDeviceDictConst.TYPE_ADZN_GSSQ);// 爱迪智农管式墒情
+//        validateDeviceType.add(IotDeviceDictConst.TYPE_YF_XYCB_2);// 性诱测报2.0
+//        validateDeviceType.add(IotDeviceDictConst.TYPE_YF_XYCB_III);// 云飞-性诱测报灯III
+//        validateDeviceType.add(IotDeviceDictConst.TYPE_ZJSF_XYCB);// 中捷四方性诱
+//        validateDeviceType.add(IotDeviceDictConst.TYPE_YF_XCT);// 云飞吸虫塔
 
 
         //validateDeviceType.add(IotDeviceDictConst.TYPE_ZHAO_HE_SFJ);// 赵赫水肥机
@@ -71,6 +71,29 @@ public class IotStatusService {
         //validateDeviceType.add(IotDeviceDictConst.TYPE_BY_SFJ);// 云飞水肥机
         //validateDeviceType.add(IotDeviceDictConst.TYPE_HT_SFJ);// 宏泰水肥机
 
+        String[] deviceTypes = {
+                IotDeviceDictConst.TYPE_YF_CBD,
+                IotDeviceDictConst.TYPE_YF_BZY,
+                IotDeviceDictConst.TYPE_YF_SCD,
+                IotDeviceDictConst.TYPE_YF_SQZ,
+                IotDeviceDictConst.TYPE_YF_QXZ,
+                IotDeviceDictConst.TYPE_XPH_YF_GSSQ,
+                IotDeviceDictConst.TYPE_XPH_YF_SQZ,
+                IotDeviceDictConst.TYPE_ADZN_GSSQ,
+                IotDeviceDictConst.TYPE_YF_XYCB_2,
+                IotDeviceDictConst.TYPE_YF_XYCB_III,
+                IotDeviceDictConst.TYPE_ZJSF_XYCB,
+                IotDeviceDictConst.TYPE_YF_XCT,
+                IotDeviceDictConst.TYPE_HS_YBQ_DWB,
+                IotDeviceDictConst.TYPE_HS_YBQ_CMB,
+                IotDeviceDictConst.TYPE_HS_YBQ_DBB,
+                IotDeviceDictConst.TYPE_HS_YBQ_TXB,
+                IotDeviceDictConst.TYPE_HS_YBQ_BFB
+        };
+
+        Collections.addAll(validateDeviceType, deviceTypes);
+
+
         try {
             validateStatusByDevType();
         } catch (Exception e) {
@@ -82,7 +105,7 @@ public class IotStatusService {
     /**
      * 定期根据类型查设备最新设备数据,是否长时间不上报。
      */
-    //@Scheduled(cron = "0 0 */1 * * ?")
+//    @Scheduled(cron = "30 * * * * ?")
     @Scheduled(cron = "0 0/20 * * * ? ")
     public void validateStatusByDevType() {
         if(!connectionManager.initCompleted()){
@@ -112,43 +135,54 @@ public class IotStatusService {
                 // 获取设备类型id,存在的在进行检查,因为有些设备不是基于device config 上报
                 String devtypeBid = iotDeviceStatusResVo.getDevtypeBid();
                 if (validateDeviceType.contains(devtypeBid)) {
+                    String devStatus = iotDeviceStatusResVo.getDevStatus();
                     // 获取最新上报时间
+                    // 如果没有更新的上报时间,使用创建时间
+                    //      因为刚创建的离线设备,不会上报激活设备,导致设备一直处于待激活状态
+                    // 如果没有更新的上报时间,则跳过不处理,正常他本身就是离线
                     String updateTime = iotDeviceStatusResVo.getDevUpdateddate();
-                    /**
-                     * 如果没有更新的上报时间,则跳过不处理,正常他本身就是离线
-                     */
+                    if(StringUtils.isEmpty(updateTime) && IotDeviceStatusTypeEnum.WAIT_ACTIVATE.getCode().equals(devStatus)){
+                        updateTime = iotDeviceStatusResVo.getDevCreateddate();
+                    }
+
                     if (StringUtils.isEmpty(updateTime)) {
                         return;
                     }
                     String devCode = iotDeviceStatusResVo.getDevCode();
                     String devName = iotDeviceStatusResVo.getDevName();
                     String devBid = iotDeviceStatusResVo.getDevBid();
-                    String devStatus = iotDeviceStatusResVo.getDevStatus();
+
                     // 检查时间上报间隔是否异常,60分钟没有,则异常
-                    if (!validateTime(updateTime, 60)) {
+                    if (!validateTime(updateTime, 90)) {
                         log.info("【设备检测】【正常】:设备:{} {} 上次时间:{}", iotDeviceStatusResVo.getDevName(), iotDeviceStatusResVo.getDevCode(), updateTime);
                         return;
                     }
                     // 1. 当前在线的进行检查;
-                    if ("1".equals(devStatus)) {
+                    if (!IotDeviceStatusTypeEnum.OFFLINE.getCode().equals(devStatus)) {
                         // 更新状态
                         IotDevice iotDevice = new IotDevice();
                         iotDevice.setDevCode(iotDeviceStatusResVo.getDevCode());
                         iotDevice.setDevBid(devBid);
-                        iotDevice.setDevStatus("0");
+                        iotDevice.setDevStatus(IotDeviceStatusTypeEnum.OFFLINE.getCode());
                         iotDevice.setDevOfflinedate(DateUtils.dateTimeNow());
                         iotDevice.setDevModifieddate(DateUtils.dateTimeNow());
                         iotDevice.setDevtypeBid(iotDeviceStatusResVo.getDevtypeBid());
                         iotDevice.setDevconnBid(iotDeviceStatusResVo.getDevconnBid());
+
+                        if(IotDeviceStatusTypeEnum.WAIT_ACTIVATE.getCode().equals(devStatus)){
+                            iotDevice.setDevUpdateddate(iotDeviceStatusResVo.getDevCreateddate());
+                        }
                         iIotDeviceService.updateIotDevice(iotDevice);
                         log.info("【设备检测】【设备状态异常更新-设备类型{} 】设备标识:{} 设备编号 {} 设备名称 {} 异常状态 {}", type, devBid, devCode, devName, iotDeviceStatusResVo.getDevStatus());
                         reCreateDeviceTopic(iotDevice);
                     }else{
+                        log.info("【设备检测】【设备状态异常更新-不处理-设备类型{} 】设备标识:{} 设备编号 {} 设备名称 {} 异常状态 {}", type, devBid, devCode, devName, iotDeviceStatusResVo.getDevStatus());
+
                         // 更新状态
-                        IotDevice iotDevice = new IotDevice();
-                        iotDevice.setDevBid(devBid);
-                        iotDevice.setDevStatus("1");
-                        iIotDeviceService.updateIotDevice(iotDevice);
+//                        IotDevice iotDevice = new IotDevice();
+//                        iotDevice.setDevBid(devBid);
+//                        iotDevice.setDevStatus(IotDeviceStatusTypeEnum.ONLINE.getCode());
+//                        iIotDeviceService.updateIotDevice(iotDevice);
                     }
                 }
             } catch (Exception e) {

+ 4 - 1
src/main/resources/mapper/IotDeviceMapper.xml

@@ -70,7 +70,10 @@
 
     <select id="selectAllDeviceConfigStatus"
             resultType="com.yunfeiyun.agmp.iot.common.model.device.IotDeviceStatusResVo" parameterType="map">
-               select * from IotDevice a left join IotDeviceconfig b on a.devBid=b.devBid where  a.devDelstatus='0' and  devtypeBid=#{type} ORDER BY devtypeBid  asc
+        select *
+        from IotDevice a left join IotDeviceconfig b on a.devBid=b.devBid
+        where  a.devDelstatus='0' and  devtypeBid=#{type}
+        ORDER BY devtypeBid  asc
     </select>
     <select id="selectAllDeviceByDeviceServiceName"
             resultType="com.yunfeiyun.agmp.iot.common.domain.IotDevice">