From 134c23aae116f94644d8331c096ff7085e43572b Mon Sep 17 00:00:00 2001
From: wjc <1243177876@qq.com>
Date: 星期三, 16 四月 2025 13:19:51 +0800
Subject: [PATCH] 2025年04月16日13:19:36

---
 app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java |  215 +++++++++++++++++++++++++++--------------------------
 1 files changed, 109 insertions(+), 106 deletions(-)

diff --git a/app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java b/app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java
index eef84cd..8c22b11 100644
--- a/app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java
+++ b/app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java
@@ -38,6 +38,7 @@
 
 import java.lang.reflect.Type;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -91,44 +92,58 @@
      * 鑾峰彇褰撳墠浣忓畢鐨勯�嗗彉鍣ㄥ垪琛�(鍖呮嫭浠庣殑閫嗗彉鍣�)
      *
      * @param homeId                  鐢电珯ID
-     * @param cloudInverterDeviceList 杩滅涓婄殑閫嗗彉鍣ㄥ垪琛紙骞剁綉锛岀缃戯紝璐熻浇涓績锛�
+     * @param cloudInverterDeviceList 鍏冪涓婄殑閫嗗彉鍣ㄥ垪琛紙骞剁綉锛岀缃戯紝璐熻浇涓績锛�
      */
     public List<GatewayBean> getCurrentHomeGatewayList(String homeId, List<CloudInverterDeviceBean> cloudInverterDeviceList) {
-        List<GatewayBean> newList = new ArrayList<>();
-        List<GatewayBean> list = HDLLinkLocalGateway.getInstance().getGatewayList();
-        if (list.size() > 0) {
-            for (int i = 0; i < list.size(); i++) {
-                GatewayBean gatewayBean = list.get(i);
-                if (!getGatewaySpk().contains(gatewayBean.getGatewayType())) {
-                    continue;
-                }
-                if (TextUtils.isEmpty(gatewayBean.getDevice_mac())
-                        || TextUtils.isEmpty(gatewayBean.getSid())
-                        || TextUtils.isEmpty(gatewayBean.getOid())) {
-                    continue;
-                }
-                //鐢╤omeId绛涢�夊綋鍓嶄綇瀹呯殑閫嗗彉鍣ㄥ垪琛�
-                if (gatewayBean.getHomeId().equals(homeId)) {
-                    newList.add(gatewayBean);
-                }
-            }
-        }
-        //杩藉姞杩欎釜鏉′欢鏄洜涓轰笂闈㈡妸HDLLinkLocalGateway.getInstance().getGatewayList()鍒楄〃澶勭悊瀹屽悗,鎺ョ潃鎼滅储灞�鍩熺綉鍙堣繕鍘熷垪琛ㄦ暟鎹紝瀵艰嚧鍑虹幇鏃ф暟鎹紱
-        if (cloudInverterDeviceList != null && cloudInverterDeviceList.size() > 0) {
-            List<GatewayBean> checkNewList = new ArrayList<>();
-            for (int i = 0; i < cloudInverterDeviceList.size(); i++) {
-                CloudInverterDeviceBean cloudInverterDevice = cloudInverterDeviceList.get(i);
-                for (GatewayBean gatewayBean : newList) {
-                    if (cloudInverterDevice.getOsn().equals(gatewayBean.getDevice_mac())) {
-                        checkNewList.add(gatewayBean);
-                        break;
+        try {
+            List<GatewayBean> newList = new ArrayList<>();
+            //浜戠鏈夎澶囧垪琛紝HDLLinkLocalGateway.getInstance().getGatewayList()娌℃湁锛屽嵆鏈湴娌℃湁锛岄噷闈細璋冪敤refreshGatewayCacheData()鏂规硶铏氭嫙涓�涓�嗗彉鍣ㄥ疄浣撴坊鍔犳湰鍦板垪琛ㄩ噷闈紱
+            List<GatewayBean> list = HDLLinkLocalGateway.getInstance().getGatewayList();
+            if (list.size() > 0) {
+                for (int i = 0; i < list.size(); i++) {
+                    GatewayBean gatewayBean = list.get(i);
+                    if (!getGatewaySpk().contains(gatewayBean.getGatewayType())) {
+                        continue;
+                    }
+                    if (TextUtils.isEmpty(gatewayBean.getDevice_mac())
+                            || TextUtils.isEmpty(gatewayBean.getSid())
+                            || TextUtils.isEmpty(gatewayBean.getOid())) {
+                        continue;
+                    }
+                    //鐢╤omeId绛涢�夊綋鍓嶄綇瀹呯殑閫嗗彉鍣ㄥ垪琛�
+                    if (gatewayBean.getHomeId().equals(homeId)) {
+                        newList.add(gatewayBean);
                     }
                 }
             }
-            newList.clear();
-            newList.addAll(checkNewList);
+            //鏈夊缃戯紝浠ヤ簯绔澶囧垪琛ㄤ负鍑�;浜戠娌℃湁锛屾湰鍦板瓨鍦紝鍒欏垹闄ゆ湰鍦帮紱鍚﹀垯锛屾病鏈夊缃戝彧鏈夊眬鍩熺綉锛屼互鏈湴涓轰富,鎼滅储澶氬皯涓澶囧氨鏄剧ず澶氬皯涓�
+            //杩藉姞杩欎釜鏉′欢鏄洜涓轰笂闈㈡妸HDLLinkLocalGateway.getInstance().getGatewayList()鍒楄〃澶勭悊瀹屽悗,鎺ョ潃鎼滅储灞�鍩熺綉鍙堣繕鍘熷垪琛ㄦ暟鎹紝瀵艰嚧鍑虹幇鏃ф暟鎹紱
+            if (cloudInverterDeviceList != null && cloudInverterDeviceList.size() > 0) {
+                List<GatewayBean> checkNewList = new ArrayList<>();
+                for (int i = 0; i < cloudInverterDeviceList.size(); i++) {
+                    CloudInverterDeviceBean cloudInverterDevice = cloudInverterDeviceList.get(i);
+                    for (GatewayBean gatewayBean : newList) {
+                        if (cloudInverterDevice.getOsn().equals(gatewayBean.getDevice_mac())) {
+                            checkNewList.add(gatewayBean);
+                            break;
+                        }
+                    }
+                }
+                newList.clear();
+                newList.addAll(checkNewList);
+            }
+//            // 灏唋ist2鐨勫厓绱犲悎骞跺埌list1鐨勫ご閮�
+//            List<GatewayBean> mockData = getGatewayDeviceListMockData(3);
+//            if (mockData.size() > 0) {
+//                for (GatewayBean mockDatum : mockData) {
+//                    newList.add(0, mockDatum);
+//                }
+//            }
+
+            return newList;
+        } catch (Exception e) {
+            return new ArrayList<>();
         }
-        return newList;
     }
 
 
@@ -142,7 +157,7 @@
         if (newGatewayBean == null || TextUtils.isEmpty(homeId)) {
             return;
         }
-        List<GatewayBean> list = getCurrentHomeGatewayList(homeId,null);
+        List<GatewayBean> list = getCurrentHomeGatewayList(homeId, null);
         if (list == null || list.size() == 0) {
             return;
         }
@@ -171,7 +186,7 @@
         if (TextUtils.isEmpty(mac)) {
             return;
         }
-        List<GatewayBean> list = getCurrentHomeGatewayList(homeId,null);
+        List<GatewayBean> list = getCurrentHomeGatewayList(homeId, null);
         if (list == null || list.size() == 0) {
             return;
         }
@@ -198,7 +213,7 @@
         if (TextUtils.isEmpty(deviceId)) {
             return;
         }
-        List<GatewayBean> list = getCurrentHomeGatewayList(homeId,null);
+        List<GatewayBean> list = getCurrentHomeGatewayList(homeId, null);
         if (list == null || list.size() == 0) {
             return;
         }
@@ -386,7 +401,7 @@
                                 updateOidAdd(homeId, newOidList, new CloudCallBeak<Boolean>() {
                                     @Override
                                     public void onSuccess(Boolean obj) {
-                                        HdlLogLogic.print("涓婁紶oid鍒楄〃鍒颁簯绔垚鍔�---浣忓畢id:" + homeId + "---mac:" + gatewayBean.getDevice_mac(), true);
+                                        HdlLogLogic.print("涓婁紶oid鍒楄〃鍒颁簯绔垚鍔�(澧為噺)---浣忓畢id:" + homeId + "---mac:" + gatewayBean.getDevice_mac() + "---\r\n鏁版嵁---" + new Gson().toJson(oidBeanList), true);
                                     }
 
                                     @Override
@@ -467,8 +482,16 @@
             public void onSuccess(String str) {
                 if (cloudCallBeak != null) {
                     cloudCallBeak.onSuccess(true);
-                    //涓存椂鐨勯�昏緫锛屼笂浼爋id鍒楄〃鍒颁簯绔�
-                    List<GatewayBean> list = HdlDeviceLogic.getInstance().getCurrentHomeGatewayList(homeId,null);
+                    List<GatewayBean> list = new ArrayList<>();
+                    GatewayBean gatewayBean = new GatewayBean();
+                    gatewayBean.setHomeId(homeId);
+                    gatewayBean.setDevice_mac(mac);
+                    gatewayBean.setSpk(spk);
+                    gatewayBean.setSid(sid);
+                    gatewayBean.setOid(oid);
+                    gatewayBean.setDevice_name(name);
+                    list.add(gatewayBean);
+                    //娣诲姞璁惧鎴愬姛鍚庯紝涓婁紶oid鍒楄〃鍒颁簯绔�
                     uploadOidDataToCloud(homeId, list, true, null);
                 }
             }
@@ -1100,8 +1123,8 @@
     }
 
     /**
-     * 鑾峰彇閫嗗彉鍣ㄥ垪琛�(鏁村悎浜戠鍜屾湰鍦板垪琛�)
-     * 娉ㄦ剰:鏈夊缃戯紝浠ヤ簯绔澶囦负鍑�,鏈湴瀛樺湪锛屼簯绔病鏈夊垯鍒犻櫎锛涘惁鍒欙紝娌℃湁澶栫綉鍙湁灞�鍩熺綉锛屼互鏈湴涓轰富,鎼滅储澶氬皯涓澶囧氨鏄剧ず澶氬皯涓�
+     * 鑾峰彇閫嗗彉鍣ㄥ垪琛�,鏁村悎浜戠閫嗗彉鍣ㄥ垪琛ㄥ拰鏈湴閫嗗彉鍣ㄥ垪琛�(璁惧绫诲瀷鏈�:骞剁綉閫嗗彉鍣紝绂荤嚎閫嗗彉鍣紝璐熻浇涓績璁惧);
+     * 娉ㄦ剰:鏈夊缃戯紝浠ヤ簯绔澶囧垪琛ㄤ负鍑�;浜戠娌℃湁锛屾湰鍦板瓨鍦紝鍒欏垹闄ゆ湰鍦帮紱鍚﹀垯锛屾病鏈夊缃戝彧鏈夊眬鍩熺綉锛屼互鏈湴涓轰富,鎼滅储澶氬皯涓澶囧氨鏄剧ず澶氬皯涓�
      *
      * @param homeId        浣忓畢id
      * @param cloudCallBeak 杩斿洖閫嗗彉鍣ㄥ垪琛�
@@ -1110,7 +1133,6 @@
         searchCurrentHomeGateway(homeId, new GatewayCallBack() {
             @Override
             public void onSuccess(List<GatewayBean> gatewayBeanList) {
-                //灞�鍩熺綉鏈�2绉嶆儏鍐�(1:鏈夊眬鍩熺綉锛屾湁澶栫綉锛�2:鏈夊眬鍩熺綉锛屾病鏈夊缃�);
                 //鍚戜簯绔幏鍙栭�嗗彉鍣ㄥ垪琛�
                 getCloudInverterDeviceList(homeId, new CloudCallBeak<List<CloudInverterDeviceBean>>() {
                     @Override
@@ -1123,38 +1145,14 @@
                                     //鍚堝苟璐熻浇涓績璁惧鍒楄〃锛岀劧鍚庡湪涓�璧峰仛澶勭悊
                                     inverterDeviceList.addAll(loadCentreDeviceList);
                                 }
-                                List<String> removeMacList = new ArrayList<>();
-                                for (int j = 0; j < HDLLinkLocalGateway.getInstance().getGatewayList().size(); j++) {
-                                    GatewayBean gatewayBean = HDLLinkLocalGateway.getInstance().getGatewayList().get(j);
-                                    if (queryMacInverter(inverterDeviceList, gatewayBean.getDevice_mac())) {
-                                        //鏈湴鏈夛紝浜戠娌℃湁,鍒犻櫎鏈湴锛�
-                                        removeMacList.add(gatewayBean.getDevice_mac());
-                                    }
-                                }
-                                for (int i = 0; i < removeMacList.size(); i++) {
-                                    //鍒犻櫎鏈湴鐨勯�嗗彉鍣�
-                                    removeLocalInverter(removeMacList.get(i));
-                                }
-                                //鎯呭喌1:鏈夊眬鍩熺綉锛屾湁澶栫綉锛�
+                                //璁剧疆璁惧鐨勮繙绋嬩俊鎭�
                                 setDeviceRemoteInfo(inverterDeviceList, homeId, cloudCallBeak);
                             }
 
                             @Override
                             public void onFailure(HDLException e) {
                                 //鍚戜簯绔幏鍙栬礋杞戒腑蹇冭澶囧垪琛ㄥけ璐ュ悗锛屼粛鐒跺鐞嗛�嗗彉鍣ㄨ澶囧垪琛�
-                                List<String> removeMacList = new ArrayList<>();
-                                for (int j = 0; j < HDLLinkLocalGateway.getInstance().getGatewayList().size(); j++) {
-                                    GatewayBean gatewayBean = HDLLinkLocalGateway.getInstance().getGatewayList().get(j);
-                                    if (queryMacInverter(inverterDeviceList, gatewayBean.getDevice_mac())) {
-                                        //浜戠娌℃湁,鏈湴鏈夛紝鍒犻櫎鏈湴锛�
-                                        removeMacList.add(gatewayBean.getDevice_mac());
-                                    }
-                                }
-                                for (int i = 0; i < removeMacList.size(); i++) {
-                                    //鍒犻櫎鏈湴鐨勯�嗗彉鍣�
-                                    removeLocalInverter(removeMacList.get(i));
-                                }
-                                //鎯呭喌1:鏈夊眬鍩熺綉锛屾湁澶栫綉锛�
+                                //璁剧疆璁惧鐨勮繙绋嬩俊鎭�
                                 setDeviceRemoteInfo(inverterDeviceList, homeId, cloudCallBeak);
                             }
                         });
@@ -1164,7 +1162,6 @@
 
                     @Override
                     public void onFailure(HDLException e) {
-                        ///鎯呭喌2:鏈夊眬鍩熺綉锛屾病鏈夊缃�;
                         //鏈湴鏈夐�嗗彉鍣ㄥ垪琛�,鑾峰彇浜戠缁戝畾閫嗗彉鍣ㄥけ璐�,榛樿杩斿洖鏈湴閫嗗彉鍣ㄥ垪琛�;
                         //鍚戜簯绔幏鍙栬礋杞戒腑蹇冨垪琛�
                         getLoadCentreDeviceList(homeId, new CloudCallBeak<List<CloudInverterDeviceBean>>() {
@@ -1172,27 +1169,12 @@
                             public void onSuccess(List<CloudInverterDeviceBean> loadCentreDeviceList) {
                                 if (loadCentreDeviceList == null) {
                                     if (cloudCallBeak != null) {
+                                        //娌℃湁鏁版嵁锛岄粯璁よ繑鍥炴湰鍦伴�嗗彉鍣ㄥ垪琛�;
                                         cloudCallBeak.onSuccess(getCurrentHomeGatewayList(homeId, null));
                                     }
                                     return;
                                 }
-                                List<String> removeMacList = new ArrayList<>();
-                                for (int j = 0; j < HDLLinkLocalGateway.getInstance().getGatewayList().size(); j++) {
-                                    GatewayBean gatewayBean = HDLLinkLocalGateway.getInstance().getGatewayList().get(j);
-                                    if (!isLoadCenterSpk(gatewayBean.getSpk())) {
-                                        //涓嶆槸璐熻浇涓績鐨剆pk涓嶅仛澶勭悊锛�
-                                        continue;
-                                    }
-                                    if (queryMacInverter(loadCentreDeviceList, gatewayBean.getDevice_mac())) {
-                                        //浜戠娌℃湁,鏈湴鏈夛紝鍒犻櫎鏈湴锛�
-                                        removeMacList.add(gatewayBean.getDevice_mac());
-                                    }
-                                }
-                                for (int i = 0; i < removeMacList.size(); i++) {
-                                    //鍒犻櫎鏈湴鐨勯�嗗彉鍣�
-                                    removeLocalInverter(removeMacList.get(i));
-                                }
-                                //鎯呭喌1:鏈夊眬鍩熺綉锛屾湁澶栫綉锛�
+                                //璁剧疆璁惧鐨勮繙绋嬩俊鎭�
                                 setDeviceRemoteInfo(loadCentreDeviceList, homeId, cloudCallBeak);
                             }
 
@@ -1205,16 +1187,14 @@
                             }
                         });
 
-//                        if (cloudCallBeak != null) {
-//                            cloudCallBeak.onSuccess(getCurrentHomeGatewayList(homeId));
-//                        }
                     }
                 });
             }
 
             @Override
             public void onError(HDLLinkException e) {
-                //澶栫綉鍙湁1绉嶆儏鍐�(鏈湴鎼滅储閫嗗彉鍣ㄥ垪琛ㄥけ璐ヤ簡)
+                //澶栫綉杩涙潵鍏堛�愰粯璁ゃ�戞竻绌烘湰鍦伴�嗗彉鍣ㄥ垪琛�
+                HDLLinkLocalGateway.getInstance().getGatewayList().clear();
                 //鍚戜簯绔幏鍙栭�嗗彉鍣ㄥ垪琛�
                 getCloudInverterDeviceList(homeId, new CloudCallBeak<List<CloudInverterDeviceBean>>() {
                     @Override
@@ -1223,30 +1203,26 @@
                         getLoadCentreDeviceList(homeId, new CloudCallBeak<List<CloudInverterDeviceBean>>() {
                             @Override
                             public void onSuccess(List<CloudInverterDeviceBean> loadCentreDeviceList) {
-                                //澶栫綉杩涙潵鍏堛�愰粯璁ゃ�戞竻绌烘湰鍦伴�嗗彉鍣ㄥ垪琛�
-                                HDLLinkLocalGateway.getInstance().getGatewayList().clear();
+
                                 List<CloudInverterDeviceBean> newList = new ArrayList<>();
                                 if (cloudInverterList != null) {
+                                    //娣诲姞閫嗗彉鍣ㄨ澶囧垪琛�
                                     newList.addAll(cloudInverterList);
                                 }
                                 if (loadCentreDeviceList != null) {
+                                    //娣诲姞璐熻浇涓績璁惧鍒楄〃
                                     newList.addAll(loadCentreDeviceList);
                                 }
-                                //閫嗗彉鍣ㄥ垪琛ㄥ拰璐熻浇涓績鍒楄〃鐩稿姞
+                                //鏁村悎璁惧鍒楄〃鍚�,鍐嶄竴璧疯缃澶囩殑杩滅▼淇℃伅
                                 setDeviceRemoteInfo(newList, homeId, cloudCallBeak);
                             }
 
                             @Override
                             public void onFailure(HDLException e) {
-                                //澶栫綉杩涙潵鍏堛�愰粯璁ゃ�戞竻绌烘湰鍦伴�嗗彉鍣ㄥ垪琛�
-                                //鍚戜簯绔幏鍙栬礋杞戒腑蹇冨垪琛ㄥけ璐�,鐩存帴杩斿洖閫嗗彉鍣ㄥ垪琛紱
-                                HDLLinkLocalGateway.getInstance().getGatewayList().clear();
+                                //璁剧疆璁惧鐨勮繙绋嬩俊鎭�
                                 setDeviceRemoteInfo(cloudInverterList, homeId, cloudCallBeak);
                             }
                         });
-//                        //澶栫綉杩涙潵鍏堛�愰粯璁ゃ�戞竻绌烘湰鍦伴�嗗彉鍣ㄥ垪琛�
-//                        HDLLinkLocalGateway.getInstance().getGatewayList().clear();
-//                        setDeviceRemoteInfo(list, homeId, cloudCallBeak);
                     }
 
                     @Override
@@ -1256,22 +1232,18 @@
                         getLoadCentreDeviceList(homeId, new CloudCallBeak<List<CloudInverterDeviceBean>>() {
                             @Override
                             public void onSuccess(List<CloudInverterDeviceBean> loadCentreDeviceList) {
-                                //澶栫綉杩涙潵鍏堛�愰粯璁ゃ�戞竻绌烘湰鍦伴�嗗彉鍣ㄥ垪琛�
-                                HDLLinkLocalGateway.getInstance().getGatewayList().clear();
-                                //閫嗗彉鍣ㄥ垪琛ㄥ拰璐熻浇涓績鍒楄〃
+                                //璁剧疆璁惧鐨勮繙绋嬩俊鎭�
                                 setDeviceRemoteInfo(loadCentreDeviceList, homeId, cloudCallBeak);
                             }
 
                             @Override
                             public void onFailure(HDLException e) {
+                                //閮芥槸鑾峰彇澶辫触鐨勮瘽,鐩存帴杩斿洖绌哄垪琛�;
                                 if (cloudCallBeak != null) {
-                                    cloudCallBeak.onFailure(e);
+                                    cloudCallBeak.onSuccess(new ArrayList<>());
                                 }
                             }
                         });
-//                        if (cloudCallBeak != null) {
-//                            cloudCallBeak.onFailure(e);
-//                        }
                     }
                 });
             }
@@ -1291,7 +1263,6 @@
             if (cloudCallBeak != null) {
                 cloudCallBeak.onSuccess(getCurrentHomeGatewayList(homeId, list));
             }
-
             return;
         }
         AtomicInteger atomicInteger = new AtomicInteger(0);
@@ -1826,6 +1797,38 @@
     }
 
     /**
+     * 妯℃嫙閫嗗彉鍣ㄨ澶囧垪琛�
+     *
+     * @param sum 妯℃嫙澶氬皯涓�
+     * @return 杩斿洖閫嗗彉鍣ㄥ垪琛�
+     */
+    public List<GatewayBean> getGatewayDeviceListMockData(int sum) {
+
+        try {
+            List<GatewayBean> list = new ArrayList<>();
+            for (int i = 0; i < sum; i++) {
+                String spk = getGatewaySpk().get(i % getGatewaySpk().size());
+                GatewayBean gatewayBean = new GatewayBean();
+                gatewayBean.setHomeId("100000000" + i);
+                gatewayBean.setDevice_mac("200000000" + i);
+                gatewayBean.setSpk(spk);
+                gatewayBean.setGateway_type(spk);
+                gatewayBean.setMaster("true");
+                gatewayBean.setSid("300000000" + i);
+                gatewayBean.setOid("400000000" + i);
+                gatewayBean.setGatewayId("500000000" + i);
+                gatewayBean.setDevice_name("妯℃嫙-" + i + "(" + spk + ")");
+                gatewayBean.setDeviceStatus(5);//榛樿閮芥槸绂荤嚎卢
+                list.add(gatewayBean);
+            }
+            return list;
+        } catch (Exception ignored) {
+            return new ArrayList<>();
+        }
+
+    }
+
+    /**
      * 閫嗗彉鍣╯pk
      */
     public final String INVERTER_DEVICE_SPK = "energy.hdl_inverter";

--
Gitblit v1.8.0