From dbff6d6f9200417ea60e2fe507b79cbe2eb7ea32 Mon Sep 17 00:00:00 2001 From: mac <user@users-MacBook-Pro.local> Date: 星期四, 11 一月 2024 18:19:48 +0800 Subject: [PATCH] 2024年01月11日18:19:42 --- app/src/main/java/com/hdl/photovoltaic/other/HdlMessageLogic.java | 319 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 264 insertions(+), 55 deletions(-) diff --git a/app/src/main/java/com/hdl/photovoltaic/other/HdlMessageLogic.java b/app/src/main/java/com/hdl/photovoltaic/other/HdlMessageLogic.java index 93f1665..43e9624 100644 --- a/app/src/main/java/com/hdl/photovoltaic/other/HdlMessageLogic.java +++ b/app/src/main/java/com/hdl/photovoltaic/other/HdlMessageLogic.java @@ -1,5 +1,6 @@ package com.hdl.photovoltaic.other; +import android.os.Build; import android.text.TextUtils; import com.google.gson.Gson; @@ -12,6 +13,7 @@ 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; @@ -20,6 +22,8 @@ */ public class HdlMessageLogic { private static volatile HdlMessageLogic sHdlMessageLogic; + + private int pageSize = 50;//椤垫暟 /** * 鑾峰彇褰撳墠瀵硅薄 @@ -41,25 +45,29 @@ /** * 鑾峰彇鍙戠敓涓紦瀛樺垪琛� */ - public List<MessageBean> getRecoverMessageMemoryList() { + 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 newList; + return sortList(newList); } + /** - * 鑾峰彇澶勭悊涓紦瀛樺垪琛� + * 鑾峰彇鎭㈠涓紦瀛樺垪琛� */ - public List<MessageBean> getNascentMessageMemoryList() { + public List<MessageBean> getRecoverMessageMemoryList() { if (this.mListMessage == null || this.mListMessage.size() == 0) { return new ArrayList<>(); } @@ -71,13 +79,152 @@ } } + 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> getListMessage() { + 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) { @@ -87,23 +234,9 @@ this.mListMessage.addAll(list); return; } - List<MessageBean> 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.setListMessage(list.get(i)); } - this.mListMessage.addAll(newList); } catch (Exception ignored) { } } @@ -146,7 +279,16 @@ * @param cloudCallBeak - */ public void getAllMessageList(CloudCallBeak<List<MessageBean>> cloudCallBeak) { - getMessageList(MessageStatus.all, cloudCallBeak); + getMessageList(MessageStateType.all, cloudCallBeak); + } + + /** + * 鑾峰彇鎭㈠涓垪琛� + * + * @param cloudCallBeak - + */ + public void getRecoverMessageList(CloudCallBeak<List<MessageBean>> cloudCallBeak) { + getMessageList(MessageStateType.processed, cloudCallBeak); } /** @@ -154,33 +296,22 @@ * * @param cloudCallBeak - */ - public void getRecoverMessageList(CloudCallBeak<List<MessageBean>> cloudCallBeak) { - getMessageList(MessageStatus.untreated, cloudCallBeak); - } - - /** - * 鑾峰彇澶勭悊涓垪琛� - * - * @param cloudCallBeak - - */ public void getNascentMessageList(CloudCallBeak<List<MessageBean>> cloudCallBeak) { - getMessageList(MessageStatus.processed, cloudCallBeak); + getMessageList(MessageStateType.untreated, cloudCallBeak); } /** * 鑾峰彇娑堟伅鍒楄〃 * - * @param messageStatus all:鍏ㄩ儴,untreated:鏈鐞�,processed:宸插鐞�; - * @param cloudCallBeak - + * @param messageStateType all:鍏ㄩ儴,UNTREATED:鏈鐞�,PROCESSED:宸插鐞�; + * @param cloudCallBeak - */ - public void getMessageList(MessageStatus messageStatus, CloudCallBeak<List<MessageBean>> cloudCallBeak) { + private void getMessageList(String messageStateType, CloudCallBeak<List<MessageBean>> 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");//宸插鐞� + if (!MessageStateType.all.equals(messageStateType)) { + json.addProperty("status", messageStateType); } json.addProperty("pageNo", 1);//椤电爜 json.addProperty("pageSize", 50);//椤垫暟 @@ -189,15 +320,18 @@ HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() { @Override public void onSuccess(String jsonStr) { - if (cloudCallBeak != null) { - cloudCallBeak.onSuccess(new ArrayList<>()); + if (TextUtils.isEmpty(jsonStr)) { + if (cloudCallBeak != null) { + cloudCallBeak.onSuccess(new ArrayList<>()); + } + return; } Gson gson = new Gson(); - MessageListClass messageListClass = gson.fromJson(jsonStr, MessageListClass.class); - list.addAll(messageListClass.getList()); - setListMessage(messageListClass.getList()); + MessageListClass oldMessageListClass = gson.fromJson(jsonStr, MessageListClass.class); + list.addAll(oldMessageListClass.getList()); + setListMessage(oldMessageListClass.getList()); //鎬诲叡鏈夊灏戦〉 - long totalPage = messageListClass.totalPage; + long totalPage = oldMessageListClass.totalPage; if (totalPage < 2) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(list); @@ -213,9 +347,92 @@ @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()); + 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 messageStateType all:鍏ㄩ儴,UNTREATED:鏈鐞�,PROCESSED:宸插鐞�; + * @param cloudCallBeak - + */ + private void getMessageList(int pageNo, 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", 50);//椤垫暟 + + 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) { @@ -315,14 +532,6 @@ } - - public enum MessageStatus { - all,//鍏ㄩ儴 - untreated,//鏈鐞� - processed,//宸插鐞� - - - } static class MessageListClass { -- Gitblit v1.8.0