package com.hdl.photovoltaic.other; import android.os.SystemClock; import android.text.TextUtils; import android.util.Log; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.hdl.photovoltaic.bean.HttpResponsePack; 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.HouseInfoBean; import com.hdl.photovoltaic.ui.bean.HouseListBean; import org.w3c.dom.Text; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; /** * 住宅逻辑界面 */ public class HdlResidenceLogic { public static final int pageSize = 50; private static volatile HdlResidenceLogic sHdlResidenceLogic; /** * 获取当前对象 * * @return HdlResidenceLogic */ public static synchronized HdlResidenceLogic getInstance() { if (sHdlResidenceLogic == null) { synchronized (HdlResidenceLogic.class) { if (sHdlResidenceLogic == null) { sHdlResidenceLogic = new HdlResidenceLogic(); } } } return sHdlResidenceLogic; } public List getHouseInfoList() { return houseInfoList; } public void setHouseInfoList(List houseInfoList) { this.houseInfoList = houseInfoList; } public List getHouseInfoBeanList() { return houseList; } public void setHouseInfoBeanList(List houseListBeanList) { this.houseList = houseListBeanList; } //住宅列表 private List houseList = new ArrayList<>(); //住宅详情列表 private List houseInfoList = new ArrayList<>(); /** * 获取住宅列表 * * @param cloudCallBeak - */ public void getHouseList(CloudCallBeak cloudCallBeak) { //获取住宅列表 getResidenceList("", "", new CloudCallBeak>() { @Override public void onSuccess(List houseListBeanList) { if (houseListBeanList != null && houseListBeanList.size() > 0) { houseList.clear(); houseList.addAll(houseListBeanList); //标记最后一条 AtomicInteger atomicInteger = new AtomicInteger(0); for (int i = 0; i < houseList.size(); i++) { HouseListBean houseListBean = houseList.get(i); atomicInteger.set(i); //获取住宅详情列表 getResidenceInfo(houseListBean.getHomeId(), new CloudCallBeak() { @Override public void onSuccess(HouseInfoBean houseInfoBean) { if (houseInfoBean != null) { houseInfoBean.setHomeImage(houseListBean.getHomeImage());//电站图片 houseInfoBean.setInstalledCapacity(houseListBean.getInstalledCapacity());//装机容量 houseInfoBean.setPower(houseListBean.getPower());//发电功率 houseInfoBean.setTodayElectricity(houseListBean.getTodayElectricity());//今天发电量 houseInfoBean.setPowerStationStatus(houseListBean.getPowerStationStatus());//电站状态(电站状态 1:正常(运行),2:离线,3:连接中,4:故障) //添加到本地缓存 addHouseToLocalMemory(houseInfoBean); } if (atomicInteger.get() == houseList.size() - 1) { //最后一条退出 if (cloudCallBeak != null) { cloudCallBeak.onSuccess(true); } } } @Override public void onFailure(Exception exception) { if (atomicInteger.get() == houseList.size() - 1) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(exception); } } } }); } } else { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(true); } } } @Override public void onFailure(Exception exception) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(exception); } } }); } /** * 获取住宅(电站)列表 * * @param pageNo 当前页数 开始默认1 * @param pageSize 一页大小 开始默认50 * @param key 发电功率排序(powerSort);今日发电量排序(todayElectricitySort);创建时间排序(createTimeSort); * @param keyValue (descending:降序ascending:升序), */ public void getResidenceList(int pageNo, int pageSize, String key, String keyValue, CloudCallBeak cloudCallBeak) { if (pageNo == 1) { //第一次进来清空列表 houseList.clear(); } 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("powerSort", "descending");//发电功率排序(descending:降序ascending:升序) // json.addProperty("todayElectricitySort", "descending");//今日发电量排序 // json.addProperty("createTimeSort", "descending");//创建时间排序 // json.addProperty("zoneType", "password");//区域 json.addProperty("pageNo", pageNo);//页码 json.addProperty("pageSize", pageSize);//页数 HttpClient.getInstance().requestHttp(requestUrl, json.toString(), true, true, new BaseSuccessFailureCallBeak() { @Override public void onSuccess(HttpResponsePack httpResponsePack) { if (httpResponsePack != null && httpResponsePack.getData() != null) { Gson gson = new Gson(); String jsonStr = gson.toJson(httpResponsePack.getData()); HouseInfoBeanClass houseInfoBeanClass = gson.fromJson(jsonStr, HouseInfoBeanClass.class); //添加【住宅】到本地缓存 houseList.addAll(houseInfoBeanClass.getList()); //总共有多少页 long totalPage = houseInfoBeanClass.totalPage; if (totalPage == houseInfoBeanClass.getPageNo()) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(true); } return; } if (pageNo > totalPage) { //当前请求的页数大于总页数,云端出错了立即返回去; if (cloudCallBeak != null) { cloudCallBeak.onSuccess(true); } return; } getResidenceList(pageNo + 1, pageSize, key, keyValue, cloudCallBeak); } } @Override public void onFailure(Exception exception) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(exception); } } }); } public void getResidenceList(String key, String keyValue, CloudCallBeak> 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("powerSort", "descending");//发电功率排序(descending:降序ascending:升序) // json.addProperty("todayElectricitySort", "descending");//今日发电量排序 // json.addProperty("createTimeSort", "descending");//创建时间排序 // json.addProperty("zoneType", "password");//区域 json.addProperty("pageNo", 1);//页码 json.addProperty("pageSize", pageSize);//页数 List list = new ArrayList<>(); HttpClient.getInstance().requestHttp(requestUrl, json.toString(), true, true, new BaseSuccessFailureCallBeak() { @Override public void onSuccess(HttpResponsePack httpResponsePack) { if (httpResponsePack != null && httpResponsePack.getData() != null) { Gson gson = new Gson(); String jsonStr = gson.toJson(httpResponsePack.getData()); HouseInfoBeanClass houseInfoBeanClass = gson.fromJson(jsonStr, HouseInfoBeanClass.class); list.addAll(houseInfoBeanClass.getList()); //总共有多少页 long totalPage = houseInfoBeanClass.totalPage; if (totalPage < 2) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(list); } return; } //标记最后一条 AtomicBoolean isLast = new AtomicBoolean(false); //从第二页获取数据 for (int i = 2; i <= totalPage; i++) { if (totalPage == i) { isLast.set(true); } json.addProperty("pageNo", i);//更新页码 HttpClient.getInstance().requestHttp(requestUrl, json.toString(), true, true, new BaseSuccessFailureCallBeak() { @Override public void onSuccess(HttpResponsePack httpResponsePack) { Gson gson = new Gson(); String jsonStr = gson.toJson(httpResponsePack.getData()); HouseInfoBeanClass houseInfoBeanClass = gson.fromJson(jsonStr, HouseInfoBeanClass.class); list.addAll(houseInfoBeanClass.getList()); if (isLast.get()) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(list); } } } @Override public void onFailure(Exception exception) { if (isLast.get()) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(list); } } } }); } } else { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(list); } } } @Override public void onFailure(Exception exception) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(exception); } } }); } /** * 获取住宅(电站)详情 * * @param homeId 住宅id * @param cloudCallBeak 回调 */ public void getResidenceInfo(String homeId, CloudCallBeak cloudCallBeak) { String requestUrl = HttpApi.POST_PowerStation_Info; JsonObject json = new JsonObject(); json.addProperty("homeId", homeId);//电站id //json.addProperty("zoneType", "password");//区域 HttpClient.getInstance().requestHttp(requestUrl, json.toString(), true, true, new BaseSuccessFailureCallBeak() { @Override public void onSuccess(HttpResponsePack httpResponsePack) { if (httpResponsePack != null && httpResponsePack.getData() != null) { Gson gson = new Gson(); String jsonStr = gson.toJson(httpResponsePack.getData()); HouseInfoBean houseInfoBean = gson.fromJson(jsonStr, HouseInfoBean.class); if (cloudCallBeak != null) { cloudCallBeak.onSuccess(houseInfoBean); } } } @Override public void onFailure(Exception exception) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(exception); } } }); } /** * 编辑住宅(电站), * * @param houseInfoBean - * @param cloudCallBeak - */ public void editResidence(HouseInfoBean houseInfoBean, CloudCallBeak cloudCallBeak) { String requestUrl = HttpApi.POST_PowerStation_Edit; JsonObject json = new JsonObject(); JsonObject location = new JsonObject(); json.addProperty("homeId", houseInfoBean.getHomeId()); location.addProperty("nationCode", houseInfoBean.getLocation().getNationCode()); location.addProperty("nationName", houseInfoBean.getLocation().getNationName()); location.addProperty("provinceCode", houseInfoBean.getLocation().getProvinceCode()); location.addProperty("provinceName", houseInfoBean.getLocation().getProvinceName()); location.addProperty("cityCode", houseInfoBean.getLocation().getCityCode()); location.addProperty("cityName", houseInfoBean.getLocation().getCityName()); json.add("location", location); json.addProperty("address", houseInfoBean.getAddress()); json.addProperty("latitude", houseInfoBean.getLatitude()); json.addProperty("longitude", houseInfoBean.getLongitude()); json.addProperty("homeName", houseInfoBean.getHomeName()); json.addProperty("timezone", houseInfoBean.getTimezone()); json.addProperty("powerStationType", houseInfoBean.getPowerStationType()); json.addProperty("workMode", houseInfoBean.getWorkMode()); json.addProperty("installedCapacity", houseInfoBean.getInstalledCapacity()); json.addProperty("productionTime", houseInfoBean.getProductionTime()); json.addProperty("monetaryUnit", houseInfoBean.getMonetaryUnit()); json.addProperty("electrovalence", houseInfoBean.getElectrovalence()); json.addProperty("totalCost", houseInfoBean.getTotalCost()); json.addProperty("zoneType", houseInfoBean.getZoneType()); HttpClient.getInstance().requestHttp(requestUrl, json.toString(), true, true, new BaseSuccessFailureCallBeak() { @Override public void onSuccess(HttpResponsePack httpResponsePack) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(true); } } @Override public void onFailure(Exception exception) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(exception); } } }); } /** * 删除住宅(电站) * * @param homeId - * @param cloudCallBeak - */ public void delResidence(String homeId, CloudCallBeak cloudCallBeak) { String requestUrl = HttpApi.POST_PowerStation_Remove; JsonObject json = new JsonObject(); json.addProperty("homeId", homeId);//电站id //json.addProperty("zoneType", "password");//区域 HttpClient.getInstance().requestHttp(requestUrl, json.toString(), true, true, new BaseSuccessFailureCallBeak() { @Override public void onSuccess(HttpResponsePack httpResponsePack) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(true); } } @Override public void onFailure(Exception exception) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(exception); } } }); } /** * 添加住宅(电站)到云端 * * @param houseInfoBean - * @param cloudCallBeak - */ public void addHouseToCloud(HouseInfoBean houseInfoBean, CloudCallBeak cloudCallBeak) { String requestUrl = HttpApi.POST_PowerStation_Create; JsonObject json = new JsonObject(); JsonObject location = new JsonObject(); json.addProperty("powerStationImage", ""); location.addProperty("nationCode", houseInfoBean.getLocation().getNationCode()); location.addProperty("nationName", houseInfoBean.getLocation().getNationName()); location.addProperty("provinceCode", houseInfoBean.getLocation().getProvinceCode()); location.addProperty("provinceName", houseInfoBean.getLocation().getProvinceName()); location.addProperty("cityCode", houseInfoBean.getLocation().getCityCode()); location.addProperty("cityName", houseInfoBean.getLocation().getCityName()); json.add("location", location); json.addProperty("address", houseInfoBean.getAddress()); json.addProperty("latitude", houseInfoBean.getLatitude()); json.addProperty("longitude", houseInfoBean.getLongitude()); json.addProperty("homeName", houseInfoBean.getHomeName()); json.addProperty("timezone", houseInfoBean.getTimezone()); json.addProperty("powerStationType", houseInfoBean.getPowerStationType()); json.addProperty("workMode", houseInfoBean.getWorkMode()); json.addProperty("installedCapacity", houseInfoBean.getInstalledCapacity()); json.addProperty("productionTime", houseInfoBean.getProductionTime()); json.addProperty("monetaryUnit", houseInfoBean.getMonetaryUnit()); json.addProperty("electrovalence", houseInfoBean.getElectrovalence()); json.addProperty("totalCost", houseInfoBean.getTotalCost()); json.addProperty("zoneType", houseInfoBean.getZoneType()); HttpClient.getInstance().requestHttp(requestUrl, json.toString(), true, true, new BaseSuccessFailureCallBeak() { @Override public void onSuccess(HttpResponsePack httpResponsePack) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(true); } } @Override public void onFailure(Exception exception) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(exception); } } }); } /** * 切换住宅 * * @param homeId 住宅id */ public Boolean switchHouse(String homeId) { UserConfigManage.getInstance().setHomeId(homeId); HdlThreadLogic.runThread(new Runnable() { @Override public void run() { //搜索一下住宅设备 } }, null, null); //关闭进度条 return true; } /** * 添加【住宅详情】到本地缓存 * * @param houseInfoBean 住宅详情 */ public void addHouseToLocalMemory(HouseInfoBean houseInfoBean) { if (houseInfoBean == null) { return; } int index = isExistHouse(houseInfoBean.getHomeId()); if (index > -1) { houseInfoList.remove(index); houseInfoList.add(index, houseInfoBean); } else { houseInfoList.add(houseInfoBean); } } /** * 查询本地缓存住宅列表是否存在住宅 * * @param homeId 住宅id * @return 列表索引 */ public int isExistHouse(String homeId) { int index = -1; for (int i = 0; i < houseInfoList.size(); i++) { if (houseInfoList.get(i).getHomeId().equals(homeId)) { index = i; break; } } return index; } /** * 获取住宅详情 * * @param homeId 住宅id * @return 住宅找不到返回null */ public HouseInfoBean getHouse(String homeId) { int position = isExistHouse(homeId); if (position > -1) { return houseInfoList.get(position); } return null; } /** * 删除住宅 * * @param homeId 住宅id */ public void delHouse(String homeId) { int position = isExistHouse(homeId); if (position > -1) { houseInfoList.remove(position); } } static class HouseInfoBeanClass { //总条数 private long totalCount; //总页数 private long totalPage; //当前页 private long pageNo; //页数 private long pageSize; //电站列表 private List 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 getList() { return list == null ? new ArrayList<>() : list; } public void setList(List list) { this.list = list; } } }