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.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; } /** * 获取未处理消息数量 * * @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 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()); //总共有多少页 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()); 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 cloudCallBeak - */ public void getMessageInfo(CloudCallBeak cloudCallBeak) { String requestUrl = HttpApi.POST_Message_Info; JsonObject json = new JsonObject(); 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 getMessageUntreatedCount(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; } } }