mac
2024-03-14 90374cac911932ac9cb9f832cf80476166e2e6df
app/src/main/java/com/hdl/photovoltaic/other/HdlResidenceLogic.java
@@ -2,12 +2,14 @@
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Build;
import android.text.TextUtils;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.hdl.linkpm.sdk.core.exception.HDLException;
import com.hdl.photovoltaic.bean.HttpResponsePack;
import com.hdl.photovoltaic.config.AppConfigManage;
import com.hdl.photovoltaic.config.UserConfigManage;
import com.hdl.photovoltaic.internet.HttpClient;
import com.hdl.photovoltaic.internet.api.HttpApi;
@@ -16,14 +18,17 @@
import com.hdl.photovoltaic.ui.bean.CloudInverterDeviceBean;
import com.hdl.photovoltaic.ui.bean.HouseInfoBean;
import com.hdl.photovoltaic.ui.bean.HouseIdBean;
import com.hdl.photovoltaic.ui.bean.MessageBean;
import com.hdl.sdk.link.common.exception.HDLLinkException;
import com.hdl.sdk.link.core.bean.gateway.GatewayBean;
import com.hdl.sdk.link.core.callback.GatewayCallBack;
import com.hdl.sdk.link.core.config.HDLLinkConfig;
import com.hdl.sdk.link.core.utils.mqtt.MqttRecvClient;
import com.hdl.sdk.link.gateway.HDLLinkLocalGateway;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
@@ -54,7 +59,7 @@
    }
    /**
     * 获取住宅列表
     * 获取缓存住宅列表
     *
     * @return 住宅列表
     */
@@ -70,7 +75,7 @@
    }
    /**
     * 获取住宅ID列表
     * 获取缓存住宅ID列表
     *
     * @return 住宅ID列表
     */
@@ -85,6 +90,48 @@
        this.houseIdList = houseIdList;
    }
    /**
     * 删除电站
     *
     * @param houseId 电站id
     */
    public void delHouseId(String houseId) {
        if (TextUtils.isEmpty(houseId)) {
            return;
        }
        for (int i = 0; i < houseIdList.size(); i++) {
            if (houseIdList.get(i).getHomeId().equals(houseId)) {
                houseIdList.remove(i);
                break;
            }
        }
    }
    /**
     * 移动电站位置
     *
     * @param houseId 电站id
     */
    public void moveHouseId(String houseId) {
        if (TextUtils.isEmpty(houseId)) {
            return;
        }
        int index = -1;
        for (int i = 0; i < houseIdList.size(); i++) {
            if (houseIdList.get(i).getHomeId().equals(houseId)) {
                index = i;
                break;
            }
        }
        if (index == -1) {
            return;
        }
        //index==0表示只有一个元素或者在首位,不需要移动位置
        if (index > 0) {
            Collections.swap(houseIdList, index - 1, index);
        }
    }
    //住宅ID列表
    private List<HouseIdBean> houseIdList = new ArrayList<>();
    //住宅详情列表
@@ -92,7 +139,7 @@
    /**
     * 获取住宅列表
     * 获取住宅列表,包括获取住宅id列表,住宅详情列表;
     *
     * @param cloudCallBeak -
     */
@@ -114,7 +161,7 @@
                            public void onSuccess(HouseInfoBean houseInfoBean) {
                                atomicInteger.set(atomicInteger.get() + 1);
                                if (houseInfoBean != null) {
                                    houseInfoBean.setHomeImage(houseIdBean.getHomeImage());//电站图片
                                    houseInfoBean.setPowerStationImage(houseIdBean.getPowerStationImage());//电站图片
                                    houseInfoBean.setInstalledCapacity(houseIdBean.getInstalledCapacity());//装机容量
                                    houseInfoBean.setPower(houseIdBean.getPower());//发电功率
                                    houseInfoBean.setTodayElectricity(houseIdBean.getTodayElectricity());//今天发电量
@@ -334,6 +381,39 @@
    }
    /**
     * 住宅(电站)移动位置
     *
     * @param homeId        电站id
     * @param frontHomeId   前面的电站id,如果不传表示排到第一位
     * @param cloudCallBeak -
     */
    public void moveResidence(String homeId, String frontHomeId, CloudCallBeak<Boolean> cloudCallBeak) {
        String requestUrl = HttpApi.POST_PowerStation_UserSort;
        JsonObject json = new JsonObject();
        json.addProperty("homeId", homeId);
        if (!TextUtils.isEmpty(frontHomeId)) {
            json.addProperty("frontHomeId", frontHomeId);
        }
//        json.addProperty("zoneType", "zoneType");
        HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() {
            @Override
            public void onSuccess(String str) {
                if (cloudCallBeak != null) {
                    cloudCallBeak.onSuccess(true);
                }
            }
            @Override
            public void onFailure(HDLException e) {
                if (cloudCallBeak != null) {
                    cloudCallBeak.onFailure(e);
                }
            }
        });
    }
    /**
     * 删除住宅(电站)
     *
     * @param homeId        -
@@ -446,6 +526,67 @@
    }
    /**
     * 用户自定义配置温度单位
     *
     * @param tempType      温度单位类型 (C :摄氏度, F :华氏度)
     * @param cloudCallBeak -
     */
    public void setResidenceTemperatureUnit(String tempType, CloudCallBeak<Boolean> cloudCallBeak) {
        String requestUrl = HttpApi.POST_C_F_CustomConfig;
        JsonObject json = new JsonObject();
        json.addProperty("tempType", tempType);
        HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() {
            @Override
            public void onSuccess(String str) {
                if (cloudCallBeak != null) {
                    cloudCallBeak.onSuccess(true);
                }
            }
            @Override
            public void onFailure(HDLException e) {
                if (cloudCallBeak != null) {
                    cloudCallBeak.onFailure(e);
                }
            }
        });
    }
    /**
     * 获取用户自定义配置温度单位详情
     *
     * @param cloudCallBeak -
     */
    public void getResidenceTemperatureUnit(CloudCallBeak<String> cloudCallBeak) {
        String requestUrl = HttpApi.POST_C_F_CustomConfigInfo;
        JsonObject json = new JsonObject();
//        json.addProperty("homeId", homeId);
        List<MessageBean> list = new ArrayList<>();
        HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() {
            @Override
            public void onSuccess(String jsonStr) {
                if (cloudCallBeak != null) {
                    cloudCallBeak.onSuccess(jsonStr);
                }
            }
            @Override
            public void onFailure(HDLException e) {
                if (cloudCallBeak != null) {
                    cloudCallBeak.onFailure(e);
                }
            }
        });
    }
    /**
     * 添加【住宅详情】到本地缓存
     *
@@ -508,49 +649,116 @@
    }
    /**
     * 获取住宅Id对象
     *
     * @param homeId 住宅id
     * @return 列表索引
     */
    public HouseIdBean getHouseId(String homeId) {
        for (int i = 0; i < houseIdList.size(); i++) {
            if (houseIdList.get(i).getHomeId().equals(homeId)) {
                return houseIdList.get(i);
            }
        }
        return null;
    }
    /**
     * 切换住宅
     *
     * @param houseIdBean 住宅Id对象
     */
    public void switchHouse(HouseIdBean houseIdBean) {
        String oidHomeId = UserConfigManage.getInstance().getHomeId();
//        if (houseIdBean.getHomeId().equals(oidHomeId)) {
//            return;
//        }
        //删除旧的住宅文件夹
        HdlFileLogic.getInstance().deleteDirectory(HdlFileLogic.getInstance().getCurrentHomeRootPath());
        String homeId = UserConfigManage.getInstance().getHomeId();
        if (houseIdBean.getHomeId().equals(homeId)) {
            HdlLogLogic.print("点击同一个住宅--->" + homeId);
            return;
        }
        //订阅要全部取消
        if (MqttRecvClient.getInstance() != null) {
            MqttRecvClient.getInstance().removeAllTopic();
        }
        //要清空之前tcp连接缓存
        //TODO: 10/10/23
        //删除旧的住宅文件夹 2023年11月03日14:28:19暂时去掉
//        HdlFileLogic.getInstance().deleteDirectory(HdlFileLogic.getInstance().getCurrentHomeRootPath());
        //重新设置住宅id
        UserConfigManage.getInstance().setHomeId(houseIdBean.getHomeId());
        UserConfigManage.getInstance().setHomeName(houseIdBean.getHomeName());
        //重新设置本地通讯秘钥
        UserConfigManage.getInstance().setLocalSecret(houseIdBean.getLocalSecret());
        UserConfigManage.getInstance().Save();
        //配置本地通信的信息
        HDLLinkConfig.getInstance().setHomeId(UserConfigManage.getInstance().getHomeId());
        HDLLinkConfig.getInstance().setLocalSecret(UserConfigManage.getInstance().getLocalSecret());
        //重新创建住宅文件夹
        HdlFileLogic.getInstance().createDirectory();
        //配置本地通信的信息
        initLocalLinkSdk();
        //进去住宅详情搜索一下逆变器列表,目的是建立通讯通道;
        HdlDeviceLogic.getInstance().searchCurrentHomeGateway(null);
    }
        HdlDeviceLogic.getInstance().searchGateway(new GatewayCallBack() {
    /**
     * 电站数据(统计)
     *
     * @param homeId 住宅id
     */
    public void getResidenceInverterAllInfo(String homeId, CloudCallBeak<Bitmap> cloudCallBeak) {
        String requestUrl = HttpApi.POST_inverter_allInfo;
        JsonObject json = new JsonObject();
        json.addProperty("homeId", homeId);
        HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() {
            @Override
            public void onSuccess(List<GatewayBean> gatewayBeanList) {
            public void onSuccess(String jsonStr) {
                if (cloudCallBeak != null) {
//                    cloudCallBeak.onSuccess(jsonStr);
                }
            }
            @Override
            public void onError(HDLLinkException e) {
            public void onFailure(HDLException e) {
                if (cloudCallBeak != null) {
                    cloudCallBeak.onFailure(e);
                }
            }
        });
    }
    /**
     * 配置本地通信的信息(tcp通信用到)
     * 添加推送Token
     *
     * @param cloudCallBeak -
     */
    private void initLocalLinkSdk() {
        HDLLinkConfig.getInstance().setHomeId(UserConfigManage.getInstance().getHomeId());
        HDLLinkConfig.getInstance().setLocalSecret(UserConfigManage.getInstance().getLocalSecret());
    public void pushAdd(CloudCallBeak<String> cloudCallBeak) {
        String requestUrl = HttpApi.POST_push_add;
        JsonObject json = new JsonObject();
        json.addProperty("deviceName", Build.MODEL);//设备名称
        json.addProperty("deviceType", "Android");//设备类型
        json.addProperty("produce", AppConfigManage.isIsOnlineServer());//表示是否是正式服务器
        json.addProperty("pushToken", UserConfigManage.getInstance().getRegistrationID());//App的推送Token,在极光为RegId
        json.addProperty("software", "PHOTOVOLTAIC");//软件来源
        HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() {
            @Override
            public void onSuccess(String jsonStr) {
                if (cloudCallBeak != null) {
                    cloudCallBeak.onSuccess(jsonStr);
                }
            }
            @Override
            public void onFailure(HDLException e) {
                if (cloudCallBeak != null) {
                    cloudCallBeak.onFailure(e);
                }
            }
        });
    }
    static class HouseBeanClass {