mac
2024-05-13 f2f8a06618f986ef4657687213334b6696ae6f1c
app/src/main/java/com/hdl/photovoltaic/other/HdlResidenceLogic.java
@@ -2,18 +2,22 @@
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;
import com.hdl.photovoltaic.listener.BaseSuccessFailureCallBeak;
import com.hdl.photovoltaic.listener.CloudCallBeak;
import com.hdl.photovoltaic.ui.bean.CloudInverterDeviceBean;
import com.hdl.photovoltaic.ui.bean.ContactBean;
import com.hdl.photovoltaic.ui.bean.DeviceBean;
import com.hdl.photovoltaic.ui.bean.HouseInfoBean;
import com.hdl.photovoltaic.ui.bean.HouseIdBean;
import com.hdl.photovoltaic.ui.bean.MessageBean;
@@ -26,6 +30,7 @@
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
@@ -71,24 +76,113 @@
        this.houseInfoList = houseInfoList;
    }
    public void clearHouseList() {
        if (houseInfoList == null) {
            return;
        }
        if (houseInfoList.size() > 0) {
            houseInfoList.clear();
        }
    }
    /**
     * 获取缓存住宅ID列表
     *
     * @return 住宅ID列表
     */
    public List<HouseIdBean> getHouseIdList() {
        return houseIdList;
        return mHouseIdList;
    }
    public void setHouseIdList(List<HouseIdBean> houseIdList) {
        if (houseIdList == null) {
            houseIdList = new ArrayList<>();
    public void setHouseIdList(List<HouseIdBean> list) {
        if (list == null || list.size() == 0) {
            return;
        }
        this.houseIdList = houseIdList;
        if (this.mHouseIdList.size() == 0) {
            this.mHouseIdList.addAll(list);
            return;
        }
        for (int i = 0; i < list.size(); i++) {
            this.setSingleHouseId(list.get(i));
        }
    }
    /**
     * 添加电站Id到列表里面
     *
     * @param houseIdBean -电站Id对象
     */
    public void setSingleHouseId(HouseIdBean houseIdBean) {
        try {
            if (houseIdBean == null) {
                return;
            }
            boolean if_boolean = false;
            for (int i = 0; i < mHouseIdList.size(); i++) {
                if (mHouseIdList.get(i).getHomeId().equals(houseIdBean.getHomeId())) {
                    //存在替换
                    mHouseIdList.remove(i);
                    mHouseIdList.add(i, houseIdBean);
                    if_boolean = true;
                    break;
                }
            }
            if (!if_boolean) {
                //没有添加
                this.mHouseIdList.add(houseIdBean);
            }
        } catch (Exception e) {
            String mes = e.getMessage();
            HdlLogLogic.print("--->" + mes);
        }
    }
    /**
     * 删除电站
     *
     * @param houseId 电站id
     */
    public void delHouseId(String houseId) {
        if (TextUtils.isEmpty(houseId)) {
            return;
        }
        for (int i = 0; i < mHouseIdList.size(); i++) {
            if (mHouseIdList.get(i).getHomeId().equals(houseId)) {
                mHouseIdList.remove(i);
                break;
            }
        }
    }
    /**
     * 移动电站位置
     *
     * @param houseId 电站id
     */
    public void moveHouseId(String houseId) {
        if (TextUtils.isEmpty(houseId)) {
            return;
        }
        int index = -1;
        for (int i = 0; i < mHouseIdList.size(); i++) {
            if (mHouseIdList.get(i).getHomeId().equals(houseId)) {
                index = i;
                break;
            }
        }
        if (index == -1) {
            return;
        }
        //index==0表示只有一个元素或者在首位,不需要移动位置
        if (index > 0) {
            Collections.swap(mHouseIdList, index - 1, index);
        }
    }
    //住宅ID列表
    private List<HouseIdBean> houseIdList = new ArrayList<>();
    private List<HouseIdBean> mHouseIdList = new ArrayList<>();
    //住宅详情列表
    private List<HouseInfoBean> houseInfoList = new ArrayList<>();
@@ -104,12 +198,12 @@
            @Override
            public void onSuccess(List<HouseIdBean> houseListBeanIDList) {
                if (houseListBeanIDList != null && houseListBeanIDList.size() > 0) {
                    houseIdList.clear();
                    houseIdList.addAll(houseListBeanIDList);
                    mHouseIdList.clear();
                    mHouseIdList.addAll(houseListBeanIDList);
                    //记录请求条数
                    AtomicInteger atomicInteger = new AtomicInteger(0);
                    for (int i = 0; i < houseIdList.size(); i++) {
                        HouseIdBean houseIdBean = houseIdList.get(i);
                    for (int i = 0; i < mHouseIdList.size(); i++) {
                        HouseIdBean houseIdBean = mHouseIdList.get(i);
                        //获取住宅详情列表
                        getResidenceInfo(houseIdBean.getHomeId(), new CloudCallBeak<HouseInfoBean>() {
                            @Override
@@ -124,7 +218,7 @@
                                    //添加到本地缓存
                                    addHouseToLocalMemory(houseInfoBean);
                                }
                                if (atomicInteger.get() == houseIdList.size()) {
                                if (atomicInteger.get() == mHouseIdList.size()) {
                                    //最后一条退出
                                    if (cloudCallBeak != null) {
                                        cloudCallBeak.onSuccess(true);
@@ -136,7 +230,7 @@
                            @Override
                            public void onFailure(HDLException e) {
                                atomicInteger.set(atomicInteger.get() + 1);
                                if (atomicInteger.get() == houseIdList.size()) {
                                if (atomicInteger.get() == mHouseIdList.size()) {
                                    //最后一条退出
                                    if (cloudCallBeak != null) {
                                        cloudCallBeak.onFailure(e);
@@ -249,6 +343,94 @@
    }
    /**
     * 获取住宅(电站)ID列表
     *
     * @param key                  发电功率排序(powerSort);
     *                             今日发电量排序(todayElectricitySort);
     *                             创建时间排序(createTimeSort);
     * @param keyValue             (descending:降序
     *                             ascending:升序),
     * @param installedCapacityMin 最小组串容量(装机容量)
     * @param installedCapacityMax 最大组串容量(装机容量)
     * @param gridType             并网状态 (全部 :"";FULL_GRID : 并网;OFFLINE :离网)
     * @param powerStationStatus   电站状态 (全部  :"";1 : 正常;2 : 离线; 3 : 待接入;4 : 故障)
     * @param pageNo               页码
     * @param pageSize             页数(一页多少数据)
     */
    public void getResidenceIdList(
            String key,
            String keyValue,
            String installedCapacityMin,
            String installedCapacityMax,
            String gridType,
            String powerStationStatus,
            long pageNo, long pageSize, CloudCallBeak<HouseBeanClass> cloudCallBeak) {
        String requestUrl = HttpApi.POST_PowerStation_List;
        JsonObject json = new JsonObject();
        if (!TextUtils.isEmpty(key) && !TextUtils.isEmpty(keyValue)) {
            json.addProperty(key, keyValue);//发电功率排序(descending:降序ascending:升序)
        }
        if (!TextUtils.isEmpty(installedCapacityMin)) {
            try {
                int value = Integer.parseInt(installedCapacityMin);//可能有异常,用户输入值超时int最大致导致的
                json.addProperty("installedCapacityMin", value);
            } catch (Exception ignored) {
            }
        }
        if (!TextUtils.isEmpty(installedCapacityMax)) {
            try {
                int value = Integer.parseInt(installedCapacityMax);//可能有异常,用户输入值超时int最大致导致的
                json.addProperty("installedCapacityMax", value);
            } catch (Exception ignored) {
            }
        }
        if (!TextUtils.isEmpty(gridType)) {
            try {
                json.addProperty("gridType", gridType);
            } catch (Exception ignored) {
            }
        }
        if (!TextUtils.isEmpty(powerStationStatus)) {
            try {
                int value = Integer.parseInt(powerStationStatus);
                json.addProperty("powerStationStatus", value);
            } catch (Exception ignored) {
            }
        }
//        json.addProperty("zoneType", "password");//区域
        json.addProperty("pageNo", pageNo);//页码
        json.addProperty("pageSize", pageSize);//页数
        HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() {
            @Override
            public void onSuccess(String jsonStr) {
                if (TextUtils.isEmpty(jsonStr)) {
                    if (cloudCallBeak != null) {
                        cloudCallBeak.onSuccess(new HouseBeanClass());
                    }
                    return;
                }
                Gson gson = new Gson();
                HouseBeanClass houseInfoBeanClass = gson.fromJson(jsonStr, HouseBeanClass.class);
                if (cloudCallBeak != null) {
                    cloudCallBeak.onSuccess(houseInfoBeanClass);
                }
            }
            @Override
            public void onFailure(HDLException exception) {
                if (cloudCallBeak != null) {
                    cloudCallBeak.onFailure(exception);
                }
            }
        });
    }
    /**
     * 获取住宅(电站)ID详情
     *
     * @param homeId        住宅id
@@ -317,6 +499,39 @@
        json.addProperty("electrovalence", houseInfoBean.getElectrovalence());
        json.addProperty("totalCost", houseInfoBean.getTotalCost());
        json.addProperty("zoneType", houseInfoBean.getZoneType());
        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        电站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) {
@@ -452,14 +667,12 @@
    /**
     * 用户自定义配置温度单位
     *
     * @param homeId        住宅id
     * @param tempType      温度单位类型 (C :摄氏度, F :华氏度)
     * @param cloudCallBeak -
     */
    public void setResidenceTemperatureUnit(String homeId, String tempType, CloudCallBeak<Boolean> cloudCallBeak) {
    public void setResidenceTemperatureUnit(String tempType, CloudCallBeak<Boolean> cloudCallBeak) {
        String requestUrl = HttpApi.POST_C_F_CustomConfig;
        JsonObject json = new JsonObject();
        json.addProperty("homeId", homeId);
        json.addProperty("tempType", tempType);
        HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() {
            @Override
@@ -480,18 +693,51 @@
    }
    /**
     * 联系我们
     *
     * @param cloudCallBeak -
     */
    public void getResidenceUtilContact(CloudCallBeak<ContactBean> cloudCallBeak) {
        String requestUrl = HttpApi.B_POST_GET_UTIL_CONTACT;
        JsonObject json = new JsonObject();
        HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() {
            @Override
            public void onSuccess(String jsonStr) {
                if (TextUtils.isEmpty(jsonStr)) {
                    if (cloudCallBeak != null) {
                        cloudCallBeak.onSuccess(new ContactBean());
                        return;
                    }
                }
                ContactBean contactBean = new Gson().fromJson(jsonStr, ContactBean.class);
                if (cloudCallBeak != null) {
                    cloudCallBeak.onSuccess(contactBean);
                }
            }
            @Override
            public void onFailure(HDLException e) {
                if (cloudCallBeak != null) {
                    cloudCallBeak.onFailure(e);
                }
            }
        });
    }
    /**
     * 获取用户自定义配置温度单位详情
     *
     * @param homeId        住宅id
     * @param cloudCallBeak -
     */
    public void getResidenceTemperatureUnit(String homeId, CloudCallBeak<String> cloudCallBeak) {
    public void getResidenceTemperatureUnit(CloudCallBeak<String> cloudCallBeak) {
        String requestUrl = HttpApi.POST_C_F_CustomConfigInfo;
        JsonObject json = new JsonObject();
        json.addProperty("homeId", homeId);
//        json.addProperty("homeId", homeId);
        List<MessageBean> list = new ArrayList<>();
        HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() {
            @Override
            public void onSuccess(String jsonStr) {
@@ -580,9 +826,9 @@
     * @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);
        for (int i = 0; i < mHouseIdList.size(); i++) {
            if (mHouseIdList.get(i).getHomeId().equals(homeId)) {
                return mHouseIdList.get(i);
            }
        }
        return null;
@@ -594,9 +840,9 @@
     * @param houseIdBean 住宅Id对象
     */
    public void switchHouse(HouseIdBean houseIdBean) {
        String oidHomeId = UserConfigManage.getInstance().getHomeId();
        if (houseIdBean.getHomeId().equals(oidHomeId)) {
            HdlLogLogic.print("点击同一个住宅");
        String homeId = UserConfigManage.getInstance().getHomeId();
        if (houseIdBean.getHomeId().equals(homeId)) {
            HdlLogLogic.print("点击同一个住宅--->" + homeId);
            return;
        }
        //订阅要全部取消
@@ -612,6 +858,7 @@
        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());
@@ -649,7 +896,42 @@
        });
    }
    static class HouseBeanClass {
    /**
     * 添加推送Token
     *
     * @param cloudCallBeak -
     */
    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);
                }
            }
        });
    }
    public static class HouseBeanClass {
        //总条数
        private long totalCount;