package com.hdl.photovoltaic.other; 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.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.Comparator; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; /** * 警报消息中心逻辑 */ public class HdlMessageLogic { private static volatile HdlMessageLogic sHdlMessageLogic; private final int pageSize = 50;//页数 private List mListMessage = new ArrayList<>(); /** * 获取当前对象 * * @return HdlAccountLogic */ public static synchronized HdlMessageLogic getInstance() { if (sHdlMessageLogic == null) { synchronized (HdlMessageLogic.class) { if (sHdlMessageLogic == null) { sHdlMessageLogic = new HdlMessageLogic(); } } } return sHdlMessageLogic; } public void clearListMessage() { if (mListMessage.size() > 0) { mListMessage.clear(); } } /** * 获取发生中缓存列表 */ 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 == null) { continue; } if (messageBean.getStatus().equals(MessageStateType.untreated)) { newList.add(messageBean); } } return sortList(newList); } /** * 获取恢复中缓存列表 */ 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.processed)) { newList.add(messageBean); } } return sortList(newList); } /** * 列表进行排序 * * @param list 源数据 * @return - */ private List sortList(List list) { List newList = new ArrayList<>(); List readList = new ArrayList<>(); List unReadList = new ArrayList<>(); for (int i = 0; i < list.size(); i++) { MessageBean messageBean = list.get(i); if (messageBean.isRead()) { //已读 readList.add(messageBean); } else { //未读 unReadList.add(messageBean); } } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { readList.sort(new Comparator() { @Override public int compare(MessageBean o1, MessageBean o2) { if (o1 == null && o2 == null) { return -1; } //倒序(顺序 Long.compare(o2.getCreateTime(), o1.getCreateTime())) return Long.compare(o1.getCreateTime(), o2.getCreateTime()); } }); } if (unReadList.size() > 0) { newList.addAll(unReadList); } if (readList.size() > 0) { newList.addAll(readList); } return newList; } public List getAllMessageList() { return mListMessage; } /** * 设置读取状态 * * @param msgId -消息ID * @param read 是否已读取 true表示已读取 * @param messageStateType UNTREATED : 未处理,PROCESSED : 已处理 */ public void setMessageState(long msgId, boolean read, String messageStateType) { try { if (msgId == 0) { return; } for (int i = 0; i < mListMessage.size(); i++) { MessageBean messageBean = mListMessage.get(i); if (messageBean == null) { continue; } if (messageBean.getMsgId() == msgId) { messageBean.setRead(read); if (!TextUtils.isEmpty(messageStateType)) { messageBean.setStatus(messageStateType); } break; } } } catch (Exception ignored) { } } /** * 添加消息到列表里面 * * @param messageBean - */ public void setListMessage(MessageBean messageBean) { try { if (messageBean == null) { return; } boolean if_boolean = false; for (int i = 0; i < mListMessage.size(); i++) { if (mListMessage.get(i).getMsgId().toString().equals(messageBean.getMsgId().toString())) { //存在替换 mListMessage.remove(i); mListMessage.add(i, messageBean); if_boolean = true; break; } } if (!if_boolean) { //没有添加 this.mListMessage.add(messageBean); } } catch (Exception e) { String mes = e.getMessage(); HdlLogLogic.print("--->" + mes); } } /** * 添加消息到列表里面 * * @param messageBean - * @param position 表示加到列表的位置 */ public void setListMessage(MessageBean messageBean, int position) { try { if (messageBean == null) { return; } boolean if_boolean = false; for (int i = 0; i < mListMessage.size(); i++) { if (mListMessage.get(i).getMsgId().toString().equals(messageBean.getMsgId().toString())) { //存在替换 mListMessage.remove(i); mListMessage.add(i, messageBean); if_boolean = true; break; } } if (!if_boolean) { //没有添加 this.mListMessage.add(position, messageBean); } } catch (Exception e) { String mes = e.getMessage(); HdlLogLogic.print("--->" + mes); } } /** * 添加消息到列表里面 * * @param list - */ public void setListMessage(List list) { try { if (list == null || list.size() == 0) { return; } if (this.mListMessage.size() == 0) { this.mListMessage.addAll(list); return; } for (int i = 0; i < list.size(); i++) { this.setListMessage(list.get(i)); } } catch (Exception ignored) { } } /** * 获取未处理缓存消息数量 */ public String getMessageUntreatedMemoryCount() { if (this.mListMessage == null || this.mListMessage.size() == 0) { return "0"; } List newList = new ArrayList<>(); for (int i = 0; i < mListMessage.size(); i++) { MessageBean messageBean = mListMessage.get(i); if (messageBean == null) { continue; } if (!messageBean.getStatus().equals(MessageStateType.untreated)) { continue; } if (!messageBean.isRead()) { newList.add(messageBean); } } return newList.size() + ""; } /** * 获取未处理消息数量 * * @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(MessageStateType.all, cloudCallBeak); } /** * 获取恢复中列表 * * @param cloudCallBeak - */ public void getRecoverMessageList(CloudCallBeak> cloudCallBeak) { getMessageList(MessageStateType.processed, cloudCallBeak); } /** * 获取发生中列表 * * @param cloudCallBeak - */ public void getNascentMessageList(CloudCallBeak> cloudCallBeak) { getMessageList(MessageStateType.untreated, cloudCallBeak); } /** * 获取消息列表 * * @param messageStateType all:全部,UNTREATED:未处理,PROCESSED:已处理; * @param cloudCallBeak - */ private void getMessageList(String messageStateType, CloudCallBeak> cloudCallBeak) { String requestUrl = HttpApi.POST_Message_List; JsonObject json = new JsonObject(); if (!MessageStateType.all.equals(messageStateType)) { json.addProperty("status", messageStateType); } json.addProperty("pageNo", 1);//页码 json.addProperty("pageSize", pageSize);//页数 List list = new ArrayList<>(); HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak() { @Override public void onSuccess(String jsonStr) { if (TextUtils.isEmpty(jsonStr)) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(new ArrayList<>()); } return; } Gson gson = new Gson(); MessageListClass oldMessageListClass = gson.fromJson(jsonStr, MessageListClass.class); list.addAll(oldMessageListClass.getList()); setListMessage(oldMessageListClass.getList()); //总共有多少页 long totalPage = oldMessageListClass.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 newMessageListClass = gson.fromJson(jsonStr, MessageListClass.class); list.addAll(newMessageListClass.getList()); setListMessage(newMessageListClass.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 pageNo 页码 * @param messageStateType all:全部,UNTREATED:未处理,PROCESSED:已处理; * @param cloudCallBeak - */ public void getPageNoMessageList(int pageNo, String messageStateType, CloudCallBeak cloudCallBeak) { String requestUrl = HttpApi.POST_Message_List; JsonObject json = new JsonObject(); if (!MessageStateType.all.equals(messageStateType)) { json.addProperty("status", messageStateType); } json.addProperty("pageNo", pageNo);//页码 json.addProperty("pageSize", pageSize);//页数 HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak() { @Override public void onSuccess(String jsonStr) { if (TextUtils.isEmpty(jsonStr)) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(new MessageListClass()); } return; } Gson gson = new Gson(); MessageListClass oldMessageListClass = gson.fromJson(jsonStr, MessageListClass.class); setListMessage(oldMessageListClass.getList()); if (cloudCallBeak != null) { cloudCallBeak.onSuccess(oldMessageListClass); } } @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 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; } } }