From 51af3e4e7c5fb612576b98fd6407f6b65859f374 Mon Sep 17 00:00:00 2001
From: Van333 <van666666@foxmail.com>
Date: 星期三, 16 十一月 2022 15:58:06 +0800
Subject: [PATCH] 区分消息订阅类型,新增上下线监听,修复定时帧缺少CRC32,替换设备在线状态查询方法

---
 ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightService.java |   55 ++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 38 insertions(+), 17 deletions(-)

diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightService.java
index df9f0bb..e00f1f8 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightService.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightService.java
@@ -3,6 +3,7 @@
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.HexUtil;
 import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.aliyuncs.iot.model.v20180120.BatchGetDeviceStateResponse;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -49,6 +50,8 @@
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
+
+import static com.sandu.ximon.admin.localMQTT.callback.StatusMqttCallBack.localMqttConnectStatusMap;
 
 /**
  * @author chenjiantian
@@ -143,7 +146,8 @@
 
         // 鑾峰彇鏈�杩戠殑涓婃姤鏃堕棿
         List<String> deviceCodeList = listLight.stream().map(Light::getDeviceCode).collect(Collectors.toList());
-        //鎷嗗垎list
+
+//        //鎷嗗垎list
         List<List<String>> split = CollectionUtil.split(deviceCodeList, 100);
 
         List<BatchGetDeviceStateResponse.DeviceStatus> deviceStatuses = null;
@@ -201,13 +205,17 @@
      */
     public Light getLight(String deviceCode) {
         Light one = getOne(Wrappers.<Light>lambdaQuery().eq(Light::getDeviceCode, deviceCode));
-        Object o = redisService.get(LightKey.REPORT_MAC.key(deviceCode));
-        if (o != null) {
-            one.setOnlineStatus(1);
+        if (one == null) {
+            return null;
         } else {
-            one.setOnlineStatus(0);
+            Object o = redisService.get(LightKey.REPORT_MAC.key(deviceCode));
+            if (o != null) {
+                one.setOnlineStatus(1);
+            } else {
+                one.setOnlineStatus(0);
+            }
+            return one;
         }
-        return one;
     }
 
     /**
@@ -260,13 +268,17 @@
 
         List<Map<String, Object>> resultList = new ArrayList<>();
         for (LightControlParam param : paramList) {
-            A5LightBrightnessReqInnerFrame lightControlFrame = new A5LightBrightnessReqInnerFrame(param.getBrightness(), param.getLightAddress());
-            A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_LIGHT_DATA.getCode(), lightControlFrame);
+            A5LightBrightnessReqInnerFrame
+                    lightControlFrame = new A5LightBrightnessReqInnerFrame(param.getBrightness(), param.getLightAddress());
+            A5Frame a5Frame = new A5Frame(
+                    A5OrderEnum.REQUEST_LIGHT_DATA.getCode(),
+                    lightControlFrame);
             Map<String, Object> map = new HashMap<>();
             try {
                 map.put("deviceCode", param.getDeviceCode());
                 WrapResponseCommonFrame<A5LightBrightnessRespInnerFrame> frame
-                        = MainBoardInvokeSyncService.getInstance().sendRRPC(param.getDeviceCode(), a5Frame, A5LightBrightnessRespInnerFrame.class);
+                        = MainBoardInvokeSyncService.getInstance().sendRRPC
+                        (param.getDeviceCode(), a5Frame, A5LightBrightnessRespInnerFrame.class);
                 //瀛樺偍鎺у埗甯ф寚浠�
                 StoreOperationRecordsUtils.storeInnerFrameData(param.getDeviceCode(), "鍗曠伅甯�-浜害鎺у埗", a5Frame, frame);
 
@@ -932,10 +944,15 @@
     public void setCacheData() {
 
         List<String> collect = list().stream().map(Light::getDeviceCode).collect(Collectors.toList());
+//        collect.forEach(
+//                code -> {
+//                    redisUtils.delete(DeviceRedisKey.LIGHT_DEVICE + code);
+//                }
+//        );
         List<List<String>> split = CollectionUtil.split(collect, 100);
 
-        List<BatchGetDeviceStateResponse.DeviceStatus> deviceStatuses = null;
-        List<RedisDeviceStatus> statusList = null;
+        List<BatchGetDeviceStateResponse.DeviceStatus> deviceStatuses = new ArrayList<>();
+        List<RedisDeviceStatus> statusList = new ArrayList<>();
         for (List<String> splist : split) {
             deviceStatuses = MainBoardInvokeSyncService.getInstance().batchGetDeviceState(splist);
             if (deviceStatuses != null) {
@@ -946,6 +963,10 @@
                         device.setStatus(0);
                     } else if ("OFFLINE".equals(deviceStatus.getStatus())) {
                         device.setStatus(1);
+                    } else if ("UNACTIVE".equals(deviceStatus.getStatus())) {
+                        device.setStatus(0);
+                    } else if ("DISABLE".equals(deviceStatus.getStatus())) {
+                        device.setStatus(0);
                     } else {
                         device.setStatus(2);
                     }
@@ -956,11 +977,10 @@
         }
 
         statusList.forEach(status -> {
-            redisUtils.set(DeviceRedisKey.LIGHT_DEVICE + status.getDeviceId(), status);
+            redisUtils.set(DeviceRedisKey.LIGHT_DEVICE + status.getDeviceId(), JSON.toJSONString(status));
         });
 
     }
-
 
 
     /**
@@ -988,7 +1008,7 @@
         }
 
         A5LightSetCalendarReqInnerFrame setCalendarReqInnerFrame =
-                new A5LightSetCalendarReqInnerFrame(address, year, month, day, hour, min, sec);
+                new A5LightSetCalendarReqInnerFrame(address, year % 100, month + 1, day, hour, min, sec);
 
         A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_LIGHT_DATA.getCode(), setCalendarReqInnerFrame);
         System.out.println(a5Frame + "            -----a5Frame");
@@ -1014,9 +1034,10 @@
     public void timeSynchronizationInitiative(String deviceCode, String lightAddress) {
         //鍗曠伅淇℃伅
         Light light = getLight(deviceCode);
-        if (light == null) {
-            log.error("鍗曠伅涓诲姩鍚屾鏃堕棿璇锋眰寮傚父锛屽崟鐏俊鎭笉瀛樺湪锛�");
-        }
+//        if (light == null) {
+//            log.error("鍗曠伅涓诲姩鍚屾鏃堕棿璇锋眰寮傚父锛屽崟鐏俊鎭笉瀛樺湪锛�");
+//            return;
+//        }
         //鍗曠伅浠诲姟淇℃伅
         LightTaskPoleRelation lightTaskPoleRelation = SpringContextHolder.getBean(LightTaskPoleRelationService.class)
                 .getOne(Wrappers.lambdaQuery(LightTaskPoleRelation.class)

--
Gitblit v1.9.3