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<MessageBean> 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<MessageBean> getNascentMessageMemoryList() {
|
if (this.mListMessage == null || this.mListMessage.size() == 0) {
|
return new ArrayList<>();
|
}
|
List<MessageBean> 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<MessageBean> getRecoverMessageMemoryList() {
|
if (this.mListMessage == null || this.mListMessage.size() == 0) {
|
return new ArrayList<>();
|
}
|
List<MessageBean> 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<MessageBean> sortList(List<MessageBean> list) {
|
List<MessageBean> newList = new ArrayList<>();
|
List<MessageBean> readList = new ArrayList<>();
|
List<MessageBean> 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<MessageBean>() {
|
@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<MessageBean> 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<MessageBean> 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<MessageBean> 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<String> cloudCallBeak) {
|
String requestUrl = HttpApi.POST_Message_UntreatedCount;
|
JsonObject json = new JsonObject();
|
HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() {
|
@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<List<MessageBean>> cloudCallBeak) {
|
getMessageList(MessageStateType.all, cloudCallBeak);
|
}
|
|
/**
|
* 获取恢复中列表
|
*
|
* @param cloudCallBeak -
|
*/
|
public void getRecoverMessageList(CloudCallBeak<List<MessageBean>> cloudCallBeak) {
|
getMessageList(MessageStateType.processed, cloudCallBeak);
|
}
|
|
/**
|
* 获取发生中列表
|
*
|
* @param cloudCallBeak -
|
*/
|
public void getNascentMessageList(CloudCallBeak<List<MessageBean>> cloudCallBeak) {
|
getMessageList(MessageStateType.untreated, cloudCallBeak);
|
}
|
|
/**
|
* 获取消息列表
|
*
|
* @param messageStateType all:全部,UNTREATED:未处理,PROCESSED:已处理;
|
* @param cloudCallBeak -
|
*/
|
private void getMessageList(String messageStateType, CloudCallBeak<List<MessageBean>> 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<MessageBean> list = new ArrayList<>();
|
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 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<String>() {
|
@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<MessageListClass> 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<String>() {
|
@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<MessageBean> cloudCallBeak) {
|
String requestUrl = HttpApi.POST_Message_Info;
|
JsonObject json = new JsonObject();
|
json.addProperty("msgId", msgId);
|
HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() {
|
@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<Boolean> cloudCallBeak) {
|
String requestUrl = HttpApi.POST_Message_Solve;
|
JsonObject json = new JsonObject();
|
json.addProperty("msgId", msgId);
|
HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() {
|
@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<MessageBean> 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<MessageBean> getList() {
|
return list == null ? new ArrayList<>() : list;
|
}
|
|
public void setList(List<MessageBean> list) {
|
this.list = list;
|
}
|
}
|
|
}
|