package com.hdl.photovoltaic.other; 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.enums.MessageStateType; import com.hdl.photovoltaic.internet.HttpClient; import com.hdl.photovoltaic.internet.api.HttpApi; import com.hdl.photovoltaic.listener.CloudCallBeak; import com.hdl.photovoltaic.ui.bean.MessageBean; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; /** * 警报消息中心逻辑 */ public class HdlMessageLogic { private static volatile HdlMessageLogic sHdlMessageLogic; /** * 获取当前对象 * * @return HdlAccountLogic */ public static synchronized HdlMessageLogic getInstance() { if (sHdlMessageLogic == null) { synchronized (HdlMessageLogic.class) { if (sHdlMessageLogic == null) { sHdlMessageLogic = new HdlMessageLogic(); } } } return sHdlMessageLogic; } /** * 获取发生中缓存列表 */ public List getRecoverMessageMemoryList() { if (this.mListMessage == null || this.mListMessage.size() == 0) { return new ArrayList<>(); } List newList = new ArrayList<>(); for (int i = 0; i < mListMessage.size(); i++) { MessageBean messageBean = mListMessage.get(i); if (messageBean.getStatus().equals(MessageStateType.untreated)) { newList.add(messageBean); } } return newList; } /** * 获取处理中缓存列表 */ public List getNascentMessageMemoryList() { if (this.mListMessage == null || this.mListMessage.size() == 0) { return new ArrayList<>(); } List newList = new ArrayList<>(); for (int i = 0; i < mListMessage.size(); i++) { MessageBean messageBean = mListMessage.get(i); if (messageBean.getStatus().equals(MessageStateType.processed)) { newList.add(messageBean); } } return newList; } public List getListMessage() { return mListMessage; } public void setListMessage(List list) { try { if (list == null || list.size() == 0) { return; } if (this.mListMessage.size() == 0) { this.mListMessage.addAll(list); return; } List newList = new ArrayList<>(); for (int i = 0; i < list.size(); i++) { MessageBean messageBean = list.get(i); boolean if_boolean = false; for (int j = 0; j < mListMessage.size(); j++) { if (mListMessage.get(j).toString().equals(messageBean.getMsgId().toString())) { mListMessage.remove(j); mListMessage.add(j, messageBean); if_boolean = true; break; } } if (!if_boolean) { newList.add(messageBean); } } this.mListMessage.addAll(newList); } catch (Exception ignored) { } } private List mListMessage = new ArrayList<>(); /** * 获取未处理消息数量 * * @param cloudCallBeak - */ public void getMessageUntreatedCount(CloudCallBeak cloudCallBeak) { String requestUrl = HttpApi.POST_Message_UntreatedCount; JsonObject json = new JsonObject(); HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak() { @Override public void onSuccess(String str) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(str); } } @Override public void onFailure(HDLException e) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(e); } } }); } /** * 获取全部列表 * * @param cloudCallBeak - */ public void getAllMessageList(CloudCallBeak> cloudCallBeak) { getMessageList(MessageStatus.all, cloudCallBeak); } /** * 获取发生中列表 * * @param cloudCallBeak - */ public void getRecoverMessageList(CloudCallBeak> cloudCallBeak) { getMessageList(MessageStatus.untreated, cloudCallBeak); } /** * 获取处理中列表 * * @param cloudCallBeak - */ public void getNascentMessageList(CloudCallBeak> cloudCallBeak) { getMessageList(MessageStatus.processed, cloudCallBeak); } /** * 获取消息列表 * * @param messageStatus all:全部,untreated:未处理,processed:已处理; * @param cloudCallBeak - */ public void getMessageList(MessageStatus messageStatus, CloudCallBeak> cloudCallBeak) { String requestUrl = HttpApi.POST_Message_List; JsonObject json = new JsonObject(); if (messageStatus == MessageStatus.untreated) { json.addProperty("status", "UNTREATED");//未处理 } else if (messageStatus == MessageStatus.processed) { json.addProperty("status", "PROCESSED");//已处理 } json.addProperty("pageNo", 1);//页码 json.addProperty("pageSize", 50);//页数 List list = new ArrayList<>(); HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak() { @Override public void onSuccess(String jsonStr) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(new ArrayList<>()); } Gson gson = new Gson(); MessageListClass messageListClass = gson.fromJson(jsonStr, MessageListClass.class); list.addAll(messageListClass.getList()); setListMessage(messageListClass.getList()); //总共有多少页 long totalPage = messageListClass.totalPage; if (totalPage < 2) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(list); } return; } //记录请求条数 AtomicInteger atomicInteger = new AtomicInteger(0); //从第二页获取数据 for (int i = 2; i <= totalPage; i++) { json.addProperty("pageNo", i);//更新页码 HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak() { @Override public void onSuccess(String jsonStr) { atomicInteger.set(atomicInteger.get() + 1); MessageListClass messageListClass1 = gson.fromJson(jsonStr, MessageListClass.class); list.addAll(messageListClass1.getList()); setListMessage(messageListClass.getList()); if (atomicInteger.get() == totalPage - 1) { //最后一条退出 if (cloudCallBeak != null) { cloudCallBeak.onSuccess(list); } } } @Override public void onFailure(HDLException e) { atomicInteger.set(atomicInteger.get() + 1); if (atomicInteger.get() == totalPage - 1) { //最后一条退出 if (cloudCallBeak != null) { cloudCallBeak.onSuccess(list); } } } }); } } @Override public void onFailure(HDLException e) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(e); } } }); } /** * 获取消息详情 * * @param msgId 消息id * @param cloudCallBeak - */ public void getMessageInfo(String msgId, CloudCallBeak cloudCallBeak) { String requestUrl = HttpApi.POST_Message_Info; JsonObject json = new JsonObject(); json.addProperty("msgId", msgId); HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak() { @Override public void onSuccess(String jsonStr) { if (TextUtils.isEmpty(jsonStr)) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(null); } } Gson gson = new Gson(); MessageBean messageBean = gson.fromJson(jsonStr, MessageBean.class); if (cloudCallBeak != null) { cloudCallBeak.onSuccess(messageBean); } } @Override public void onFailure(HDLException e) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(e); } } }); } /** * 消息标记已读(已解除) * * @param msgId 消息id * @param cloudCallBeak - */ public void getMessageMessageSolve(String msgId, CloudCallBeak cloudCallBeak) { String requestUrl = HttpApi.POST_Message_Solve; JsonObject json = new JsonObject(); json.addProperty("msgId", msgId); HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak() { @Override public void onSuccess(String str) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(true); } } @Override public void onFailure(HDLException e) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(e); } } }); } public enum MessageStatus { all,//全部 untreated,//未处理 processed,//已处理 } static class MessageListClass { //总条数 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; } } }