wxr
2024-12-02 ea0b1e8e5f43c5fd0a7d479e25ede3b8cbea464a
HDL_ON/Common/ApiUtlis.cs
@@ -1,9 +1,9 @@
using System;
using System.Collections.Generic;
using HDL_ON;
using HDL_ON.DAL;
using System.Threading;
using HDL_ON.DAL.Server;
using HDL_ON.Entity;
using HDL_ON.UI;
using HDL_ON.UI.UI2.FuntionControlView.Video;
using HDL_ON.UI.UI2.Intelligence.Automation;
using Newtonsoft.Json;
@@ -43,235 +43,99 @@
                return httpRequest;
            }
        }
        /// <summary>
        /// 读取设备功能数据完成
        /// </summary>
        bool complateGetHomePagerInfo = false;
        bool complateGetUserInfo = false;
        bool complateGetRoomListInfo = false;
        bool complateGetGroupControl = false;
        bool complateGetSecurityListInfo = false;
        bool complateGetLogicListInfo = false;
        bool complateGet3tyInfo = false;
        bool complateDevice = false;
        /// <summary>
        /// 读取场景数据完成
        /// </summary>
        bool complateScene = false;
        //线程结束时间
        DateTime endTime1;
        /// <summary>
        /// 校验网关是否在线
        /// </summary>
        public bool GatewayOnlineVerification()
        {
            bool result = DB_ResidenceData.Instance.HomeGateway.gatewayStatus;
            DriverLayer.Control.Ins.GatewayOnline_Cloud = result;
            if (!result)
            {
            }
            return result;
        }
        /// <summary>
        /// 下载数据完成标记
        /// </summary>
        public bool DownloadDataComplete = false;
        public bool hadInternet = true;
        /// <summary>
        /// token是否有效
        /// </summary>
        public bool IsValidToken = true;
        /// <summary>
        /// 下载数据
        /// </summary>
        public void DownloadData()
        {
            IsValidToken = true;
            if (MainPage.NoLoginMode)
            {
                DownloadDataComplete = true;
                return;
            }
            endTime1 = DateTime.Now.AddSeconds(25);
            complateDevice = complateScene = false;
            MainPage.Log($"开始同步云端数据");
            DownloadDataComplete = false;
            var waitPage = new Loading();
            MainPage.BaseView.AddChidren(waitPage);
            waitPage.Start(Language.StringByID(StringId.PleaseWait));
            string code = StateCode.SUCCESS;
            var downloadDataThread = new System.Threading.Thread(() =>
            var downloadDataThread = new Thread(() =>
            {
                MainPage.Log($"进入读取云端数据线程");
                try
                {
                    //增加3秒云服务器连接检测,连不上服务器的时候不刷新数据
                    hadInternet = true;
                    var dataList = new List<GlobalRegionListRes>();
                    var requestJson = HttpUtil.GetSignRequestJson(new GetRegionListObj() { regionMark = HttpUtil.RegionMark });
                    var revertObj = HttpUtil.RequestHttpsPost(NewAPI.API_POST_GlobalRegionList, requestJson, HttpUtil.GlobalRequestHttpsHost, "", 3);
                    if (revertObj == null || revertObj.Code != StateCode.SUCCESS)
                    #region ===================刷新Token=======================
                    var code = Ins.HttpRequest.RefreshToken();
                    if (code == StateCode.SUCCESS)
                    {
                        DownloadDataComplete = true;
                        hadInternet = false;
                        try
                        {
                            var spatialInfoDataBytes = FileUtlis.Files.ReadFile("SpatialInfoData");
                            if (spatialInfoDataBytes != null)
                            {
                                var spatialInfoDataString = System.Text.Encoding.UTF8.GetString(spatialInfoDataBytes);
                                if (spatialInfoDataString != null && !string.IsNullOrEmpty(spatialInfoDataString))
                                {
                                    var spatialInfoDataList = JsonConvert.DeserializeObject<List<SpatialInfo>>(spatialInfoDataString);
                                    SpatialInfo.CurrentSpatial.UpdateSpatialList(spatialInfoDataList);
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            MainPage.Log($"{this.GetType()}:加载缓存房间数据异常:{ex.Message}");
                        }
                        try
                        {
                            var fileList = Common.FileUtlis.Files.ReadFiles();
                            foreach (var file in fileList)
                            {
                                FunctionList.List.IniFunctionList(file, true);
                            }
                            Room.CurrentSpatial.InitRoomListFunctions();
                        }
                        catch (Exception ex)
                        {
                            MainPage.Log($"{this.GetType()}:加载缓存设备数据异常:{ex.Message}");
                        }
                        return;
                        IsValidToken = true;
                        complateGetHomePagerInfo = complateGetUserInfo = complateGetRoomListInfo = complateGetGroupControl =
                        complateGetSecurityListInfo = complateGetLogicListInfo = complateGet3tyInfo = complateDevice = complateScene = false;
                    }
                    else
                    {
                        hadInternet = true;
                    }
                }
                catch (Exception ex)
                {
                    MainPage.Log($"Error:下载数据1:{ex.Message}");
                        IsValidToken = false;
                    DownloadDataComplete = true;
                    return;
                        complateGetHomePagerInfo = complateGetUserInfo = complateGetRoomListInfo = complateGetGroupControl =
                        complateGetSecurityListInfo = complateGetLogicListInfo = complateGet3tyInfo = complateDevice = complateScene = true;
                        //complateGetSecurityListInfo = false;
                }
                finally
                    #endregion
                    if (IsValidToken)
                {
                    if (!hadInternet)
                        #region ===================刷新住宅信息=======================
                        new Thread(() =>
                    {
                        Application.RunOnMainThread(() =>
                        {
                            if (waitPage != null)
                            {
                                waitPage.Hide();
                                waitPage.RemoveFromParent();
                            }
                        });
                    }
                }
                MainPage.Log($"进入读取云端数据线程");
                //===================刷新Token=======================
                code = Ins.HttpRequest.RefreshToken();
                if (code != StateCode.SUCCESS)
                {
                    if (waitPage != null)
                    {
                        Application.RunOnMainThread(() =>
                        {
                            try
                            {
                                waitPage.Hide();
                                waitPage.RemoveFromParent();
                                waitPage = null;
                            }
                            catch { }
                        });
                    }
                    MainPage.Log($"刷新token失败");
                    return;
                }
                MainPage.Log($"刷新token成功");
                //===================刷新住宅信息=======================
                code = Ins.HttpRequest.GetHomePager();
                if (code != StateCode.SUCCESS)
                            complateGetHomePagerInfo = true;
                        })
                        { IsBackground = true }.Start();
                        #endregion
                        #region ===================刷新个人信息=======================
                        new Thread(() =>
                {
                    if (waitPage != null)
                    {
                        Application.RunOnMainThread(() =>
                        {
                            try
                            {
                                waitPage.Hide();
                                waitPage.RemoveFromParent();
                                waitPage = null;
                            }
                            catch { }
                        });
                    }
                    MainPage.Log($"刷新住宅信息失败");
                    return;
                }
                MainPage.Log($"刷新住宅信息成功");
                //===================刷新个人信息=======================
                code = Ins.HttpRequest.GetUserInfo();
                if (code != StateCode.SUCCESS)
                {
                    if (waitPage != null)
                    {
                        Application.RunOnMainThread(() =>
                        {
                            try
                            {
                                waitPage.Hide();
                                waitPage.RemoveFromParent();
                                waitPage = null;
                            }
                            catch { }
                        });
                    }
                    MainPage.Log($"刷新个人信息失败");
                    return;
                }
                MainPage.Log($"刷新个人信息成功");
                            complateGetUserInfo = true;
                        })
                        { IsBackground = true }.Start();
                        #endregion
                //int count = 0;
                //while (count < 10)
                //{
                //    if (DB_ResidenceData.Instance.CheckWhetherGatewayIdIsNull())
                //    {
                //        System.Threading.Thread.Sleep(200);
                //    }
                //    else
                //    {
                //        break;
                //    }
                //    count++;
                //}
                //if (DB_ResidenceData.Instance.CheckWhetherGatewayIdIsNull())
                //{
                //    return;
                //}
                //return;
                try
                        #region ===================房间=======================
                        new Thread(() =>
                {
                    //===================房间=======================
                    var roomResult = Ins.HttpRequest.GetRoomList();
                    if (roomResult.Code == StateCode.SUCCESS)
                    {
                        MainPage.Log($"读取房间信息成功");
                        var revData = JsonConvert.DeserializeObject<SpatialApiPack>(roomResult.Data.ToString());
                        if (revData == null)
                        {
                            revData = new SpatialApiPack();
                        }
                        {
                            SpatialInfo.CurrentSpatial.UpdateSpatialList(revData.list);
                            new System.Threading.Thread(() =>
                            {
                                try
                                {
                                    var ssd = System.Text.Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(revData.list));
@@ -279,30 +143,24 @@
                                }
                                catch (Exception ex)
                                {
                                    MainPage.Log($"{this.GetType()}:保存房间信息异常:{ex.Message}");
                                    MainPage.Log("Error", $"{this.GetType()}:保存房间信息异常:{ex.StackTrace}");
                                }
                            }
                            complateGetRoomListInfo = true;
                            })
                            { IsBackground = true }.Start();
                        }
                    }
                    else
                    {
                        MainPage.Log($"读取房间数据失败:Code:{roomResult.Code}; msg:{roomResult.message}");
                    }
                        #endregion
                    //===================设备=======================
                    new System.Threading.Thread(() =>
                        #region ===================设备=======================
                        new Thread(() =>
                    {
                        try
                        {
                            complateDevice = false;
                            var deviceResult = Ins.HttpRequest.GetDeviceList("30", "1");
                            if (deviceResult.Code == StateCode.SUCCESS)
                            {
                                FunctionList.List.ClearDatas();
                                //MainPage.Log($"============设备============开始" + FunctionList.List.Functions.Count);
                                //MainPage.Log($"读取设备信息成功");
                                MainPage.Log($"sid列表获取====\r\n", deviceResult.Data.ToString());
                                    MainPage.Log($"读取设备信息成功");
                                    //MainPage.Log($"sid列表获取====\r\n", deviceResult.Data.ToString());
                                var deviceList = JsonConvert.DeserializeObject<DevcieApiPack>(deviceResult.Data.ToString());
                                if (deviceList == null)
                                {
@@ -323,24 +181,15 @@
                                }
                                catch (Exception ex)
                                {
                                }
                                finally
                                {
                                        MainPage.Log("Error", $"解析设备信息异常:{ex.StackTrace}");
                                }
                                string delFile = "";
                                if (FunctionList.List.GetDeviceFunctionList().Count > 0)
                                {
                                    for (int i = 0; i < FunctionList.List.GetDeviceFunctionList().Count;)
                                    {
                                        var localFunction = FunctionList.List.GetDeviceFunctionList()[i];
                                        //if (SPK.MusicSpkList().Contains(localFunction.spk))
                                        //{
                                        //    i++;
                                        //    continue;
                                        //}
                                        var newFunction = deviceList.list.Find((obj) => obj.deviceId == localFunction.deviceId);
                                        if (delFile == localFunction.savePath)
@@ -353,15 +202,12 @@
                                    }
                                }
                                //处理剩下的新增功能
                                //int iiii = 0;
                                foreach (var newFunction in deviceList.list)
                                    foreach (var newDevice in deviceList.list)
                                {
                                    newFunction.AssembleStatus();
                                    newFunction.SaveFunctionFile();
                                    FunctionList.List.IniFunctionList(newFunction.savePath, true);
                                    //MainPage.Log($"============设备============{iiii++}");
                                        newDevice.AssembleStatus();
                                        newDevice.SaveFunctionFile();
                                        FunctionList.List.IniFunctionList(newDevice.savePath, true);
                                }
                                //===================读取可视对讲数据==========================
@@ -374,12 +220,12 @@
                                //======================获取可视对讲设备列表====================
                                bool isInterphoneType_HDL = false;//是否为HDLLinphone可视对讲
                                    bool isInterphoneType_FREEVIEW = false;//是否为全视通可视对讲
                                var videoInfo = VideoSend.GetVideoInfoList();
                                if (videoInfo.Code == StateCode.SUCCESS)
                                {
                                    string videoList = videoInfo.Data.ToString();
                                    FunctionList.List.videoIntercom = JsonConvert.DeserializeObject<List<UI.UI2.FuntionControlView.Video.Video>>(videoList);
                                    for (int i = 0; i < FunctionList.List.videoIntercom.Count; i++)
                                    {
                                        var video = FunctionList.List.videoIntercom[i];
@@ -389,7 +235,6 @@
                                            isInterphoneType_HDL = true;
                                            DB_ResidenceData.Instance.SupportFacePass = true;
                                            DB_ResidenceData.Instance.SaveResidenceData();
                                        }
                                    }
                                }
@@ -399,7 +244,6 @@
                                //如果检测线程没启动,才继续下面操作 因为App有可能刚启动马上收到推送了,然后才执行到这里
                                if (HDLLinphone.Current.CheckIncomingCallThreadIsNull())
                                {
                                    //当前住宅是HDL可视对讲类型的设备
                                    if (isInterphoneType_HDL)
                                    {
@@ -407,6 +251,14 @@
                                        HDLCallVideoInfo callVideoInfo = new HDLCallVideoInfo();
                                        callVideoInfo.HomeId = DB_ResidenceData.Instance.CurrentRegion.id;
                                        callVideoInfo.InterphoneType = InterphoneType.HDL.ToString();
                                            HDLLinphone.Current.GetHDLSipInfoAndInitSDK(callVideoInfo);
                                        }
                                        else if (isInterphoneType_FREEVIEW)
                                        {
                                            //HDLLinphone可视对讲,获取Sip账号并初始化SDK
                                            HDLCallVideoInfo callVideoInfo = new HDLCallVideoInfo();
                                            callVideoInfo.HomeId = DB_ResidenceData.Instance.CurrentRegion.id;
                                            callVideoInfo.InterphoneType = InterphoneType.FREEVIEW.ToString();
                                        HDLLinphone.Current.GetHDLSipInfoAndInitSDK(callVideoInfo);
                                    }
                                    else
@@ -417,6 +269,30 @@
                                    }
                                }
                                    //======================登录全视通====================
                                    if (isInterphoneType_FREEVIEW)
                                    {
#if __IOS__
                                        //string systemVersion = UIKit.UIDevice.CurrentDevice.SystemVersion;
                                        //string errorVersion = "16.2.0";
                                        //if (systemVersion.CompareTo(errorVersion) < 0)///全视通不兼容ios16以上的系统,不要加载这个先
                                        //{
                                        //    List<VisitorTempPassword> dataList = new List<VisitorTempPassword>();
                                        //    Dictionary<string, object> dictionary = new Dictionary<string, object>();
                                        //    dictionary.Add("homeId", Entity.DB_ResidenceData.Instance.CurrentRegion.id);
                                        //    var requestJson = HttpUtil.GetSignRequestJson(dictionary);
                                        //    ResponsePackNew pack = HttpUtil.RequestHttpsPost(NewAPI.Api_Post_GetExtMemberInfo, requestJson);
                                        //    if (pack != null)
                                        //    {
                                        //        var data = JsonConvert.DeserializeObject<FreeviewMemberInfo>(pack.Data.ToString());
                                        //        //登录全视通
                                        //        Shared.IOS.HDLFVSDK.Video.Init("", data.extUserId, DB_ResidenceData.Instance.CurrentRegion.id, "78FF1E4D-FC0A-4E71-9B79-0448E4460BD7", "T0001", "120.77.53.170:9700", "120.77.53.170:21664");
                                        //    }
                                        //}
#endif
                                    }
                            }
                            else
                            {
@@ -425,16 +301,22 @@
                        }
                        catch (Exception ex)
                        {
                            MainPage.Log($"============设备============{ex.Message}");
                                MainPage.Log("Error", $"============设备============{ex.StackTrace}");
                        }
                        finally
                        {
                            complateDevice = true;
                            MainPage.Log($"============设备============完成" + FunctionList.List.Functions.Count);
                        }
                        })
                        { IsBackground = true }.Start();
                        #endregion
                        //======================群控====================
                        #region ======================群控====================
                        new Thread(() =>
                        {
                            try
                            {
                        if (DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl)
                        {
                            var pack = Ins.HttpRequest.GetGroupControlList();
@@ -489,7 +371,7 @@
                                    }
                                    catch (Exception ex)
                                    {
                                        MainPage.Log($"读取组控列表失败:{ex.Message}");
                                                MainPage.Log("Error", $"读取组控列表失败:{ex.StackTrace}");
                                    }
                                }
                                else
@@ -498,10 +380,24 @@
                                }
                            }
                        }
                        //======================场景====================
                            }
                            catch (Exception ex)
                            {
                                MainPage.Log($"群控:{ex.StackTrace}");
                            }
                            finally
                            {
                                complateGetGroupControl = true;
                            }
                        })
                        { IsBackground = true }.Start();
                        #endregion
                        #region ======================场景====================
                        new Thread(() =>
                        {
                        try
                        {
                            complateScene = false;
                            var pack = Ins.HttpRequest.GetSceneList();
                            if (pack.Code == StateCode.SUCCESS)
                            {
@@ -519,6 +415,8 @@
                                    tempScene.SaveSceneFile();
                                    FunctionList.List.scenes.Add(tempScene);
                                }
                                    MainPage.Log($"读取场景数据成功:{FunctionList.List.scenes.Count}");
                                //如果是一端口需要提前下载场景数据,否则控制不了一端口场景
                                if (DB_ResidenceData.Instance.GatewayType == 0)
                                {
@@ -530,7 +428,7 @@
                                    var packInfo = HttpRequest.GetSceneListInfo(sceneIds);
                                    if (packInfo.Code == StateCode.SUCCESS)
                                    {
                                        var serverTempList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Scene>>(packInfo.Data.ToString());
                                            var serverTempList = JsonConvert.DeserializeObject<List<Scene>>(packInfo.Data.ToString());
                                        foreach (var localScene in FunctionList.List.scenes)
                                        {
                                            var serverTemp = serverTempList.Find((obj) => obj.userSceneId == localScene.userSceneId);
@@ -541,10 +439,6 @@
                                            }
                                        }
                                    }
                                    else
                                    {
                                        IMessageCommon.Current.ShowErrorInfoAlter(packInfo.Code);
                                    }
                                }
                            }
                            else
@@ -554,71 +448,105 @@
                        }
                        catch (Exception ex)
                        {
                            MainPage.Log($"===场景==={ex.Message}");
                                MainPage.Log("Error", $"===场景==={ex.StackTrace}");
                        }
                        finally
                        {
                            complateScene = true;
                        }
                        //======================安防====================
                        GetSecurityList();
                        //===================读取逻辑列表====================
                        Logic.LogicList.Clear();//主页下拉强制刷新自动化列表
                        MainView.GetLogicList();//读取自动化列表
                    })
                    { IsBackground = true }.Start();
                        #endregion
                    //======================注册推送====================
                    httpRequest.RegisteredPush();
                        #region ======================安防====================
                        new Thread(() =>
                        {
                            try
                            {
                                GetSecurityList();
                }
                catch (Exception ex)
                {
                    MainPage.Log($"数据初始化失败:{ex.Message}");
                                MainPage.Log($"安防:{ex.StackTrace}");
                }
                finally
                {
                    Application.RunOnMainThread(() =>
                    {
                        MainPage.Log($"结束读取云端数据线程");
                        if (waitPage != null)
                        {
                            waitPage.RemoveFromParent();
                            waitPage = null;
                                complateGetSecurityListInfo = true;
                        }
                    });
                    //不考虑网关情况,直接订阅
                    DAL.Mqtt.MqttClient.InitState();
                        })
                        { IsBackground = true }.Start();
                        #endregion
                        #region ======================读取逻辑列表====================
                        new Thread(() =>
                        {
                            try
                            {
                                Logic.LogicList.Clear();//主页下拉强制刷新自动化列表
                                MainView.GetLogicList();//读取自动化列表
                            }
                            catch (Exception ex)
                            {
                                MainPage.Log($"读取逻辑列表:{ex.StackTrace}");
                            }
                            finally
                            {
                                complateGetLogicListInfo = true;
                            }
                        })
                        { IsBackground = true }.Start();
                        #endregion
                        #region ======================注册推送====================
                        httpRequest.RegisteredPush();
                        #endregion
                        #region ======================第三方设备====================
                        new Thread(() =>
                        {
                    try
                    {
                        FunctionList.List.Read3tyFunctionStatus();
                    }
                    catch (Exception ex)
                    {
                        MainPage.Log("读取第三方设备状态失败:" + ex.Message);
                                MainPage.Log("Error", "读取第三方设备状态失败:" + ex.StackTrace);
                    }
                            finally
                            {
                                complateGet3tyInfo = true;
                }
            });
            downloadDataThread.IsBackground = true;
            downloadDataThread.Priority = System.Threading.ThreadPriority.Highest;
            downloadDataThread.Start();
                        })
                        { IsBackground = true }.Start();
                        #endregion
                    }
            //网络卡顿,终止下载线程
            new System.Threading.Thread(() =>
                    #region ===========终止下载线程===========
                    new Thread(() =>
            {
                try
                {
                    while (endTime1 > DateTime.Now)
                            int sleepCout = 0;
                            while (true)
                    {
                        if (complateDevice && complateScene)
                                if (complateGetHomePagerInfo && complateGetUserInfo && complateGetRoomListInfo && complateGetGroupControl &&
                                complateGetSecurityListInfo && complateGetLogicListInfo && complateGet3tyInfo && complateDevice && complateScene)
                        {
                            break;
                        }
                        System.Threading.Thread.Sleep(100);
                                Thread.Sleep(100);
                                if (sleepCout > 150)
                                {
                                    MainPage.Log("=======超时,退出休眠=======");
                                    break;
                    }
                    DownloadDataComplete = true;
                                else
                                {
                                    //MainPage.Log($"=======休眠,等待数据{sleepCout}=======");
                                    sleepCout++;
                                }
                            }
                            LoadLocalData();
                    Application.RunOnMainThread(() =>
                    {
                        if (waitPage != null)
@@ -631,38 +559,80 @@
                catch { }
                finally
                {
                            DownloadDataComplete = true;
                    if (DB_ResidenceData.Instance.CurrentRegion != null)
                    {
                        #region 读取本地数据
                        //搜索网关
                        DriverLayer.Control.Ins.SearchLoaclGateway();
                        //重新连接mqtt
                        DAL.Mqtt.MqttClient.DisConnectRemote("刷新数据,重连mqtt", false);
                                //不考虑网关情况,直接订阅
                                DAL.Mqtt.MqttClient.InitState();
                                #region 重置TCP客户端
                                try
                                {
                                    DriverLayer.Control.Ins.LocalTcpClientLogin = false;
                                    if (DriverLayer.Control.Ins.myTcpClient != null)
                                    {
                                        DriverLayer.Control.Ins.myTcpClient.Dispose();
                                        DriverLayer.Control.Ins.myTcpClient = null;
                                    }
                                }
                                catch (Exception ex)
                                {
                                    MainPage.Log("Error", $"重置TCP客户端异常:{ex.Message}");
                                }
                        #endregion
                                try
                                {
                                    DriverLayer.Control.Ins.SearchLoaclGateway();
                                }
                                catch (Exception ex)
                                {
                                    MainPage.Log("Error", $"搜索网关:{ex.StackTrace}");
                                }
                                try
                                {
                                    HomePage.LoadEvent_CheckTokenValid();
                                    if (!IsValidToken && UserInfo.Current.TipInvalidToken)
                                    {
                                        UserInfo.Current.TipInvalidToken = false;
                                        UserInfo.Current.SaveUserInfo();
                                        Application.RunOnMainThread(() =>
                                        {
                                            try
                                            {
                                                new PublicAssmebly().TipOptionMsg(StringId.Tip, StringId.TokenInvalidTipMsg, StringId.OfflineControl, StringId.GoLogin, () =>
                                                {
                                                    HDLCommon.Current.Logout();
                                                });
                                            }
                                            catch (Exception ex)
                                            {
                                                MainPage.Log("Error", $"提示登录凭证窗口加载异常:{ex.StackTrace}");
                                            }
                                        });
                                    }
                                }
                                catch (Exception ex)
                                {
                                    MainPage.Log("Error", $"更新登录凭证方法调用异常:{ex.StackTrace}");
                                }
                    }
                }
            })
            { IsBackground = true }.Start();
        }
                    #endregion
        /// <summary>
        /// 获取功能信息
        /// </summary>
        public void GetFunctionInfo(string functionId)
                }
                catch (Exception ex)
        {
            var deviceResult = Ins.HttpRequest.GetDeviceInfo(functionId);
            if (deviceResult.Code == StateCode.SUCCESS)
            {
                MainPage.Log($"读取设备信息成功");
                var packList = JsonConvert.DeserializeObject<DevcieApiPack>(deviceResult.Data.ToString());
                    MainPage.Log($"读取云端数据线程异常:{ex.StackTrace}");
                }
            });
            downloadDataThread.IsBackground = true;
            downloadDataThread.Priority = ThreadPriority.Highest;
            downloadDataThread.Start();
                foreach (var function in packList.list)
                {
                    function.SaveFunctionFile();
                    FunctionList.List.IniFunctionList(function.savePath, true);
                }
            }
        }
        /// <summary>
@@ -672,15 +642,20 @@
        {
            lock (FunctionList.List.securities)
            {
                try
                {
                var pack = Ins.HttpRequest.GetSecurityList();
                if (pack.Code == StateCode.SUCCESS)
                {
                    var packList = JsonConvert.DeserializeObject<List<SecurityAlarm>>(pack.Data.ToString());
                    Console.WriteLine("安防总数:" + packList.Count);
                    var sidList = new List<string>();
                    foreach (var function in packList)
                    {
                        sidList.Add(function.sid);
                        }
                        if (sidList.Count == 0)
                        {
                            return;
                    }
                    var infoListPack = Ins.httpRequest.GetSecurityInfo(sidList, new List<string>());
                    var infoList = JsonConvert.DeserializeObject<List<SecurityAlarm>>(infoListPack.Data.ToString());
@@ -707,16 +682,54 @@
                    MainPage.Log($"读取安防列表失败:Code:{pack.Code}; Msg:{pack.message}");
                }
            }
                catch (Exception ex)
                {
                    MainPage.Log("Error", $"读取安防列表失败:Code:{ex.StackTrace}");
                }
            }
        }
        /// <summary>
        /// 获取SIP账号信息
        /// 加载本地数据
        /// </summary>
        public void GetSipInfo()
        private void LoadLocalData()
        {
            var pack = Ins.HttpRequest.GetSecurityList();
            MainPage.Log("=========APiUtlis开始加载数据=========");
            FunctionList.List.ClearDatas();
            try
            {
                var spatialInfoDataBytes = FileUtlis.Files.ReadFile("SpatialInfoData");
                if (spatialInfoDataBytes != null)
                {
                    var spatialInfoDataString = System.Text.Encoding.UTF8.GetString(spatialInfoDataBytes);
                    if (spatialInfoDataString != null && !string.IsNullOrEmpty(spatialInfoDataString))
                    {
                        var spatialInfoDataList = JsonConvert.DeserializeObject<List<SpatialInfo>>(spatialInfoDataString);
                        SpatialInfo.CurrentSpatial.UpdateSpatialList(spatialInfoDataList);
                    }
                }
            }
            catch (Exception ex)
            {
                MainPage.Log("Error", $"{this.GetType()}:加载缓存房间数据异常:{ex.StackTrace}");
        }
            try
            {
                var fileList = FileUtlis.Files.ReadFiles();
                foreach (var file in fileList)
                {
                    FunctionList.List.IniFunctionList(file, true);
    }
                Room.CurrentSpatial.InitRoomListFunctions();
            }
            catch (Exception ex)
            {
                MainPage.Log("Error", $"{this.GetType()}:加载缓存设备数据异常:{ex.StackTrace}");
            }
            MainPage.Log("=========APiUtlis完成加载数据=========");
        }
    }
}