hxb
2024-10-24 d723fee177238df0dbab80eb788876ebd154927d
HDLLinkPMSdk/src/main/java/com/hdl/linkpm/sdk/home/controller/HDLPMHomeController.java
New file
@@ -0,0 +1,493 @@
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<String>() {
                    @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<RoomInfoListBean>() {
                    @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<RoomInfoBean> 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<Boolean>() {
                    @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<GatewayInfoBean> callBack) {
        String requestUrl = HDLCloudHomeApi.getRequestUrl(HDLCloudHomeApi.POST_GATEWAY_BIND);
        return HxHttp.builder()
                .url(requestUrl)
                .raw(HDLGsonUtils.toJson(bean))
                .build()
                .post()
                .subscribeWith(new HDLResponse<GatewayInfoBean>() {
                    @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<GatewayInfoBean> 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<GatewayInfoBean>() {
                    @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<Boolean> 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<Boolean>() {
                    @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<GatewayInfoBean> 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<GatewayInfoBean>() {
                    @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<Boolean> 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<Boolean>() {
                    @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<List<GatewayInfoBean>> 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<List<GatewayInfoBean>>() {
                    @Override
                    public void onResponse(List<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 旧网关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<List<String>>() {
                    @Override
                    public void onResponse(List<String> 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<LogicInfoBean> 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<String>() {
                    @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<SecurityInfoBean> 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<String>() {
                    @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);
                        }
                    }
                });
    }
}