From c88f44a7d604bf91e22a5cb076018884a01a6261 Mon Sep 17 00:00:00 2001
From: Van333 <van666666@foxmail.com>
Date: 星期六, 19 十一月 2022 15:11:17 +0800
Subject: [PATCH] 替换阿里oss为本地minio,关闭对时存在定时任务时睡眠10min

---
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/BaseInvokeSyncService.java |  187 ++++++++++++++++++++++++++++++++++++----------
 1 files changed, 147 insertions(+), 40 deletions(-)

diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/BaseInvokeSyncService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/BaseInvokeSyncService.java
index 082ec44..5104a94 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/BaseInvokeSyncService.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/BaseInvokeSyncService.java
@@ -6,23 +6,33 @@
 import com.aliyuncs.exceptions.ClientException;
 import com.aliyuncs.iot.model.v20180120.*;
 import com.sandu.common.execption.BusinessException;
+import com.sandu.ximon.admin.dto.DeviceStatus;
+import com.sandu.ximon.admin.localMQTT.util.HexFrameUtils;
+import com.sandu.ximon.admin.localMQTT.util.MqttClientUtil;
 import com.sandu.ximon.admin.manager.iot.frame.IRequestFrame;
 import com.sandu.ximon.admin.manager.iot.frame.inner.BaseResponseInnerFrame;
 import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame;
 import com.sandu.ximon.admin.manager.iot.rrpc.dto.InvokeParam;
 import com.sandu.ximon.admin.manager.iot.rrpc.dto.WrapResponseCommonFrame;
+import com.sandu.ximon.admin.manager.iot.rrpc.enums.DeviceStateEnum;
 import com.sandu.ximon.admin.manager.iot.rrpc.topic.IBaseTopic;
 import com.sandu.ximon.admin.manager.iot.rrpc.topic.ICustomizeTopic;
 import com.sandu.ximon.admin.manager.iot.rrpc.util.FrameUtils;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 
+import java.util.ArrayList;
+import java.util.Base64;
 import java.util.List;
 import java.util.Map;
+
+import static com.sandu.ximon.admin.localMQTT.callback.StatusMqttCallBack.localMqttConnectStatusMap;
 
 /**
  * @author chenjiantian
  * @date 2021/12/2 18:21
  */
+@Slf4j
 public abstract class BaseInvokeSyncService implements IInvoke, IBaseTopic, ICustomizeTopic {
 
     /**
@@ -33,7 +43,7 @@
      * @param clz           鍐呴儴甯у搷搴斿疄浣撶被 濡傛灉涓嶆兂鑷繁瑙f瀽 鍙甫涓�
      * @return 杩斿洖鐨勮В鐮佸抚瀹炰綋绫� 鍚屾椂鎶婂唴閮ㄥ抚瑙g爜涔嬪悗涔熸惡甯︿笂
      */
-    public <T extends BaseResponseInnerFrame<T>> WrapResponseCommonFrame<T> sendRRPC(String deviceName, IRequestFrame iRequestFrame, Class<T> clz){
+    public <T extends BaseResponseInnerFrame<T>> WrapResponseCommonFrame<T> sendRRPC(String deviceName, IRequestFrame iRequestFrame, Class<T> clz) {
         CommonFrame commonFrame = sendRRPC(deviceName, iRequestFrame);
         if (commonFrame == null) {
             return null;
@@ -49,20 +59,59 @@
     }
 
     @Override
-    public CommonFrame sendRRPC(String deviceName, IRequestFrame iRequestFrame) {
-        InvokeParam param = new InvokeParam();
-        param.setOperate("1001");
-        param.setFrame(iRequestFrame.getEncodeFrame());
-        InvokeThingServiceResponse.Data data = invokeThing(deviceName, param);
-        if (data == null) {
-            return null;
-        }
-        String result = data.getResult();
-        result = result.replace("\\", "");
-        Map map = JSON.parseObject(result, Map.class);
-        result = (String) map.get("msg");
-        return FrameUtils.transformMessageToFrame(result);
+    public CommonFrame sendRRPC(String deviceName, InvokeParam invokeParam) {
+//        InvokeThingServiceResponse.Data data = invokeThing(deviceName, invokeParam, false);
+//        if (data == null) {
+//            return null;
+//        }
+//        String result = data.getResult();
+//        result = result.replace("\\", "");
+//        Map map = JSON.parseObject(result, Map.class);
+//        result = (String) map.get("msg");
+        String result = MqttClientUtil.sendMqttMsg(deviceName,invokeParam.getFrame());
+        return HexFrameUtils.transformMessageToFrame(result);
     }
+
+    @Override
+    public CommonFrame sendRRPC(String deviceName, IRequestFrame iRequestFrame) {
+//        InvokeParam param = new InvokeParam();
+//        param.setOperate("1001");
+//        param.setFrame(iRequestFrame.getEncodeFrame());
+//        InvokeThingServiceResponse.Data data = invokeThing(deviceName, param, false);
+//        if (data == null) {
+//            return null;
+//        }
+//        String result = data.getResult();
+//        result = result.replace("\\", "");
+//        Map map = JSON.parseObject(result, Map.class);
+//        result = (String) map.get("msg");
+        String frame = FrameUtils.transformMessageToFrame(iRequestFrame.getEncodeFrame()).toString();
+        String result = MqttClientUtil.sendMqttMsg(deviceName,frame);
+        log.info("鑷畾涔塻endRRPC:璇锋眰甯э細{},\n,鍝嶅簲甯�:{}",iRequestFrame.toString(),result);
+        return HexFrameUtils.transformMessageToFrame(result);
+    }
+
+    @Override
+    public CommonFrame sendRRPC(String deviceName, IRequestFrame iRequestFrame, boolean resendFlag) {
+//        InvokeParam param = new InvokeParam();
+//        param.setOperate("1001");
+//        param.setFrame(iRequestFrame.getEncodeFrame());
+//        InvokeThingServiceResponse.Data data = invokeThing(deviceName, param, true);
+//        if (data == null) {
+//            return null;
+//        }
+//        String result = data.getResult();
+//        result = result.replace("\\", "");
+//        Map map = JSON.parseObject(result, Map.class);
+//        result = (String) map.get("msg");
+        String frame = FrameUtils.transformMessageToFrame(iRequestFrame.getEncodeFrame()).toString();
+        String result = MqttClientUtil.sendMqttMsg(deviceName,frame);
+        return HexFrameUtils.transformMessageToFrame(result);
+    }
+
+
+
+
 
     /**
      * 鍩虹閫氫俊鍚屾璋冪敤
@@ -140,17 +189,26 @@
 
     @Override
     public List<BatchGetDeviceStateResponse.DeviceStatus> batchGetDeviceState(List<String> deviceNames) {
-        BatchGetDeviceStateRequest request = new BatchGetDeviceStateRequest();
-        request.setDeviceNames(deviceNames);
-        request.setProductKey(getProductKey());
-        BatchGetDeviceStateResponse response = invokeSync(request);
-        if (response != null && response.getSuccess()) {
-            return response.getDeviceStatusList();
-        }
-        return null;
+        List<BatchGetDeviceStateResponse.DeviceStatus> statusList = new ArrayList<>();
+
+        deviceNames.forEach(l -> {
+            BatchGetDeviceStateResponse.DeviceStatus deviceStatus = new BatchGetDeviceStateResponse.DeviceStatus();
+                    deviceStatus.setDeviceName(l);
+
+            if (localMqttConnectStatusMap.get(l)!=null &&
+                    localMqttConnectStatusMap.get(l)== 0){
+                deviceStatus.setStatus("OFFLINE");
+            }else {
+                deviceStatus.setStatus("ONLINE");
+            }
+            statusList.add(deviceStatus);
+        });
+
+
+        return statusList;
     }
 
-     /**
+    /**
      * 璋冪敤鑷畾涔塼opic
      * https://help.aliyun.com/document_detail/69584.htm?spm=a2c4g.11186623.0.0.25b33982bSQSom#reference-snk-mrz-wdb
      *
@@ -158,35 +216,84 @@
      * @param param      鍙傛暟
      * @return 璁惧杩斿洖鐨勭粨鏋�
      */
-    protected InvokeThingServiceResponse.Data invokeThing(String deviceName, InvokeParam param) {
+    protected InvokeThingServiceResponse.Data invokeThing(String deviceName, InvokeParam param, boolean resendFlag) {
         // 濉厖鏈嶅姟璋冪敤鐨勫弬鏁�
         InvokeThingServiceRequest request = new InvokeThingServiceRequest();
         // 璁惧璇佷功涔媝roductKey
         request.setProductKey(getProductKey());
         // 璁惧璇佷功涔媎eviceName
         request.setDeviceName(deviceName);
+        request.setSysReadTimeout(5000);
         // 瑕佽皟鐢ㄧ殑鏈嶅姟鏍囪瘑绗︼紝鍙栧喅浜庢湇鍔$瀹氫箟 鐩墠rrpc鏍囪瘑浠h〃鍚屾璋冪敤
         request.setIdentifier("rrpc");
         request.setArgs(JSON.toJSONString(param));
 
         // 鑾峰緱鏈嶅姟璋冪敤鍝嶅簲
-        InvokeThingServiceResponse response = null;
-        try {
-            response = getClient().getAcsResponse(request);
-        } catch (ClientException e) {
-            e.printStackTrace();
+        if (resendFlag) {
+            return getAcsResponse(request, true, 1);
+
+        } else {
+            return getAcsResponse(request, false, null);
+
         }
-        if (response == null) {
-            throw new BusinessException("璋冪敤rrpc澶辫触");
+    }
+
+    /**
+     * 鑾峰緱鏈嶅姟璋冪敤鍝嶅簲
+     *
+     * @param request
+     * @return
+     */
+    private InvokeThingServiceResponse.Data getAcsResponse(InvokeThingServiceRequest request, boolean resendFlag, Integer time) {
+
+        if (resendFlag) {
+            //闇�瑕侀噸鍙�
+            if (time <= 2) {
+                InvokeThingServiceResponse response = null;
+                try {
+                    response = getClient().getAcsResponse(request);
+                    if (response == null) {
+                        log.error("璋冪敤rrpc澶辫触锛屽搷搴斾负绌猴紒");
+                        return getAcsResponse(request, true, time + 1);
+                    }
+                    if (!response.getSuccess()) {
+                        log.error("璋冪敤rrpc澶辫触锛�" + response.getErrorMessage());
+                        return getAcsResponse(request, true, time + 1);
+                    } else {
+                        // 鏈嶅姟璋冪敤鎴愬姛锛屼粎浠h〃鍙戦�佹湇鍔℃寚浠ょ殑鎴愬姛锛屼笉浠h〃鎵ц鏈嶅姟鏈韩鏄惁鎴愬姛
+                        return response.getData();
+                    }
+                } catch (Exception e) {
+                    return getAcsResponse(request, true, time + 1);
+//                throw new BusinessException("閿欒淇℃伅锛�" + e.getMessage());
+                }
+            } else {
+                throw new BusinessException("纭欢璇锋眰澶辫触锛岃妫�鏌ョ‖浠惰澶囷紒");
+            }
+
+        } else {
+            //涓嶉渶瑕侀噸鍙�
+            InvokeThingServiceResponse response = null;
+            try {
+                response = getClient().getAcsResponse(request);
+            } catch (ClientException e) {
+                e.printStackTrace();
+                throw new BusinessException("纭欢璇锋眰澶辫触锛岃妫�鏌ョ‖浠惰澶囷紒");
+            }
+            if (response == null) {
+                throw new BusinessException("璋冪敤rrpc澶辫触锛屽搷搴斾负绌猴紒");
+            }
+            if (!response.getSuccess()) {
+                throw new BusinessException("璋冪敤rrpc澶辫触锛�" + response.getErrorMessage());
+            }
+            // 鏈嶅姟璋冪敤鎴愬姛锛屼粎浠h〃鍙戦�佹湇鍔℃寚浠ょ殑鎴愬姛锛屼笉浠h〃鎵ц鏈嶅姟鏈韩鏄惁鎴愬姛
+            if (response.getSuccess()) {
+                // 浠呭悓姝ユ湇鍔℃湁result
+                return response.getData();
+            }
+            return null;
         }
-        if (!response.getSuccess()) {
-            throw new BusinessException("璋冪敤rrpc澶辫触锛�" + response.getErrorMessage());
-        }
-        // 鏈嶅姟璋冪敤鎴愬姛锛屼粎浠h〃鍙戦�佹湇鍔℃寚浠ょ殑鎴愬姛锛屼笉浠h〃鎵ц鏈嶅姟鏈韩鏄惁鎴愬姛
-        if (response.getSuccess()) {
-            // 浠呭悓姝ユ湇鍔℃湁result
-            return response.getData();
-        }
-        return null;
+
+
     }
 }

--
Gitblit v1.9.3