From f0f63edda354eaf18895f0b92ff6d308bd778176 Mon Sep 17 00:00:00 2001
From: 陈嘉乐 <cjl@hdlchina.com.cn>
Date: 星期一, 07 十二月 2020 11:01:12 +0800
Subject: [PATCH] Merge branch 'master' into WJC

---
 HDL_ON/Entity/Function/Function.cs          |    8 
 HDL_ON/DAL/Server/NewApiRes.cs              |   24 +
 HDL_ON/Common/HDLCommon.cs                  |   93 +++++++
 HDL_ON/DAL/Server/HttpUtil.cs               |    3 
 HDL_ON/Entity/Room.cs                       |  116 ++++++--
 HDL_ON/DAL/Server/HttpServerRequest.cs      |    2 
 HDL_ON/DAL/DriverLayer/Control.cs           |    5 
 HDL-ON_iOS/AppDelegate.cs                   |  202 +++++---------
 HDL_ON/Entity/FunctionList.cs               |  148 +++++++---
 HDL-ON_Android/Other/JPush/JPushReceiver.cs |  147 +++++-----
 10 files changed, 467 insertions(+), 281 deletions(-)

diff --git a/HDL-ON_Android/Other/JPush/JPushReceiver.cs b/HDL-ON_Android/Other/JPush/JPushReceiver.cs
index 61b99f9..f24b091 100644
--- a/HDL-ON_Android/Other/JPush/JPushReceiver.cs
+++ b/HDL-ON_Android/Other/JPush/JPushReceiver.cs
@@ -1,17 +1,9 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-using Android.App;
+锘�
 using Android.Content;
-using Android.OS;
-using Android.Runtime;
-using Android.Views;
-using Android.Widget;
 using CN.Jpush.Android.Api;
 using CN.Jpush.Android.Service;
 using HDL_ON;
+using HDL_ON.DAL.Server;
 using Shared;
 
 namespace HDL_ON_Android
@@ -40,11 +32,7 @@
         {
             base.OnNotifyMessageOpened(context, notificationMessage);
 
-            //App.Paras = p1.NotificationExtras;
-
-            //Utlis.ShowTip("鏀跺埌鎺ㄩ�侊細" + p1.NotificationExtras);
-            Utlis.WriteLine("鏋佸厜OnNotifyMessageOpened: " + notificationMessage.NotificationContent);
-            Utlis.WriteLine("鏋佸厜OnNotifyMessageOpened: " + notificationMessage.NotificationExtras);
+            OpenNotification(context, notificationMessage);
         }
 
         /// <summary>
@@ -55,8 +43,18 @@
         public override void OnNotifyMessageArrived(Context context, NotificationMessage notificationMessage)
         {
             base.OnNotifyMessageArrived(context, notificationMessage);
-            Utlis.WriteLine("鏋佸厜OnNotifyMessageArrived: " + notificationMessage.NotificationContent);
-            Utlis.WriteLine("鏋佸厜OnNotifyMessageArrived: " + notificationMessage.NotificationExtras);
+
+            var pushMes = new JPushMessageInfo()
+            {
+                Title = notificationMessage.NotificationTitle,
+                Content = notificationMessage.NotificationContent,
+                Extras = notificationMessage.NotificationExtras
+            };
+            System.Console.WriteLine("PushMes title : " + pushMes.Title);
+            System.Console.WriteLine("PushMes message : " + pushMes.Content);
+            System.Console.WriteLine("PushMes extras : " + pushMes.Extras);
+
+            HDLCommon.Current.AdjustPushMessage(pushMes);
         }
 
         /// <summary>
@@ -72,76 +70,81 @@
         }
 
         ///// <summary>
-        ///// 鏀跺埌鑷畾涔夋秷鎭洖璋�
+        ///// 澶勭悊鏋佸厜淇℃伅鎺ㄩ��
         ///// </summary>
-        ///// <param name="p0"></param>
-        ///// <param name="p1"></param>
-        //public override void OnMessage(Context p0, CustomMessage p1)
+        ///// <param name="title">鏍囬</param>
+        ///// <param name="message">淇℃伅</param>
+        ///// <param name="extras">璐熻浇鏁版嵁</param>
+        //public void AdjustJiguangMsgPush(JPushMessageInfo JPushMessageInfo)
         //{
-        //    base.OnMessage(p0, p1);
+        //    try
+        //    {
+               
 
-        //    Utlis.WriteLine("鏋佸厜OnMessage: " + p1.Message.ToString());
+        //        if (JPushMessageInfo.Extras.Contains("Offline") == true)
+        //        {
+        //            Shared.Application.RunOnMainThread(() =>
+        //            {
+        //                //璐﹀彿鍦ㄥ埆澶勭櫥闄嗭紝琚涪涓嬬嚎 璺宠浆鍒扮櫥褰曢〉闈�
+        //                new Alert(Language.StringByID(StringId.Tip), Language.StringByID(StringId.LoggedOnOtherDevices), Language.StringByID(StringId.Close)).Show();
+        //                //2020-12-04 寰呭鍔犻��鍑虹櫥褰曟搷浣�
+        //            });
+        //            return;
+        //        }
+        //        else
+        //        {
+        //            Shared.Application.RunOnMainThread(() =>
+        //            {
+        //                new Alert(JPushMessageInfo.Title, JPushMessageInfo.Content, Language.StringByID(StringId.Close)).Show();
+        //            });
+        //            return;
+
+        //        }
+        //    }
+        //    catch
+        //    {
+
+        //    }
         //}
-
-
-        /// <summary>
-        /// 澶勭悊鏋佸厜淇℃伅鎺ㄩ��
-        /// </summary>
-        /// <param name="title">鏍囬</param>
-        /// <param name="message">淇℃伅</param>
-        /// <param name="extras">璐熻浇鏁版嵁</param>
-        public void AdjustJiguangMsgPush(NotificationMessage notificationMessage)
-        {
-            string title = notificationMessage.NotificationTitle;
-            System.Console.WriteLine(TAG, " title : " + title);
-            string message = notificationMessage.NotificationContent;
-            System.Console.WriteLine(TAG, "message : " + message);
-            string extras = notificationMessage.NotificationExtras;
-            System.Console.WriteLine(TAG, "extras : " + extras);
-
-
-            if (extras.Contains("Offline") == true)
-            {
-
-                Shared.Application.RunOnMainThread(() =>
-                {
-                    //姝ゅ笎鍙峰凡鍦ㄥ埆澶勭櫥褰�,鎮ㄨ杩笅绾�
-                    //ShowAlert("姝ゅ笎鍙峰凡鍦ㄥ埆澶勭櫥褰�,鎮ㄨ杩笅绾�");
-                    //璐﹀彿鍦ㄥ埆澶勭櫥闄嗭紝琚涪涓嬬嚎 璺宠浆鍒扮櫥褰曢〉闈�
-                    HDLCommon.Current.ShowAlert(Language.StringByID(StringId.LoggedOnOtherDevices));
-
-                });
-                return;
-            }
-        }
 
         /// <summary>
         /// 鎵撳紑娑堟伅鏄剧ず鐣岄潰
         /// </summary>
-        /// <param name="context">Context.</param>
-        /// <param name="bundle">Bundle.</param>
-        private void OpenNotification(Context context, Bundle bundle)
+        /// <param name="context"></param>
+        /// <param name="notificationMessage"></param>
+        private void OpenNotification(Context context, NotificationMessage notificationMessage)
         {
-
-            Intent i = new Intent(context, typeof(BaseActivity));//Intent intent=new Intent( 璧峰缁勪欢瀵硅薄 , 鐩爣 Service.class);
-            i.PutExtras(bundle);
-            i.SetFlags(ActivityFlags.NewTask);
-            context.StartActivity(i);
-
-            String extras = bundle.GetString(JPushInterface.ExtraExtra);
-            //String myValue = "";
             try
             {
-               
+                var pushMes = new JPushMessageInfo()
+                {
+                    Title = notificationMessage.NotificationTitle,
+                    Content = notificationMessage.NotificationContent,
+                    Extras = notificationMessage.NotificationExtras
+                };
+                System.Console.WriteLine("PushMes title : " + pushMes.Title);
+                System.Console.WriteLine("PushMes message : " + pushMes.Content);
+                System.Console.WriteLine("PushMes extras : " + pushMes.Extras);
 
+                if (Shared.Application.Activity == null)
+                {
+                    var tempIntent = new Intent(context, typeof(Shared.BaseActivity));//Intent intent=new Intent( 璧峰缁勪欢瀵硅薄 , 鐩爣 Service.class);
+                    tempIntent.SetFlags(ActivityFlags.BroughtToFront);
+                    context.StartActivity(tempIntent);
+
+                    HDLCommon.Current.AdjustPushMessage(pushMes);
+                }
+                else
+                {
+                    (Shared.Application.Activity as BaseActivity).MoveToFront();
+
+                    HDLCommon.Current.AdjustPushMessage(pushMes);
+                }
             }
-            catch (Exception e)
+            catch
             {
-                System.Console.WriteLine("JPush", "Unexpected: extras is not a valid json", e);
-                return;
-            }
 
-           
+            }
         }
     }
     
diff --git a/HDL-ON_iOS/AppDelegate.cs b/HDL-ON_iOS/AppDelegate.cs
index 3728f8d..652593e 100644
--- a/HDL-ON_iOS/AppDelegate.cs
+++ b/HDL-ON_iOS/AppDelegate.cs
@@ -8,6 +8,7 @@
 using Microsoft.AppCenter.Analytics;
 using Microsoft.AppCenter.Crashes;
 using HDL_ON.UI;
+using HDL_ON.DAL.Server;
 
 namespace SharedMethod
 {
@@ -34,6 +35,7 @@
         //}
     }
 
+    
 }
 
 namespace HDL_ON_iOS
@@ -128,89 +130,13 @@
 
             if (application.ApplicationState == UIApplicationState.Active || application.ApplicationState == UIApplicationState.Background)
             {
-                NSString key_hiddenJson = new NSString("HiddenJson");
-                if (userInfo.ContainsKey(key_hiddenJson))
-                {
-                    var hiddenJson = userInfo["HiddenJson"].ToString();
-                    if (string.IsNullOrEmpty(hiddenJson))
-                    {
-                        return;
-                    }
 
-                    if (hiddenJson.Contains("cmtID"))
-                    {
-                        /////鐩墠鏍规嵁杩欎釜鍒ゆ柇鏄惁鏄彲瑙嗗璁叉暟鎹�
-                        //VideoMethod(hiddenJson);
-                    }
-                    else
-                    {
-
-                        NSDictionary hiddenJsonDic = userInfo["HiddenJson"] as NSDictionary;
-                        if (hiddenJsonDic == null)
-                        {
-                            return;
-                        }
-                        NSString key_Offline = new NSString("Offline");
-                        if (hiddenJsonDic.ContainsKey(key_Offline))
-                        {
-                            string signOut = hiddenJsonDic["Offline"].ToString();
-
-                            if (signOut == "0")
-                            {
-                                //涓嶄笅绾�
-                            }
-                            else
-                            {
-                                //寮哄埗涓嬬嚎
-                                //CommonPage.Instance.SingOut();
-                                HDLCommon.Current.ShowAlert(Language.StringByID(StringId.LoggedOnOtherDevices));
-                            }
-                        }
-                    }
-                }
+                HandleNotificationMessageUserInfo(userInfo, false);
             }
             else
             {
-                NSString key_hiddenJson = new NSString("HiddenJson");
-                if (userInfo.ContainsKey(key_hiddenJson))
-                {
-
-                    var hiddenJson = userInfo["HiddenJson"].ToString();
-                    if (string.IsNullOrEmpty(hiddenJson))
-                    {
-                        return;
-                    }
-
-                    if (hiddenJson.Contains("cmtID"))
-                    {
-                        /////鐩墠鏍规嵁杩欎釜鍒ゆ柇鏄惁鏄彲瑙嗗璁叉暟鎹�
-                        //VideoMethod(hiddenJson);
-                    }
-                    else
-                    {
-
-                        NSDictionary hiddenJsonDic = userInfo["HiddenJson"] as NSDictionary;
-                        if (hiddenJsonDic == null)
-                        {
-                            return;
-                        }
-                        NSString key_Offline = new NSString("Offline");
-                        if (hiddenJsonDic.ContainsKey(key_Offline))
-                        {
-                            string signOut = hiddenJsonDic["Offline"].ToString();
-
-                            if (signOut == "0")
-                            {
-                                //涓嶄笅绾�
-                            }
-                            else
-                            {
-                                //鏍囪涓嬬嚎
-                                haveToSignOut = true;
-                            }
-                        }
-                    }
-                }
+                //Inactive
+                HandleNotificationMessageUserInfo(userInfo, false);
 
             }
             completionHandler(UIBackgroundFetchResult.NewData);
@@ -269,12 +195,14 @@
             Console.WriteLine("OnActivated");
             base.OnActivated(application);
 
-            if (haveToSignOut == true)
-            {
-                //寮哄埗涓嬬嚎
-                //CommonPage.Instance.SingOut();
-                HDLCommon.Current.ShowAlert(Language.StringByID(StringId.LoggedOnOtherDevices));
-            }
+            //if (haveToSignOut == true)
+            //{
+                ////寮哄埗涓嬬嚎
+                //UserInfo.Current.LastTime = DateTime.MinValue;
+                //UserInfo.Current.headImagePagePath = "LoginIcon/2.png";//閲嶇疆鐢ㄦ埛澶村儚
+                //UserInfo.Current.SaveUserInfo();
+                //HDLCommon.Current.ShowAlert(Language.StringByID(StringId.LoggedOnOtherDevices));
+            //}
 
         }
 
@@ -342,64 +270,79 @@
         }
 
         /// <summary>
-        /// 閫�鍑虹櫥褰曟爣璁�
+        /// 澶勭悊閫氱煡娑堟伅
         /// </summary>
-        bool haveToSignOut;
+        void HandleNotificationMessageUserInfo(NSDictionary userInfo, bool bFinishedLaunching)
+        {
+            try
+            {
+                if (userInfo.ContainsKey(new NSString("aps")))
+                {
+                    var aps = userInfo["aps"] as NSDictionary;
+                    var alert = aps["alert"] as NSDictionary;
+                    var body = alert["body"] as NSString;
+                    var title = alert["title"] as NSString;
+                    var expandData = "";
+                    if (userInfo.ContainsKey(new NSString("expandData")))
+                    {
+                        expandData = userInfo["expandData"] as NSString;
+                    }
+                    var pushMes = new JPushMessageInfo()
+                    {
+                        Title = title,
+                        Content = body,
+                        Extras = expandData,
+                    };
+                    System.Console.WriteLine("PushMes title : " + pushMes.Title);
+                    System.Console.WriteLine("PushMes message : " + pushMes.Content);
+                    System.Console.WriteLine("PushMes extras : " + pushMes.Extras);
+
+                    if (bFinishedLaunching)
+                    {
+                        if (pushMes.Extras != null && pushMes.Extras.Contains("Offline"))
+                        {
+                            //haveToSignOut = true;
+                            //寮哄埗涓嬬嚎
+                            UserInfo.Current.LastTime = DateTime.MinValue;
+                            UserInfo.Current.headImagePagePath = "LoginIcon/2.png";//閲嶇疆鐢ㄦ埛澶村儚
+                            UserInfo.Current.SaveUserInfo();
+                            HDLCommon.Current.ShowAlert(Language.StringByID(StringId.LoggedOnOtherDevices));
+                        }
+                    }
+                    else
+                    {
+                        HDLCommon.Current.AdjustPushMessage(pushMes);
+                    }
+                   
+                }
+            }
+            catch
+            {
+
+            }
+        }
+
+        ///// <summary>
+        ///// 閫�鍑虹櫥褰曟爣璁�
+        ///// </summary>
+        //bool haveToSignOut;
         /// <summary>
-        /// 澶勭悊閫氱煡
+        /// 鍚姩APP 澶勭悊閫氱煡
         /// </summary>
         /// <param name="launchOptions"></param>
         void DealWithPushMes(NSDictionary launchOptions)
         {
-            haveToSignOut = false;
+            //haveToSignOut = false;
             if (launchOptions != null)
             {
                 // check for a remote notification
                 if (launchOptions.ContainsKey(UIApplication.LaunchOptionsRemoteNotificationKey))
                 {
                     NSDictionary userInfo = launchOptions[UIApplication.LaunchOptionsRemoteNotificationKey] as NSDictionary;
+
                     if (userInfo != null)
                     {
-                        NSString key_hiddenJson = new NSString("HiddenJson");
-                        if (userInfo.ContainsKey(key_hiddenJson))
-                        {
-                            var hiddenJson = userInfo["HiddenJson"].ToString();
-                            if (!string.IsNullOrEmpty(hiddenJson))
-                            {
-                                if (hiddenJson.Contains("cmtID"))
-                                {
-
-                                    ///鐩墠鏍规嵁杩欎釜鍒ゆ柇鏄惁鏄彲瑙嗗璁叉暟鎹�
-                                    // VideoMethod(hiddenJson);
-                                }
-                                else
-                                {
-
-                                    NSDictionary hiddenJsonDic = userInfo["HiddenJson"] as NSDictionary;
-                                    if (hiddenJsonDic != null)
-                                    {
-                                        NSString key_Offline = new NSString("Offline");
-                                        if (hiddenJsonDic.ContainsKey(key_Offline))
-                                        {
-                                            string signOut = hiddenJsonDic["Offline"].ToString();
-
-                                            if (signOut == "0")
-                                            {
-                                                //涓嶄笅绾�
-                                            }
-                                            else
-                                            {
-                                                //鏍囪涓嬬嚎
-                                                haveToSignOut = true;
-                                            }
-                                        }
-
-                                    }
-                                }
-                            }
-
-
-                        }
+                        HandleNotificationMessageUserInfo(userInfo, true);
 
                     }
                 }
@@ -409,5 +352,6 @@
 
 
     }
+
 }
 
diff --git a/HDL_ON/Common/HDLCommon.cs b/HDL_ON/Common/HDLCommon.cs
index 111a589..3bacd32 100644
--- a/HDL_ON/Common/HDLCommon.cs
+++ b/HDL_ON/Common/HDLCommon.cs
@@ -4,6 +4,7 @@
 using HDL_ON.UI.CSS;
 using HDL_ON.DAL.Server;
 using HDL_ON.UI;
+using HDL_ON.Entity;
 
 namespace HDL_ON
 {
@@ -237,7 +238,99 @@
             }
         }
 
+        #region 鎺ㄩ�佸鐞�
+        /// <summary>
+        /// 鎺ㄩ�佹秷鎭鐞�
+        /// </summary>
+        /// <param name="jpushMessageInfo"></param>
+        public void AdjustPushMessage(JPushMessageInfo jpushMessageInfo)
+        {
+            try
+            {
 
+                if (jpushMessageInfo.Extras != null && jpushMessageInfo.Extras.Contains("Offline"))
+                {
+                    Shared.Application.RunOnMainThread(() =>
+                    {
+                        //璐﹀彿鍦ㄥ埆澶勭櫥闄嗭紝琚涪涓嬬嚎 璺宠浆鍒扮櫥褰曢〉闈�
+                        new Alert(Language.StringByID(StringId.Tip), Language.StringByID(StringId.LoggedOnOtherDevices), Language.StringByID(StringId.Close)).Show();
+                        //2020-12-04 寰呭鍔犻��鍑虹櫥褰曟搷浣�
+                        Logout();
+                    });
+                    return;
+                }
+                else
+                {
+                    Shared.Application.RunOnMainThread(() =>
+                    {
+                        new Alert(jpushMessageInfo.Title, jpushMessageInfo.Content, Language.StringByID(StringId.Close)).Show();
+                    });
+                    return;
+
+                }
+            }
+            catch
+            {
+
+            }
+        }
+
+        /// <summary>
+        /// 閫�鍑虹櫥褰曟搷浣�
+        /// </summary>
+        public void Logout()
+        {
+            try
+            {
+                Shared.Application.RunOnMainThread(() =>
+                {
+                    #region 淇濆瓨鏈湴鏁版嵁鑷虫枃浠跺す
+                    string oldRegionRootPath = FileUtils.CreateRegionBackup(DB_ResidenceData.residenceData.CurReginID.ToString());
+                    new System.Threading.Thread(() =>
+                    {
+                        try
+                        {
+                            var backuplist = FileUtils.ReadFiles();
+                            FileUtils.DeleteRegionFiles(oldRegionRootPath);
+                            //绉诲姩鏂囦欢
+                            foreach (var fileName in backuplist)
+                            {
+                                System.IO.FileInfo fileInfo = new System.IO.FileInfo(FileUtils.RootPath + fileName);
+                                if (fileInfo.Exists)
+                                {
+                                    fileInfo.MoveTo(oldRegionRootPath + fileName);
+                                    MainPage.Log("move file : " + fileName);
+                                }
+                            }
+                        }
+                        catch (Exception ex)
+                        {
+                            MainPage.Log($"xxx:{ex.Message}");
+                        }
+                        finally
+                        {
+                            FileUtils.DeleteAllFile();
+                        }
+                    }).Start();
+                    #endregion
+
+                    ////2.娉ㄩ攢鎺ㄩ��
+                    new HttpServerRequest().SignOutPush();
+                    //3.璺宠浆鐧诲綍椤甸潰
+                    UserInfo.Current.LastTime = DateTime.MinValue;
+                    UserInfo.Current.headImagePagePath = "LoginIcon/2.png";//閲嶇疆鐢ㄦ埛澶村儚
+                    UserInfo.Current.SaveUserInfo();
+                    MainPage.GoLoginPage(UserInfo.Current);
+                    DB_ResidenceData.residenceData.EixtAccount();
+                });
+
+            }
+            catch (Exception ex)
+            {
+                MainPage.Log($"xxx:{ex.Message}");
+            }
+        }
+        #endregion
 
     }
 }
diff --git a/HDL_ON/DAL/DriverLayer/Control.cs b/HDL_ON/DAL/DriverLayer/Control.cs
index 22e42b4..aeb874a 100644
--- a/HDL_ON/DAL/DriverLayer/Control.cs
+++ b/HDL_ON/DAL/DriverLayer/Control.cs
@@ -228,13 +228,14 @@
             function.refreshTime = DateTime.Now;
             DAL.Server.HttpServerRequest httpServer = new DAL.Server.HttpServerRequest();
             //杩滅▼閫氳
-            if (Ins.IsRemote)
+            if (!Ins.IsRemote)
             {
                 //ALink鎺у埗銆丅us鎺у埗浣跨敤鍚屼竴涓帴鍙f帶鍒讹紝鐢变簯绔礋璐hВ鏋�
                 var apiControlData = function.GetApiControlData(commandDictionary);
                 var actionObjs = new List<ApiAlinkControlActionObj>();
                 actionObjs.Add(apiControlData);
-                httpServer.ControlDevice(actionObjs);
+                var pack = httpServer.ControlDevice(actionObjs);
+                MainPage.Log($"{pack.Code}:{pack.Data}");
             }
             //鏈湴閫氳
             else
diff --git a/HDL_ON/DAL/Server/HttpServerRequest.cs b/HDL_ON/DAL/Server/HttpServerRequest.cs
index 1b9acae..09c3ea8 100644
--- a/HDL_ON/DAL/Server/HttpServerRequest.cs
+++ b/HDL_ON/DAL/Server/HttpServerRequest.cs
@@ -1833,7 +1833,7 @@
         {
             Dictionary<string, object> d = new Dictionary<string, object>();
             d.Add("homeId", DB_ResidenceData.residenceData.residecenInfo.RegionID);
-            d.Add("gatewayId", DriverLayer.Control.Ins.GatewayId);
+            d.Add("gatewayId", DB_ResidenceData.residenceData.HomeGateway.gatewayId);//DriverLayer.Control.Ins.GatewayId);
             d.Add("actions", actionObjs);
 
             var requestJson = HttpUtil.GetSignRequestJson(d);
diff --git a/HDL_ON/DAL/Server/HttpUtil.cs b/HDL_ON/DAL/Server/HttpUtil.cs
index 0e405b0..84a5333 100644
--- a/HDL_ON/DAL/Server/HttpUtil.cs
+++ b/HDL_ON/DAL/Server/HttpUtil.cs
@@ -470,7 +470,8 @@
         static string GetTimestamp()
         {
             System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 褰撳湴鏃跺尯
-            return ((long)(DateTime.Now - startTime).TotalSeconds).ToString(); // 鐩稿樊绉掓暟
+            return ((long)(DateTime.Now - startTime).TotalMilliseconds).ToString(); // 鐩稿樊绉掓暟
+            //return ((long)(DateTime.Now - startTime).TotalSeconds).ToString(); // 鐩稿樊绉掓暟
         }
 
         /// <summary>
diff --git a/HDL_ON/DAL/Server/NewApiRes.cs b/HDL_ON/DAL/Server/NewApiRes.cs
index 54d25de..d0bfa07 100644
--- a/HDL_ON/DAL/Server/NewApiRes.cs
+++ b/HDL_ON/DAL/Server/NewApiRes.cs
@@ -1370,7 +1370,7 @@
     /// <summary>
     /// 涓婁紶鍥剧墖
     /// </summary>
-    ///  [System.Serializable]
+    [System.Serializable]
     public class UploadImageObj
     {
         /// <summary>
@@ -1394,7 +1394,7 @@
     /// <summary>
     /// 鏌ヨ鍥剧墖璺緞
     /// </summary>
-    ///  [System.Serializable]
+    [System.Serializable]
     public class GetImageUrlObj
     {
         /// <summary>
@@ -1408,6 +1408,26 @@
     #endregion
 
 
+    /// <summary>
+    /// 鏋佸厜鎺ㄩ�佹秷鎭�
+    /// </summary>
+    [System.Serializable]
+    public class JPushMessageInfo
+    {
+        /// <summary>
+        /// 鎺ㄩ�佹爣棰�
+        /// </summary>
+        public string Title;
+        /// <summary>
+        /// 鎺ㄩ�佸唴瀹�
+        /// </summary>
+        public string Content;
+        /// <summary>
+        /// 鎺ㄩ�侀檮鍔犳暟鎹�
+        /// </summary>
+        public string Extras;
+
+    }
 
     //#region 鏃ф帴鍙�
     ///// <summary>
diff --git a/HDL_ON/Entity/Function/Function.cs b/HDL_ON/Entity/Function/Function.cs
index 29ec0d6..1e58983 100644
--- a/HDL_ON/Entity/Function/Function.cs
+++ b/HDL_ON/Entity/Function/Function.cs
@@ -126,6 +126,10 @@
         /// </summary>
         public bool collect = false;
         /// <summary>
+        /// 鏄惁鍦ㄧ嚎
+        /// </summary>
+        public bool online = true;
+        /// <summary>
         /// 浜戠鏁版嵁鍒涘缓鐨勬椂闂�
         /// </summary>
         public string createTime = "";
@@ -368,6 +372,8 @@
         public string spk = "";
 
         public List<AlinkControlAttributes> attributes = new List<AlinkControlAttributes>();
+        //[Newtonsoft.Json.JsonIgnore]
+        public BusData bus = new BusData();
     }
 
     /// <summary>
@@ -763,6 +769,7 @@
     public class BusData
     {
         public string addresses = "FFFF";
+        [Newtonsoft.Json.JsonIgnore]
         public byte SubnetID
         {
             get
@@ -770,6 +777,7 @@
                 return Convert.ToByte(addresses.Substring(0, 2), 16);
             }
         }
+        [Newtonsoft.Json.JsonIgnore]
         public byte DeviceID
         {
             get
diff --git a/HDL_ON/Entity/FunctionList.cs b/HDL_ON/Entity/FunctionList.cs
index c88347c..a48047a 100644
--- a/HDL_ON/Entity/FunctionList.cs
+++ b/HDL_ON/Entity/FunctionList.cs
@@ -124,20 +124,20 @@
                         case SPK.LightRGB:
                         case SPK.LightRGBW:
                         case SPK.LightCCT:
-                            List.lights.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Light>(functionDataString));
+                            _FunctionList.lights.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Light>(functionDataString));
                             break;
                         case SPK.CurtainRoller:
                         case SPK.CurtainShades:
                         case SPK.CurtainSwitch:
                         case SPK.CurtainTrietex:
-                            List.curtains.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Curtain>(functionDataString));
+                            _FunctionList.curtains.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Curtain>(functionDataString));
                             break;
                         case SPK.AcStandard:
-                            List.aCs.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<AC>(functionDataString));
+                            _FunctionList.aCs.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<AC>(functionDataString));
                             break;
                         case SPK.FloorHeatStandard:
                             //鎭㈠鍦扮儹鏁版嵁
-                            List.floorHeatings.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<FloorHeating>(functionDataString));
+                            _FunctionList.floorHeatings.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<FloorHeating>(functionDataString));
                             break;
                         case SPK.SensorPm25:
                         case SPK.SensorCO2:
@@ -145,19 +145,19 @@
                         case SPK.SensorTemperature:
                         case SPK.SensorHumidity:
                             //鎭㈠鐜鏁版嵁
-                            List.sensorsEnvironmentalScience.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Sensor>(functionDataString));
+                            _FunctionList.sensorsEnvironmentalScience.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Sensor>(functionDataString));
                             break;
                         case SPK.ElectricSocket:
                             //鎭㈠鎻掑骇鏁版嵁
-                            List.switchSockets.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<SwitchSocket>(functionDataString));
+                            _FunctionList.switchSockets.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<SwitchSocket>(functionDataString));
                             break;
                         case SPK.ElectricTV:
                             //鎭㈠鐢佃鏁版嵁
-                            List.tVs.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<TV>(functionDataString));
+                            _FunctionList.tVs.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<TV>(functionDataString));
                             break;
                         case SPK.ElectricFan:
                             //鎭㈠椋庢墖鏁版嵁
-                            List.fans.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Fan>(functionDataString));
+                            _FunctionList.fans.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Fan>(functionDataString));
                             break;
                     }
                 }
@@ -195,14 +195,17 @@
         /// </summary>
         public List<Function> GetAllDeviceFunctionList()
         {
-            deviceFunctionList = new List<Function>();
-            deviceFunctionList.AddRange(aCs);
-            deviceFunctionList.AddRange(lights);
-            deviceFunctionList.AddRange(curtains);
-            deviceFunctionList.AddRange(floorHeatings);
-            deviceFunctionList.AddRange(electricals);
-            deviceFunctionList.AddRange(sensorsEnvironmentalScience);
-            deviceFunctionList.AddRange(UI.Music.A31MusicModel.A31MusicModelList);
+            if (deviceFunctionList == null)
+            {
+                deviceFunctionList = new List<Function>();
+                deviceFunctionList.AddRange(aCs);
+                deviceFunctionList.AddRange(lights);
+                deviceFunctionList.AddRange(curtains);
+                deviceFunctionList.AddRange(floorHeatings);
+                deviceFunctionList.AddRange(electricals);
+                deviceFunctionList.AddRange(sensorsEnvironmentalScience);
+                deviceFunctionList.AddRange(UI.Music.A31MusicModel.A31MusicModelList);
+            }
             try
             {
                 deviceFunctionList.OrderByDescending(o => o.usageCount).ToList();
@@ -305,30 +308,30 @@
                     switch (f.functionType)
                     {
                         case FunctionType.AC:
-                            aCs.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<AC>(obj.ToString()));
+                            _FunctionList.aCs.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<AC>(obj.ToString()));
                             break;
                         case FunctionType.FloorHeating:
-                            floorHeatings.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<FloorHeating>(obj.ToString()));
+                            _FunctionList.floorHeatings.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<FloorHeating>(obj.ToString()));
                             break;
                     }
                     break;
                 case FunctionCategory.Light:
-                    lights.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Light>(obj.ToString()));
+                    _FunctionList.lights.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Light>(obj.ToString()));
                     break;
                 case FunctionCategory.Curtain:
-                    curtains.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Curtain>(obj.ToString()));
+                    _FunctionList.curtains.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Curtain>(obj.ToString()));
                     break;
                 case FunctionCategory.Electrical:
                     switch(f.functionType)
                     {
                         case FunctionType.TV:
-                            electricals.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<TV>(obj.ToString()));
+                            _FunctionList.electricals.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<TV>(obj.ToString()));
                             break;
                         case FunctionType.Socket:
-                            electricals.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<SwitchSocket>(obj.ToString()));
+                            _FunctionList.electricals.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<SwitchSocket>(obj.ToString()));
                             break;
                         case FunctionType.Fan:
-                            electricals.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Fan>(obj.ToString()));
+                            _FunctionList.electricals.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Fan>(obj.ToString()));
                             break;
                     }
                     break;
@@ -339,8 +342,8 @@
                         case FunctionType.CO2:
                         case FunctionType.PM25:
                         case FunctionType.Humidity:
-                        //case FunctionType.Noise:
-                            sensorsEnvironmentalScience.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Sensor>(obj.ToString()));
+                        case FunctionType.Temp:
+                            _FunctionList.sensorsEnvironmentalScience.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Sensor>(obj.ToString()));
                             break;
                     }
                     break;
@@ -361,34 +364,41 @@
                     var deviceList = Newtonsoft.Json.JsonConvert.DeserializeObject<DevcieApiPack>(pack.Data.ToString());
                     if (deviceList != null)
                     {
-                        foreach (var function in deviceList.list)
+                        foreach(var localFunction in List.GetAllDeviceFunctionList())
                         {
-                            var localFunction = DB_ResidenceData.functionList.GetAllDeviceFunctionList().Find((obj) => obj.deviceId == function.deviceId);
-                            if (localFunction != null)
+                            var newFunction = deviceList.list.Find((obj) => obj.deviceId == localFunction.deviceId);
+                            if (newFunction == null)//濡傛灉浜戠鏈�鏂版暟鎹病鏈夎鏉℃暟鎹紝鍒欐湰鍦伴渶瑕佸垹鎺夎鏁版嵁璁板綍
                             {
-                                if (localFunction.modifyTime != function.modifyTime)
-                                {
-                                    localFunction.name = function.name;
-                                    localFunction.collect = function.collect;
-                                    localFunction.modifyTime = function.modifyTime;
-                                    localFunction.createTime = function.createTime;
-                                    localFunction.roomIds = function.roomIds;
-                                    localFunction.bus_Data = function.bus_Data;
-                                }
-                                localFunction.SaveFunctionData();
+                                List.DeleteFunction(localFunction);
                             }
                             else
                             {
-                                function.SaveFunctionData();
-                                List.IniFunctionList(function.savePath);
+                                if (localFunction.modifyTime != newFunction.modifyTime)
+                                {
+                                    localFunction.name = newFunction.name;
+                                    localFunction.collect = newFunction.collect;
+                                    localFunction.modifyTime = newFunction.modifyTime;
+                                    localFunction.createTime = newFunction.createTime;
+                                    localFunction.roomIds = newFunction.roomIds;
+                                    localFunction.bus_Data = newFunction.bus_Data;
+                                    new System.Threading.Thread(() =>
+                                    {
+                                        localFunction.SaveFunctionData();
+                                    })
+                                    { IsBackground = true }.Start();
+                                }
+                                deviceList.list.Remove(newFunction);//鎿嶄綔瀹岀殑鏁版嵁娓呯悊鎺夛紝鍓╀笅鐨勫氨鏄柊澧炵殑鍔熻兘
                             }
-
-                            var funcitonInfoPack = pm.GetDeviceInfoList(new List<string>() { function.deviceId });
-                            var funcitonInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<Function>(funcitonInfoPack.Data.ToString());
-                            if (funcitonInfo != null)
+                        }
+                        //澶勭悊鍓╀笅鐨勬柊澧炲姛鑳�
+                        foreach (var newFunction in deviceList.list)
+                        {
+                            new System.Threading.Thread(() =>
                             {
-
-                            }
+                                newFunction.SaveFunctionData();
+                                List.IniFunctionList(newFunction.savePath);
+                            })
+                            { IsBackground = true }.Start();
                         }
                     }
                     MainPage.Log($"璇诲彇浜戠璁惧鏁版嵁:\r\n{ pack.Data.ToString()}");
@@ -396,7 +406,6 @@
                 {
                     MainPage.Log($"璇诲彇浜戠璁惧鏁版嵁澶辫触:\r\nCode:{pack.Code};  Msg:{pack.message}");
                 }
-
             })
             { IsBackground = true }.Start();
         }
@@ -448,6 +457,51 @@
             scene.DeleteSign = true;
             List.scenes.Remove(scene);
         }
+        /// <summary>
+        /// 鍒犻櫎鏈湴鍔熻兘鏂囦欢
+        /// </summary>
+        public void DeleteFunction(Function delTemp)
+        {
+            switch (delTemp.spk)
+            {
+                case SPK.LightSwitch:
+                case SPK.LightDimming:
+                case SPK.LightRGB:
+                case SPK.LightRGBW:
+                case SPK.LightCCT:
+                    _FunctionList.lights.Remove(_FunctionList.lights.Find((obj) => obj.deviceId == delTemp.deviceId));
+                    break;
+                case SPK.CurtainRoller:
+                case SPK.CurtainShades:
+                case SPK.CurtainSwitch:
+                case SPK.CurtainTrietex:
+                    _FunctionList.curtains.Remove(_FunctionList.curtains.Find((obj) => obj.deviceId == delTemp.deviceId));
+                    break;
+                case SPK.AcStandard:
+                    _FunctionList.aCs.Remove(_FunctionList.aCs.Find((obj) => obj.deviceId == delTemp.deviceId));
+                    break;
+                case SPK.FloorHeatStandard:
+                    _FunctionList.floorHeatings.Remove(_FunctionList.floorHeatings.Find((obj) => obj.deviceId == delTemp.deviceId));
+                    break;
+                case SPK.SensorPm25:
+                case SPK.SensorCO2:
+                case SPK.SensorTVOC:
+                case SPK.SensorTemperature:
+                case SPK.SensorHumidity:
+                    _FunctionList.sensorsEnvironmentalScience.Remove(_FunctionList.sensorsEnvironmentalScience.Find((obj) => obj.deviceId == delTemp.deviceId));
+                    break;
+                case SPK.ElectricSocket:
+                    _FunctionList.switchSockets.Remove(_FunctionList.switchSockets.Find((obj) => obj.deviceId == delTemp.deviceId));
+                    break;
+                case SPK.ElectricTV:
+                    _FunctionList.tVs.Remove(_FunctionList.tVs.Find((obj) => obj.deviceId == delTemp.deviceId));
+                    break;
+                case SPK.ElectricFan:
+                    _FunctionList.fans.Remove(_FunctionList.fans.Find((obj) => obj.deviceId == delTemp.deviceId));
+                    break;
+            }
+            FileUtils.DeleteFile(delTemp.savePath);
+        }
 
     }
 
diff --git a/HDL_ON/Entity/Room.cs b/HDL_ON/Entity/Room.cs
index 91e78cd..7d39796 100644
--- a/HDL_ON/Entity/Room.cs
+++ b/HDL_ON/Entity/Room.cs
@@ -122,15 +122,25 @@
                 {
                     foreach (var updateTemp in roomUpdateList)
                     {
+                        var localDelRoom = CurrentSpatial.needDeleteRooms.Find((obj) => obj.roomId == updateTemp.roomId);
+                        if(localDelRoom!= null)
+                        {
+                                    DelRoom(localDelRoom);
+                           
+                            continue;
+                        }
                         var localRoom = CurrentSpatial.RoomList.Find((obj) => obj.roomId == updateTemp.roomId);
                         if (localRoom != null)
                         {
-                            localRoom.roomName = updateTemp.roomName;
-                            localRoom.roomImage = updateTemp.roomImage;
-                            localRoom.parentId = updateTemp.parentId;
-                            localRoom.createTime = updateTemp.createTime;
-                            localRoom.modifyTime = updateTemp.modifyTime;
-                            localRoom.SaveRoomData();
+                            if (localRoom.modifyTime != updateTemp.modifyTime)
+                            {
+                                localRoom.roomName = updateTemp.roomName;
+                                localRoom.roomImage = updateTemp.roomImage;
+                                localRoom.parentId = updateTemp.parentId;
+                                localRoom.createTime = updateTemp.createTime;
+                                localRoom.modifyTime = updateTemp.modifyTime;
+                                localRoom.SaveRoomData();
+                            }
                         }else
                         {
                             updateTemp.SaveRoomData();
@@ -143,6 +153,8 @@
                     foreach(var newRoom in roomUpdateList)
                     {
                         newRoom.SaveRoomData();
+                        RoomList.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Room>(
+                            Newtonsoft.Json.JsonConvert.SerializeObject(newRoom)));
                     }
                 }
             }
@@ -194,7 +206,7 @@
                 {
                     try
                     {
-                        var floorsDataBytes = FileUtils.ReadFile(dataSavePath);
+                        var floorsDataBytes = FileUtils.ReadFile("FloorsData");
                         if (floorsDataBytes != null)
                         {
                             var floorsDataString = System.Text.Encoding.UTF8.GetString(floorsDataBytes);
@@ -262,7 +274,7 @@
             if (tRoom != null)
             {
                 FloorList.Remove(floor);
-                floor.modifyTime = "";
+                floor.DeleteSign = true;
             }
             SaveFloorData();
         }
@@ -278,16 +290,7 @@
             SaveSpatialInfo();
         }
 
-        /// <summary>
-        /// 淇濆瓨鎴块棿鏁版嵁
-        /// </summary>
-        public void SaveRoomData()
-        {
-            var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this));
-            FileUtils.WriteFileByBytes(dataSavePath, ssd);
-            MainPage.Log($"Save Room Data {roomName} : {uid}");
-            SaveSpatialInfo();
-        }
+
         #endregion
 
         #region 鎴块棿鍒楄〃
@@ -316,11 +319,40 @@
                                 var roomDataBytes = FileUtils.ReadFile(filePath);
                                 var roomDataString = System.Text.Encoding.UTF8.GetString(roomDataBytes);
                                 var room = Newtonsoft.Json.JsonConvert.DeserializeObject<Room>(roomDataString);
-                                if (room != null)
+                                if (room != null )
                                 {
-                                    rooms.Add(room);
+                                    if(room.DeleteSign)
+                                    {
+                                        needDeleteRooms.Add(room);
+                                    }else
+                                    {
+                                        rooms.Add(room);
+                                    }
                                 }
                             }
+                        }
+                        if(needDeleteRooms.Count>0)
+                        {
+                            //鍒犻櫎宸茬粡鏍囪闇�瑕佸垹闄ょ殑鎴块棿
+                            new System.Threading.Thread(() =>
+                            {
+                                var delIds = new List<string>();
+                                foreach(var delTemp in needDeleteRooms)
+                                {
+                                    delIds.Add(delTemp.roomId);
+                                }
+                                var pm = new HttpServerRequest();
+                                var pack = pm.DeleteRoom(delIds);
+                                if (pack.Code == StateCode.SUCCESS)
+                                {
+                                    foreach (var delTemp in needDeleteRooms)
+                                    {
+                                        FileUtils.DeleteFile(delTemp.dataSavePath);
+                                    }
+                                    needDeleteRooms.Clear();
+                                }
+                            })
+                            { IsBackground = true }.Start();
                         }
                     }
                     catch (Exception ex)
@@ -331,6 +363,12 @@
                 return rooms;
             }
         }
+        /// <summary>
+        /// 闇�瑕佸垹闄ょ殑鎴块棿
+        /// 鏈湴鏍囪鍒犻櫎浜嗭紝浣嗘槸鏈嶅姟涓婃病鏈夊垹闄�
+        /// 鏃犳硶涓庢湇鍔″櫒閫氳閫犳垚鍒犻櫎涓嶆垚鍔燂紝閫氳鎴愬姛涔嬪悗瑕侀噸鏂板垹闄�
+        /// </summary>
+        List<Room> needDeleteRooms = new List<Room>();
         /// <summary>
         /// 澧炲姞鎴块棿
         /// </summary>
@@ -346,14 +384,29 @@
         /// <param name="room"></param>
         public void DelRoom(Room room)
         {
-            var tRoom = RoomList.Find((obj) => obj.uid == room.uid);
-            if (tRoom != null)
+            new System.Threading.Thread(() =>
             {
-                FileUtils.DeleteFile(room.dataSavePath);
-                RoomList.Remove(room);
                 room.DeleteSign = true;
-            }
-            room.SaveRoomData();
+                room.SaveRoomData();
+                var tRoom = RoomList.Find((obj) => obj.uid == room.uid);
+                if (tRoom != null)
+                {
+                    RoomList.Remove(room);
+                }
+                var temp = needDeleteRooms.Find((obj) => obj.uid == room.uid);
+                if (temp != null)
+                {
+                    needDeleteRooms.Add(room);
+                }
+                var pm = new HttpServerRequest();
+                var pack = pm.DeleteRoom(new List<string>() { room.roomId });
+                if (pack.Code == StateCode.SUCCESS)
+                {
+                    FileUtils.DeleteFile(room.dataSavePath);
+                    needDeleteRooms.Remove(room);
+                }
+            })
+            { IsBackground = true }.Start();
         }
         /// <summary>
         /// 鍒犻櫎鎵�鏈夋埧闂�
@@ -390,7 +443,16 @@
             { IsBackground = true }.Start();
         }
 
-
+        /// <summary>
+        /// 淇濆瓨鎴块棿鏁版嵁
+        /// </summary>
+        public void SaveRoomData()
+        {
+            var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this));
+            FileUtils.WriteFileByBytes(dataSavePath, ssd);
+            MainPage.Log($"Save Room Data {roomName} : {uid}");
+            SaveSpatialInfo();
+        }
         #endregion
 
     }

--
Gitblit v1.8.0