2021与蓝度共同重构项目,服务端
liuhaonan
2021-12-09 43fb2ac961d450659a270f1db9053ec545327aa1
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 {
    /**
     * å‘送rrpc è¯·æ±‚
     *
     * @param deviceName    è®¾å¤‡å
     * @param iRequestFrame ç¼–码帧
     * @param clz           å†…部帧响应实体类 å¦‚果不想自己解析 å¯å¸¦ä¸Š
     * @return è¿”回的解码帧实体类 åŒæ—¶æŠŠå†…部帧解码之后也携带上
     */
    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;
    }
     /**
     * è°ƒç”¨è‡ªå®šä¹‰topic
     * 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();
        // è®¾å¤‡è¯ä¹¦ä¹‹productKey
        request.setProductKey(getProductKey());
        // è®¾å¤‡è¯ä¹¦ä¹‹deviceName
        request.setDeviceName(deviceName);
        // è¦è°ƒç”¨çš„æœåŠ¡æ ‡è¯†ç¬¦ï¼Œå–å†³äºŽæœåŠ¡ç«¯å®šä¹‰ ç›®å‰rrpc标识代表同步调用
        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());
        }
        // æœåŠ¡è°ƒç”¨æˆåŠŸï¼Œä»…ä»£è¡¨å‘é€æœåŠ¡æŒ‡ä»¤çš„æˆåŠŸï¼Œä¸ä»£è¡¨æ‰§è¡ŒæœåŠ¡æœ¬èº«æ˜¯å¦æˆåŠŸ
        if (response.getSuccess()) {
            // ä»…同步服务有result
            return response.getData();
        }
        return null;
    }
}