mac
2024-05-06 a4e8dee87338beef6f45f053d8fa9c36dc74ed09
2024年05月06日19:53:11

备份代码
9个文件已添加
8个文件已修改
1259 ■■■■ 已修改文件
app/src/main/java/com/hdl/photovoltaic/bean/PageNumberObject.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/enums/GridType.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/enums/PowerStationStatus.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/enums/SortType.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/enums/SortValue.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/internet/api/HttpApi.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/other/HdlResidenceLogic.java 142 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/adapter/DeviceInfoAdapter.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/adapter/HouseInfoAdapter.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/bean/CloudInverterDeviceBean.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/bean/DeviceBean.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/powerstation/HouseListFragment.java 440 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/device_image.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_my_power_station.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/item_device_details.xml 210 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/item_plant_details.xml 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/bean/PageNumberObject.java
New file
@@ -0,0 +1,61 @@
package com.hdl.photovoltaic.bean;
import com.hdl.photovoltaic.ui.bean.MessageBean;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public class PageNumberObject<T> implements Serializable {
    //总条数
    private long totalCount;
    //总页数
    private long totalPage;
    //当前页
    private long pageNo;
    //页数
    private long pageSize;
    //消息列表
    private List<T> list;
    public long getTotalCount() {
        return totalCount;
    }
    public void setTotalCount(long totalCount) {
        this.totalCount = totalCount;
    }
    public long getTotalPage() {
        return totalPage;
    }
    public void setTotalPage(long totalPage) {
        this.totalPage = totalPage;
    }
    public long getPageNo() {
        return pageNo;
    }
    public void setPageNo(long pageNo) {
        this.pageNo = pageNo;
    }
    public long getPageSize() {
        return pageSize;
    }
    public void setPageSize(long pageSize) {
        this.pageSize = pageSize;
    }
    public List<T> getList() {
        return list == null ? new ArrayList<>() : list;
    }
    public void setList(List<T> list) {
        this.list = list;
    }
}
app/src/main/java/com/hdl/photovoltaic/enums/GridType.java
New file
@@ -0,0 +1,8 @@
package com.hdl.photovoltaic.enums;
public @interface GridType {
    String All = "";//全部
    String FULL_GRID = "FULL_GRID";//并网
    String OFFLINE = "OFFLINE";//离网
}
app/src/main/java/com/hdl/photovoltaic/enums/PowerStationStatus.java
New file
@@ -0,0 +1,10 @@
package com.hdl.photovoltaic.enums;
public @interface PowerStationStatus {
    String All = "";//全部
    String normal = "1";//正常(运行)
    String off = "2";//离线
    String connecting = "3";//连接中(待接入)
    String malfunction = "4";//故障
    String off_malfunction = "4";//离线有故障
}
app/src/main/java/com/hdl/photovoltaic/enums/SortType.java
New file
@@ -0,0 +1,45 @@
package com.hdl.photovoltaic.enums;
/**
 * 排序类型
 */
public @interface SortType {
    String homeName = "homeName";//
    /**
     * 电站名称排序
     */
    String homeNameSort = "homeNameSort";//电站名称排序
    /**
     * 发电功率排序
     */
    String powerSort = "powerSort";//发电功率排序
    /**
     * 今日发电量排序
     */
    String todayElectricitySort = "todayElectricitySort";//今日发电量排序
    /**
     * 当月发电量
     */
    String monthElectricitySort = "monthElectricitySort";//当月发电量
    /**
     * 创建时间排序
     */
    String createTimeSort = "createTimeSort";//创建时间排序
    /**
     * installedCapacityMin    最小组串容量(装机容量)
     */
    String installedCapacityMin = "installedCapacityMin";//installedCapacityMin    最小组串容量(装机容量)
    /**
     * 大组串容量(装机容量)
     */
    String installedCapacityMax = "installedCapacityMax";//大组串容量(装机容量)
    /**
     * 并网状态
     */
    String gridType = "gridType";//并网状态
    /**
     * 电站状态
     */
    String powerStationStatus = "powerStationStatus";//电站状态
}
app/src/main/java/com/hdl/photovoltaic/enums/SortValue.java
New file
@@ -0,0 +1,7 @@
package com.hdl.photovoltaic.enums;
public @interface SortValue {
    String all = "";//全部
    String descending = "descending";//降序
    String ascending = "ascending";//升序
}
app/src/main/java/com/hdl/photovoltaic/internet/api/HttpApi.java
@@ -121,9 +121,17 @@
    public static final String B_POST_GET_USERINFO = "/basis-footstone/mgmt/user/oauth/getUserInfo";
    //退出登录
    public static final String POST_GET_IMAGE_LOGOUT = "/basis-footstone/mgmt/user/oauth/logout";
    //endregion
    //获取设备列表(安装商)
    public static final String POST_deviceList = "/home-wisdom/app/powerStation/deviceList";
    //电站状态概览(安装商)
    public static final String POST_statusOverview = "/home-wisdom/app/powerStation/statusOverview";
    //endregion
app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java
@@ -9,6 +9,7 @@
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
import com.hdl.linkpm.sdk.core.exception.HDLException;
import com.hdl.photovoltaic.bean.PageNumberObject;
import com.hdl.photovoltaic.config.AppConfigManage;
import com.hdl.photovoltaic.config.UserConfigManage;
import com.hdl.photovoltaic.internet.HttpClient;
@@ -19,8 +20,11 @@
import com.hdl.photovoltaic.listener.LinkCallBack;
import com.hdl.photovoltaic.ui.bean.CloudInverterChildDeviceBean;
import com.hdl.photovoltaic.ui.bean.CloudInverterDeviceBean;
import com.hdl.photovoltaic.ui.bean.DeviceBean;
import com.hdl.photovoltaic.ui.bean.DeviceRemoteInfo;
import com.hdl.photovoltaic.ui.bean.DeviceTimeBean;
import com.hdl.photovoltaic.ui.bean.HouseInfoBean;
import com.hdl.photovoltaic.ui.bean.MessageBean;
import com.hdl.photovoltaic.ui.bean.OidBean;
import com.hdl.sdk.link.HDLLinkLocalSdk;
import com.hdl.sdk.link.common.config.TopicConstant;
@@ -71,7 +75,23 @@
    public static final String kWh = "kW.h";
    public static final String kW = "kW";
    private List<DeviceBean> mListDevice = new ArrayList<>();
    public void clearDeviceList() {
        if (mListDevice == null) {
            return;
        }
        if (mListDevice.size() > 0) {
            mListDevice.clear();
        }
    }
    public List<DeviceBean> getDeviceList() {
        if (mListDevice == null) {
            return new ArrayList<>();
        }
        return mListDevice;
    }
    /**
     * 获取当前住宅的逆变器列表(包括从的逆变器)
@@ -150,6 +170,98 @@
        }
    }
    /**
     * 获取设备列表(安装商)
     *
     * @param searchTxt 搜索内容
     * @param pageNo    页码
     * @param pageSize  页数
     */
    public void getPowerStationDeviceList(String searchTxt, long pageNo, long pageSize, CloudCallBeak<PageNumberObject<DeviceBean>> cloudCallBeak) {
        String requestUrl = HttpApi.POST_deviceList;
        JsonObject json = new JsonObject();
        if (!TextUtils.isEmpty(searchTxt)) {
            json.addProperty("searchTxt", searchTxt);
        }
        json.addProperty("pageNo", pageNo);//页码
        json.addProperty("pageSize", pageSize);//页数
//        json.addProperty("zoneType", zoneType);//区域
        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 PageNumberObject<>());
                    }
                }
                Gson gson = new Gson();
                Type type = new TypeToken<PageNumberObject<DeviceBean>>() {
                }.getType();
                PageNumberObject<DeviceBean> pageNumberObject = gson.fromJson(jsonStr, type);
                if (cloudCallBeak != null) {
                    cloudCallBeak.onSuccess(pageNumberObject);
                }
            }
            @Override
            public void onFailure(HDLException e) {
                if (cloudCallBeak != null) {
                    cloudCallBeak.onFailure(e);
                }
            }
        });
    }
    /**
     * 添加【设备列表】到本地缓存
     *
     * @param list -设备列表
     */
    public void setListDevice(List<DeviceBean> list) {
        try {
            if (list == null || list.size() == 0) {
                return;
            }
            if (this.mListDevice.size() == 0) {
                this.mListDevice.addAll(list);
                return;
            }
            for (int i = 0; i < list.size(); i++) {
                this.setSingleDevice(list.get(i));
            }
        } catch (Exception ignored) {
        }
    }
    /**
     * 添加设备到列表里面
     *
     * @param deviceBean -设备对象
     */
    public void setSingleDevice(DeviceBean deviceBean) {
        try {
            if (deviceBean == null) {
                return;
            }
            boolean if_boolean = false;
            for (int i = 0; i < mListDevice.size(); i++) {
                if (mListDevice.get(i).getOsn().equals(deviceBean.getOsn())) {
                    //存在替换
                    mListDevice.remove(i);
                    mListDevice.add(i, deviceBean);
                    if_boolean = true;
                    break;
                }
            }
            if (!if_boolean) {
                //没有添加
                this.mListDevice.add(deviceBean);
            }
        } catch (Exception e) {
            String mes = e.getMessage();
            HdlLogLogic.print("--->" + mes);
        }
    }
    /**
     * 逆变器上传数据到云端(包括:sid,oid)
app/src/main/java/com/hdl/photovoltaic/other/HdlResidenceLogic.java
@@ -16,6 +16,7 @@
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.DeviceBean;
import com.hdl.photovoltaic.ui.bean.HouseInfoBean;
import com.hdl.photovoltaic.ui.bean.HouseIdBean;
import com.hdl.photovoltaic.ui.bean.MessageBean;
@@ -74,21 +75,68 @@
        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);
        }
    }
    /**
     * 删除电站
@@ -99,9 +147,9 @@
        if (TextUtils.isEmpty(houseId)) {
            return;
        }
        for (int i = 0; i < houseIdList.size(); i++) {
            if (houseIdList.get(i).getHomeId().equals(houseId)) {
                houseIdList.remove(i);
        for (int i = 0; i < mHouseIdList.size(); i++) {
            if (mHouseIdList.get(i).getHomeId().equals(houseId)) {
                mHouseIdList.remove(i);
                break;
            }
        }
@@ -117,8 +165,8 @@
            return;
        }
        int index = -1;
        for (int i = 0; i < houseIdList.size(); i++) {
            if (houseIdList.get(i).getHomeId().equals(houseId)) {
        for (int i = 0; i < mHouseIdList.size(); i++) {
            if (mHouseIdList.get(i).getHomeId().equals(houseId)) {
                index = i;
                break;
            }
@@ -128,12 +176,12 @@
        }
        //index==0表示只有一个元素或者在首位,不需要移动位置
        if (index > 0) {
            Collections.swap(houseIdList, index - 1, index);
            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<>();
@@ -149,12 +197,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
@@ -169,7 +217,7 @@
                                    //添加到本地缓存
                                    addHouseToLocalMemory(houseInfoBean);
                                }
                                if (atomicInteger.get() == houseIdList.size()) {
                                if (atomicInteger.get() == mHouseIdList.size()) {
                                    //最后一条退出
                                    if (cloudCallBeak != null) {
                                        cloudCallBeak.onSuccess(true);
@@ -181,7 +229,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);
@@ -279,6 +327,56 @@
                        }
                    });
                }
            }
            @Override
            public void onFailure(HDLException exception) {
                if (cloudCallBeak != null) {
                    cloudCallBeak.onFailure(exception);
                }
            }
        });
    }
    /**
     * 获取住宅(电站)ID列表
     *
     * @param key      发电功率排序(powerSort);
     *                 今日发电量排序(todayElectricitySort);
     *                 创建时间排序(createTimeSort);
     * @param keyValue (descending:降序
     *                 ascending:升序),
     * @param pageNo   页码
     * @param pageSize 页数(一页多少数据)
     */
    public void getResidenceIdList(String key, String keyValue, 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:升序)
        }
//        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);
                }
            }
@@ -655,9 +753,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;
@@ -760,7 +858,7 @@
    }
    static class HouseBeanClass {
    public static class HouseBeanClass {
        //总条数
        private long totalCount;
app/src/main/java/com/hdl/photovoltaic/ui/adapter/DeviceInfoAdapter.java
New file
@@ -0,0 +1,112 @@
package com.hdl.photovoltaic.ui.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.hdl.photovoltaic.R;
import com.hdl.photovoltaic.ui.bean.DeviceBean;
import com.hdl.photovoltaic.widget.SwipeLayout;
import java.util.ArrayList;
import java.util.List;
public class DeviceInfoAdapter extends RecyclerView.Adapter<DeviceInfoAdapter.MyViewHolder> {
    List<DeviceBean> mList;
    Context mContext;
    OnClickListener mOnclickListener;
    public DeviceInfoAdapter(Context context) {
        this.mContext = context;
    }
    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View contentItem = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_device_details, parent, false);
        return new MyViewHolder(contentItem);
    }
    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        DeviceBean deviceBean = this.mList.get(position);
        holder.itemView.setTag(position);
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    if (mOnclickListener != null) {
                        mOnclickListener.onClick((int) holder.item_parent_rl.getTag(), deviceBean);
                    }
                } catch (Exception ignored) {
                }
            }
        });
    }
    @Override
    public int getItemCount() {
        return this.mList == null ? 0 : this.mList.size();
    }
    public void setOnclickListener(OnClickListener onClickListener) {
        this.mOnclickListener = onClickListener;
    }
    public void setList(List<DeviceBean> newData) {
        if (this.mList == null) {
            this.mList = new ArrayList<>();
        } else {
            this.mList.clear();
        }
        this.mList.addAll(newData);
        notifyDataSetChanged();
    }
    /**
     * 一行布局容器
     */
    static class MyViewHolder extends RecyclerView.ViewHolder {
        public ImageView homeIconIv;//住宅图片
        public TextView homeNameTv;//住宅名称
        public TextView capacityTv;//装机容量
        public TextView powerTv;//发电功率
        public TextView stateTv;//电站状态(连接中,运行,离线,故障);
        public RelativeLayout item_parent_rl;//条目父容器
        public ImageView move_home_iv;//移动电站位置
        public ImageView del_home_iv;//删除电站
        public SwipeLayout item_parent_swipeLayout;//父容器
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            homeIconIv = itemView.findViewById(R.id.device_details_image_iv);
            homeNameTv = itemView.findViewById(R.id.device_details_name_tv);
            capacityTv = itemView.findViewById(R.id.device_details_sn_tv);
            powerTv = itemView.findViewById(R.id.power_type_tv);
            stateTv = itemView.findViewById(R.id.fragment_house_list_line_state_tv);
            item_parent_rl = itemView.findViewById(R.id.item_parent_rl);
            move_home_iv = itemView.findViewById(R.id.move_home_iv);
            del_home_iv = itemView.findViewById(R.id.del_home_iv);
            item_parent_swipeLayout = itemView.findViewById(R.id.item_parent_swipeLayout);
        }
    }
    public interface OnClickListener {
        void onClick(int position, DeviceBean deviceBean);
    }
}
app/src/main/java/com/hdl/photovoltaic/ui/adapter/HouseInfoAdapter.java
@@ -24,6 +24,7 @@
import java.util.ArrayList;
import java.util.List;
public class HouseInfoAdapter extends RecyclerView.Adapter<HouseInfoAdapter.MyViewHolder> {
    private List<HouseIdBean> mList;
@@ -202,9 +203,9 @@
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            homeIconIv = itemView.findViewById(R.id.plant_details_image_iv);
            homeNameTv = itemView.findViewById(R.id.plant_details_name_tv);
            capacityTv = itemView.findViewById(R.id.plant_details_capacity_tv);
            homeIconIv = itemView.findViewById(R.id.device_details_image_iv);
            homeNameTv = itemView.findViewById(R.id.device_details_name_tv);
            capacityTv = itemView.findViewById(R.id.device_details_sn_tv);
            powerTv = itemView.findViewById(R.id.power_type_tv);
            stateTv = itemView.findViewById(R.id.fragment_house_list_line_state_tv);
            item_parent_rl = itemView.findViewById(R.id.item_parent_rl);
app/src/main/java/com/hdl/photovoltaic/ui/bean/CloudInverterDeviceBean.java
@@ -32,7 +32,7 @@
    private String inv;//inv状态
    private int deviceStatus;//1:待机,2:连接中,3:故障,4:运行,5:离线
    private String addresses;
    private String addresses;//子网号/设备号
    private List<DeviceAttributeBean> status;
    private String hwVersion;//软件版本号
app/src/main/java/com/hdl/photovoltaic/ui/bean/DeviceBean.java
New file
@@ -0,0 +1,78 @@
package com.hdl.photovoltaic.ui.bean;
import android.text.TextUtils;
/**
 * 设备(账号云端上所有设备列表)实体对象
 */
public class DeviceBean extends CloudInverterDeviceBean {
    private String homeId;
    private String homeName;
    private String deviceType;//设备类型(INV逆变器,BMS控制盒,BATTERY电池单元)
    private String outputActivePower;//逆变器输出有功功率
    private String address;//详细地址
    private HouseInfoBean.Location location;//电站地址
    public String getHomeId() {
        return TextUtils.isEmpty(homeId) ? "" : homeId;
    }
    public void setHomeId(String homeId) {
        this.homeId = homeId;
    }
    public String getHomeName() {
        return TextUtils.isEmpty(homeName) ? "" : homeName;
    }
    public void setHomeName(String homeName) {
        this.homeName = homeName;
    }
    public String getOutputActivePower() {
        return TextUtils.isEmpty(outputActivePower) ? "" : outputActivePower;
    }
    public void setOutputActivePower(String outputActivePower) {
        this.outputActivePower = outputActivePower;
    }
    public String getAddress() {
        return TextUtils.isEmpty(address) ? "" : address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public HouseInfoBean.Location getLocation() {
        return location;
    }
    public void setLocation(HouseInfoBean.Location location) {
        this.location = location;
    }
    public String getDeviceType() {
        return TextUtils.isEmpty(deviceType) ? "" : deviceType;
    }
    public void setDeviceType(String deviceType) {
        this.deviceType = deviceType;
    }
    /**
     * 拼住宅地址
     *
     * @return 住宅地址
     */
    public String getHomeAddress() {
        if (this.location == null) {
            return this.address;
        }
        return this.location.getNationName() + this.location.getProvinceName() + this.location.getCityName() + this.address;
    }
}
app/src/main/java/com/hdl/photovoltaic/ui/powerstation/HouseListFragment.java
@@ -1,25 +1,27 @@
package com.hdl.photovoltaic.ui.powerstation;
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.camera2.CameraManager;
import android.os.Bundle;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import com.google.gson.Gson;
import com.hdl.linkpm.sdk.core.exception.HDLException;
import com.hdl.photovoltaic.R;
import com.hdl.photovoltaic.bean.PageNumberObject;
import com.hdl.photovoltaic.config.ConstantManage;
import com.hdl.photovoltaic.config.UserConfigManage;
import com.hdl.photovoltaic.databinding.FragmentHouseListBinding;
import com.hdl.photovoltaic.base.CustomBaseFragment;
import com.hdl.photovoltaic.enums.HomepageTitleTabSwitch;
import com.hdl.photovoltaic.enums.ShowErrorMode;
import com.hdl.photovoltaic.enums.SortType;
import com.hdl.photovoltaic.enums.SortValue;
import com.hdl.photovoltaic.listener.CloudCallBeak;
import com.hdl.photovoltaic.listener.LinkCallBack;
import com.hdl.photovoltaic.other.HdlCommonLogic;
@@ -28,7 +30,9 @@
import com.hdl.photovoltaic.other.HdlResidenceLogic;
import com.hdl.photovoltaic.other.HdlThreadLogic;
import com.hdl.photovoltaic.other.HdlUniLogic;
import com.hdl.photovoltaic.ui.adapter.DeviceInfoAdapter;
import com.hdl.photovoltaic.ui.adapter.HouseInfoAdapter;
import com.hdl.photovoltaic.ui.bean.DeviceBean;
import com.hdl.photovoltaic.ui.bean.HouseIdBean;
import com.hdl.photovoltaic.uni.HDLUniMP;
import com.hdl.photovoltaic.utils.PermissionUtils;
@@ -42,14 +46,32 @@
import java.util.List;
/**
 * (住宅)电站列表-界面
 * 电站和设备-界面
 */
public class HouseListFragment extends CustomBaseFragment {
    private FragmentHouseListBinding viewBinding;
    private HouseInfoAdapter houseInfoAdapter;
    private CameraManager manager;
    private List<HouseIdBean> houseListBeanIDList = null;
    private DeviceInfoAdapter deviceInfoAdapter;
    private List<HouseIdBean> houseListBeanIDList;
    private List<DeviceBean> deviceInfoList;
    private int currentHouseListPage = 0; // 当前电站列表页码
    private int currentHouseListTotal = 0; // 电站列表总页码
    private boolean isHouseLoadingMore = false; // 标记电站列表正在加载更多数据
    private int currentDeviceListPage = 0; // 当前设备列表页码
    private int currentDeviceListTotal = 0; // 设备列表总页码
    private boolean isDeviceLoadingMore = false; // 标记设备列表正在加载更多数据
    private boolean isClickPowerStationLabel = true;//(电站标签=true,设备标签=false)
    private String key = SortValue.all;
    private String value = SortValue.all;
    private long pageSize = 20;//页数
    @Override
@@ -60,7 +82,6 @@
    @Override
    public void onBindView(Bundle savedInstanceState) {
        manager = (CameraManager) _mActivity.getSystemService(Context.CAMERA_SERVICE);
        initData();
        //初始化
        initView();
@@ -74,24 +95,32 @@
        viewBinding.powerStationLabel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (isClickPowerStationLabel) {
                    return;
                }
                isClickPowerStationLabel = true;
                viewBinding.powerStationLabel.setTextAppearance(R.style.Text20Style);
                viewBinding.deviceLabel.setTextAppearance(R.style.Text16Style);
                viewBinding.powerStationLabelParent.setVisibility(View.VISIBLE);
                viewBinding.deviceLabelParent.setVisibility(View.GONE);//设备标签隐藏
                loadNextPageHouseList(true, 1, true);
            }
        });
        //设备标签
        viewBinding.deviceLabel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!isClickPowerStationLabel) {
                    return;
                }
                isClickPowerStationLabel = false;
                viewBinding.deviceLabel.setTextAppearance(R.style.Text20Style);
                viewBinding.powerStationLabel.setTextAppearance(R.style.Text16Style);
                viewBinding.editIv.setVisibility(View.GONE);//编辑图标隐藏
                viewBinding.addIv.setVisibility(View.GONE);//添加图标隐藏
                viewBinding.powerStationLabelParent.setVisibility(View.GONE);//电站标签隐藏
                viewBinding.deviceLabelParent.setVisibility(View.VISIBLE);
                loadNextPageDeviceList(true, 1, true);
            }
        });
@@ -103,12 +132,36 @@
            }
        });
        //设置下拉箭头颜色
        //电站设置下拉箭头颜色
        viewBinding.fragmentHouseSrl.setColorSchemeResources(R.color.text_FF245EC3);
        //电站下拉读取
        viewBinding.fragmentHouseSrl.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                downReadData(true);
                viewBinding.fragmentHouseSrl.setRefreshing(false);
                loadNextPageHouseList(true, 1, true);
            }
        });
        //电站上拉读取
        viewBinding.fragmentHouseSrlListRc.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
//                super.onScrolled(recyclerView, dx, dy);
                LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
                if (layoutManager == null) {
                    return;
                }
                int visibleItemCount = layoutManager.getChildCount();
                int totalItemCount = layoutManager.getItemCount();
                int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition();
                if (visibleItemCount > 0 && visibleItemCount + firstVisibleItemPosition == totalItemCount) {
                    if (!isHouseLoadingMore) {
                        // 滑动到了底部,执行相应的操作
                        HdlLogLogic.print("--->滑动到了底部");
                        loadNextPageHouseList(false, ++currentHouseListPage, false);
                    }
                }
            }
        });
        //进入电站详情,删除电站,移动电站位置
@@ -140,7 +193,7 @@
                        HdlResidenceLogic.getInstance().moveHouseId(houseIdBean.getHomeId());
                        initData();//初始化缓存数据
                        houseInfoAdapter.setList(houseListBeanIDList);//重新刷新列表
                        nullDataUpdateUi(houseListBeanIDList);//检测数据是否为空
                        nullDataUpdateUi();//检测数据是否为空
                    }
                    @Override
@@ -218,40 +271,83 @@
        viewBinding.stationNameRl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                viewBinding.stationNameRl.setSelected(!v.isSelected());
                viewBinding.stationNameIv.setSelected(viewBinding.stationNameRl.isSelected());
            }
        });
        //电站名称筛选
        viewBinding.stationNameRl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                viewBinding.stationNameRl.setSelected(!v.isSelected());
                viewBinding.stationNameIv.setSelected(viewBinding.stationNameRl.isSelected());
                boolean isSelected = !v.isSelected();
                viewBinding.stationNameRl.setSelected(isSelected);
                viewBinding.stationNameIv.setSelected(isSelected);
                key = SortType.homeNameSort;
                value = isSelected ? SortValue.ascending : SortValue.descending;
            }
        });
        //发电功率筛选
        viewBinding.stationPowerRl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                viewBinding.stationPowerRl.setSelected(!v.isSelected());
                viewBinding.stationPowerIv.setSelected(viewBinding.stationPowerRl.isSelected());
                boolean isSelected = !v.isSelected();
                viewBinding.stationPowerRl.setSelected(isSelected);
                viewBinding.stationPowerIv.setSelected(isSelected);
                key = SortType.powerSort;
                value = isSelected ? SortValue.ascending : SortValue.descending;
            }
        });
        //当日发电量筛选
        viewBinding.stationDayRl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                viewBinding.stationDayRl.setSelected(!v.isSelected());
                viewBinding.stationDayIv.setSelected(viewBinding.stationDayRl.isSelected());
                boolean isSelected = !v.isSelected();
                viewBinding.stationDayRl.setSelected(isSelected);
                viewBinding.stationDayIv.setSelected(isSelected);
                key = SortType.todayElectricitySort;
                value = isSelected ? SortValue.ascending : SortValue.descending;
            }
        });
        //当月发电量筛选
        viewBinding.stationMonthRl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                viewBinding.stationMonthRl.setSelected(!v.isSelected());
                viewBinding.stationMonthIv.setSelected(viewBinding.stationMonthRl.isSelected());
                boolean isSelected = !v.isSelected();
                viewBinding.stationMonthRl.setSelected(isSelected);
                viewBinding.stationMonthIv.setSelected(isSelected);
                key = SortType.monthElectricitySort;
                value = isSelected ? SortValue.ascending : SortValue.descending;
            }
        });
        //点击设备
        deviceInfoAdapter.setOnclickListener(new DeviceInfoAdapter.OnClickListener() {
            @Override
            public void onClick(int position, DeviceBean deviceBean) {
            }
        });
        //设备设置下拉箭头颜色
        viewBinding.fragmentDeviceSrl.setColorSchemeResources(R.color.text_FF245EC3);
        //设备下拉读取
        viewBinding.fragmentDeviceSrl.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                viewBinding.fragmentDeviceSrl.setRefreshing(false);
                loadNextPageDeviceList(false, 1, true);
            }
        });
        //设备上拉读取
        viewBinding.fragmentDeviceSrlListRc.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
//                super.onScrolled(recyclerView, dx, dy);
                LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
                if (layoutManager == null) {
                    return;
                }
                int visibleItemCount = layoutManager.getChildCount();
                int totalItemCount = layoutManager.getItemCount();
                int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition();
                if (visibleItemCount > 0 && visibleItemCount + firstVisibleItemPosition == totalItemCount) {
                    if (!isDeviceLoadingMore) {
                        // 滑动到了底部,执行相应的操作
                        HdlLogLogic.print("--->滑动到了底部");
                        loadNextPageDeviceList(false, ++currentDeviceListPage, false);
                    }
                }
            }
        });
@@ -260,20 +356,30 @@
    private void initView() {
        viewBinding.powerStationLabelParent.setVisibility(View.VISIBLE);
        viewBinding.deviceLabelParent.setVisibility(View.GONE);
        LinearLayoutManager linearLayout = new LinearLayoutManager(_mActivity);
        //电站标签
        houseInfoAdapter = new HouseInfoAdapter(_mActivity);
        viewBinding.fragmentHouseSrlListRc.setLayoutManager(linearLayout);
        viewBinding.fragmentHouseSrlListRc.setLayoutManager(new LinearLayoutManager(_mActivity));
        viewBinding.fragmentHouseSrlListRc.setAdapter(houseInfoAdapter);
        houseInfoAdapter.setList(this.houseListBeanIDList);
        this.nullDataUpdateUi(houseListBeanIDList);
        //设备标签
        deviceInfoAdapter = new DeviceInfoAdapter(_mActivity);
        viewBinding.fragmentDeviceSrlListRc.setLayoutManager(new LinearLayoutManager(_mActivity));
        viewBinding.fragmentDeviceSrlListRc.setAdapter(deviceInfoAdapter);
        this.nullDataUpdateUi();
    }
    private void initData() {
        if (isClickPowerStationLabel) {
        this.houseListBeanIDList = new ArrayList<>();
        this.houseListBeanIDList.addAll(HdlResidenceLogic.getInstance().getHouseIdList());
        } else {
            this.deviceInfoList = new ArrayList<>();
            this.deviceInfoList.add(new DeviceBean());
//            this.deviceInfoList.addAll(HdlDeviceLogic.getInstance().getListDevice());
        }
    }
    /**
@@ -287,7 +393,7 @@
        if (HDLUniMP.UNI_EVENT_REPLY_HOME_MODEL.equals(eventBus.getTopic())) {
            if (HDLUniMP.UNI_EVENT_REPLY_HOME_CREATION.equals(eventBus.getType())) {
                //uin创建电站成功后通知
                downReadData(false);
                loadNextPageHouseList(false, 1, true);
                if (eventBus.getData() != null) {
                    Gson gson = new Gson();
                    String json = eventBus.getData().toString();
@@ -326,7 +432,7 @@
            if (MqttRecvClient.getInstance() != null) {
                MqttRecvClient.getInstance().removeAllTopic();
            }
            downReadData(false);
            loadNextPageHouseList(false, 1, true);
        } else if (HDLUniMP.UNI_EVENT_REPLY_DEVICE_LIST.equals(eventBus.getType())) {
            //进去住宅详情uni读取逆变器列表成功后通知
@@ -341,41 +447,55 @@
            //接收外部点击事件
            if (eventBus.getType().equals(HomepageTitleTabSwitch.powerstation.toString())) {
                HdlLogLogic.print("正在点击【电站】");
                initData();//初始化缓存数据
                houseInfoAdapter.setList(houseListBeanIDList);//重新刷新列表
                loadNextPageHouseList(true, 1, true);
            }
        }
    }
    /**
     * 刷新UI
     * 刷新UI(电站)
     *
     * @param isRefreshing 表示是下拉刷新的
     */
    private void downReadData(boolean isRefreshing) {
    private void loadNextPageHouseList(boolean isRefreshing, long pageNo, boolean isClear) {
        if (isClear) {
            clearData();
        }
        //第一页读取数据强制读取
        if (pageNo > 1 && currentHouseListPage > currentHouseListTotal) {
            --currentHouseListPage;
            //当前页不能大于总页数
            return;
        }
        isHouseLoadingMore = true;//标记读取状态
        if (isRefreshing) {
            showLoading();
        }
        //获取住宅(电站)ID列表
        HdlResidenceLogic.getInstance().getResidenceIdList("", "", new CloudCallBeak<List<HouseIdBean>>() {
        HdlResidenceLogic.getInstance().getResidenceIdList(key, value, pageNo, pageSize, new CloudCallBeak<HdlResidenceLogic.HouseBeanClass>() {
            @Override
            public void onSuccess(List<HouseIdBean> list) {
            public void onSuccess(HdlResidenceLogic.HouseBeanClass houseBeanClass) {
                HdlThreadLogic.runMainThread(new Runnable() {
                    @Override
                    public void run() {
                        if (isRefreshing) {
                            //关闭下拉刷新的圈圈
                            viewBinding.fragmentHouseSrl.setRefreshing(false);
                            hideLoading();
                        }
                        if (list != null && list.size() > 0) {
                        isHouseLoadingMore = false;
                        if (houseBeanClass != null) {
                            currentHouseListTotal = (int) houseBeanClass.getTotalPage();
                            currentHouseListPage = (int) houseBeanClass.getPageNo();
                            //更新缓存
                            HdlResidenceLogic.getInstance().setHouseIdList(list);
                            HdlResidenceLogic.getInstance().setHouseIdList(houseBeanClass.getList());
                            if (houseInfoAdapter != null) {
                                initData();
                                //更新UI
                                houseInfoAdapter.setList(houseListBeanIDList);
                            }
                        }
                        nullDataUpdateUi(list);
                        nullDataUpdateUi();
                    }
                }, _mActivity, ShowErrorMode.YES);
@@ -386,9 +506,12 @@
                HdlThreadLogic.runMainThread(new Runnable() {
                    @Override
                    public void run() {
                        if (currentHouseListPage > 1) {
                            --currentHouseListPage;
                        }
                        isHouseLoadingMore = false;
                        if (isRefreshing) {
                            //关闭下拉刷新的圈圈
                            viewBinding.fragmentHouseSrl.setRefreshing(false);
                            hideLoading();
                        }
                    }
@@ -397,6 +520,166 @@
        });
    }
    /**
     * 刷新UI(设备)
     *
     * @param isRefreshing 表示是下拉刷新的
     * @param pageNo       页码
     * @param isClear      true表示清空缓存
     */
    private void loadNextPageDeviceList(boolean isRefreshing, long pageNo, boolean isClear) {
        if (isClear) {
            clearData();
        }
        //第一页读取数据强制读取
        if (pageNo > 1 && currentDeviceListPage > currentDeviceListTotal) {
            --currentDeviceListPage;
            //当前页不能大于总页数
            return;
        }
        isDeviceLoadingMore = true;//标记读取状态
        if (isRefreshing) {
            showLoading();
        }
        //获取住宅(电站)ID列表
        HdlDeviceLogic.getInstance().getPowerStationDeviceList("", pageNo, pageSize, new CloudCallBeak<PageNumberObject<DeviceBean>>() {
            @Override
            public void onSuccess(PageNumberObject<DeviceBean> pageNumberObject) {
                HdlThreadLogic.runMainThread(new Runnable() {
                    @Override
                    public void run() {
                        if (isRefreshing) {
                            hideLoading();
                        }
                        isDeviceLoadingMore = false;
                        if (pageNumberObject != null) {
                            currentDeviceListTotal = (int) pageNumberObject.getTotalPage();
                            currentDeviceListPage = (int) pageNumberObject.getPageNo();
                            //更新缓存
                            HdlDeviceLogic.getInstance().setListDevice(pageNumberObject.getList());
                            //更新缓存
                            if (deviceInfoAdapter != null) {
                                initData();
                                //更新UI
                                deviceInfoAdapter.setList(deviceInfoList);
                            }
                        }
                        nullDataUpdateUi();
                    }
                }, _mActivity, ShowErrorMode.YES);
            }
            @Override
            public void onFailure(HDLException e) {
                HdlThreadLogic.runMainThread(new Runnable() {
                    @Override
                    public void run() {
                        if (currentDeviceListPage > 1) {
                            --currentDeviceListPage;
                        }
                        isDeviceLoadingMore = false;
                        if (isRefreshing) {
                            hideLoading();
                        }
                    }
                }, _mActivity, ShowErrorMode.YES);
            }
        });
    }
    /**
     * 清空缓存数据
     */
    private void clearData() {
        if (isClickPowerStationLabel) {
            currentHouseListPage = 0;// 重置当前电站列表页码
            currentHouseListTotal = 0;// 重置当前电站列表总页码
            if (houseListBeanIDList != null) {
                houseListBeanIDList.clear(); //清空临时缓存列表
            }
            HdlResidenceLogic.getInstance().clearHouseList(); //表示强制清空所有缓存信息
        } else {
            currentDeviceListPage = 0; // 重置当前设备列表页码
            currentDeviceListTotal = 0; // 重置设备列表总页码
            if (deviceInfoList != null) {
                deviceInfoList.clear();//清空临时缓存列表
            }
            HdlDeviceLogic.getInstance().clearDeviceList(); //表示强制清空所有缓存信息
        }
    }
    /**
     * 没有电站列表的样式
     */
    private void nullDataUpdateUi() {
        boolean is_data;
        if (isClickPowerStationLabel) {
            is_data = houseListBeanIDList != null && houseListBeanIDList.size() > 0;
        } else {
            is_data = deviceInfoList != null && deviceInfoList.size() > 0;
        }
        HdlCommonLogic.getInstance().nullDataUpdateUi(_mActivity, viewBinding.nullDataIc.getRoot(), viewBinding.nullDataIc.nullDataGifAnimationIv, viewBinding.nullDataIc.nullDataTv, getString(R.string.my_power_station_data_null), is_data);
    }
    /**
     * 删除电站,逆变器
     * (开始删除电站,同时,向逆变器发送初始化逆变器指令,无须处理结果)
     *
     * @param list 设备列表
     */
    private void initializeInverter(List<GatewayBean> list) {
        if (list == null || list.size() == 0) {
            return;
        }
        for (int i = 0; i < list.size(); i++) {
            GatewayBean gatewayBean = list.get(i);
            HdlDeviceLogic.getInstance().initializeGateway(gatewayBean.getDevice_mac(), new LinkCallBack<Boolean>() {
                @Override
                public void onSuccess(Boolean obj) {
//                                HdlLogLogic.print("初始化逆变器成功-->mac:" + cloudInverterDeviceBean.getOsn(),true);
                }
                @Override
                public void onError(HDLLinkException e) {
//                                HdlLogLogic.print("初始化逆变器失败-->mac:" + cloudInverterDeviceBean.getOsn(),true);
                }
            });
        }
    }
    /**
     * 删除电站
     *
     * @param homeId 电站id
     * @param list   逆变器列表
     */
    private void deleteResidence(String homeId, List<GatewayBean> list) {
        //删除住宅
        HdlResidenceLogic.getInstance().delResidence(homeId, new CloudCallBeak<Boolean>() {
            @Override
            public void onSuccess(Boolean obj) {
                hideLoading();
                //发起初始化指令给逆变器;
                initializeInverter(list);
                HdlResidenceLogic.getInstance().delHouseId(homeId);
                initData();//初始化缓存数据
                houseInfoAdapter.setList(houseListBeanIDList);//重新刷新列表
                nullDataUpdateUi();//检测数据是否为空
            }
            @Override
            public void onFailure(HDLException e) {
                hideLoading();
                HdlThreadLogic.toast(_mActivity, e);
            }
        });
    }
    /**
     * 申请权限
@@ -446,69 +729,6 @@
        void failing();
    }
    /**
     * 没有电站列表的样式
     */
    private void nullDataUpdateUi(List<HouseIdBean> list) {
        HdlCommonLogic.getInstance().nullDataUpdateUi(_mActivity, viewBinding.nullDataIc.getRoot(), viewBinding.nullDataIc.nullDataGifAnimationIv, viewBinding.nullDataIc.nullDataTv, getString(R.string.my_power_station_data_null), list != null && list.size() > 0);
    }
    /**
     * 删除电站,逆变器
     * (开始删除电站,同时,向逆变器发送初始化逆变器指令,无须处理结果)
     *
     * @param list 设备列表
     */
    private void initializeInverter(List<GatewayBean> list) {
        if (list == null || list.size() == 0) {
            return;
        }
        for (int i = 0; i < list.size(); i++) {
            GatewayBean gatewayBean = list.get(i);
            HdlDeviceLogic.getInstance().initializeGateway(gatewayBean.getDevice_mac(), new LinkCallBack<Boolean>() {
                @Override
                public void onSuccess(Boolean obj) {
//                                HdlLogLogic.print("初始化逆变器成功-->mac:" + cloudInverterDeviceBean.getOsn(),true);
                }
                @Override
                public void onError(HDLLinkException e) {
//                                HdlLogLogic.print("初始化逆变器失败-->mac:" + cloudInverterDeviceBean.getOsn(),true);
                }
            });
        }
    }
    /**
     * 删除电站
     *
     * @param homeId 电站id
     * @param list   逆变器列表
     */
    private void deleteResidence(String homeId, List<GatewayBean> list) {
        //删除住宅
        HdlResidenceLogic.getInstance().delResidence(homeId, new CloudCallBeak<Boolean>() {
            @Override
            public void onSuccess(Boolean obj) {
                hideLoading();
                //发起初始化指令给逆变器;
                initializeInverter(list);
                HdlResidenceLogic.getInstance().delHouseId(homeId);
                initData();//初始化缓存数据
                houseInfoAdapter.setList(houseListBeanIDList);//重新刷新列表
                nullDataUpdateUi(houseListBeanIDList);//检测数据是否为空
            }
            @Override
            public void onFailure(HDLException e) {
                hideLoading();
                HdlThreadLogic.toast(_mActivity, e);
            }
        });
    }
app/src/main/res/drawable/device_image.png
app/src/main/res/layout/activity_my_power_station.xml
@@ -5,7 +5,6 @@
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bj"
    tools:context="com.hdl.photovoltaic.ui.MyPowerStationActivity">
    <!--首页-Fragment-->
app/src/main/res/layout/item_device_details.xml
New file
@@ -0,0 +1,210 @@
<?xml version="1.0" encoding="utf-8"?>
<com.hdl.photovoltaic.widget.SwipeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/item_parent_swipeLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <include
        android:id="@+id/swipe_layout_il"
        layout="@layout/swipe_right_layout" />
    <RelativeLayout
        android:id="@+id/item_parent_rl"
        android:layout_width="match_parent"
        android:layout_height="164dp">
        <RelativeLayout
            android:id="@+id/device_details_info_rl"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginStart="@dimen/dp_16"
            android:layout_marginTop="@dimen/dp_16"
            android:layout_marginEnd="@dimen/dp_16"
            android:background="@drawable/ffffff_13">
            <ImageView
                android:id="@+id/device_details_image_iv"
                android:layout_width="44dp"
                android:layout_height="42dp"
                android:layout_marginStart="@dimen/dp_16"
                android:layout_marginTop="@dimen/dp_13"
                android:background="@drawable/device_image"
                android:scaleType="centerCrop" />
            <TextView
                android:id="@+id/device_details_name_tv"
                android:layout_width="170dp"
                android:layout_height="@dimen/dp_19"
                android:layout_marginStart="@dimen/dp_11"
                android:layout_marginTop="@dimen/dp_15"
                android:layout_toEndOf="@+id/device_details_image_iv"
                android:ellipsize="end"
                android:gravity="center_vertical|start"
                android:singleLine="true"
                android:textColor="@color/text_90000000"
                android:textSize="@dimen/text_16"
                android:textStyle="bold" />
            <TextView
                android:id="@+id/device_details_sn_tv"
                android:layout_width="wrap_content"
                android:layout_height="@dimen/dp_17"
                android:layout_below="@+id/device_details_name_tv"
                android:layout_alignStart="@+id/device_details_name_tv"
                android:layout_marginTop="@dimen/dp_3"
                android:gravity="center_vertical"
                android:textColor="@color/text_40000000"
                android:textSize="@dimen/text_12" />
            <LinearLayout
                android:id="@+id/screening_condition_ll"
                android:layout_width="match_parent"
                android:layout_height="@dimen/dp_36"
                android:layout_below="@+id/device_details_image_iv"
                android:layout_marginStart="@dimen/dp_16"
                android:layout_marginTop="@dimen/dp_17"
                android:orientation="horizontal">
                <LinearLayout
                    android:id="@+id/power_ll"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:orientation="vertical">
                    <TextView
                        android:id="@+id/power_value_tv"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:gravity="center"
                        android:text="99"
                        android:textColor="@color/text_90000000"
                        android:textSize="@dimen/text_15"
                        android:textStyle="bold" />
                    <TextView
                        android:id="@+id/power_type_tv"
                        android:layout_width="match_parent"
                        android:layout_height="@dimen/dp_15"
                        android:layout_marginTop="3dp"
                        android:gravity="center"
                        android:text="@string/generated_power"
                        android:textColor="@color/text_40000000"
                        android:textSize="@dimen/text_12" />
                </LinearLayout>
                <LinearLayout
                    android:id="@+id/day_ll"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:orientation="vertical">
                    <TextView
                        android:id="@+id/day_value_tv"
                        android:layout_width="match_parent"
                        android:layout_height="@dimen/dp_18"
                        android:gravity="center"
                        android:text="99"
                        android:textColor="@color/text_90000000"
                        android:textSize="@dimen/text_15"
                        android:textStyle="bold" />
                    <TextView
                        android:id="@+id/day_type_tv"
                        android:layout_width="match_parent"
                        android:layout_height="@dimen/dp_15"
                        android:layout_marginTop="3dp"
                        android:gravity="center"
                        android:text="@string/day_power_generation"
                        android:textColor="@color/text_40000000"
                        android:textSize="@dimen/text_12" />
                </LinearLayout>
                <LinearLayout
                    android:id="@+id/month_ll"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:orientation="vertical">
                    <TextView
                        android:id="@+id/month_value_tv"
                        android:layout_width="match_parent"
                        android:layout_height="@dimen/dp_18"
                        android:gravity="center"
                        android:text="99"
                        android:textColor="@color/text_90000000"
                        android:textSize="@dimen/text_15"
                        android:textStyle="bold" />
                    <TextView
                        android:id="@+id/month_type_tv"
                        android:layout_width="match_parent"
                        android:layout_height="@dimen/dp_15"
                        android:layout_marginTop="3dp"
                        android:gravity="center"
                        android:text="@string/month_power_generation"
                        android:textColor="@color/text_40000000"
                        android:textSize="@dimen/text_12" />
                </LinearLayout>
            </LinearLayout>
            <View
                android:id="@+id/line"
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:layout_below="@+id/screening_condition_ll"
                android:layout_marginStart="@dimen/dp_17"
                android:layout_marginTop="@dimen/dp_8"
                android:layout_marginEnd="@dimen/dp_16"
                android:background="@color/text_E1E1E1" />
            <ImageView
                android:id="@+id/plant_details_location_iv"
                android:layout_width="@dimen/dp_19"
                android:layout_height="@dimen/dp_19"
                android:layout_below="@+id/line"
                android:layout_marginStart="@dimen/dp_11"
                android:layout_marginTop="@dimen/dp_7"
                android:src="@drawable/location" />
            <TextView
                android:id="@+id/plant_details_location_tv"
                android:layout_width="290dp"
                android:layout_height="@dimen/dp_19"
                android:layout_below="@+id/line"
                android:layout_marginStart="@dimen/dp_3"
                android:layout_marginTop="@dimen/dp_8"
                android:layout_toEndOf="@+id/plant_details_location_iv"
                android:ellipsize="end"
                android:gravity="center_vertical|start"
                android:singleLine="true"
                android:text="@string/power_station"
                android:textColor="@color/text_40000000"
                android:textSize="@dimen/text_12" />
            <TextView
                android:id="@+id/fragment_house_list_line_state_tv"
                android:layout_width="69dp"
                android:layout_height="@dimen/dp_33"
                android:layout_alignParentTop="true"
                android:layout_alignParentEnd="true"
                android:background="@drawable/state_ffb300"
                android:gravity="center"
                android:text="@string/my_power_station_connecting"
                android:textColor="@color/text_FFFFFFFF"
                android:textSize="@dimen/text_12" />
        </RelativeLayout>
    </RelativeLayout>
</com.hdl.photovoltaic.widget.SwipeLayout>
app/src/main/res/layout/item_plant_details.xml
@@ -15,7 +15,7 @@
        android:layout_height="164dp">
        <RelativeLayout
            android:id="@+id/plant_details_info_rl"
            android:id="@+id/device_details_info_rl"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginStart="@dimen/dp_16"
@@ -24,7 +24,7 @@
            android:background="@drawable/ffffff_13">
            <ImageView
                android:id="@+id/plant_details_image_iv"
                android:id="@+id/device_details_image_iv"
                android:layout_width="44dp"
                android:layout_height="42dp"
                android:layout_marginStart="@dimen/dp_16"
@@ -33,12 +33,12 @@
                android:scaleType="centerCrop" />
            <TextView
                android:id="@+id/plant_details_name_tv"
                android:id="@+id/device_details_name_tv"
                android:layout_width="170dp"
                android:layout_height="@dimen/dp_19"
                android:layout_marginStart="@dimen/dp_11"
                android:layout_marginTop="@dimen/dp_15"
                android:layout_toEndOf="@+id/plant_details_image_iv"
                android:layout_toEndOf="@+id/device_details_image_iv"
                android:ellipsize="end"
                android:gravity="center_vertical|start"
                android:singleLine="true"
@@ -48,11 +48,11 @@
                android:textStyle="bold" />
            <TextView
                android:id="@+id/plant_details_capacity_tv"
                android:id="@+id/device_details_sn_tv"
                android:layout_width="wrap_content"
                android:layout_height="@dimen/dp_17"
                android:layout_below="@+id/plant_details_name_tv"
                android:layout_alignStart="@+id/plant_details_name_tv"
                android:layout_below="@+id/device_details_name_tv"
                android:layout_alignStart="@+id/device_details_name_tv"
                android:layout_marginTop="@dimen/dp_3"
                android:gravity="center_vertical"
                android:text="@string/installed_capacity"
@@ -63,7 +63,7 @@
                android:id="@+id/screening_condition_ll"
                android:layout_width="match_parent"
                android:layout_height="@dimen/dp_36"
                android:layout_below="@+id/plant_details_image_iv"
                android:layout_below="@+id/device_details_image_iv"
                android:layout_marginStart="@dimen/dp_16"
                android:layout_marginTop="@dimen/dp_17"
                android:orientation="horizontal">