package com.hdl.linkpm.sdk.home.controller; import android.text.TextUtils; import com.google.gson.JsonObject; import com.hdl.hdlhttp.HxHttp; import com.hdl.linkpm.sdk.core.api.HDLCloudHomeApi; 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.home.bean.GatewayInfoBean; import com.hdl.linkpm.sdk.home.bean.GatewayBindBean; import com.hdl.linkpm.sdk.home.bean.HomeInfoBean; import com.hdl.linkpm.sdk.home.bean.logic.LogicInfoBean; import com.hdl.linkpm.sdk.home.bean.RoomInfoBean; import com.hdl.linkpm.sdk.home.bean.RoomInfoListBean; import com.hdl.linkpm.sdk.home.bean.logic.SecurityInfoBean; import com.hdl.linkpm.sdk.home.callback.IAddRoomListCallBack; import com.hdl.linkpm.sdk.home.callback.IRoomListCallBack; import com.hdl.linkpm.sdk.utils.HDLExceptionSubmitUtils; import com.hdl.linkpm.sdk.utils.HDLGsonUtils; import java.util.List; import io.reactivex.rxjava3.disposables.Disposable; /** * Created by jlchen on 12/3/21. * 住宅相关的网络请求 */ public class HDLPMHomeController { /** * instance */ private volatile static HDLPMHomeController instance; /** * getInstance * * @return HDLHomeController */ public static synchronized HDLPMHomeController getInstance() { if (instance == null) { synchronized (HDLPMHomeController.class) { if (instance == null) { instance = new HDLPMHomeController(); } } } return instance; } /** * house表的数据没有同步到home表、数据存在两张表里面,需要客户端调接口同步 * * @param homeInfoBean 住宅Info * @param callBack * @return */ public Disposable synchHouseToHome(HomeInfoBean homeInfoBean, IDefaultCallBack callBack) { String requestUrl = HDLCloudHomeApi.getRequestUrl(HDLCloudHomeApi.POST_PROGRAM_HOME_ADD); return HxHttp.builder() .url(requestUrl) .raw(HDLGsonUtils.toJson(homeInfoBean)) .build() .post() .subscribeWith(new HDLResponse() { @Override public void onResponse(String response) { if (callBack != null) { callBack.onSuccess(); } } @Override public void onFailure(HDLException e) { HDLExceptionSubmitUtils.submit(requestUrl,homeInfoBean,e); if (callBack != null) { callBack.onFailure(e); } } }); } /***************2.房间管理***************/ /** * 获取住宅下房间表 * * @param homeId 住宅ID * @param roomType 房屋类型 FLOOR ROOM、为空的时候查全部 * @param pageNo 哪一页 * @param pageSize 页面大小 * @param callBack * @return */ public Disposable getRoomList(String homeId, String roomType, int pageNo, int pageSize, IRoomListCallBack callBack) { String requestUrl = HDLCloudHomeApi.getRequestUrl(HDLCloudHomeApi.POST_ROOM_GET_LIST); JsonObject json = new JsonObject(); json.addProperty("homeId", homeId); if (!TextUtils.isEmpty(roomType)) { json.addProperty("roomType", roomType); } json.addProperty("pageNo", pageNo); json.addProperty("pageSize", pageSize); return HxHttp.builder() .url(requestUrl) .raw(json.toString()) .build() .post() .subscribeWith(new HDLResponse() { @Override public void onResponse(RoomInfoListBean 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 roomList 最新的房间列表 * @param callBack * @return */ public Disposable fullAddOrEditRoomList(String homeId, List roomList, IAddRoomListCallBack callBack) { String requestUrl = HDLCloudHomeApi.getRequestUrl(HDLCloudHomeApi.POST_ROOM_FULL_ADD_OR_EDIT); JsonObject json = new JsonObject(); json.addProperty("homeId", homeId); json.add("rooms", HDLGsonUtils.toJsonArray(roomList)); return HxHttp.builder() .url(requestUrl) .raw(json.toString()) .build() .post() .subscribeWith(new HDLResponse() { @Override public void onResponse(Boolean response) { if (callBack != null) { callBack.onSuccess(response); } } @Override public void onFailure(HDLException e) { HDLExceptionSubmitUtils.submit(requestUrl,json,e); if (callBack != null) { callBack.onFailure(e); } } }); } /***************3.网关管理***************/ /** * 绑定网关到住宅 * * @param bean 网关信息 * @param callBack * @return */ public Disposable bindGateway(GatewayBindBean bean, IResponseCallBack callBack) { String requestUrl = HDLCloudHomeApi.getRequestUrl(HDLCloudHomeApi.POST_GATEWAY_BIND); return HxHttp.builder() .url(requestUrl) .raw(HDLGsonUtils.toJson(bean)) .build() .post() .subscribeWith(new HDLResponse() { @Override public void onResponse(GatewayInfoBean response) { if (callBack != null) { callBack.onSuccess(response); } } @Override public void onFailure(HDLException e) { HDLExceptionSubmitUtils.submit(requestUrl,bean,e); if (callBack != null) { callBack.onFailure(e); } } }); } /** * 强制绑定网关 * 如果绑定网关返回10510 已经被绑定了,则调这个接口强制换绑 * * @param homeId 住宅ID * @param mac 网关MAC * @param callBack * @return */ public Disposable forceBindGateway(String homeId, String mac, IResponseCallBack callBack) { JsonObject json = new JsonObject(); json.addProperty("homeId", homeId); json.addProperty("mac", mac); String requestUrl = HDLCloudHomeApi.getRequestUrl(HDLCloudHomeApi.POST_GATEWAY_FORCE_BIND); return HxHttp.builder() .url(requestUrl) .raw(json.toString()) .build() .post() .subscribeWith(new HDLResponse() { @Override public void onResponse(GatewayInfoBean 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 unbindGateway(String homeId, String gatewayId, IResponseCallBack callBack) { JsonObject json = new JsonObject(); json.addProperty("homeId", homeId); json.addProperty("gatewayId", gatewayId); String requestUrl = HDLCloudHomeApi.getRequestUrl(HDLCloudHomeApi.POST_GATEWAY_UNBIND); return HxHttp.builder() .url(requestUrl) .raw(json.toString()) .build() .post() .subscribeWith(new HDLResponse() { @Override public void onResponse(Boolean 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 mac 网关mac地址 * @param callBack * @return */ public Disposable getGatewayHomeInfo(String mac, IResponseCallBack callBack) { JsonObject json = new JsonObject(); json.addProperty("mac", mac); String requestUrl = HDLCloudHomeApi.getRequestUrl(HDLCloudHomeApi.POST_GATEWAY_HOMEINFO); return HxHttp.builder() .url(requestUrl) .raw(json.toString()) .build() .post() .subscribeWith(new HDLResponse() { @Override public void onResponse(GatewayInfoBean 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 oid 设备oid * @param callBack * @return */ public Disposable unbindFalseGateway(String homeId, String oid,IResponseCallBack callBack) { JsonObject json = new JsonObject(); json.addProperty("homeId", homeId); json.addProperty("oid", oid); String requestUrl = HDLCloudHomeApi.getRequestUrl(HDLCloudHomeApi.POST_DEVICE_OID_REMOVE); return HxHttp.builder() .url(requestUrl) .raw(json.toString()) .build() .post() .subscribeWith(new HDLResponse() { @Override public void onResponse(Boolean 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 callBack * @return */ public Disposable getGatewayList(String homeId, IResponseCallBack> callBack) { JsonObject json = new JsonObject(); json.addProperty("homeId", homeId); String requestUrl = HDLCloudHomeApi.getRequestUrl(HDLCloudHomeApi.POST_GATEWAY_GET_LIST); return HxHttp.builder() .url(requestUrl) .raw(json.toString()) .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 旧网关id * @param newMac 新网关mac * @param callBack * @return */ public Disposable replaceGateway(String homeId, String gatewayId, String newMac, IDefaultCallBack callBack) { JsonObject json = new JsonObject(); json.addProperty("homeId", homeId); json.addProperty("gatewayId", gatewayId); json.addProperty("newMac", newMac); String requestUrl = HDLCloudHomeApi.getRequestUrl(HDLCloudHomeApi.POST_GATEWAY_REPLACE); return HxHttp.builder() .url(requestUrl) .raw(json.toString()) .build() .post() .subscribeWith(new HDLResponse>() { @Override public void onResponse(List response) { if (callBack != null) { callBack.onSuccess(); } } @Override public void onFailure(HDLException e) { HDLExceptionSubmitUtils.submit(requestUrl,json,e); if (callBack != null) { callBack.onFailure(e); } } }); } /***************6.自动化增删改查管理***************/ /** * 全量更新同步自动化、存在不变,不存在新增 * * @param homeId 住宅id * @param logics 自动化列表 * @param callBack * @return */ public Disposable fullAddLogicList(String homeId, List logics, IDefaultCallBack callBack) { JsonObject json = new JsonObject(); json.addProperty("homeId", homeId); json.add("logics", HDLGsonUtils.toJsonArray(logics)); String requestUrl = HDLCloudHomeApi.getRequestUrl(HDLCloudHomeApi.POST_LOGIC_FULL_SYNC); return HxHttp.builder() .url(requestUrl) .raw(json.toString()) .build() .post() .subscribeWith(new HDLResponse() { @Override public void onResponse(String response) { if (callBack != null) { callBack.onSuccess(); } } @Override public void onFailure(HDLException e) { HDLExceptionSubmitUtils.submit(requestUrl,json,e); if (callBack != null) { callBack.onFailure(e); } } }); } /***************7.安防化增删改查管理***************/ /** * 全量更新同步安防、存在不变,不存在新增 * * @param homeId 住宅id * @param gatewayId 网关ID * @param securitys 安防列表 * @param callBack * @return */ public Disposable fullAddSecurityList(String homeId, String gatewayId, List securitys, IDefaultCallBack callBack) { JsonObject json = new JsonObject(); json.addProperty("homeId", homeId); json.addProperty("gatewayId", gatewayId); json.add("securitys", HDLGsonUtils.toJsonArray(securitys)); String requestUrl = HDLCloudHomeApi.getRequestUrl(HDLCloudHomeApi.POST_SECURITY_FULL_SYNC); return HxHttp.builder() .url(requestUrl) .raw(json.toString()) .build() .post() .subscribeWith(new HDLResponse() { @Override public void onResponse(String response) { if (callBack != null) { callBack.onSuccess(); } } @Override public void onFailure(HDLException e) { HDLExceptionSubmitUtils.submit(requestUrl,json,e); if (callBack != null) { callBack.onFailure(e); } } }); } }