package com.hdl.linkpm.sdk.workbench.databackup.controller; import android.os.Environment; import com.google.gson.JsonObject; import com.hdl.hdlhttp.HxHttp; import com.hdl.hdlhttp.callback.HxException; import com.hdl.linkpm.sdk.HDLLinkPMSdk; import com.hdl.linkpm.sdk.core.api.HDLCloudUserApi; import com.hdl.linkpm.sdk.core.bean.PageInfoListBean; import com.hdl.linkpm.sdk.core.callback.IDefaultCallBack; import com.hdl.linkpm.sdk.core.callback.IResponseCallBack; import com.hdl.linkpm.sdk.core.exception.HDLException; import com.hdl.linkpm.sdk.core.response.HDLResponse; import com.hdl.linkpm.sdk.utils.HDLExceptionSubmitUtils; import com.hdl.linkpm.sdk.utils.HDLFileUtils; import com.hdl.linkpm.sdk.utils.HDLGsonUtils; import com.hdl.linkpm.sdk.workbench.databackup.bean.BackupListBean; import com.hdl.linkpm.sdk.workbench.databackup.bean.GatewayBackupBean; import java.io.File; import java.util.List; import io.reactivex.rxjava3.disposables.Disposable; import io.reactivex.rxjava3.subscribers.DisposableSubscriber; import okhttp3.ResponseBody; /** * Created by hxb on 2022/2/23. */ public class DataBackupController { /** * instance */ private volatile static DataBackupController instance; /** * getInstance * * @return DataBackupController */ public static synchronized DataBackupController getInstance() { if (instance == null) { synchronized (DataBackupController.class) { if (instance == null) { instance = new DataBackupController(); } } } return instance; } /** * 上传备份数据 * * @param homeId 住宅ID * @param data 上传的数据内容 * @param callBack * @return */ public Disposable dataBackupUpload(String homeId, byte[] data, IDefaultCallBack callBack) { String requestUrl = HDLLinkPMSdk.getUserRegionUrl() + HDLCloudUserApi.POST_BACKUP_UPLOAD + "?houseId=" + homeId; String path = HDLLinkPMSdk.getContext().getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS).getPath() + "/Temp/"; String fileName = System.currentTimeMillis() + ""; HDLFileUtils.byteToFile(data, path, fileName); File file = new File(path + fileName); return HxHttp.builder() .file(file, "file") .url(requestUrl) .build() .upload() .subscribeWith(new HDLResponse() { @Override public void onResponse(String code) { HDLFileUtils.deleteFile(file); if (callBack != null) { callBack.onSuccess(); } } @Override public void onFailure(HDLException e) { HDLFileUtils.deleteFile(file); HDLExceptionSubmitUtils.submit(requestUrl, homeId, e); if (callBack != null) { callBack.onFailure(e); } } }); } /** * 删除备份数据 * * @param homeId 住宅ID * @param callBack * @return */ public Disposable databackDel(String homeId, IDefaultCallBack callBack) { String requestUrl = HDLLinkPMSdk.getUserRegionUrl() + HDLCloudUserApi.POST_BACKUP_DEL; JsonObject json = new JsonObject(); json.add("houseIds", HDLGsonUtils.toJsonArray(new String[]{homeId})); return HxHttp.builder() .raw(json.toString()) .url(requestUrl) .build() .post() .subscribeWith(new HDLResponse() { @Override public void onResponse(String url) { if (null != callBack) { callBack.onSuccess(); } } @Override public void onFailure(HDLException e) { HDLExceptionSubmitUtils.submit(requestUrl, json, e); if (callBack != null) { callBack.onFailure(e); } } }); } /** * 获取数据最新下载路径 * * @param homeId 住宅ID * @param callBack * @return */ public Disposable databackDownload(String homeId,String path, IDefaultCallBack callBack) { String requestUrl = HDLLinkPMSdk.getUserRegionUrl() + HDLCloudUserApi.POST_BACKUP_DOWNLOAD_URL; JsonObject json = new JsonObject(); json.addProperty("houseId", homeId); return HxHttp.builder() .raw(json.toString()) .url(requestUrl) .build() .post() .subscribeWith(new HDLResponse() { @Override public void onResponse(String url) { HxHttp.builder() .url(url) .build() .download() .subscribe(new DisposableSubscriber() { @Override public void onNext(ResponseBody responseBody) { if (HDLFileUtils.writeFile(path, responseBody.byteStream())) { if (null != callBack) { callBack.onSuccess(); } } else { if (callBack != null) { callBack.onFailure(new HDLException(HxException.ErrorCode.UNKNOWN, "Download Fail")); } } } @Override public void onError(Throwable t) { if (callBack != null) { callBack.onFailure(new HDLException(HxException.ErrorCode.UNKNOWN, t.getMessage())); } } @Override public void onComplete() { } }); } @Override public void onFailure(HDLException e) { HDLExceptionSubmitUtils.submit(requestUrl, json, e); if (callBack != null) { callBack.onFailure(e); } } }); } /** * 获取备份列表 * * @param userId 用户ID * @param pageNo 开始索引 * @param pageSize 页面大小 * @param callBack * @return */ public Disposable databackList(String userId,int pageNo, int pageSize, IResponseCallBack> callBack) { String requestUrl = HDLLinkPMSdk.getUserRegionUrl() + HDLCloudUserApi.POST_BACKUP_LIST; JsonObject json = new JsonObject(); json.addProperty("pageNo", pageNo); json.addProperty("pageSize", pageSize); json.addProperty("debugUserId", userId); return HxHttp.builder() .raw(json.toString()) .url(requestUrl) .build() .post() .subscribeWith(new HDLResponse>() { @Override public void onResponse(PageInfoListBean response) { if (callBack != null) { callBack.onSuccess(response); } } @Override public void onFailure(HDLException e) { HDLExceptionSubmitUtils.submit(requestUrl, json, e); if (callBack != null) { callBack.onFailure(e); } } }); } /** * 获取网关最新的三份备份数据 * * @param homeId 住宅Id * @param gatewayId 云端上网关gatewayId * @param callBack * @return */ public Disposable getGatewayBackupDataList(String homeId, String gatewayId, IResponseCallBack> callBack) { String requestUrl = HDLLinkPMSdk.getUserRegionUrl() + HDLCloudUserApi.POST_GATEWAY_BACKUP_LIST; JsonObject json = new JsonObject(); json.addProperty("spaceCode", homeId); json.addProperty("gatewayId", gatewayId); return HxHttp.builder() .raw(json.toString()) .url(requestUrl) .build() .post() .subscribeWith(new HDLResponse>() { @Override public void onResponse(List response) { if (callBack != null) { callBack.onSuccess(response); } } @Override public void onFailure(HDLException e) { HDLExceptionSubmitUtils.submit(requestUrl, json, e); if (callBack != null) { callBack.onFailure(e); } } }); } /** * 获取调试完成的备份文件回复 * * @param homeId 住宅Id * @param gatewayId 云端上网关gatewayId * @param callBack * @return */ public Disposable getDebugGatewayBackupDataList(String homeId, String gatewayId, IResponseCallBack callBack) { String requestUrl = HDLLinkPMSdk.getUserRegionUrl() + HDLCloudUserApi.POST_GATEWAY_BACKUP_DEBUGCOMPLETEBACKUPFILE; JsonObject json = new JsonObject(); json.addProperty("spaceCode", homeId); json.addProperty("gatewayId", gatewayId); return HxHttp.builder() .raw(json.toString()) .url(requestUrl) .build() .post() .subscribeWith(new HDLResponse() { @Override public void onResponse(GatewayBackupBean response) { if (callBack != null) { callBack.onSuccess(response); } } @Override public void onFailure(HDLException e) { HDLExceptionSubmitUtils.submit(requestUrl, json, e); if (callBack != null) { callBack.onFailure(e); } } }); } /** * 调试宝选择网关恢复的备份文件 * * @param homeId 住宅Id * @param gatewayId 云端上网关gatewayId * @param recordId 备份记录id * @param callBack 回调 * @return Disposable */ public Disposable getGatewayBackupRecover(String homeId, String gatewayId,long recordId, IResponseCallBack callBack) { String requestUrl = HDLLinkPMSdk.getUserRegionUrl() + HDLCloudUserApi.POST_GATEWAY_BACKUP_RECOVER; JsonObject json = new JsonObject(); json.addProperty("spaceCode", homeId); json.addProperty("gatewayId", gatewayId); json.addProperty("recordId", recordId); return HxHttp.builder() .raw(json.toString()) .url(requestUrl) .build() .post() .subscribeWith(new HDLResponse() { @Override public void onResponse(String response) { if (callBack != null) { callBack.onSuccess(response); } } @Override public void onFailure(HDLException e) { HDLExceptionSubmitUtils.submit(requestUrl, json, e); if (callBack != null) { callBack.onFailure(e); } } }); } /** * 网关替换 * * @param homeId 住宅Id * @param gatewayId 云端上网关gatewayId * @param newMac newMac 新网关mac * @param callBack 回调 * @return Disposable */ public Disposable getGatewayReplace(String homeId, String gatewayId,String newMac, IResponseCallBack callBack) { String requestUrl = HDLLinkPMSdk.getUserRegionUrl() + HDLCloudUserApi.POST_GATEWAY_REPLACE; JsonObject json = new JsonObject(); json.addProperty("homeId", homeId); json.addProperty("gatewayId", gatewayId);//旧网关id json.addProperty("newMac", newMac);//newMac 新网关mac return HxHttp.builder() .raw(json.toString()) .url(requestUrl) .build() .post() .subscribeWith(new HDLResponse() { @Override public void onResponse(String response) { if (callBack != null) { callBack.onSuccess(response); } } @Override public void onFailure(HDLException e) { HDLExceptionSubmitUtils.submit(requestUrl, json, e); if (callBack != null) { callBack.onFailure(e); } } }); } }