From 8a249407f9a91b696b88d74eea0fbf789d0ee6a4 Mon Sep 17 00:00:00 2001
From: wjc <1243177876@qq.com>
Date: 星期四, 24 四月 2025 10:34:05 +0800
Subject: [PATCH] 2025年04月24日10:34:03

---
 app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java |  379 +++++++++++++++++++++++++++++++++++------------------
 1 files changed, 247 insertions(+), 132 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 571cc42..2a871dd 100644
--- a/app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java
+++ b/app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java
@@ -8,6 +8,8 @@
 import com.google.gson.JsonObject;
 import com.google.gson.reflect.TypeToken;
 import com.hdl.linkpm.sdk.core.exception.HDLException;
+import com.hdl.photovoltaic.bean.InverterBean;
+import com.hdl.photovoltaic.bean.LocalResponse;
 import com.hdl.photovoltaic.bean.PageNumberObject;
 import com.hdl.photovoltaic.config.AppConfigManage;
 import com.hdl.photovoltaic.config.UserConfigManage;
@@ -36,7 +38,10 @@
 
 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;
 import java.util.concurrent.atomic.AtomicInteger;
 
 
@@ -85,24 +90,62 @@
 
     /**
      * 鑾峰彇褰撳墠浣忓畢鐨勯�嗗彉鍣ㄥ垪琛�(鍖呮嫭浠庣殑閫嗗彉鍣�)
+     *
+     * @param homeId                  鐢电珯ID
+     * @param cloudInverterDeviceList 鍏冪涓婄殑閫嗗彉鍣ㄥ垪琛紙骞剁綉锛岀缃戯紝璐熻浇涓績锛�
      */
-    public List<GatewayBean> getCurrentHomeGatewayList(String homeId) {
-        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 (TextUtils.isEmpty(gatewayBean.getDevice_mac())) {
-                    continue;
-                }
-                //鐢╤omeId绛涢�夊綋鍓嶄綇瀹呯殑閫嗗彉鍣ㄥ垪琛�
-                if (gatewayBean.getHomeId().equals(homeId)) {
-                    newList.add(gatewayBean);
+    public List<GatewayBean> getCurrentHomeGatewayList(String homeId, List<CloudInverterDeviceBean> cloudInverterDeviceList) {
+        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);
+                    }
                 }
             }
+            //鏈夊缃戯紝浠ヤ簯绔澶囧垪琛ㄤ负鍑�;浜戠娌℃湁锛屾湰鍦板瓨鍦紝鍒欏垹闄ゆ湰鍦帮紱鍚﹀垯锛屾病鏈夊缃戝彧鏈夊眬鍩熺綉锛屼互鏈湴涓轰富,鎼滅储澶氬皯涓澶囧氨鏄剧ず澶氬皯涓�
+            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);
+
+            }
+//            // 妯℃嫙璁惧鍒楄〃鏁版嵁
+//            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;
     }
+
 
     /**
      * 娣诲姞閫嗗彉鍣ㄥ埌缂撳瓨鍒楄〃閲岄潰鍘�
@@ -114,7 +157,7 @@
         if (newGatewayBean == null || TextUtils.isEmpty(homeId)) {
             return;
         }
-        List<GatewayBean> list = getCurrentHomeGatewayList(homeId);
+        List<GatewayBean> list = getCurrentHomeGatewayList(homeId, null);
         if (list == null || list.size() == 0) {
             return;
         }
@@ -143,7 +186,7 @@
         if (TextUtils.isEmpty(mac)) {
             return;
         }
-        List<GatewayBean> list = getCurrentHomeGatewayList(homeId);
+        List<GatewayBean> list = getCurrentHomeGatewayList(homeId, null);
         if (list == null || list.size() == 0) {
             return;
         }
@@ -170,7 +213,7 @@
         if (TextUtils.isEmpty(deviceId)) {
             return;
         }
-        List<GatewayBean> list = getCurrentHomeGatewayList(homeId);
+        List<GatewayBean> list = getCurrentHomeGatewayList(homeId, null);
         if (list == null || list.size() == 0) {
             return;
         }
@@ -289,7 +332,8 @@
      * @param whetherToAdd true琛ㄧず鐢ㄥ閲�,false琛ㄧず鐢ㄥ叏閲�
      */
     public void uploadOidDataToCloud(String homeId, List<GatewayBean> list, boolean whetherToAdd, CloudCallBeak<Boolean> callBeak) {
-        if (list == null || list.size() == 0) {
+
+        if (list == null || list.isEmpty()) {
             return;
         }
         if (whetherToAdd) {
@@ -322,6 +366,7 @@
 
                     @Override
                     public void onError(HDLLinkException e) {
+                        HdlLogLogic.print("鑾峰彇oid鍒楄〃澶辫触---浣忓畢id:" + homeId + "---mac:" + gatewayBean.getDevice_mac() + "-->" + e.getMsg() + "(" + e.getCode() + ")", true);
                     }
                 });
                 SystemClock.sleep(200);
@@ -329,10 +374,13 @@
         } else {
             //鍙湁杩涘叆璇︽儏鐣岄潰
             List<OidBean> newOidList = new ArrayList<>();
+            //琛ㄧず涓棿浠讳綍涓�涓幏鍙杘id澶辫触銆傞兘瑕佹敼鍙樼敤澧為噺涓婁紶oid鍒楄〃
+            AtomicBoolean isIncrementalOidAddition = new AtomicBoolean(false);
             AtomicInteger atomicInteger = new AtomicInteger(0);
             for (int i = 0; i < list.size(); i++) {
                 GatewayBean gatewayBean = list.get(i);
                 if (gatewayBean == null || TextUtils.isEmpty(gatewayBean.getDevice_mac())) {
+//                    isIncrementalOidAddition.set(true);
                     continue;
                 }
                 getInverterOidList(gatewayBean.getDevice_mac(), new LinkCallBack<List<OidBean>>() {
@@ -340,46 +388,50 @@
                     public void onSuccess(List<OidBean> oidBeanList) {
                         atomicInteger.set(atomicInteger.get() + 1);
                         if (oidBeanList == null) {
+//                            isIncrementalOidAddition.set(true);
                             return;
                         }
                         newOidList.addAll(oidBeanList);
                         if (atomicInteger.get() == list.size()) {
-                            if (newOidList.size() == 0) {
+                            if (newOidList.isEmpty()) {
                                 return;
                             }
-//                        //澧為噺娣诲姞oid
-//                        updateOidAdd(homeId, oidList, new CloudCallBeak<Boolean>() {
-//                            @Override
-//                            public void onSuccess(Boolean obj) {
-//                                HdlLogLogic.print("涓婁紶oid鍒楄〃鍒颁簯绔垚鍔�---浣忓畢id:" + homeId + "---mac:" + gatewayBean.getDevice_mac(), true);
-//                            }
-//
-//                            @Override
-//                            public void onFailure(HDLException e) {
-//                                HdlLogLogic.print("涓婁紶oid鍒楄〃鍒颁簯绔け璐�---浣忓畢id:" + homeId + "---mac:" + gatewayBean.getDevice_mac() + "-->" + e.getMsg() + "(" + e.getCode() + ")", true);
-//                            }
-//                        });
+                            if (isIncrementalOidAddition.get()) {
+                                //澧為噺娣诲姞oid
+                                updateOidAdd(homeId, newOidList, new CloudCallBeak<Boolean>() {
+                                    @Override
+                                    public void onSuccess(Boolean obj) {
+                                        HdlLogLogic.print("涓婁紶oid鍒楄〃鍒颁簯绔垚鍔�(澧為噺)---浣忓畢id:" + homeId + "---mac:" + gatewayBean.getDevice_mac() + "---\r\n鏁版嵁---" + new Gson().toJson(oidBeanList), true);
+                                    }
 
-                            //鍏ㄩ儴鑾峰彇鍚庡啀涓婁紶
-                            fullUpdateOid(homeId, newOidList, new CloudCallBeak<Boolean>() {
-                                @Override
-                                public void onSuccess(Boolean obj) {
-                                    HdlLogLogic.print("涓婁紶oid鍒楄〃鍒颁簯绔垚鍔�(鍏ㄩ噺)---浣忓畢id:" + homeId + "---mac:" + gatewayBean.getDevice_mac() + "---\r\n鏁版嵁---" + new Gson().toJson(newOidList), true);
-                                }
+                                    @Override
+                                    public void onFailure(HDLException e) {
+                                        HdlLogLogic.print("涓婁紶oid鍒楄〃鍒颁簯绔け璐�---浣忓畢id:" + homeId + "---mac:" + gatewayBean.getDevice_mac() + "-->" + e.getMsg() + "(" + e.getCode() + ")", true);
+                                    }
+                                });
+                            } else {
+                                //鍏ㄩ儴鑾峰彇鍚庡啀涓婁紶
+                                fullUpdateOid(homeId, newOidList, new CloudCallBeak<Boolean>() {
+                                    @Override
+                                    public void onSuccess(Boolean obj) {
+                                        HdlLogLogic.print("涓婁紶oid鍒楄〃鍒颁簯绔垚鍔�(鍏ㄩ噺)---浣忓畢id:" + homeId + "---\r\n鏁版嵁---" + new Gson().toJson(newOidList), true);
+                                    }
 
-                                @Override
-                                public void onFailure(HDLException e) {
-                                    HdlLogLogic.print("涓婁紶oid鍒楄〃鍒颁簯绔け璐�(鍏ㄩ噺)---浣忓畢id:" + homeId + "---mac:" + gatewayBean.getDevice_mac() + "-->" + e.getMsg() + "(" + e.getCode() + ")", true);
-                                }
-                            });
+                                    @Override
+                                    public void onFailure(HDLException e) {
+                                        HdlLogLogic.print("涓婁紶oid鍒楄〃鍒颁簯绔け璐�(鍏ㄩ噺)---浣忓畢id:" + homeId + "-->" + e.getMsg() + "(" + e.getCode() + ")", true);
+                                    }
+                                });
+                            }
                         }
                     }
 
                     @Override
                     public void onError(HDLLinkException e) {
+                        isIncrementalOidAddition.set(true);
                         atomicInteger.set(atomicInteger.get() + 1);
                         if (atomicInteger.get() == list.size()) {
-                            if (newOidList.size() == 0) {
+                            if (newOidList.isEmpty()) {
                                 HdlLogLogic.print("鑾峰彇閫嗗彉鍣╫id鍒楄〃澶辫触---浣忓畢id:" + homeId + "---mac:" + gatewayBean.getDevice_mac() + "-->" + e.getMsg() + "(" + e.getCode() + ")", true);
                                 return;
                             }
@@ -430,8 +482,16 @@
             public void onSuccess(String str) {
                 if (cloudCallBeak != null) {
                     cloudCallBeak.onSuccess(true);
-                    //涓存椂鐨勯�昏緫锛屼笂浼爋id鍒楄〃鍒颁簯绔�
-                    List<GatewayBean> list = HdlDeviceLogic.getInstance().getCurrentHomeGatewayList(homeId);
+                    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);
                 }
             }
@@ -622,7 +682,11 @@
      * @param cloudCallBeak 鍥炶皟update
      */
     public void fullUpdateOid(String homeId, List<OidBean> oidList, CloudCallBeak<Boolean> cloudCallBeak) {
-        if (oidList == null || oidList.size() == 0) {
+        if (!UserConfigManage.getInstance().getHomeId().equals(homeId)) {
+            HdlLogLogic.print("涓婁紶oid鍒楄〃鍒颁簯绔け璐�---褰撳墠浣忓畢id:" + UserConfigManage.getInstance().getHomeId() + "---涓婁紶浣忓畢id:" + homeId, true);
+            return;
+        }
+        if (oidList == null || oidList.isEmpty()) {
             HdlLogLogic.print("oid鍒楄〃涓虹┖锛屾棤娉曞叏閲忔洿鏂皁id鍒颁簯绔�---", true);
             return;
         }
@@ -677,7 +741,11 @@
      * @param cloudCallBeak 鍥炶皟update
      */
     public void updateOidAdd(String homeId, List<OidBean> oidList, CloudCallBeak<Boolean> cloudCallBeak) {
-        if (oidList == null || oidList.size() == 0) {
+        if (!UserConfigManage.getInstance().getHomeId().equals(homeId)) {
+            HdlLogLogic.print("涓婁紶oid鍒楄〃鍒颁簯绔け璐�---褰撳墠浣忓畢id:" + UserConfigManage.getInstance().getHomeId() + "---涓婁紶浣忓畢id:" + homeId, true);
+            return;
+        }
+        if (oidList == null || oidList.isEmpty()) {
             HdlLogLogic.print("oid鍒楄〃涓虹┖锛屾棤娉曞閲忔坊鍔爋id鍒颁簯绔�---", true);
             return;
         }
@@ -687,6 +755,10 @@
         JsonArray jsonArray = new JsonArray();
         for (int i = 0; i < oidList.size(); i++) {
             OidBean oidBean = oidList.get(i);
+            if (TextUtils.isEmpty(oidBean.getDevice_model())) {
+                //涓虹┖杩囨护鎺�;
+                continue;
+            }
             JsonObject jsonObject = new JsonObject();
             jsonObject.addProperty("protocolType", oidBean.getProtocolType());
             jsonObject.addProperty("deviceType", oidBean.getDeviceType());
@@ -709,7 +781,7 @@
                 if (cloudCallBeak != null) {
                     cloudCallBeak.onSuccess(true);
                 }
-                HdlLogLogic.print("澧為噺娣诲姞oid鍒颁簯绔垚鍔�---");
+                HdlLogLogic.print("澧為噺娣诲姞oid鍒颁簯绔垚鍔�---", true);
             }
 
             @Override
@@ -909,7 +981,7 @@
      * @param mac          缃戝叧mac
      * @param linkCallBack 鍥炶皟
      */
-    public void getGatewayInfo(String mac, LinkCallBack<GatewayBean> linkCallBack) {
+    public void getGatewayInfo(String mac, LinkCallBack<InverterBean> linkCallBack) {
         String requestUrl = TopicApi.GET_GATEWAY_INFO;
         JsonObject json = new JsonObject();
         json.addProperty("device_mac", mac);
@@ -925,11 +997,11 @@
                 }
 
                 Gson gson = new Gson();
-                Type typeOfT = new TypeToken<BaseLocalResponse<GatewayBean>>() {
+                Type typeOfT = new TypeToken<BaseLocalResponse<InverterBean>>() {
                 }.getType();
-                BaseLocalResponse<GatewayBean> baseLocalResponse = gson.fromJson(json, typeOfT);
+                BaseLocalResponse<InverterBean> baseLocalResponse = gson.fromJson(json, typeOfT);
                 if (baseLocalResponse == null || baseLocalResponse.getObjects() == null) {
-                    linkCallBack.onSuccess(new GatewayBean());
+                    linkCallBack.onSuccess(new InverterBean());
                 } else {
                     linkCallBack.onSuccess(baseLocalResponse.getObjects());
                 }
@@ -1051,8 +1123,8 @@
     }
 
     /**
-     * 鑾峰彇閫嗗彉鍣ㄥ垪琛�(鏁村悎浜戠鍜屾湰鍦板垪琛�)
-     * 娉ㄦ剰:鏈夊缃戯紝浠ヤ簯绔澶囦负鍑�,鏈湴瀛樺湪锛屼簯绔病鏈夊垯鍒犻櫎锛涘惁鍒欙紝娌℃湁澶栫綉鍙湁灞�鍩熺綉锛屼互鏈湴涓轰富,鎼滅储澶氬皯涓澶囧氨鏄剧ず澶氬皯涓�
+     * 鑾峰彇閫嗗彉鍣ㄥ垪琛�,鏁村悎浜戠閫嗗彉鍣ㄥ垪琛ㄥ拰鏈湴閫嗗彉鍣ㄥ垪琛�(璁惧绫诲瀷鏈�:骞剁綉閫嗗彉鍣紝绂荤嚎閫嗗彉鍣紝璐熻浇涓績璁惧);
+     * 娉ㄦ剰:鏈夊缃戯紝浠ヤ簯绔澶囧垪琛ㄤ负鍑�;浜戠娌℃湁锛屾湰鍦板瓨鍦紝鍒欏垹闄ゆ湰鍦帮紱鍚﹀垯锛屾病鏈夊缃戝彧鏈夊眬鍩熺綉锛屼互鏈湴涓轰富,鎼滅储澶氬皯涓澶囧氨鏄剧ず澶氬皯涓�
      *
      * @param homeId        浣忓畢id
      * @param cloudCallBeak 杩斿洖閫嗗彉鍣ㄥ垪琛�
@@ -1061,7 +1133,6 @@
         searchCurrentHomeGateway(homeId, new GatewayCallBack() {
             @Override
             public void onSuccess(List<GatewayBean> gatewayBeanList) {
-                //灞�鍩熺綉鏈�2绉嶆儏鍐�(1:鏈夊眬鍩熺綉锛屾湁澶栫綉锛�2:鏈夊眬鍩熺綉锛屾病鏈夊缃�);
                 //鍚戜簯绔幏鍙栭�嗗彉鍣ㄥ垪琛�
                 getCloudInverterDeviceList(homeId, new CloudCallBeak<List<CloudInverterDeviceBean>>() {
                     @Override
@@ -1074,38 +1145,14 @@
                                     //鍚堝苟璐熻浇涓績璁惧鍒楄〃锛岀劧鍚庡湪涓�璧峰仛澶勭悊
                                     inverterDeviceList.addAll(loadCentreDeviceList);
                                 }
-                                List<String> removeSidList = new ArrayList<>();
-                                for (int j = 0; j < HDLLinkLocalGateway.getInstance().getGatewayList().size(); j++) {
-                                    GatewayBean gatewayBean = HDLLinkLocalGateway.getInstance().getGatewayList().get(j);
-                                    if (querySidInverter(inverterDeviceList, gatewayBean.getSid())) {
-                                        //鏈湴鏈夛紝浜戠娌℃湁,鍒犻櫎鏈湴锛�
-                                        removeSidList.add(gatewayBean.getSid());
-                                    }
-                                }
-                                for (int i = 0; i < removeSidList.size(); i++) {
-                                    //鍒犻櫎鏈湴鐨勯�嗗彉鍣�
-                                    removeLocalInverter(removeSidList.get(i));
-                                }
-                                //鎯呭喌1:鏈夊眬鍩熺綉锛屾湁澶栫綉锛�
+                                //璁剧疆璁惧鐨勮繙绋嬩俊鎭�
                                 setDeviceRemoteInfo(inverterDeviceList, homeId, cloudCallBeak);
                             }
 
                             @Override
                             public void onFailure(HDLException e) {
                                 //鍚戜簯绔幏鍙栬礋杞戒腑蹇冭澶囧垪琛ㄥけ璐ュ悗锛屼粛鐒跺鐞嗛�嗗彉鍣ㄨ澶囧垪琛�
-                                List<String> removeSidList = new ArrayList<>();
-                                for (int j = 0; j < HDLLinkLocalGateway.getInstance().getGatewayList().size(); j++) {
-                                    GatewayBean gatewayBean = HDLLinkLocalGateway.getInstance().getGatewayList().get(j);
-                                    if (querySidInverter(inverterDeviceList, gatewayBean.getSid())) {
-                                        //鏈湴鏈夛紝浜戠娌℃湁,鍒犻櫎鏈湴锛�
-                                        removeSidList.add(gatewayBean.getSid());
-                                    }
-                                }
-                                for (int i = 0; i < removeSidList.size(); i++) {
-                                    //鍒犻櫎鏈湴鐨勯�嗗彉鍣�
-                                    removeLocalInverter(removeSidList.get(i));
-                                }
-                                //鎯呭喌1:鏈夊眬鍩熺綉锛屾湁澶栫綉锛�
+                                //璁剧疆璁惧鐨勮繙绋嬩俊鎭�
                                 setDeviceRemoteInfo(inverterDeviceList, homeId, cloudCallBeak);
                             }
                         });
@@ -1115,7 +1162,6 @@
 
                     @Override
                     public void onFailure(HDLException e) {
-                        ///鎯呭喌2:鏈夊眬鍩熺綉锛屾病鏈夊缃�;
                         //鏈湴鏈夐�嗗彉鍣ㄥ垪琛�,鑾峰彇浜戠缁戝畾閫嗗彉鍣ㄥけ璐�,榛樿杩斿洖鏈湴閫嗗彉鍣ㄥ垪琛�;
                         //鍚戜簯绔幏鍙栬礋杞戒腑蹇冨垪琛�
                         getLoadCentreDeviceList(homeId, new CloudCallBeak<List<CloudInverterDeviceBean>>() {
@@ -1123,27 +1169,12 @@
                             public void onSuccess(List<CloudInverterDeviceBean> loadCentreDeviceList) {
                                 if (loadCentreDeviceList == null) {
                                     if (cloudCallBeak != null) {
-                                        cloudCallBeak.onSuccess(getCurrentHomeGatewayList(homeId));
+                                        //娌℃湁鏁版嵁锛岄粯璁よ繑鍥炴湰鍦伴�嗗彉鍣ㄥ垪琛�;
+                                        cloudCallBeak.onSuccess(getCurrentHomeGatewayList(homeId, null));
                                     }
                                     return;
                                 }
-                                List<String> removeSidList = new ArrayList<>();
-                                for (int j = 0; j < HDLLinkLocalGateway.getInstance().getGatewayList().size(); j++) {
-                                    GatewayBean gatewayBean = HDLLinkLocalGateway.getInstance().getGatewayList().get(j);
-                                    if (gatewayBean.getSpk().equals(INVERTER_DEVICE_SPK)) {
-                                        //涓嶆槸璐熻浇涓績鐨剆pk涓嶅仛澶勭悊锛�
-                                        continue;
-                                    }
-                                    if (querySidInverter(loadCentreDeviceList, gatewayBean.getSid())) {
-                                        //鏈湴鏈夛紝浜戠娌℃湁,鍒犻櫎鏈湴锛�
-                                        removeSidList.add(gatewayBean.getSid());
-                                    }
-                                }
-                                for (int i = 0; i < removeSidList.size(); i++) {
-                                    //鍒犻櫎鏈湴鐨勯�嗗彉鍣�
-                                    removeLocalInverter(removeSidList.get(i));
-                                }
-                                //鎯呭喌1:鏈夊眬鍩熺綉锛屾湁澶栫綉锛�
+                                //璁剧疆璁惧鐨勮繙绋嬩俊鎭�
                                 setDeviceRemoteInfo(loadCentreDeviceList, homeId, cloudCallBeak);
                             }
 
@@ -1151,21 +1182,19 @@
                             public void onFailure(HDLException e) {
                                 //鍚戜簯绔幏鍙栬礋杞戒腑蹇冭澶囧垪琛ㄥけ璐ュ悗锛岄粯璁よ繑鍥炴湰鍦伴�嗗彉鍣ㄥ垪琛�;
                                 if (cloudCallBeak != null) {
-                                    cloudCallBeak.onSuccess(getCurrentHomeGatewayList(homeId));
+                                    cloudCallBeak.onSuccess(getCurrentHomeGatewayList(homeId, null));
                                 }
                             }
                         });
 
-//                        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
@@ -1174,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
@@ -1207,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);
-//                        }
                     }
                 });
             }
@@ -1240,9 +1261,8 @@
         if (list == null || list.size() == 0) {
             //浜戠娌℃湁缁戝畾閫嗗彉鍣�,榛樿杩斿洖鏈湴閫嗗彉鍣ㄥ垪琛�;
             if (cloudCallBeak != null) {
-                cloudCallBeak.onSuccess(getCurrentHomeGatewayList(homeId));
+                cloudCallBeak.onSuccess(getCurrentHomeGatewayList(homeId, list));
             }
-
             return;
         }
         AtomicInteger atomicInteger = new AtomicInteger(0);
@@ -1258,7 +1278,7 @@
                     //鍒版渶鍚庝竴鏉★紝鎵嶆湁鍥炶皟
                     if (atomicInteger.get() == list.size()) {
                         if (cloudCallBeak != null) {
-                            cloudCallBeak.onSuccess(getCurrentHomeGatewayList(homeId));
+                            cloudCallBeak.onSuccess(getCurrentHomeGatewayList(homeId, list));
                         }
                     }
                 }
@@ -1266,13 +1286,16 @@
                 @Override
                 public void onFailure(HDLException e) {
                     atomicInteger.set(atomicInteger.get() + 1);
+                    //娉ㄦ剰:杩欎釜閫嗗彉鍣ㄥ彧鑳芥湰鍦版帶鍒�(鍥犱负鎷夸笉鍒癿qtt閫氳绉橀挜浠ュ強GatewayID,鏃犳硶杩滅▼鎺у埗)
+                    //鏇存柊閫嗗彉鍣ㄦ湰鍦扮紦瀛樹俊鎭�
+                    refreshGatewayCacheData(false, cloudInverterDeviceBean, null, homeId);
                     //褰撴渶鍚庝竴鏉¤姹傚け璐ヤ簡锛屾墠鏈夊洖璋�
                     if (atomicInteger.get() == list.size()) {
                         if (cloudCallBeak != null) {
-                            cloudCallBeak.onSuccess(getCurrentHomeGatewayList(homeId));
+                            cloudCallBeak.onSuccess(getCurrentHomeGatewayList(homeId, list));
                         }
                     }
-                    HdlLogLogic.print("鑾峰彇璁惧杩滅▼閫氳淇℃伅澶辫触---msg---" + e.getMsg() + "(" + e.getCode() + ")");
+                    HdlLogLogic.print("鑾峰彇璁惧杩滅▼閫氳淇℃伅澶辫触(mac:"+cloudInverterDeviceBean.getOsn()+")------" + e.getMsg() + "(" + e.getCode() + ")",true);
                 }
             });
         }
@@ -1280,16 +1303,16 @@
     }
 
     /**
-     * 閫氳繃sid鏌ヨ閫嗗彉鍣ㄦ槸鍚﹀瓨缁戝畾鍦ㄤ簯绔�
+     * 閫氳繃mac鏌ヨ閫嗗彉鍣ㄦ槸鍚﹀瓨缁戝畾鍦ㄤ簯绔�
      *
      * @param list 浜戠涓婇�嗗彉鍣ㄥ垪琛�
      * @return true涓嶅瓨鍦紝鍚﹀垯瀛樺湪
      */
-    private boolean querySidInverter(List<CloudInverterDeviceBean> list, String sid) {
+    private boolean queryMacInverter(List<CloudInverterDeviceBean> list, String mac) {
         int exists_value = -1;
         for (int i = 0; i < list.size(); i++) {
             CloudInverterDeviceBean cloudInverterDeviceBean = list.get(i);
-            if (sid.equals(cloudInverterDeviceBean.getSid())) {
+            if (mac.equals(cloudInverterDeviceBean.getOsn())) {
                 exists_value = 1;
                 break;
             }
@@ -1339,13 +1362,23 @@
     /**
      * 鍒犻櫎鏈湴缂撳瓨閫嗗彉鍣�
      *
-     * @param sid 璁惧sid
+     * @param mac 璁惧mac
      */
-    private void removeLocalInverter(String sid) {
-        GatewayBean gatewayBean = HDLLinkLocalGateway.getInstance().getLocalGateway(sid);
+    private void removeLocalInverter(String mac) {
+        GatewayBean gatewayBean = HDLLinkLocalGateway.getInstance().getLocalGateway(mac);
         if (gatewayBean != null) {
             HDLLinkLocalGateway.getInstance().getGatewayList().remove(gatewayBean);
         }
+    }
+
+    /**
+     * 鍒ゆ柇spk鏄惁鏄礋杞戒腑蹇�
+     *
+     * @param spk spk
+     * @return 鐪�=true锛屽惁鍒欒繑鍥瀎alse
+     */
+    private boolean isLoadCenterSpk(String spk) {
+        return Objects.equals(spk, LC_SPK);
     }
 
     /**
@@ -1644,6 +1677,46 @@
     }
 
     /**
+     * 閫嗗彉鍣ㄥ瘑鐮佺櫥褰�
+     *
+     * @param mac      閫嗗彉鍣╩ac
+     * @param password 閫嗗彉鍣ㄥ瘑鐮�
+     */
+    public void getPasswordVerification(String mac, String password, LinkCallBack<LocalResponse> callBeak) {
+        String requestUrl = TopicApi.DELETING_GATEWAY_password_verifiy;
+        JsonObject json = new JsonObject();
+        json.addProperty("password", password);
+        json.addProperty("mac", mac);
+        TcpClient.getInstance().sendDataToLinkGateway(mac, false, requestUrl, json, "", new HDLLinkCallBack() {
+            @Override
+            public void onSuccess(String msg) {
+                try {
+
+                    Gson gson = new Gson();
+                    LocalResponse localResponse = gson.fromJson(msg, LocalResponse.class);
+                    if (localResponse == null) {
+                        localResponse = new LocalResponse();
+                    }
+                    if (callBeak != null) {
+                        callBeak.onSuccess(localResponse);
+                    }
+                } catch (Exception e) {
+                    if (callBeak != null) {
+                        callBeak.onSuccess(new LocalResponse());
+                    }
+                }
+            }
+
+            @Override
+            public void onError(HDLLinkException e) {
+                if (callBeak != null) {
+                    callBeak.onError(e);
+                }
+            }
+        });
+    }
+
+    /**
      * 鍒锋柊閫嗗彉鍣ㄧ紦瀛樹俊鎭�(鍖呮嫭璁剧疆mqtt绉橀挜锛�
      * 娉�: //鐩殑鏄负浜嗚幏鍙栨嬁鍒扮綉鍏矷D锛宮qtt閫氳绉橀挜绛変俊鎭紝缂撳瓨鏈湴閫嗗彉鍣ㄥ垪琛ㄩ噷闈紝鍙戦�佹暟鎹暟鎹椂鑷姩鍘荤紦瀛樺垪琛ㄩ噷闈㈠幓鏌ユ壘锛�
      * 1:鏈湴瀛樺湪,鏇存柊淇℃伅鍗冲彲;
@@ -1679,8 +1752,12 @@
         gatewayBean.setDevice_name(cloudInverterDeviceBean.getName());//璁惧鍚嶇О
         gatewayBean.setGatewayType(cloudInverterDeviceBean.getSpk());//璁剧疆spk
         gatewayBean.setLocalEncrypt(true);
+        //绂荤綉閫嗗彉鍣�
+        gatewayBean.setOgMaster(cloudInverterDeviceBean.isOgMaster());
+        //閫嗗彉鍣�
         gatewayBean.setMaster(GatewayMasterType.MasterTrue);//榛樿閮芥槸涓婚�嗗彉鍣�(浠ュ悗鏀寔浠庨�嗗彉鍣ㄨ鏇存敼)
-        gatewayBean.setSystemStatusDesc(cloudInverterDeviceBean.getSystemStatusDesc());//璁惧鐘舵��
+        gatewayBean.setSystemStatusDesc(cloudInverterDeviceBean.getSystemStatusDesc());//璁惧鐘舵�侊紙閫嗗彉鍣ㄨ澶囷級
+        gatewayBean.setWorkStatusDesc(cloudInverterDeviceBean.getWorkStatusDesc());//宸ヤ綔鐘舵�侊紙璐熻浇涓績璁惧锛�
         gatewayBean.setHwVersion(cloudInverterDeviceBean.getHwVersion());//杞欢鐗堟湰鍙�
         gatewayBean.setCategorySecondName(cloudInverterDeviceBean.getCategorySecondName());//璁惧绫诲瀷(浜у搧浜岀骇鍒嗙被鍚嶇О
         gatewayBean.setDeviceType(cloudInverterDeviceBean.getDeviceType());//璁惧绫诲瀷(INV:閫嗗彉鍣�;BMS:BMS鎺у埗鐩�;BATTERY:鐢垫睜鍗曞厓)
@@ -1695,6 +1772,7 @@
         gatewayBean.setSpk(cloudInverterDeviceBean.getSpk());//璁惧spk
 
 
+
     }
 
 
@@ -1707,6 +1785,7 @@
         List<String> spks = new ArrayList<>();
         spks.add(INVERTER_DEVICE_SPK);
         spks.add(LC_SPK);
+        spks.add(OFF_INVERTER_OG_SPK);
         return spks;
     }
 
@@ -1723,6 +1802,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";
@@ -1730,4 +1841,8 @@
      * 璐熻浇涓績spk
      */
     public final String LC_SPK = "energy.hdl_lc";
+    /**
+     * 绂荤嚎閫嗗彉鍣╯pk
+     */
+    public final String OFF_INVERTER_OG_SPK = "energy.inverter_og";
 }

--
Gitblit v1.8.0