From 43fb2ac961d450659a270f1db9053ec545327aa1 Mon Sep 17 00:00:00 2001
From: liuhaonan <konodioda2333@vip.qq.com>
Date: 星期四, 09 十二月 2021 15:37:08 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/BaseInvokeSyncService.java |  160 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 160 insertions(+), 0 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
new file mode 100644
index 0000000..6dc3ec0
--- /dev/null
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/BaseInvokeSyncService.java
@@ -0,0 +1,160 @@
+package com.sandu.ximon.admin.manager.iot.rrpc;
+
+import com.alibaba.fastjson.JSON;
+import com.aliyuncs.AcsRequest;
+import com.aliyuncs.AcsResponse;
+import com.aliyuncs.exceptions.ClientException;
+import com.aliyuncs.iot.model.v20180120.*;
+import com.sandu.common.execption.BusinessException;
+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.topic.IBaseTopic;
+import com.sandu.ximon.admin.manager.iot.rrpc.topic.ICustomizeTopic;
+
+import java.util.List;
+
+/**
+ * @author chenjiantian
+ * @date 2021/12/2 18:21
+ */
+public abstract class BaseInvokeSyncService implements IInvoke, IBaseTopic, ICustomizeTopic {
+
+    /**
+     * 鍙戦�乺rpc 璇锋眰
+     *
+     * @param deviceName    璁惧鍚�
+     * @param iRequestFrame 缂栫爜甯�
+     * @param clz           鍐呴儴甯у搷搴斿疄浣撶被 濡傛灉涓嶆兂鑷繁瑙f瀽 鍙甫涓�
+     * @return 杩斿洖鐨勮В鐮佸抚瀹炰綋绫� 鍚屾椂鎶婂唴閮ㄥ抚瑙g爜涔嬪悗涔熸惡甯︿笂
+     */
+    public abstract <T extends BaseResponseInnerFrame<T>> WrapResponseCommonFrame<T> sendRRPC(String deviceName, IRequestFrame iRequestFrame, Class<T> clz);
+
+    /**
+     * 鍩虹閫氫俊鍚屾璋冪敤
+     *
+     * @param request 璇锋眰灏佽
+     * @param <T>     杩斿洖绫诲瀷
+     * @return 杩斿洖缁撴灉
+     */
+    protected <T extends AcsResponse> T invokeSync(AcsRequest<T> request) {
+        // 鑾峰緱鏈嶅姟璋冪敤鍝嶅簲
+        T response = null;
+        try {
+            response = getClient().getAcsResponse(request);
+        } catch (ClientException e) {
+            e.printStackTrace();
+        }
+        return response;
+    }
+
+    @Override
+    public RegisterDeviceResponse.Data registerDevice(String deviceName) {
+        RegisterDeviceRequest request = new RegisterDeviceRequest();
+        request.setDeviceName(deviceName);
+        request.setProductKey(getProductKey());
+        RegisterDeviceResponse response = invokeSync(request);
+        if (response != null && response.getSuccess()) {
+            return response.getData();
+        }
+        return null;
+    }
+
+    @Override
+    public boolean deleteDevice(String deviceName) {
+        DeleteDeviceRequest request = new DeleteDeviceRequest();
+        request.setDeviceName(deviceName);
+        request.setProductKey(getProductKey());
+        DeleteDeviceResponse response = invokeSync(request);
+        return response != null && response.getSuccess();
+    }
+
+    @Override
+    public QueryDeviceDetailResponse.Data queryDeviceDetail(String deviceName, String lotId) {
+        QueryDeviceDetailRequest request = new QueryDeviceDetailRequest();
+        request.setIotId(lotId);
+        request.setDeviceName(deviceName);
+        request.setProductKey(getProductKey());
+        QueryDeviceDetailResponse response = invokeSync(request);
+        if (response != null && response.getSuccess()) {
+            return response.getData();
+        }
+        return null;
+    }
+
+    @Override
+    public List<BatchQueryDeviceDetailResponse.DataItem> batchQueryDeviceDetail(List<String> deviceNames) {
+        BatchQueryDeviceDetailRequest request = new BatchQueryDeviceDetailRequest();
+        request.setDeviceNames(deviceNames);
+        request.setProductKey(getProductKey());
+        BatchQueryDeviceDetailResponse response = invokeSync(request);
+        if (response != null && response.getSuccess()) {
+            return response.getData();
+        }
+        return null;
+    }
+
+
+    @Override
+    public boolean saveDeviceProp(String deviceName, String props) {
+        throw new BusinessException("鏈疄鐜�");
+//        SaveDevicePropRequest request = new SaveDevicePropRequest();
+//        request.setDeviceName(deviceName);
+//        request.setProductKey(PRODUCT_KEY);
+//        request.setProps(JSON.);
+    }
+
+    @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;
+    }
+
+     /**
+     * 璋冪敤鑷畾涔塼opic
+     * https://help.aliyun.com/document_detail/69584.htm?spm=a2c4g.11186623.0.0.25b33982bSQSom#reference-snk-mrz-wdb
+     *
+     * @param deviceName 璁惧鍚�
+     * @param param      鍙傛暟
+     * @return 璁惧杩斿洖鐨勭粨鏋�
+     */
+    protected InvokeThingServiceResponse.Data invokeThing(String deviceName, InvokeParam param) {
+        // 濉厖鏈嶅姟璋冪敤鐨勫弬鏁�
+        InvokeThingServiceRequest request = new InvokeThingServiceRequest();
+        // 璁惧璇佷功涔媝roductKey
+        request.setProductKey(getProductKey());
+        // 璁惧璇佷功涔媎eviceName
+        request.setDeviceName(deviceName);
+        // 瑕佽皟鐢ㄧ殑鏈嶅姟鏍囪瘑绗︼紝鍙栧喅浜庢湇鍔$瀹氫箟 鐩墠rrpc鏍囪瘑浠h〃鍚屾璋冪敤
+        request.setIdentifier("rrpc");
+        request.setArgs(JSON.toJSONString(param));
+
+        // 鑾峰緱鏈嶅姟璋冪敤鍝嶅簲
+        InvokeThingServiceResponse response = null;
+        try {
+            response = getClient().getAcsResponse(request);
+        } catch (ClientException e) {
+            e.printStackTrace();
+        }
+        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;
+    }
+}

--
Gitblit v1.9.3