hxb
2024-10-24 d723fee177238df0dbab80eb788876ebd154927d
HDLLinkPMSdk/src/main/java/com/hdl/linkpm/sdk/template/HDLLinkPMTemplate.java
New file
@@ -0,0 +1,630 @@
package com.hdl.linkpm.sdk.template;/*
 *create by wxr
 *date 2022/1/19
 */
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.hdl.hdlhttp.HxHttp;
import com.hdl.linkpm.sdk.HDLLinkPMSdk;
import com.hdl.linkpm.sdk.core.callback.IDefaultCallBack;
import com.hdl.linkpm.sdk.core.exception.HDLException;
import com.hdl.linkpm.sdk.core.interceptor.HDLSmartHeader;
import com.hdl.linkpm.sdk.core.response.HDLResponse;
import com.hdl.linkpm.sdk.template.bean.CloudTemplateDevice;
import com.hdl.linkpm.sdk.template.bean.CloudTemplateSpatialInfo;
import com.hdl.linkpm.sdk.template.bean.TemplateDeviceBean;
import com.hdl.linkpm.sdk.template.bean.TemplateFunctionBean;
import com.hdl.linkpm.sdk.template.bean.TemplateGatewayBean;
import com.hdl.linkpm.sdk.template.bean.TemplateListResponseBean;
import com.hdl.linkpm.sdk.template.bean.TemplateLogicBean;
import com.hdl.linkpm.sdk.template.bean.TemplateRoomPackBean;
import com.hdl.linkpm.sdk.template.bean.TemplateSceneBean;
import com.hdl.linkpm.sdk.template.bean.TemplateSecurityBean;
import com.hdl.linkpm.sdk.template.callback.ICreateTemplateCallBack;
import com.hdl.linkpm.sdk.template.callback.IGetTemplateDeviceListCallBack;
import com.hdl.linkpm.sdk.template.callback.IGetTemplateGatewayListCallBack;
import com.hdl.linkpm.sdk.template.callback.IGetTemplateSpatialInfoCallBack;
import com.hdl.linkpm.sdk.template.callback.ITemplateFunctionsCallBack;
import com.hdl.linkpm.sdk.template.callback.ITemplateListCallBack;
import com.hdl.linkpm.sdk.template.callback.ITemplateLogicCallBack;
import com.hdl.linkpm.sdk.template.callback.ITemplateScenesCallBack;
import com.hdl.linkpm.sdk.template.callback.ITemplateSecurityCallBack;
import com.hdl.linkpm.sdk.template.controller.HDLTemplateController;
import com.hdl.linkpm.sdk.utils.HDLFileUtils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.functions.Consumer;
import okhttp3.ResponseBody;
public class HDLLinkPMTemplate {
    /**
     * instance
     */
    private volatile static HDLLinkPMTemplate instance;
    /**
     * getInstance
     *
     * @return HDLPMTemplateController
     */
    public static synchronized HDLLinkPMTemplate getInstance() {
        if (instance == null) {
            synchronized (HDLLinkPMTemplate.class) {
                if (instance == null) {
                    instance = new HDLLinkPMTemplate();
                }
            }
        }
        return instance;
    }
    /**
     * 创建模板
     * @param templateName 模板名称
     * @param communityCode 社区编码
     * @param houseLayoutId 户型id (要调用户型列表的接口)
     * @param templateDesc 模板描述
     * @param callBack 回调
     */
    public void CreateTemplate(String templateName,String communityCode,String houseLayoutId,String templateDesc,ICreateTemplateCallBack callBack) {
        HDLTemplateController.getInstance().CreateTemplate(templateName, communityCode, houseLayoutId, templateDesc, new ICreateTemplateCallBack() {
            @Override
            public void onSuccess(String templateId) {
                callBack.onSuccess(templateId);
            }
            @Override
            public void onFailure(HDLException error) {
                callBack.onFailure(error);
            }
        });
    }
    /**
     * 添加设备(全量)
     * @param templateExtendsId
     * @param beans
     * @param callBack
     */
    public void UpdateTemplateDevices(String templateExtendsId,List<TemplateDeviceBean> beans,IDefaultCallBack callBack){
        HDLTemplateController.getInstance().UpdateTemplateDevices(templateExtendsId, beans, new IDefaultCallBack() {
            @Override
            public void onSuccess() {
                if (callBack != null) {
                    callBack.onSuccess();
                }
            }
            @Override
            public void onFailure(HDLException error) {
                if (callBack != null) {
                    callBack.onFailure(error);
                }
            }
        });
    }
    /**
     * 上传模板zb数据文件文件
     *
     * @param templateExtendsId   模板ID
     * @param file  上传的文件
     * @param callBack
     * @return
     */
    public Disposable TemplateZbFileUpload(String templateExtendsId, File file, IDefaultCallBack callBack) {
        String requestUrl = HDLLinkPMSdk.getUserRegionUrl() +  "/iot-cloud/debug/backup/file/zigbeeDataUpload?templateExtendsId=" + templateExtendsId;
        return HxHttp.builder()
                .file(file, "file")
                .url(requestUrl)
                .build()
                .upload()
                .subscribeWith(new HDLResponse<String>() {
                    @Override
                    public void onResponse(String code) {
//                        FileUtils.deleteFile(file);//不用删掉本地文件 2022-09-28 17:24:06
                        if (callBack != null) {
                            callBack.onSuccess();
                        }
                    }
                    @Override
                    public void onFailure(HDLException e) {
                        HDLFileUtils.deleteFile(file);
                        if (callBack != null) {
                            callBack.onFailure(e);
                        }
                    }
                });
    }
    /**
     * 下载模板zb数据文件文件
     */
    public static boolean saveTempalteZbFile(ResponseBody zipData,File file) {
        // 如果存在就先删除数据,数据会追加
        if(file.exists()){
            file.delete();
            file.deleteOnExit();
        }
        InputStream is = null;
        byte[] buf = new byte[4096];
        int len = 0;
        FileOutputStream fos = null;
        try {
            is = zipData.byteStream();
            long total = zipData.contentLength();
            fos = new FileOutputStream(file);
            long sum = 0;
            while ((len = is.read(buf)) != -1) {
                fos.write(buf, 0, len);
                sum += len;
            }
            fos.flush();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            try {
                if (is != null)
                    is.close();
            } catch (IOException e) {
            }
            try {
                if (fos != null)
                    fos.close();
            } catch (IOException e) {
            }
        }
    }
    /**
     * 获取模板zb数据文件Url
     * @return
     */
    public Disposable getTempalteZbFileUrl(String templateExtendsId,File file,  IDefaultCallBack callBack) {
        String requestUrl = HDLLinkPMSdk.getUserRegionUrl() +  "/iot-cloud/debug/backup/file/zigbeeDataNewestUrl";
        JsonObject json = new JsonObject();
        json.addProperty("templateExtendsId", templateExtendsId);
        return HxHttp.builder()
                .url(requestUrl)
                .raw(json.toString())
                .build()
                .post()
                .subscribeWith(new HDLResponse<String>() {
                    @Override
                    public void onResponse(String url) {
                        if (url == null) {
                            callBack.onSuccess();
                        } else {
                            if (callBack != null) {
                                downloadTempalteZbFile(url, file, new IDefaultCallBack() {
                                    @Override
                                    public void onSuccess() {
                                        callBack.onSuccess();
                                    }
                                    @Override
                                    public void onFailure(HDLException error) {
                                        callBack.onFailure(error);
                                    }
                                });
                            }
                        }
                    }
                    @Override
                    public void onFailure(HDLException e) {
                        if (callBack != null) {
                            callBack.onFailure(e);
                        }
                    }
                });
    }
    /**
     * 下载模板zb数据文件文件
     * @param callBack
     * @return
     */
    public Disposable downloadTempalteZbFile(String url,File file, IDefaultCallBack callBack) {
        return HxHttp.builder()
                .url(url)
                .headers(HDLSmartHeader.IGNORE_SIGN_HEADER,1)
                .build()
                .download()
                .subscribe(new Consumer<ResponseBody>() {
                    @Override
                    public void accept(ResponseBody responseBody) throws Exception {
                        //网络请求成功,读取文件保存到sd卡
//                        callBack.onSuccess(responseBody);
                        //保存文件
//                        File file = new File(getUserFilesPath() + "/" + templateBean.getTemplateExtendsId());
                        boolean saveResult = saveTempalteZbFile(responseBody,file);
                        if(saveResult) {
                            callBack.onSuccess();
                        }else {
                            callBack.onFailure(new HDLException(0,""));
                        }
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {
                        /**
                         * 网络请求失败
                         * 具体可以自己实现
                         */
                        callBack.onFailure(new HDLException(404,""));
                    }
                });
    }
    /**
     * 获取模板列表
     * @param callBack
     */
    public void GetTemplateList(int pageNo, int pageSize, ITemplateListCallBack callBack) {
        HDLTemplateController.getInstance().GetTemplateList(pageNo,pageSize,new ITemplateListCallBack() {
            @Override
            public void onSuccess(TemplateListResponseBean templateListResponseBeans) {
                callBack.onSuccess(templateListResponseBeans);
            }
            @Override
            public void onFailure(HDLException error) {
                if (callBack != null) {
                    callBack.onFailure(error);
                }
            }
        });
    }
    /**
     * 删除模板
     * @param templateExtendsId 模板ID
     * @param callBack
     */
    public void DeleteTemplate(String templateExtendsId,IDefaultCallBack callBack){
        HDLTemplateController.getInstance().DeleteTemplate(templateExtendsId, new IDefaultCallBack() {
            @Override
            public void onSuccess() {
                if (callBack != null) {
                    callBack.onSuccess();
                }
            }
            @Override
            public void onFailure(HDLException error) {
                if (callBack != null) {
                    callBack.onFailure(error);
                }
            }
        });
    }
    /**
     * 更新网关数据(全量)
     */
    public void UpdateTemplateGateway(String templateExtendsId , List<TemplateGatewayBean> gatewayBeans,
                                      IDefaultCallBack callBack){
        HDLTemplateController.getInstance().UpdateTemplateGateway(templateExtendsId, gatewayBeans, new IDefaultCallBack() {
            @Override
            public void onSuccess() {
                if (callBack != null) {
                    callBack.onSuccess();
                }
            }
            @Override
            public void onFailure(HDLException error) {
                if (callBack != null) {
                    callBack.onFailure(error);
                }
            }
        });
    }
    /**
     * 更新房间(楼层)信息(全量)
     * @param templateExtendsId
     * @param rooms
     * @param callBack
     * @return
     */
    public void UpdateTemplateRoom(String templateExtendsId ,List<TemplateRoomPackBean.TemplateRoomInfoBean> rooms,
                                         IDefaultCallBack callBack){
        HDLTemplateController.getInstance().UpdateTemplateRoom(templateExtendsId, rooms, new IDefaultCallBack() {
            @Override
            public void onSuccess() {
                if (callBack != null) {
                    callBack.onSuccess();
                }
            }
            @Override
            public void onFailure(HDLException error) {
                if (callBack != null) {
                    callBack.onFailure(error);
                }
            }
        });
    }
    /**
     * 添加功能(全量)
     * @param templateExtendsId 模板名称
     * @param functionInfoList 功能列表
     * @param callBack 回调
     */
    public void UpdateTemplateFunctions(String templateExtendsId, List<TemplateFunctionBean> functionInfoList,
                                              IDefaultCallBack callBack){
        HDLTemplateController.getInstance().UpdateTemplateFunctions(templateExtendsId, functionInfoList, new IDefaultCallBack() {
            @Override
            public void onSuccess() {
                if (callBack != null) {
                    callBack.onSuccess();
                }
            }
            @Override
            public void onFailure(HDLException error) {
                if (callBack != null) {
                    callBack.onFailure(error);
                }
            }
        });
    }
    /**
     * 更新模板场景(全量)
     * @param templateExtendsId
     * @param sceneBeans
     * @param callBack
     */
    public void UpdataTemplateScenes(String templateExtendsId, List<TemplateSceneBean> sceneBeans,
                                     IDefaultCallBack callBack){
        HDLTemplateController.getInstance().UpdataTemplateScenes(templateExtendsId, sceneBeans, new IDefaultCallBack() {
            @Override
            public void onSuccess() {
                if(callBack != null){
                    callBack.onSuccess();
                }
            }
            @Override
            public void onFailure(HDLException error) {
                if(callBack != null){
                    callBack.onFailure(error);
                }
            }
        });
    }
    /**
     * 更新模板自动化 (全量)
     * @param templateExtendsId
     * @param logicBeansJson
     * @param callBack
     */
    public void UpdataTemplateLogic(String templateExtendsId, JsonElement logicBeansJson,// List<TemplateLogicBean> logicBeans,
                                    IDefaultCallBack callBack){
        HDLTemplateController.getInstance().UpdataTemplateLogic(templateExtendsId, logicBeansJson, new IDefaultCallBack() {
            @Override
            public void onSuccess() {
                if(callBack != null){
                    callBack.onSuccess();
                }
            }
            @Override
            public void onFailure(HDLException error) {
                if(callBack != null){
                    callBack.onFailure(error);
                }
            }
        });
    }
    /**
     * 更新模板安防 (全量)
     * @param templateExtendsId
     * @param securityInfos
     * @param callBack
     */
    public void UpdataTemplateSecurity(String templateExtendsId, JsonElement securityInfos ,IDefaultCallBack callBack  ){
        HDLTemplateController.getInstance().UpdataTemplateSecurity(templateExtendsId, securityInfos, new IDefaultCallBack() {
            @Override
            public void onSuccess() {
                if(callBack != null){
                    callBack.onSuccess();
                }
            }
            @Override
            public void onFailure(HDLException error) {
                if(callBack != null){
                    callBack.onFailure(error);
                }
            }
        });
    }
    /**
     * 获取区域信息
     * @param templateExtendsId
     * @param callBack
     */
    public void GetTemplateAreaSpatialInfo(String templateExtendsId ,IGetTemplateSpatialInfoCallBack callBack){
        HDLTemplateController.getInstance().GetTemplateAreaSpatialInfo(templateExtendsId, new IGetTemplateSpatialInfoCallBack() {
            @Override
            public void onSuccess(List<CloudTemplateSpatialInfo> data) {
                if (callBack != null) {
                    callBack.onSuccess(data);
                }
            }
            @Override
            public void onFailure(HDLException error) {
                if (callBack != null) {
                    callBack.onFailure(error);
                }
            }
        });
    }
    /**
     * 获取网关列表
     * @param id
     * @param callBack
     */
    public void GetTemplateGatewayList(String id, IGetTemplateGatewayListCallBack callBack){
        HDLTemplateController.getInstance().GetTemplateGatewayList(id, new IGetTemplateGatewayListCallBack() {
            @Override
            public void onSuccess(List<TemplateGatewayBean> data) {
                if (callBack != null) {
                    callBack.onSuccess(data);
                }
            }
            @Override
            public void onFailure(HDLException error) {
                if (callBack != null) {
                    callBack.onFailure(error);
                }
            }
        });
    }
    /**
     * 获取设备信息
     * @param templateId
     * @param callBack
     */
    public void GetTemplateDeviceList(String templateId,IGetTemplateDeviceListCallBack callBack){
        HDLTemplateController.getInstance().GetTemplateDeviceList(templateId, new IGetTemplateDeviceListCallBack() {
            @Override
            public void onSuccess(List<CloudTemplateDevice> data) {
                if (callBack != null) {
                    callBack.onSuccess(data);
                }
            }
            @Override
            public void onFailure(HDLException error) {
                if (callBack != null) {
                    callBack.onFailure(error);
                }
            }
        });
    }
    /**
     * 获取功能列表
     * @param templateExtendsId
     * @param callBack
     */
    public void GetTemplateFunctions(String templateExtendsId , ITemplateFunctionsCallBack callBack){
        HDLTemplateController.getInstance().GetTemplateFunctions(templateExtendsId, new ITemplateFunctionsCallBack() {
            @Override
            public void onSuccess(List<TemplateFunctionBean> templateFunctionBean) {
                if (callBack != null) {
                    callBack.onSuccess(templateFunctionBean);
                }
            }
            @Override
            public void onFailure(HDLException error) {
                if (callBack != null) {
                    callBack.onFailure(error);
                }
            }
        });
    }
    /**
     * 获取场景列表
     * @param templateExtendsId
     * @param callBack
     */
    public void GetTemplateScenes(String templateExtendsId , ITemplateScenesCallBack callBack){
        HDLTemplateController.getInstance().GetTemplateScenes(templateExtendsId, new ITemplateScenesCallBack() {
            @Override
            public void onSuccess(List<TemplateSceneBean> data) {
                if (callBack != null) {
                    callBack.onSuccess(data);
                }
            }
            @Override
            public void onFailure(HDLException error) {
                if (callBack != null) {
                    callBack.onFailure(error);
                }
            }
        });
    }
    /**
     * 获取安防列表
     * @param templateExtendsId
     * @param callBack
     */
    public void GetTemplateSecurity(String templateExtendsId , ITemplateSecurityCallBack callBack){
        HDLTemplateController.getInstance().GetTemplateSecurity(templateExtendsId, new ITemplateSecurityCallBack() {
                    @Override
                    public void onSuccess(List<TemplateSecurityBean> data) {
                        if (callBack != null) {
                            callBack.onSuccess(data);
                        }
                    }
                    @Override
                    public void onFailure(HDLException error) {
                        if (callBack != null) {
                            callBack.onFailure(error);
                        }
                    }
                }
        );
    }
    /**
     * 获取逻辑列表
     * @param templateExtendsId
     * @param callBack
     */
    public void GetTemplateLogic(String templateExtendsId ,ITemplateLogicCallBack  callBack){
        HDLTemplateController.getInstance().GetTemplateLogic(templateExtendsId, new ITemplateLogicCallBack() {
                    @Override
                    public void onSuccess(List<TemplateLogicBean> data) {
                        if (callBack != null) {
                            callBack.onSuccess(data);
                        }
                    }
                    @Override
                    public void onFailure(HDLException error) {
                        if (callBack != null) {
                            callBack.onFailure(error);
                        }
                    }
                }
        );
    }
}