From dc0309e64f02227d8e1468b7326c07955f804612 Mon Sep 17 00:00:00 2001
From: chenqiyang <1406175257@qq.com>
Date: 星期三, 22 六月 2022 11:22:18 +0800
Subject: [PATCH] 修改引用路径

---
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs | 2220 ++++++++++++++++++++++++++++++-----------------------------
 1 files changed, 1,116 insertions(+), 1,104 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs
old mode 100755
new mode 100644
index c9d80ec..7dd4fc8
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs
@@ -1,1104 +1,1116 @@
-锘縰sing Shared.Common;
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Threading.Tasks;
-using ZigBee.Device;
-
-namespace Shared.Phone.UserCenter
-{
-    /// <summary>
-    /// 鍦烘櫙鐨勯�昏緫
-    /// </summary>
-    public class HdlSceneLogic
-    {
-        #region 鈻� 鍙橀噺澹版槑___________________________
-
-        /// <summary>
-        /// 鍦烘櫙鐨勯�昏緫
-        /// </summary>
-        private static HdlSceneLogic m_Current = null;
-        /// <summary>
-        /// 鍦烘櫙鐨勯�昏緫
-        /// </summary>
-        public static HdlSceneLogic Current
-        {
-            get
-            {
-                if (m_Current == null)
-                {
-                    m_Current = new HdlSceneLogic();
-                }
-                return m_Current;
-            }
-        }
-
-        /// <summary>
-        /// 鍦烘櫙瀵硅薄
-        /// </summary>
-        private Dictionary<int, SceneUI> dicScenes = new Dictionary<int, SceneUI>();
-
-        #endregion
-
-        #region 鈻� 鍒锋柊鍦烘櫙___________________________
-
-        /// <summary>
-        /// 浠庢湰鍦板埛鏂板満鏅�
-        /// </summary>
-        public void ReFreshByLocal()
-        {
-            //娓呯┖鍦烘櫙
-            this.dicScenes.Clear();
-            //鑾峰彇鍏ㄩ儴鏂囦欢
-            var listFile = this.GetAllSceneFile();
-            foreach (string fileName in listFile)
-            {
-                try
-                {
-                    var jsonInfo = Encoding.UTF8.GetString(Global.ReadFileByHomeId(fileName));
-                    var tempScene = Newtonsoft.Json.JsonConvert.DeserializeObject<SceneUI>(jsonInfo);
-                    if (tempScene == null)
-                    {
-                        continue;
-                    }
-                    this.dicScenes[tempScene.Id] = tempScene;
-                }
-                catch(Exception ex)
-                {
-                    HdlLogLogic.Current.WriteLog(ex);
-                    try
-                    {
-                        //鍒犳帀閿欒鏂囦欢
-                        Global.DeleteFilebyHomeId(fileName);
-                    }
-                    catch { }
-                }
-            }
-        }
-
-        /// <summary>
-        /// 鍒锋柊浠庣綉鍏冲埛鏂板叏閮ㄧ殑鍦烘櫙
-        /// </summary>
-        /// <param name="useLocalConnect">鏄惁寮哄埗浣跨敤鏈湴杩炴帴鍙戦��</param>
-        public bool RefreshSceneUIList(bool useLocalConnect)
-        {
-            //鑾峰彇缃戝叧瀛樺湪鐨勫満鏅�
-            var sceneList = this.RefreshSceneListFromGateway(useLocalConnect);
-            if (sceneList == null)
-            {
-                return false;
-            }
-            var listEsxit = new HashSet<int>();
-            foreach (var scene in sceneList)
-            {
-                if (scene == null)
-                {
-                    continue;
-                }
-                listEsxit.Add(scene.ScenesId);
-                //鍒锋柊scene鐨勪俊鎭�
-                this.RefreshScene(scene);
-            }
-
-            var listDelete = new List<SceneUI>();
-            foreach (var scId in this.dicScenes.Keys)
-            {
-                if (listEsxit.Contains(scId) == false)
-                {
-                    //鍒犻櫎鐨勫璞�
-                    listDelete.Add(this.dicScenes[scId]);
-                }
-            }
-            foreach (var sceneui in listDelete)
-            {
-                //鎵ц鍒犻櫎
-                this.DeleteLocalScene(sceneui);
-            }
-
-            return true;
-        }
-
-        /// <summary>
-        /// 鍒锋柊scene鐨勪俊鎭�
-        /// </summary>
-        /// <param name="sceneInfo"></param>
-        private void RefreshScene(Scene.GetSceneAllInfo sceneInfo)
-        {
-            if (this.dicScenes.ContainsKey(sceneInfo.ScenesId) == true)
-            {
-                var localScene = this.dicScenes[sceneInfo.ScenesId];
-                //鍙埛鏂板悕瀛楀拰缁戝畾琛�
-                localScene.Name = sceneInfo.ScenesName;
-                localScene.AdjustTargetList.Clear();
-                localScene.AdjustTargetList.AddRange(sceneInfo.DeviceList);
-                localScene.Save();
-            }
-            else
-            {
-                var newScene = new SceneUI();
-                newScene.Name = sceneInfo.ScenesName;
-                newScene.IconPath = "SceneIcon/0.png";
-                newScene.Id = sceneInfo.ScenesId;
-                newScene.AdjustTargetList.AddRange(sceneInfo.DeviceList);
-                //娣诲姞缂撳瓨
-                newScene.Save();
-                //鍔犲叆缂撳瓨
-                this.dicScenes[newScene.Id] = newScene;
-                //澶囦唤
-                HdlAutoBackupLogic.AddOrEditorFile(newScene.FileName);
-            }
-
-        }
-
-        /// <summary>
-        /// 浠庣綉鍏抽噸鏂板埛鏂板満鏅垪琛�
-        /// </summary>
-        /// <param name="useLocalConnect">鏄惁寮哄埗浣跨敤鏈湴杩炴帴鍙戦��</param>
-        private List<Scene.GetSceneAllInfo> RefreshSceneListFromGateway(bool useLocalConnect)
-        {
-            var mainGateway = ZbGateway.MainGateWay;
-            if (mainGateway == null)
-            {
-                //鑾峰彇缃戝叧瀵硅薄澶辫触
-                this.ShowTipMsg(Language.StringByID(R.MyInternationalizationString.uGetGatewayTagartFail));
-                return null;
-            }
-
-            //瓒呮椂鏃堕棿
-            int TimeOut = 0;
-            bool receiptAll = false;
-            bool canReceve = false;
-
-            var listScene = new List<Scene.GetSceneAllInfo>();
-            Action<string, string> action = (topic, message) =>
-            {
-                var gatewayID = topic.Split('/')[0];
-                var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
-
-                if (topic == gatewayID + "/" + "Scene/GetAllInfo_Respon")
-                {
-                    var sceneGetAllInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.GetSceneAllInfo>(jobject["Data"].ToString());
-                    if (sceneGetAllInfo.ScenesSum != 0)
-                    {
-                        //濡傛灉缃戝叧閲岄潰娌℃湁鍦烘櫙鐨勮瘽,瀹冧篃浼氭帹杩欎釜涓滆タ杩囨潵
-                        listScene.Add(sceneGetAllInfo);
-                    }
-
-                    //鏇村鎺ユ敹寰楀埌鍦烘櫙
-                    canReceve = true;
-                    if (sceneGetAllInfo.ScenesNum == sceneGetAllInfo.ScenesSum)
-                    {
-                        //鎺ユ敹瀹屾垚
-                        receiptAll = true;
-                        TimeOut = 0;
-                    }
-                }
-            };
-            mainGateway.Actions += action;
-
-            var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 807 } };
-            if (useLocalConnect == false)
-            {
-                mainGateway.Send(("Scene/GetAllInfo"), System.Text.Encoding.UTF8.GetBytes(jObject.ToString()));
-            }
-            else
-            {
-                mainGateway.SendLocation(("Scene/GetAllInfo"), System.Text.Encoding.UTF8.GetBytes(jObject.ToString()));
-            }
-
-            int waitTime = 20 * 6;
-            while (receiptAll == false && TimeOut < waitTime)
-            {
-                //鍏ㄩ儴鎺ユ敹鎵嶉��鍑�
-                System.Threading.Thread.Sleep(50);
-                TimeOut++;
-            }
-            mainGateway.Actions -= action;
-            action = null;
-            if (canReceve == false)
-            {
-                //鑾峰彇鍦烘櫙鍒楄〃澶辫触,缃戝叧鍥炲瓒呮椂
-                this.ShowTipMsg(Language.StringByID(R.MyInternationalizationString.uGetSceneListFailAndTimeOut));
-                return null;
-            }
-            else if (receiptAll == false)
-            {
-                //缃戠粶涓嶇ǔ瀹氾紝鍦烘櫙鍒楄〃淇℃伅缂烘崯
-                this.ShowTipMsg(Language.StringByID(R.MyInternationalizationString.uNetworkUnStableAndSceneInfoIsNotFull));
-                return null;
-            }
-
-            return listScene;
-        }
-
-        #endregion
-
-        #region 鈻� 娣诲姞鍦烘櫙___________________________
-
-        /// <summary>
-        /// 娣诲姞鏂板満鏅埌缃戝叧(杩斿洖null浠h〃鍑洪敊)
-        /// </summary>
-        /// <param name="sceneName">鍦烘櫙鍚嶇О</param>
-        /// <param name="listAdjustTarget">鎵ц鐩爣</param>
-        /// <returns></returns>
-        public SceneUI AddNewSceneToGateway(string sceneName, List<Scene.DeviceListData> listAdjustTarget)
-        {
-            int NewScenesId = -1;
-            //濡傛灉褰撳墠浣忓畢涓嶆槸铏氭嫙浣忓畢
-            if (Config.Instance.Home.IsVirtually == false)
-            {
-                //鑾峰彇鏂板缓涓�涓満鏅殑鍛戒护瀛楃
-                var strCommand = this.GetAddNewSceneCommand(sceneName);
-                var result = HdlGatewayLogic.Current.SendJobjectDataToGateway(ZbGateway.MainGateWay, "Scene/GetNewId", strCommand, "Scene/GetNewId_Respon");
-                if (result.ErrorMsg != null)
-                {
-                    this.ShowTipMsg(result.ErrorMsg);
-                    return null;
-                }
-                if (result.ErrorMsgDiv == 0)
-                {
-                    //娣诲姞鍦烘櫙澶辫触
-                    string msg1 = Language.StringByID(R.MyInternationalizationString.AddSceneFail);
-                    //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
-                    msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result);
-                    this.ShowTipMsg(msg1);
-                    return null;
-                }
-                var getSceneIdData = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.GetSceneIdData>(result.ReceiptData);
-                NewScenesId = getSceneIdData.NewScenesId;
-            }
-            else
-            {
-                //铏氭嫙鍦烘櫙ID
-                NewScenesId = Convert.ToInt32(DateTime.Now.ToString("HHmmss"));
-            }
-            //娣诲姞鎵ц鐩爣
-            var listSuccess = this.AddTargetToScene(NewScenesId, listAdjustTarget);
-            if (listSuccess == null)
-            {
-                return null;
-            }
-
-            //鍒涘缓鍦烘櫙瀵硅薄
-            var newScene = new SceneUI();
-            newScene.Name = sceneName;
-            newScene.Id = NewScenesId;
-            newScene.AdjustTargetList.AddRange(listSuccess);
-            //娣诲姞缂撳瓨
-            newScene.Save();
-            //鍔犲叆缂撳瓨
-            this.dicScenes[newScene.Id] = newScene;
-
-            return newScene;
-        }
-
-        /// <summary>
-        /// 鑾峰彇鏂板缓涓�涓満鏅殑鍛戒护瀛楃
-        /// </summary>
-        /// <param name="sceneName">鍦烘櫙鍚嶇О</param>
-        /// <returns></returns>
-        public string GetAddNewSceneCommand(string sceneName)
-        {
-            var bytes = new byte[32];
-            var reamarkGwBytes = Encoding.UTF8.GetBytes(sceneName);
-            Array.Copy(reamarkGwBytes, 0, bytes, 0, 32 < reamarkGwBytes.Length ? 32 : reamarkGwBytes.Length);
-            sceneName = Encoding.UTF8.GetString(bytes);
-
-            var jObject = new Newtonsoft.Json.Linq.JObject() { { "Cluster_ID", 0 }, { "Command", 800 } };
-            var data = new Newtonsoft.Json.Linq.JObject { { "ScenesName", sceneName } };
-            jObject.Add("Data", data);
-
-            return jObject.ToString();
-        }
-
-        /// <summary>
-        /// 娣诲姞鎵ц鐩爣鍒版寚瀹氱殑鍦烘櫙(杩斿洖鎴愬姛娣诲姞鐨勬墽琛岀洰鏍�)
-        /// </summary>
-        /// <param name="sceneId">鍦烘櫙Id</param>
-        /// <param name="listAdjustTarget">鎵ц鐩爣</param>
-        /// <returns></returns>
-        private List<Scene.DeviceListData> AddTargetToScene(int sceneId, List<Scene.DeviceListData> listAdjustTarget)
-        {
-            //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹呯殑璇�
-            if (Common.Config.Instance.Home.IsVirtually == true)
-            {
-                //涓嶉渶瑕佹洿鏂扮綉鍏�
-                return listAdjustTarget;
-            }
-            var listSuccess = new List<Scene.DeviceListData>();
-
-            //鑾峰彇娣诲姞鎵ц鐩爣鍒板満鏅殑鍛戒护
-            var listCommand = this.GetAddTargetToSceneCommand(sceneId, listAdjustTarget);
-            for (int i = 0; i < listCommand.Count; i++)
-            {
-                var result = HdlGatewayLogic.Current.SendJobjectDataToGateway(ZbGateway.MainGateWay, "Scene/AddMember", listCommand[i], "Scene/AddMember_Respon");
-                if (result.ErrorMsg != null || result.ErrorMsgDiv == 0)
-                {
-                    //鍑虹幇閿欒
-                    continue;
-                }
-                var addSceneMemberData = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.AddSceneMemberResponseData>(result.ReceiptData);
-                if (addSceneMemberData.Result == 1)
-                {
-                    listSuccess.Add(listAdjustTarget[i]);
-                }
-            }
-            if (listSuccess.Count == 0)
-            {
-                //娣诲姞鎵ц鐩爣澶辫触
-                string msg1 = Language.StringByID(R.MyInternationalizationString.uAddAdjustTargetFail);
-                this.ShowTipMsg(msg1);
-                return null;
-            }
-            //濡傛灉涓嶆槸鍏ㄩ儴鎴愬姛鐨勮瘽,鎻愮ず
-            if (listSuccess.Count != listAdjustTarget.Count)
-            {
-                //涓埆鎵ц鐩爣娣诲姞澶辫触
-                string msg1 = Language.StringByID(R.MyInternationalizationString.uSomeAdjustTargetAddFail);
-                this.ShowTipMsg(msg1);
-            }
-            return listSuccess;
-        }
-
-        /// <summary>
-        /// 鑾峰彇娣诲姞鎵ц鐩爣鍒板満鏅殑鍛戒护
-        /// </summary>
-        /// <param name="sceneId">鍦烘櫙id</param>
-        /// <param name="listAdjustTarget">鎵ц鐩爣</param>
-        /// <param name="dicChangedMac">浜ゆ崲mac key:listAdjustTarget褰撳墠鐨凪ac value:杞崲鐨刴ac</param>
-        /// <param name="sceneName">鍦烘櫙鍚嶇О(鐗规畩鐢ㄩ��,璇峰嬁璁剧疆)</param>
-        /// <returns></returns>
-        public List<string> GetAddTargetToSceneCommand(int sceneId, List<Scene.DeviceListData> listAdjustTarget, Dictionary<string, string> dicChangedMac = null, string sceneName = null)
-        {
-            var listCommand = new List<string>();
-            int index = 1;
-            for (int i = 0; i < listAdjustTarget.Count; i++)
-            {
-                var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 820 } };
-                var data = listAdjustTarget[i];
-                //璁惧
-                if (data.Type == 0)
-                {
-                    string deviceAddr = data.DeviceAddr;
-                    if (dicChangedMac != null)
-                    {
-                        //濡傛灉涓嶅寘鍚�,鍒欎笉浣滀负澶勭悊瀵硅薄
-                        if (dicChangedMac.ContainsKey(deviceAddr) == false)
-                        {
-                            continue;
-                        }
-                        deviceAddr = dicChangedMac[deviceAddr];
-                    }
-
-                    var taskList = new Newtonsoft.Json.Linq.JArray { };
-                    foreach (var taskInfo in data.TaskList)
-                    {
-                        var tInfo = new Newtonsoft.Json.Linq.JObject{{ "TaskType", taskInfo.TaskType},
-                            { "Data1", taskInfo.Data1},{ "Data2",taskInfo.Data2}};
-                        taskList.Add(tInfo);
-                    }
-                    var data2 = new Newtonsoft.Json.Linq.JObject {{ "ScenesId",sceneId},{ "Type", 0} ,{ "DeviceAddr",deviceAddr} ,
-                         { "Epoint", data.Epoint} ,{ "TaskList", taskList },{ "DelayTime", 0} ,{ "MemberNumber",index}};
-                    if (sceneName != null)
-                    {
-                        data2.Add(new Newtonsoft.Json.Linq.JProperty("ScenesName", sceneName));
-                    }
-                    jObject.Add("Data", data2);
-                }
-                //鍦烘櫙
-                else if (data.Type == 1)
-                {
-                    var data2 = new Newtonsoft.Json.Linq.JObject {{ "ScenesId",sceneId},{ "Type", 1} ,
-                         { "ElseScenesId", data.ElseScenesId },{ "DelayTime", 0} ,{ "MemberNumber",index} };
-                    if (sceneName != null)
-                    {
-                        data2.Add(new Newtonsoft.Json.Linq.JProperty("ScenesName", sceneName));
-                    }
-                    jObject.Add("Data", data2);
-                }
-                //寤舵椂
-                else
-                {
-                    var data2 = new Newtonsoft.Json.Linq.JObject {{ "Type", 2} ,{ "ScenesId",sceneId},
-                         { "DelayTime", data.DelayTime} ,{ "MemberNumber",index}};
-                    if (sceneName != null)
-                    {
-                        data2.Add(new Newtonsoft.Json.Linq.JProperty("ScenesName", sceneName));
-                    }
-                    jObject.Add("Data", data2);
-                }
-                listCommand.Add(jObject.ToString());
-                index++;
-            }
-            return listCommand;
-        }
-
-
-        /// <summary>
-        /// 娣诲姞鍦烘櫙(杩欎釜鍗曠函鍙敼鎴块棿)
-        /// </summary>
-        /// <param name="scene">Scene.</param>
-        public void AddSceneToRoom(Room i_room, SceneUI scene)
-        {
-            //娣诲姞缂撳瓨
-            if (i_room.ListSceneId.Contains(scene.Id) == false)
-            {
-                i_room.ListSceneId.Add(scene.Id);
-                i_room.Save();
-            }
-        }
-
-        /// <summary>
-        /// 娣诲姞鎼滆棌鍦烘櫙
-        /// </summary>
-        /// <param name="scene">Scene.</param>
-        public void AddLoveScene(SceneUI scene)
-        {
-            var nowRoom = HdlRoomLogic.Current.GetLoveRoom();
-            //娣诲姞缂撳瓨
-            if (nowRoom.ListSceneId.Contains(scene.Id) == false)
-            {
-                nowRoom.ListSceneId.Add(scene.Id);
-                nowRoom.Save();
-                //娣诲姞鏀惰棌鍦烘櫙鏃�,闇�瑕佸埛鏂颁富椤�
-                UserView.UserPage.Instance.RefreshAllForm = true;
-            }
-        }
-
-        /// <summary>
-        /// 娣诲姞铏氭嫙鍦烘櫙
-        /// </summary>
-        /// <param name="sceneId">鎸囧畾鍦烘櫙id,濡傛灉涓�-1,鍒欎細鍐呴儴鑷姩缂栧彿(鍙兘浼氶噸澶�)</param>
-        /// <param name="sceneName">鍦烘櫙鍚嶅瓧</param>
-        /// <param name="listAdjustTarget">缁戝畾鐩爣</param>
-        /// <returns></returns>
-        public SceneUI AddVirtualScene(int sceneId, string sceneName, List<Scene.DeviceListData> listAdjustTarget)
-        {
-            if (sceneId == -1)
-            {
-                sceneId = Convert.ToInt32(DateTime.Now.ToString("HHmmss"));
-            }
-            //鍒涘缓鍦烘櫙瀵硅薄
-            var newScene = new SceneUI();
-            newScene.Name = sceneName;
-            newScene.IconPath = "SceneIcon/0.png";
-            //铏氭嫙鍦烘櫙ID
-            newScene.Id = sceneId;
-            if (listAdjustTarget != null)
-            {
-                newScene.AdjustTargetList.AddRange(listAdjustTarget);
-            }
-            //娣诲姞缂撳瓨
-            newScene.Save();
-            //鍔犲叆缂撳瓨
-            this.dicScenes[newScene.Id] = newScene;
-
-            return newScene;
-        }
-
-        #endregion
-
-        #region 鈻� 淇敼鍦烘櫙___________________________
-
-        /// <summary>
-        /// 淇敼缃戝叧鐨勫満鏅�
-        /// </summary>
-        /// <param name="sceneUI">鍦烘櫙瀵硅薄</param>
-        /// <param name="listAdjustTarget">鍏ㄩ儴鐨勬墽琛岀洰鏍�</param>
-        /// <returns></returns>
-        public async Task<bool> EditorSceneFromGateway(SceneUI sceneUI, List<Scene.DeviceListData> listAdjustTarget)
-        {
-            //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹呯殑璇�
-            if (Common.Config.Instance.Home.IsVirtually == true)
-            {
-                //娓呯┖鍦烘櫙鐨勬墽琛岀洰鏍囧垪琛ㄧ殑缂撳瓨
-                sceneUI.AdjustTargetList.Clear();
-                sceneUI.AdjustTargetList.AddRange(listAdjustTarget);
-                sceneUI.Save();
-                return true;
-            }
-
-            //鍏堟竻绌哄叏閮ㄧ殑鎵ц鐩爣
-            var deleteData = new Scene.SceneRemoveMemberData();
-            var deleteTargetData = new List<Scene.RemoveSceneDeviceListInfo>();
-            for (int i = 0; i < sceneUI.AdjustTargetList.Count; i++)
-            {
-                var data = sceneUI.AdjustTargetList[i];
-                var removeData = new Scene.RemoveSceneDeviceListInfo();
-                if (data.Type == 0)
-                {
-                    //璁惧
-                    removeData.Type = 0;
-                    removeData.DeviceAddr = data.DeviceAddr;
-                    removeData.Epoint = data.Epoint;
-                    removeData.MemberNumber = data.MemberNumber;
-                }
-                else if (data.Type == 1)
-                {
-                    //鍦烘櫙
-                    removeData.Type = 1;
-                    removeData.ElseScenesId = data.ElseScenesId;
-                    removeData.MemberNumber = data.MemberNumber;
-                }
-                else
-                {
-                    //寤舵椂
-                    removeData.Type = 2;
-                    removeData.DelayTime = data.DelayTime;
-                    removeData.MemberNumber = data.MemberNumber;
-                }
-                //鎷ユ湁鎴愬姛鐨�
-                deleteTargetData.Add(removeData);
-            }
-            deleteData.DeviceList = deleteTargetData;
-            deleteData.ScenesId = sceneUI.Id;
-            //鎵ц娓呯┖
-            var result = await Scene.RemoveSceneMemberAsync(deleteData);
-            if (result == null || result.removeSceneMemberResponseData == null)
-            {
-                //鍒濆鍖栨墽琛岀洰鏍囧け璐�
-                string msg1 = Language.StringByID(R.MyInternationalizationString.uInitAdjustTargetFail);
-                //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
-                msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result);
-                this.ShowTipMsg(msg1);
-                return false;
-            }
-            if (result.removeSceneMemberResponseData.Result != 0)
-            {
-                //鍒濆鍖栨墽琛岀洰鏍囧け璐�
-                string msg1 = Language.StringByID(R.MyInternationalizationString.uInitAdjustTargetFail);
-                this.ShowTipMsg(msg1);
-                return false;
-            }
-            //娓呯┖鍦烘櫙鐨勬墽琛岀洰鏍囧垪琛ㄧ殑缂撳瓨
-            sceneUI.AdjustTargetList.Clear();
-
-            //鐒跺悗閲嶆柊娣诲姞
-            var listSuccess = this.AddTargetToScene(sceneUI.Id, listAdjustTarget);
-            if (listSuccess == null)
-            {
-                return false;
-            }
-            sceneUI.AdjustTargetList.AddRange(listSuccess);
-            sceneUI.Save();
-
-            return true;
-        }
-
-        /// <summary>
-        /// 淇敼缃戝叧鐨勫満鏅悕绉�
-        /// </summary>
-        /// <param name="scene">鍦烘櫙瀵硅薄</param>
-        /// <param name="newName">鏂扮殑鍚嶅瓧</param>
-        /// <returns></returns>
-        public async Task<bool> EditorSceneNameFromGateway(SceneUI scene, string newName)
-        {
-            //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹呯殑璇�
-            if (Common.Config.Instance.Home.IsVirtually == true)
-            {
-                //涓嶉渶瑕佹洿鏂扮綉鍏�
-                return true;
-            }
-            var result1 = await Scene.RenameSceneAsync(scene.Id, newName);
-            //鍏遍�氶敊璇娴�
-            string error = HdlCheckLogic.Current.CheckCommonErrorCode(result1);
-            if (error != null)
-            {
-                this.ShowErrorMsg(error);
-                return false;
-            }
-            if (result1 == null || result1.sceneRenameResponseData == null)
-            {
-                //淇敼鍦烘櫙鍚嶇О澶辫触
-                string msg1 = Language.StringByID(R.MyInternationalizationString.uEditorSceneNameFail);
-                //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
-                msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result1);
-                this.ShowTipMsg(msg1);
-                return false;
-            }
-            if (result1.sceneRenameResponseData.Result == 2)
-            {
-                //鐩爣鍦烘櫙涓嶅瓨鍦�
-                string msg1 = Language.StringByID(R.MyInternationalizationString.uTargetSceneIsNotExsit);
-                this.ShowTipMsg(msg1);
-                return false;
-            }
-            if (result1.sceneRenameResponseData.Result != 1)
-            {
-                //淇敼鍦烘櫙鍚嶇О澶辫触
-                string msg1 = Language.StringByID(R.MyInternationalizationString.uEditorSceneNameFail);
-                this.ShowTipMsg(msg1);
-                return false;
-            }
-            return true;
-        }
-
-        #endregion
-
-        #region 鈻� 鍒犻櫎鍦烘櫙___________________________
-
-        /// <summary>
-        /// 鍒犻櫎鏈湴鍦烘櫙鏁版嵁
-        /// </summary>
-        /// <param name="sceneUI">Scene user interface.</param>
-        public void DeleteLocalScene(SceneUI sceneUI)
-        {
-            //绉婚櫎缂撳瓨
-            this.dicScenes.Remove(sceneUI.Id);
-            var room = HdlRoomLogic.Current.GetRoomBySceneId(sceneUI.Id);
-            if (room != null)
-            {
-                room.ListSceneId.Remove(sceneUI.Id);
-                room.Save();
-            }
-
-            //绉婚櫎鍠滅埍
-            var roomLove = HdlRoomLogic.Current.GetLoveRoom();
-            if (roomLove.ListSceneId.Contains(sceneUI.Id) == true)
-            {
-                roomLove.ListSceneId.Remove(sceneUI.Id);
-                roomLove.Save();
-            }
-
-            //鍒犻櫎鏂囦欢
-            if (Global.IsExistsByHomeId(sceneUI.FileName) == true)
-            {
-                Global.DeleteFilebyHomeId(sceneUI.FileName);
-                HdlAutoBackupLogic.DeleteFile(sceneUI.FileName);
-            }
-            //鍒犻櫎鍥剧墖
-            if (sceneUI.IconPathType == 1 || sceneUI.IconPathType == 2)
-            {
-                if (Global.IsExistsByHomeId(sceneUI.IconPath))
-                {
-                    Global.DeleteFilebyHomeId(sceneUI.IconPath);
-                    HdlAutoBackupLogic.DeleteFile(sceneUI.IconPath);
-                }
-            }
-            //鍒犻櫎鍦烘櫙鏃�,闇�瑕佸埛鏂颁富椤�
-            UserView.UserPage.Instance.RefreshAllForm = true;
-        }
-
-        /// <summary>
-        /// 娓呯┖鏈湴鍏ㄩ儴鐨勫満鏅暟鎹�
-        /// </summary>
-        public void DeleteAllLocalScene()
-        {
-            var listScene = new List<SceneUI>();
-            foreach (var scene in this.dicScenes.Values)
-            {
-                listScene.Add(scene);
-            }
-            foreach (var scene in listScene)
-            {
-                this.DeleteLocalScene(scene);
-            }
-        }
-
-        /// <summary>
-        /// 鍒犻櫎鍦烘櫙(杩欎釜鍙Щ闄ゅ唴瀛�)
-        /// </summary>
-        /// <param name="scene"></param>
-        public void DeleteSceneFromRoom(Room i_room, SceneUI scene)
-        {
-            //绉婚櫎缂撳瓨
-            if (i_room.ListSceneId.Contains(scene.Id) == true)
-            {
-                i_room.ListSceneId.Remove(scene.Id);
-                i_room.Save();
-            }
-        }
-
-        /// <summary>
-        /// 鍒犻櫎鎼滆棌鍦烘櫙
-        /// </summary>
-        /// <param name="scene"></param>
-        public void DeleteLoveScene(SceneUI scene)
-        {
-            var nowRoom = HdlRoomLogic.Current.GetLoveRoom();
-            //绉婚櫎缂撳瓨
-            if (nowRoom.ListSceneId.Contains(scene.Id) == true)
-            {
-                nowRoom.ListSceneId.Remove(scene.Id);
-                nowRoom.Save();
-                //鍙栨秷鏀惰棌鍦烘櫙鏃�,闇�瑕佸埛鏂颁富椤�
-                UserView.UserPage.Instance.RefreshAllForm = true;
-            }
-        }
-
-        #endregion
-
-        #region 鈻� 鑾峰彇鍦烘櫙___________________________
-
-        /// <summary>
-        /// 鑾峰彇鏈湴鍏ㄩ儴鐨勫満鏅�(鍖呭惈鏈垎閰�)
-        /// </summary>
-        /// <returns></returns>
-        public List<SceneUI> GetAllLocalScene()
-        {
-            //鎴块棿鐨勫満鏅斁鍦ㄥ墠闈�
-            var listScene = this.GetAllRoomSceneList();
-            //鏈垎閰嶇殑鍦烘櫙
-            var listUnalloctScene = this.GetUnalloctedScenes();
-            listScene.AddRange(listUnalloctScene);
-            return listScene;
-        }
-
-        /// <summary>
-        /// 閫氳繃鍦烘櫙id鑾峰彇鍦烘櫙
-        /// </summary>
-        /// <returns>The scene UIB y scene identifier.</returns>
-        /// <param name="sceneId">Scene identifier.</param>
-        public SceneUI GetSceneUIBySceneId(int sceneId)
-        {
-            if (this.dicScenes.ContainsKey(sceneId) == true)
-            {
-                return this.dicScenes[sceneId];
-            }
-            return null;
-        }
-
-        /// <summary>
-        /// 鑾峰彇璇ユゼ灞傛墍鏈夊満鏅�
-        /// </summary>
-        /// <param name="floorId"></param>
-        /// <returns></returns>
-        public List<SceneUI> GetSameFloorScenes(string floorId)
-        {
-            List<SceneUI> sceneUIs = new List<SceneUI>();
-            var rooms = HdlRoomLogic.Current.GetRoomsByFloorId(floorId);
-            foreach (var r in rooms)
-            {
-                foreach (int sceneId in r.ListSceneId)
-                {
-                    if (this.dicScenes.ContainsKey(sceneId) == true)
-                    {
-                        sceneUIs.Add(this.dicScenes[sceneId]);
-                    }
-                }
-            }
-            return sceneUIs;
-        }
-
-        /// <summary>
-        /// 鏍规嵁鍦烘櫙Id锛岃幏鍙栨ゼ灞傚拰鎴块棿鍚嶅瓧(妤煎眰,鎴块棿鍚嶅瓧)
-        /// </summary>
-        /// <returns></returns>
-        public string GetZoneById(int sceneId)
-        {
-            var room = HdlRoomLogic.Current.GetRoomBySceneId(sceneId);
-            if (room == null)
-            {
-                return null;
-            }
-            var floorName = HdlResidenceLogic.Current.GetFloorNameById(room.FloorId);
-            //鏇存敼浠g爜锛氬鏋渇loorName=鈥溾�濅篃瑕佸垽鏂紝鍚﹀垯鏈夆�滐紝鈥�
-            if (string.IsNullOrEmpty(floorName))
-            {
-                return room.Name;
-            }
-            return $"{floorName},{room.Name}";
-        }
-
-        /// <summary>
-        /// 鑾峰彇鏈垎閰嶅尯鍩熷満鏅�
-        /// </summary>
-        /// <returns></returns>
-        public List<SceneUI> GetUnalloctedScenes()
-        {
-            List<SceneUI> sceneUIs = new List<SceneUI>();
-            //宸茬粡瀛樺湪鐨勫満鏅�
-            var listEsxit = new HashSet<int>();
-            var listAllRoom = HdlRoomLogic.Current.GetAllListRooms();
-            foreach (var room in listAllRoom)
-            {
-                if (room.IsLove == true)
-                {
-                    //涓嶅寘鍚敹钘忔埧闂�
-                    continue;
-                }
-                foreach (int sceneId in room.ListSceneId)
-                {
-                    if (listEsxit.Contains(sceneId) == false)
-                    {
-                        listEsxit.Add(sceneId);
-                    }
-                }
-            }
-            foreach (var myScene in this.dicScenes.Values)
-            {
-                if (listEsxit.Contains(myScene.Id) == false)
-                {
-                    sceneUIs.Add(myScene);
-                }
-            }
-            return sceneUIs;
-        }
-
-        /// <summary>
-        /// 鑾峰彇鍏ㄩ儴鎴块棿鐨勫叏閮ㄥ満鏅�
-        /// </summary>
-        /// <returns></returns>
-        public List<SceneUI> GetAllRoomSceneList()
-        {
-            List<SceneUI> sceneUIs = new List<SceneUI>();
-            var listAllRoom = HdlRoomLogic.Current.GetAllListRooms();
-            foreach (var room in listAllRoom)
-            {
-                if (room.IsLove == true)
-                {
-                    //涓嶅寘鍚敹钘忔埧闂�
-                    continue;
-                }
-                foreach (int sceneId in room.ListSceneId)
-                {
-                    if (this.dicScenes.ContainsKey(sceneId) == true)
-                    {
-                        sceneUIs.Add(this.dicScenes[sceneId]);
-                    }
-                }
-            }
-            
-            return sceneUIs;
-        }
-
-        /// <summary>
-        /// 鑾峰彇鎸囧畾鎴块棿鐨勫叏閮ㄥ満鏅�
-        /// </summary>
-        /// <returns></returns>
-        public List<SceneUI> GetRoomSceneList(Room i_room)
-        {
-            List<SceneUI> sceneUIs = new List<SceneUI>();
-            foreach (int sceneId in i_room.ListSceneId)
-            {
-                if (this.dicScenes.ContainsKey(sceneId) == true)
-                {
-                    sceneUIs.Add(this.dicScenes[sceneId]);
-                }
-            }
-
-            return sceneUIs;
-        }
-
-        #endregion
-
-        #region 鈻� 璋冪敤鍦烘櫙___________________________
-
-        /// <summary>
-        /// 璋冪敤鍦烘櫙
-        /// </summary>
-        /// <param name="scene"></param>
-        /// <returns></returns>
-        public async Task<bool> ControlScene(SceneUI scene)
-        {
-            if (scene.RemainTime > 0)
-            {
-                HdlThreadLogic.Current.RunMain(() =>
-                {
-                    //璇ュ満鏅鍦ㄥ欢鏃讹紝璇风◢鍚�
-                    var msgContr = new ShowMsgControl(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.TheSceneIsDelaying));
-                    msgContr.Show();
-                });
-                return false;
-            }
-            //濡傛灉鏄櫄鎷熶綇瀹�
-            if (Common.Config.Instance.Home.IsVirtually == true)
-            {
-                //涓嶈皟鐢ㄧ綉鍏�
-                return true;
-            }
-
-            //鎵ц璋冪敤鍦烘櫙
-            var result = await Scene.ControlSceneAsync(scene.Id, scene.SceneDelayTime);
-            if (result == null || result.sceneOpenData == null)
-            {
-                //鎺у埗鍦烘櫙澶辫触
-                string msg = Language.StringByID(R.MyInternationalizationString.ControlSceneFail);
-                //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
-                msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
-                HdlThreadLogic.Current.RunMain(() =>
-                {
-                    //璇ュ満鏅鍦ㄥ欢鏃讹紝璇风◢鍚�
-                    var msgContr = new ShowMsgControl(ShowMsgType.Tip, msg);
-                    msgContr.Show();
-                });
-                return false;
-            }
-            if (result.sceneOpenData.Result == 0)
-            {
-                //鎺у埗鍦烘櫙澶辫触
-                string msg = Language.StringByID(R.MyInternationalizationString.ControlSceneFail);
-                HdlThreadLogic.Current.RunMain(() =>
-                {
-                    //璇ュ満鏅鍦ㄥ欢鏃讹紝璇风◢鍚�
-                    var msgContr = new ShowMsgControl(ShowMsgType.Tip, msg);
-                    msgContr.Show();
-                });
-                return false;
-            }
-            return true;
-        }
-
-        #endregion
-
-        #region 鈻� 鑾峰彇鍦烘櫙鐨勬墽琛岀洰鏍囧垪琛╛____________
-
-        /// <summary>
-        /// 鑾峰彇鍦烘櫙鐨勬墽琛岀洰鏍囧垪琛�
-        /// </summary>
-        /// <param name="i_scene">鍦烘櫙瀵硅薄</param>
-        /// <returns></returns>
-        public List<Scene.DeviceListData> GetAdjustTargetList(SceneUI i_scene)
-        {
-            //濡傛灉浣忓畢涓鸿櫄鎷熶綇瀹�
-            if (Common.Config.Instance.Home.IsVirtually == true)
-            {
-                var listAdjustTarget = new List<Scene.DeviceListData>();
-                listAdjustTarget.AddRange(i_scene.AdjustTargetList);
-                return listAdjustTarget;
-            }
-            //濡傛灉鏄湁妯℃澘,鏈夎澶囩殑鏃跺��,鍦ㄦ病鏈夊彂閫佹垚鍔熶箣鍓�,涓嶅厑璁稿埛鏂版墽琛岀洰鏍囧璞�
-            if (Common.Config.Instance.Home.TemplateMode == 2
-                && Common.Config.Instance.Home.SendTemplateSuccess == false)
-            {
-                var listAdjustTarget = new List<Scene.DeviceListData>();
-                listAdjustTarget.AddRange(i_scene.AdjustTargetList);
-                return listAdjustTarget;
-            }
-
-            var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 806 } };
-            var data = new Newtonsoft.Json.Linq.JObject { { "ScenesId", i_scene.Id } };
-            jObject.Add("Data", data);
-            //鍙戦�佸懡浠�
-            var result = HdlGatewayLogic.Current.SendJobjectDataToGateway(ZbGateway.MainGateWay, "Scene/GetDeviceList", jObject.ToString(), "Scene/GetDeviceList_Respon");
-
-            if (result.ErrorMsg != null)
-            {
-                this.ShowTipMsg(result.ErrorMsg);
-                return null;
-            }
-            if (result.ErrorMsgDiv == 0)
-            {
-                //鑾峰彇鎵ц鐩爣澶辫触
-                string msg = Language.StringByID(R.MyInternationalizationString.uGetAdjustTargetFail);
-                //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
-                msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
-
-                this.ShowTipMsg(msg);
-                return null;
-            }
-            var sceneGetDeviceListObj = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.GetSceneDeviceListInfo>(result.ReceiptData);
-
-            i_scene.AdjustTargetList = sceneGetDeviceListObj.DeviceList;
-            //淇濆瓨缂撳瓨
-            i_scene.Save(false);
-
-            var listData = new List<Scene.DeviceListData>();
-            listData.AddRange(sceneGetDeviceListObj.DeviceList);
-
-            return listData;
-        }
-        #endregion
-
-        #region 鈻� 寤舵椂鏃堕棿绾跨▼_______________________
-
-        /// <summary>
-        /// 寮�鍚欢鏃舵椂闂寸嚎绋�(鏃ㄥ湪鍏ㄩ儴鍦版柟鐨勫悓涓�鍦烘櫙鏃堕棿鍚屾)
-        /// </summary>
-        public void StartDelayTimeThread(SceneUI i_scene)
-        {
-            if (i_scene.RemainThreadAction == true)
-            {
-                //绾跨▼鍦ㄨ繍琛屼腑
-                return;
-            }
-            i_scene.RemainThreadAction = true;
-
-            HdlThreadLogic.Current.RunThread(() =>
-            {
-                while (i_scene.RemainTime > 0)
-                {
-                    System.Threading.Thread.Sleep(1000);
-                    i_scene.RemainTime--;
-                }
-                i_scene.RemainThreadAction = false;
-            });
-        }
-
-        #endregion
-
-        #region 鈻� 涓�鑸柟娉昣__________________________
-
-        /// <summary>
-        /// 鏀瑰彉鍦烘櫙鎴块棿
-        /// </summary>
-        /// <param name="scene">鍦烘櫙瀵硅薄</param>
-        /// <param name="newRoomId">鏂扮殑鎴块棿鐨処D</param>
-        public void ChangedSceneRoom(SceneUI scene, string newRoomId)
-        {
-            var room = HdlRoomLogic.Current.GetRoomBySceneId(scene.Id);
-            if (room != null)
-            {
-                //鎴块棿娌℃湁鏀瑰彉
-                if (room.Id == newRoomId)
-                {
-                    return;
-                }
-                //浠庢埧闂翠腑绉婚櫎缂撳瓨
-                this.DeleteSceneFromRoom(room, scene);
-            }
-            //娣诲姞杩涙柊鎴块棿
-            var newRoom = HdlRoomLogic.Current.GetRoomById(newRoomId);
-            this.AddSceneToRoom(newRoom, scene);
-        }
-
-        /// <summary>
-        /// 鑾峰彇鏈湴鍏ㄩ儴鐨勫満鏅枃浠�
-        /// </summary>
-        /// <returns></returns>
-        public List<string> GetAllSceneFile()
-        {
-            List<string> listSceneFile = new List<string>();
-            List<string> listAllFile = HdlFileLogic.Current.GetRootPathListFile();
-
-            foreach (string file in listAllFile)
-            {
-                if (file.StartsWith("Scene_") == false)
-                {
-                    //濡傛灉涓嶆槸鍦烘櫙鏂囦欢
-                    continue;
-                }
-                listSceneFile.Add(file);
-            }
-            return listSceneFile;
-        }
-
-        /// <summary>
-        /// 鏄剧ず閿欒淇℃伅绐楀彛
-        /// </summary>
-        /// <param name="msg"></param>
-        private void ShowErrorMsg(string msg)
-        {
-            Application.RunOnMainThread(() =>
-            {
-                var contr = new ShowMsgControl(ShowMsgType.Error, msg);
-                contr.Show();
-            });
-        }
-
-        /// <summary>
-        /// 鏄剧ずTip淇℃伅绐楀彛
-        /// </summary>
-        /// <param name="msg"></param>
-        private void ShowTipMsg(string msg)
-        {
-            Application.RunOnMainThread(() =>
-            {
-                var contr = new ShowMsgControl(ShowMsgType.Tip, msg);
-                contr.Show();
-            });
-        }
-
-        #endregion
-    }
-}
+锘縰sing Shared.Common;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading.Tasks;
+using ZigBee.Device;
+
+namespace Shared.Phone.UserCenter
+{
+    /// <summary>
+    /// 鍦烘櫙鐨勯�昏緫
+    /// </summary>
+    public class HdlSceneLogic
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 鍦烘櫙鐨勯�昏緫
+        /// </summary>
+        private static HdlSceneLogic m_Current = null;
+        /// <summary>
+        /// 鍦烘櫙鐨勯�昏緫
+        /// </summary>
+        public static HdlSceneLogic Current
+        {
+            get
+            {
+                if (m_Current == null)
+                {
+                    m_Current = new HdlSceneLogic();
+                }
+                return m_Current;
+            }
+        }
+
+        /// <summary>
+        /// 鍦烘櫙瀵硅薄
+        /// </summary>
+        private Dictionary<int, SceneUI> dicScenes = new Dictionary<int, SceneUI>();
+
+        #endregion
+
+        #region 鈻� 鍒锋柊鍦烘櫙___________________________
+
+        /// <summary>
+        /// 浠庢湰鍦板埛鏂板満鏅�
+        /// </summary>
+        public void ReFreshByLocal()
+        {
+            //娓呯┖鍦烘櫙
+            this.dicScenes.Clear();
+            //鑾峰彇鍏ㄩ儴鏂囦欢
+            var listFile = this.GetAllSceneFile();
+            foreach (string fileName in listFile)
+            {
+                try
+                {
+                    var jsonInfo = Encoding.UTF8.GetString(Global.ReadFileByHomeId(fileName));
+                    var tempScene = Newtonsoft.Json.JsonConvert.DeserializeObject<SceneUI>(jsonInfo);
+                    if (tempScene == null)
+                    {
+                        continue;
+                    }
+                    this.dicScenes[tempScene.Id] = tempScene;
+                }
+                catch(Exception ex)
+                {
+                    HdlLogLogic.Current.WriteLog(ex);
+                    try
+                    {
+                        //鍒犳帀閿欒鏂囦欢
+                        Global.DeleteFilebyHomeId(fileName);
+                    }
+                    catch { }
+                }
+            }
+        }
+
+        /// <summary>
+        /// 鍒锋柊浠庣綉鍏冲埛鏂板叏閮ㄧ殑鍦烘櫙
+        /// </summary>
+        /// <param name="useLocalConnect">鏄惁寮哄埗浣跨敤鏈湴杩炴帴鍙戦��</param>
+        public bool RefreshSceneUIList(bool useLocalConnect)
+        {
+            if (Config.Instance.Home.TemplateMode == 2 && Config.Instance.Home.SendTemplateSuccess == false)
+            {
+                //濡傛灉鏄湁妯℃澘鏈夎澶囨ā寮�,浣嗘槸杩樻病鏈夊鍏ユ垚鍔熺殑鎯呭喌涓�,涓嶅厑璁稿埛鏂板満鏅垪琛�
+                return true;
+            }
+            //鑾峰彇缃戝叧瀛樺湪鐨勫満鏅�
+            var sceneList = this.RefreshSceneListFromGateway(useLocalConnect);
+            if (sceneList == null)
+            {
+                return false;
+            }
+            var listEsxit = new HashSet<int>();
+            foreach (var scene in sceneList)
+            {
+                if (scene == null)
+                {
+                    continue;
+                }
+                listEsxit.Add(scene.ScenesId);
+                //鍒锋柊scene鐨勪俊鎭�
+                this.RefreshScene(scene);
+            }
+
+            var listDelete = new List<SceneUI>();
+            foreach (var scId in this.dicScenes.Keys)
+            {
+                if (listEsxit.Contains(scId) == false)
+                {
+                    //鍒犻櫎鐨勫璞�
+                    listDelete.Add(this.dicScenes[scId]);
+                }
+            }
+            foreach (var sceneui in listDelete)
+            {
+                //鎵ц鍒犻櫎
+                this.DeleteLocalScene(sceneui);
+            }
+
+            return true;
+        }
+
+        /// <summary>
+        /// 鍒锋柊scene鐨勪俊鎭�
+        /// </summary>
+        /// <param name="sceneInfo"></param>
+        private void RefreshScene(Scene.GetSceneAllInfo sceneInfo)
+        {
+            if (this.dicScenes.ContainsKey(sceneInfo.ScenesId) == true)
+            {
+                var localScene = this.dicScenes[sceneInfo.ScenesId];
+                //鍙埛鏂板悕瀛楀拰缁戝畾琛�
+                localScene.Name = sceneInfo.ScenesName;
+                localScene.AdjustTargetList.Clear();
+                localScene.AdjustTargetList.AddRange(sceneInfo.DeviceList);
+                localScene.Save();
+            }
+            else
+            {
+                var newScene = new SceneUI();
+                newScene.Name = sceneInfo.ScenesName;
+                newScene.IconPath = "SceneIcon/0.png";
+                newScene.Id = sceneInfo.ScenesId;
+                newScene.AdjustTargetList.AddRange(sceneInfo.DeviceList);
+                //娣诲姞缂撳瓨
+                newScene.Save();
+                //鍔犲叆缂撳瓨
+                this.dicScenes[newScene.Id] = newScene;
+                //澶囦唤
+                HdlAutoBackupLogic.AddOrEditorFile(newScene.FileName);
+            }
+
+        }
+
+        /// <summary>
+        /// 浠庣綉鍏抽噸鏂板埛鏂板満鏅垪琛�
+        /// </summary>
+        /// <param name="useLocalConnect">鏄惁寮哄埗浣跨敤鏈湴杩炴帴鍙戦��</param>
+        private List<Scene.GetSceneAllInfo> RefreshSceneListFromGateway(bool useLocalConnect)
+        {
+            var mainGateway = ZbGateway.MainGateWay;
+            if (mainGateway == null)
+            {
+                //鑾峰彇缃戝叧瀵硅薄澶辫触
+                this.ShowTipMsg(Language.StringByID(R.MyInternationalizationString.uGetGatewayTagartFail));
+                return null;
+            }
+
+            //瓒呮椂鏃堕棿
+            int TimeOut = 0;
+            bool receiptAll = false;
+            bool canReceve = false;
+
+            var listScene = new List<Scene.GetSceneAllInfo>();
+            Action<string, string> action = (topic, message) =>
+            {
+                var gatewayID = topic.Split('/')[0];
+                var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
+
+                if (topic == gatewayID + "/" + "Scene/GetAllInfo_Respon")
+                {
+                    var sceneGetAllInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.GetSceneAllInfo>(jobject["Data"].ToString());
+                    if (sceneGetAllInfo.ScenesSum != 0)
+                    {
+                        //濡傛灉缃戝叧閲岄潰娌℃湁鍦烘櫙鐨勮瘽,瀹冧篃浼氭帹杩欎釜涓滆タ杩囨潵
+                        listScene.Add(sceneGetAllInfo);
+                    }
+
+                    //鏇村鎺ユ敹寰楀埌鍦烘櫙
+                    canReceve = true;
+                    if (sceneGetAllInfo.ScenesNum == sceneGetAllInfo.ScenesSum)
+                    {
+                        //鎺ユ敹瀹屾垚
+                        receiptAll = true;
+                        TimeOut = 0;
+                    }
+                }
+            };
+            mainGateway.Actions += action;
+
+            var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 807 } };
+            if (useLocalConnect == false)
+            {
+                mainGateway.Send(("Scene/GetAllInfo"), System.Text.Encoding.UTF8.GetBytes(jObject.ToString()));
+            }
+            else
+            {
+                mainGateway.SendLocation(("Scene/GetAllInfo"), System.Text.Encoding.UTF8.GetBytes(jObject.ToString()));
+            }
+
+            int waitTime = 20 * 6;
+            while (receiptAll == false && TimeOut < waitTime)
+            {
+                //鍏ㄩ儴鎺ユ敹鎵嶉��鍑�
+                System.Threading.Thread.Sleep(50);
+                TimeOut++;
+            }
+            mainGateway.Actions -= action;
+            action = null;
+            if (canReceve == false)
+            {
+                //鑾峰彇鍦烘櫙鍒楄〃澶辫触,缃戝叧鍥炲瓒呮椂
+                this.ShowTipMsg(Language.StringByID(R.MyInternationalizationString.uGetSceneListFailAndTimeOut));
+                return null;
+            }
+            else if (receiptAll == false)
+            {
+                //缃戠粶涓嶇ǔ瀹氾紝鍦烘櫙鍒楄〃淇℃伅缂烘崯
+                this.ShowTipMsg(Language.StringByID(R.MyInternationalizationString.uNetworkUnStableAndSceneInfoIsNotFull));
+                return null;
+            }
+
+            return listScene;
+        }
+
+        #endregion
+
+        #region 鈻� 娣诲姞鍦烘櫙___________________________
+
+        /// <summary>
+        /// 娣诲姞鏂板満鏅埌缃戝叧(杩斿洖null浠h〃鍑洪敊)
+        /// </summary>
+        /// <param name="sceneName">鍦烘櫙鍚嶇О</param>
+        /// <param name="listAdjustTarget">鎵ц鐩爣</param>
+        /// <returns></returns>
+        public SceneUI AddNewSceneToGateway(string sceneName, List<Scene.DeviceListData> listAdjustTarget)
+        {
+            int NewScenesId = -1;
+            //濡傛灉褰撳墠浣忓畢涓嶆槸铏氭嫙浣忓畢
+            if (Config.Instance.Home.IsVirtually == false)
+            {
+                var mainWay = ZbGateway.MainGateWay;
+                if (mainWay == null) { return null; }
+
+                //鑾峰彇鏂板缓涓�涓満鏅殑鍛戒护瀛楃
+                var strCommand = this.GetAddNewSceneCommand(sceneName);
+                var result = HdlGatewayLogic.Current.SendJobjectDataToGateway(mainWay.GwId, "Scene/GetNewId", strCommand, "Scene/GetNewId_Respon");
+                if (result.ErrorMsg != null)
+                {
+                    this.ShowTipMsg(result.ErrorMsg);
+                    return null;
+                }
+                if (result.ErrorMsgDiv == 0)
+                {
+                    //娣诲姞鍦烘櫙澶辫触
+                    string msg1 = Language.StringByID(R.MyInternationalizationString.AddSceneFail);
+                    //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
+                    msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result);
+                    this.ShowTipMsg(msg1);
+                    return null;
+                }
+                var getSceneIdData = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.GetSceneIdData>(result.ReceiptData);
+                NewScenesId = getSceneIdData.NewScenesId;
+            }
+            else
+            {
+                //铏氭嫙鍦烘櫙ID
+                NewScenesId = Convert.ToInt32(DateTime.Now.ToString("HHmmss"));
+            }
+            //娣诲姞鎵ц鐩爣
+            var listSuccess = this.AddTargetToScene(NewScenesId, listAdjustTarget);
+            if (listSuccess == null)
+            {
+                return null;
+            }
+
+            //鍒涘缓鍦烘櫙瀵硅薄
+            var newScene = new SceneUI();
+            newScene.Name = sceneName;
+            newScene.Id = NewScenesId;
+            newScene.AdjustTargetList.AddRange(listSuccess);
+            //娣诲姞缂撳瓨
+            newScene.Save();
+            //鍔犲叆缂撳瓨
+            this.dicScenes[newScene.Id] = newScene;
+
+            return newScene;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏂板缓涓�涓満鏅殑鍛戒护瀛楃
+        /// </summary>
+        /// <param name="sceneName">鍦烘櫙鍚嶇О</param>
+        /// <returns></returns>
+        public string GetAddNewSceneCommand(string sceneName)
+        {
+            var bytes = new byte[32];
+            var reamarkGwBytes = Encoding.UTF8.GetBytes(sceneName);
+            Array.Copy(reamarkGwBytes, 0, bytes, 0, 32 < reamarkGwBytes.Length ? 32 : reamarkGwBytes.Length);
+            sceneName = Encoding.UTF8.GetString(bytes);
+
+            var jObject = new Newtonsoft.Json.Linq.JObject() { { "Cluster_ID", 0 }, { "Command", 800 } };
+            var data = new Newtonsoft.Json.Linq.JObject { { "ScenesName", sceneName } };
+            jObject.Add("Data", data);
+
+            return jObject.ToString();
+        }
+
+        /// <summary>
+        /// 娣诲姞鎵ц鐩爣鍒版寚瀹氱殑鍦烘櫙(杩斿洖鎴愬姛娣诲姞鐨勬墽琛岀洰鏍�)
+        /// </summary>
+        /// <param name="sceneId">鍦烘櫙Id</param>
+        /// <param name="listAdjustTarget">鎵ц鐩爣</param>
+        /// <returns></returns>
+        private List<Scene.DeviceListData> AddTargetToScene(int sceneId, List<Scene.DeviceListData> listAdjustTarget)
+        {
+            //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹呯殑璇�
+            if (Common.Config.Instance.Home.IsVirtually == true)
+            {
+                //涓嶉渶瑕佹洿鏂扮綉鍏�
+                return listAdjustTarget;
+            }
+            var listSuccess = new List<Scene.DeviceListData>();
+            var mainWay = ZbGateway.MainGateWay;
+            if (mainWay == null) { return listSuccess; }
+
+            //鑾峰彇娣诲姞鎵ц鐩爣鍒板満鏅殑鍛戒护
+            var listCommand = this.GetAddTargetToSceneCommand(sceneId, listAdjustTarget);
+            for (int i = 0; i < listCommand.Count; i++)
+            {
+                var result = HdlGatewayLogic.Current.SendJobjectDataToGateway(mainWay.GwId, "Scene/AddMember", listCommand[i], "Scene/AddMember_Respon");
+                if (result.ErrorMsg != null || result.ErrorMsgDiv == 0)
+                {
+                    //鍑虹幇閿欒
+                    continue;
+                }
+                var addSceneMemberData = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.AddSceneMemberResponseData>(result.ReceiptData);
+                if (addSceneMemberData.Result == 1)
+                {
+                    listSuccess.Add(listAdjustTarget[i]);
+                }
+            }
+            if (listSuccess.Count == 0)
+            {
+                //娣诲姞鎵ц鐩爣澶辫触
+                string msg1 = Language.StringByID(R.MyInternationalizationString.uAddAdjustTargetFail);
+                this.ShowTipMsg(msg1);
+                return null;
+            }
+            //濡傛灉涓嶆槸鍏ㄩ儴鎴愬姛鐨勮瘽,鎻愮ず
+            if (listSuccess.Count != listAdjustTarget.Count)
+            {
+                //涓埆鎵ц鐩爣娣诲姞澶辫触
+                string msg1 = Language.StringByID(R.MyInternationalizationString.uSomeAdjustTargetAddFail);
+                this.ShowTipMsg(msg1);
+            }
+            return listSuccess;
+        }
+
+        /// <summary>
+        /// 鑾峰彇娣诲姞鎵ц鐩爣鍒板満鏅殑鍛戒护
+        /// </summary>
+        /// <param name="sceneId">鍦烘櫙id</param>
+        /// <param name="listAdjustTarget">鎵ц鐩爣</param>
+        /// <param name="dicChangedMac">浜ゆ崲mac key:listAdjustTarget褰撳墠鐨凪ac value:杞崲鐨刴ac</param>
+        /// <param name="sceneName">鍦烘櫙鍚嶇О(鐗规畩鐢ㄩ��,璇峰嬁璁剧疆)</param>
+        /// <returns></returns>
+        public List<string> GetAddTargetToSceneCommand(int sceneId, List<Scene.DeviceListData> listAdjustTarget, Dictionary<string, string> dicChangedMac = null, string sceneName = null)
+        {
+            var listCommand = new List<string>();
+            int index = 1;
+            for (int i = 0; i < listAdjustTarget.Count; i++)
+            {
+                var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 820 } };
+                var data = listAdjustTarget[i];
+                //璁惧
+                if (data.Type == 0)
+                {
+                    string deviceAddr = data.DeviceAddr;
+                    if (dicChangedMac != null)
+                    {
+                        //濡傛灉涓嶅寘鍚�,鍒欎笉浣滀负澶勭悊瀵硅薄
+                        if (dicChangedMac.ContainsKey(deviceAddr) == false)
+                        {
+                            continue;
+                        }
+                        deviceAddr = dicChangedMac[deviceAddr];
+                    }
+
+                    var taskList = new Newtonsoft.Json.Linq.JArray { };
+                    foreach (var taskInfo in data.TaskList)
+                    {
+                        var tInfo = new Newtonsoft.Json.Linq.JObject{{ "TaskType", taskInfo.TaskType},
+                            { "Data1", taskInfo.Data1},{ "Data2",taskInfo.Data2}};
+                        taskList.Add(tInfo);
+                    }
+                    var data2 = new Newtonsoft.Json.Linq.JObject {{ "ScenesId",sceneId},{ "Type", 0} ,{ "DeviceAddr",deviceAddr} ,
+                         { "Epoint", data.Epoint} ,{ "TaskList", taskList },{ "DelayTime", 0} ,{ "MemberNumber",index}};
+                    if (sceneName != null)
+                    {
+                        data2.Add(new Newtonsoft.Json.Linq.JProperty("ScenesName", sceneName));
+                    }
+                    jObject.Add("Data", data2);
+                }
+                //鍦烘櫙
+                else if (data.Type == 1)
+                {
+                    var data2 = new Newtonsoft.Json.Linq.JObject {{ "ScenesId",sceneId},{ "Type", 1} ,
+                         { "ElseScenesId", data.ElseScenesId },{ "DelayTime", 0} ,{ "MemberNumber",index} };
+                    if (sceneName != null)
+                    {
+                        data2.Add(new Newtonsoft.Json.Linq.JProperty("ScenesName", sceneName));
+                    }
+                    jObject.Add("Data", data2);
+                }
+                //寤舵椂
+                else
+                {
+                    var data2 = new Newtonsoft.Json.Linq.JObject {{ "Type", 2} ,{ "ScenesId",sceneId},
+                         { "DelayTime", data.DelayTime} ,{ "MemberNumber",index}};
+                    if (sceneName != null)
+                    {
+                        data2.Add(new Newtonsoft.Json.Linq.JProperty("ScenesName", sceneName));
+                    }
+                    jObject.Add("Data", data2);
+                }
+                listCommand.Add(jObject.ToString());
+                index++;
+            }
+            return listCommand;
+        }
+
+
+        /// <summary>
+        /// 娣诲姞鍦烘櫙(杩欎釜鍗曠函鍙敼鎴块棿)
+        /// </summary>
+        /// <param name="scene">Scene.</param>
+        public void AddSceneToRoom(Room i_room, SceneUI scene)
+        {
+            //娣诲姞缂撳瓨
+            if (i_room.ListSceneId.Contains(scene.Id) == false)
+            {
+                i_room.ListSceneId.Add(scene.Id);
+                i_room.Save();
+            }
+        }
+
+        /// <summary>
+        /// 娣诲姞鎼滆棌鍦烘櫙
+        /// </summary>
+        /// <param name="scene">Scene.</param>
+        public void AddLoveScene(SceneUI scene)
+        {
+            var nowRoom = HdlRoomLogic.Current.GetLoveRoom();
+            //娣诲姞缂撳瓨
+            if (nowRoom.ListSceneId.Contains(scene.Id) == false)
+            {
+                nowRoom.ListSceneId.Add(scene.Id);
+                nowRoom.Save();
+                //娣诲姞鏀惰棌鍦烘櫙鏃�,闇�瑕佸埛鏂颁富椤�
+                UserView.UserPage.Instance.RefreshAllForm = true;
+            }
+        }
+
+        /// <summary>
+        /// 娣诲姞铏氭嫙鍦烘櫙
+        /// </summary>
+        /// <param name="sceneId">鎸囧畾鍦烘櫙id,濡傛灉涓�-1,鍒欎細鍐呴儴鑷姩缂栧彿(鍙兘浼氶噸澶�)</param>
+        /// <param name="sceneName">鍦烘櫙鍚嶅瓧</param>
+        /// <param name="listAdjustTarget">缁戝畾鐩爣</param>
+        /// <returns></returns>
+        public SceneUI AddVirtualScene(int sceneId, string sceneName, List<Scene.DeviceListData> listAdjustTarget)
+        {
+            if (sceneId == -1)
+            {
+                sceneId = Convert.ToInt32(DateTime.Now.ToString("HHmmss"));
+            }
+            //鍒涘缓鍦烘櫙瀵硅薄
+            var newScene = new SceneUI();
+            newScene.Name = sceneName;
+            newScene.IconPath = "SceneIcon/0.png";
+            //铏氭嫙鍦烘櫙ID
+            newScene.Id = sceneId;
+            if (listAdjustTarget != null)
+            {
+                newScene.AdjustTargetList.AddRange(listAdjustTarget);
+            }
+            //娣诲姞缂撳瓨
+            newScene.Save();
+            //鍔犲叆缂撳瓨
+            this.dicScenes[newScene.Id] = newScene;
+
+            return newScene;
+        }
+
+        #endregion
+
+        #region 鈻� 淇敼鍦烘櫙___________________________
+
+        /// <summary>
+        /// 淇敼缃戝叧鐨勫満鏅�
+        /// </summary>
+        /// <param name="sceneUI">鍦烘櫙瀵硅薄</param>
+        /// <param name="listAdjustTarget">鍏ㄩ儴鐨勬墽琛岀洰鏍�</param>
+        /// <returns></returns>
+        public async Task<bool> EditorSceneFromGateway(SceneUI sceneUI, List<Scene.DeviceListData> listAdjustTarget)
+        {
+            //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹呯殑璇�
+            if (Common.Config.Instance.Home.IsVirtually == true)
+            {
+                //娓呯┖鍦烘櫙鐨勬墽琛岀洰鏍囧垪琛ㄧ殑缂撳瓨
+                sceneUI.AdjustTargetList.Clear();
+                sceneUI.AdjustTargetList.AddRange(listAdjustTarget);
+                sceneUI.Save();
+                return true;
+            }
+
+            //鍏堟竻绌哄叏閮ㄧ殑鎵ц鐩爣
+            var deleteData = new Scene.SceneRemoveMemberData();
+            var deleteTargetData = new List<Scene.RemoveSceneDeviceListInfo>();
+            for (int i = 0; i < sceneUI.AdjustTargetList.Count; i++)
+            {
+                var data = sceneUI.AdjustTargetList[i];
+                var removeData = new Scene.RemoveSceneDeviceListInfo();
+                if (data.Type == 0)
+                {
+                    //璁惧
+                    removeData.Type = 0;
+                    removeData.DeviceAddr = data.DeviceAddr;
+                    removeData.Epoint = data.Epoint;
+                    removeData.MemberNumber = data.MemberNumber;
+                }
+                else if (data.Type == 1)
+                {
+                    //鍦烘櫙
+                    removeData.Type = 1;
+                    removeData.ElseScenesId = data.ElseScenesId;
+                    removeData.MemberNumber = data.MemberNumber;
+                }
+                else
+                {
+                    //寤舵椂
+                    removeData.Type = 2;
+                    removeData.DelayTime = data.DelayTime;
+                    removeData.MemberNumber = data.MemberNumber;
+                }
+                //鎷ユ湁鎴愬姛鐨�
+                deleteTargetData.Add(removeData);
+            }
+            deleteData.DeviceList = deleteTargetData;
+            deleteData.ScenesId = sceneUI.Id;
+            //鎵ц娓呯┖
+            var result = await Scene.RemoveSceneMemberAsync(deleteData);
+            if (result == null || result.removeSceneMemberResponseData == null)
+            {
+                //鍒濆鍖栨墽琛岀洰鏍囧け璐�
+                string msg1 = Language.StringByID(R.MyInternationalizationString.uInitAdjustTargetFail);
+                //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
+                msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result);
+                this.ShowTipMsg(msg1);
+                return false;
+            }
+            if (result.removeSceneMemberResponseData.Result != 0)
+            {
+                //鍒濆鍖栨墽琛岀洰鏍囧け璐�
+                string msg1 = Language.StringByID(R.MyInternationalizationString.uInitAdjustTargetFail);
+                this.ShowTipMsg(msg1);
+                return false;
+            }
+            //娓呯┖鍦烘櫙鐨勬墽琛岀洰鏍囧垪琛ㄧ殑缂撳瓨
+            sceneUI.AdjustTargetList.Clear();
+
+            //鐒跺悗閲嶆柊娣诲姞
+            var listSuccess = this.AddTargetToScene(sceneUI.Id, listAdjustTarget);
+            if (listSuccess == null)
+            {
+                return false;
+            }
+            sceneUI.AdjustTargetList.AddRange(listSuccess);
+            sceneUI.Save();
+
+            return true;
+        }
+
+        /// <summary>
+        /// 淇敼缃戝叧鐨勫満鏅悕绉�
+        /// </summary>
+        /// <param name="scene">鍦烘櫙瀵硅薄</param>
+        /// <param name="newName">鏂扮殑鍚嶅瓧</param>
+        /// <returns></returns>
+        public async Task<bool> EditorSceneNameFromGateway(SceneUI scene, string newName)
+        {
+            //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹呯殑璇�
+            if (Common.Config.Instance.Home.IsVirtually == true)
+            {
+                //涓嶉渶瑕佹洿鏂扮綉鍏�
+                return true;
+            }
+            var result1 = await Scene.RenameSceneAsync(scene.Id, newName);
+            //鍏遍�氶敊璇娴�
+            string error = HdlCheckLogic.Current.CheckCommonErrorCode(result1);
+            if (error != null)
+            {
+                this.ShowErrorMsg(error);
+                return false;
+            }
+            if (result1 == null || result1.sceneRenameResponseData == null)
+            {
+                //淇敼鍦烘櫙鍚嶇О澶辫触
+                string msg1 = Language.StringByID(R.MyInternationalizationString.uEditorSceneNameFail);
+                //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
+                msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result1);
+                this.ShowTipMsg(msg1);
+                return false;
+            }
+            if (result1.sceneRenameResponseData.Result == 2)
+            {
+                //鐩爣鍦烘櫙涓嶅瓨鍦�
+                string msg1 = Language.StringByID(R.MyInternationalizationString.uTargetSceneIsNotExsit);
+                this.ShowTipMsg(msg1);
+                return false;
+            }
+            if (result1.sceneRenameResponseData.Result != 1)
+            {
+                //淇敼鍦烘櫙鍚嶇О澶辫触
+                string msg1 = Language.StringByID(R.MyInternationalizationString.uEditorSceneNameFail);
+                this.ShowTipMsg(msg1);
+                return false;
+            }
+            return true;
+        }
+
+        #endregion
+
+        #region 鈻� 鍒犻櫎鍦烘櫙___________________________
+
+        /// <summary>
+        /// 鍒犻櫎鏈湴鍦烘櫙鏁版嵁
+        /// </summary>
+        /// <param name="sceneUI">Scene user interface.</param>
+        public void DeleteLocalScene(SceneUI sceneUI)
+        {
+            //绉婚櫎缂撳瓨
+            this.dicScenes.Remove(sceneUI.Id);
+            var room = HdlRoomLogic.Current.GetRoomBySceneId(sceneUI.Id);
+            if (room != null)
+            {
+                room.ListSceneId.Remove(sceneUI.Id);
+                room.Save();
+            }
+
+            //绉婚櫎鍠滅埍
+            var roomLove = HdlRoomLogic.Current.GetLoveRoom();
+            if (roomLove.ListSceneId.Contains(sceneUI.Id) == true)
+            {
+                roomLove.ListSceneId.Remove(sceneUI.Id);
+                roomLove.Save();
+            }
+
+            //鍒犻櫎鏂囦欢
+            if (Global.IsExistsByHomeId(sceneUI.FileName) == true)
+            {
+                Global.DeleteFilebyHomeId(sceneUI.FileName);
+                HdlAutoBackupLogic.DeleteFile(sceneUI.FileName);
+            }
+            //鍒犻櫎鍥剧墖
+            if (sceneUI.IconPathType == 1 || sceneUI.IconPathType == 2)
+            {
+                if (Global.IsExistsByHomeId(sceneUI.IconPath))
+                {
+                    Global.DeleteFilebyHomeId(sceneUI.IconPath);
+                    HdlAutoBackupLogic.DeleteFile(sceneUI.IconPath);
+                }
+            }
+            //鍒犻櫎鍦烘櫙鏃�,闇�瑕佸埛鏂颁富椤�
+            UserView.UserPage.Instance.RefreshAllForm = true;
+        }
+
+        /// <summary>
+        /// 娓呯┖鏈湴鍏ㄩ儴鐨勫満鏅暟鎹�
+        /// </summary>
+        public void DeleteAllLocalScene()
+        {
+            var listScene = new List<SceneUI>();
+            foreach (var scene in this.dicScenes.Values)
+            {
+                listScene.Add(scene);
+            }
+            foreach (var scene in listScene)
+            {
+                this.DeleteLocalScene(scene);
+            }
+        }
+
+        /// <summary>
+        /// 鍒犻櫎鍦烘櫙(杩欎釜鍙Щ闄ゅ唴瀛�)
+        /// </summary>
+        /// <param name="scene"></param>
+        public void DeleteSceneFromRoom(Room i_room, SceneUI scene)
+        {
+            //绉婚櫎缂撳瓨
+            if (i_room.ListSceneId.Contains(scene.Id) == true)
+            {
+                i_room.ListSceneId.Remove(scene.Id);
+                i_room.Save();
+            }
+        }
+
+        /// <summary>
+        /// 鍒犻櫎鎼滆棌鍦烘櫙
+        /// </summary>
+        /// <param name="scene"></param>
+        public void DeleteLoveScene(SceneUI scene)
+        {
+            var nowRoom = HdlRoomLogic.Current.GetLoveRoom();
+            //绉婚櫎缂撳瓨
+            if (nowRoom.ListSceneId.Contains(scene.Id) == true)
+            {
+                nowRoom.ListSceneId.Remove(scene.Id);
+                nowRoom.Save();
+                //鍙栨秷鏀惰棌鍦烘櫙鏃�,闇�瑕佸埛鏂颁富椤�
+                UserView.UserPage.Instance.RefreshAllForm = true;
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 鑾峰彇鍦烘櫙___________________________
+
+        /// <summary>
+        /// 鑾峰彇鏈湴鍏ㄩ儴鐨勫満鏅�(鍖呭惈鏈垎閰�)
+        /// </summary>
+        /// <returns></returns>
+        public List<SceneUI> GetAllLocalScene()
+        {
+            //鎴块棿鐨勫満鏅斁鍦ㄥ墠闈�
+            var listScene = this.GetAllRoomSceneList();
+            //鏈垎閰嶇殑鍦烘櫙
+            var listUnalloctScene = this.GetUnalloctedScenes();
+            listScene.AddRange(listUnalloctScene);
+            return listScene;
+        }
+
+        /// <summary>
+        /// 閫氳繃鍦烘櫙id鑾峰彇鍦烘櫙
+        /// </summary>
+        /// <returns>The scene UIB y scene identifier.</returns>
+        /// <param name="sceneId">Scene identifier.</param>
+        public SceneUI GetSceneUIBySceneId(int sceneId)
+        {
+            if (this.dicScenes.ContainsKey(sceneId) == true)
+            {
+                return this.dicScenes[sceneId];
+            }
+            return null;
+        }
+
+        /// <summary>
+        /// 鑾峰彇璇ユゼ灞傛墍鏈夊満鏅�
+        /// </summary>
+        /// <param name="floorId"></param>
+        /// <returns></returns>
+        public List<SceneUI> GetSameFloorScenes(string floorId)
+        {
+            List<SceneUI> sceneUIs = new List<SceneUI>();
+            var rooms = HdlRoomLogic.Current.GetRoomsByFloorId(floorId);
+            foreach (var r in rooms)
+            {
+                foreach (int sceneId in r.ListSceneId)
+                {
+                    if (this.dicScenes.ContainsKey(sceneId) == true)
+                    {
+                        sceneUIs.Add(this.dicScenes[sceneId]);
+                    }
+                }
+            }
+            return sceneUIs;
+        }
+
+        /// <summary>
+        /// 鏍规嵁鍦烘櫙Id锛岃幏鍙栨ゼ灞傚拰鎴块棿鍚嶅瓧(妤煎眰,鎴块棿鍚嶅瓧)
+        /// </summary>
+        /// <returns></returns>
+        public string GetZoneById(int sceneId)
+        {
+            var room = HdlRoomLogic.Current.GetRoomBySceneId(sceneId);
+            if (room == null)
+            {
+                return null;
+            }
+            var floorName = HdlResidenceLogic.Current.GetFloorNameById(room.FloorId);
+            //鏇存敼浠g爜锛氬鏋渇loorName=鈥溾�濅篃瑕佸垽鏂紝鍚﹀垯鏈夆�滐紝鈥�
+            if (string.IsNullOrEmpty(floorName))
+            {
+                return room.Name;
+            }
+            return $"{floorName},{room.Name}";
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏈垎閰嶅尯鍩熷満鏅�
+        /// </summary>
+        /// <returns></returns>
+        public List<SceneUI> GetUnalloctedScenes()
+        {
+            List<SceneUI> sceneUIs = new List<SceneUI>();
+            //宸茬粡瀛樺湪鐨勫満鏅�
+            var listEsxit = new HashSet<int>();
+            var listAllRoom = HdlRoomLogic.Current.GetAllListRooms();
+            foreach (var room in listAllRoom)
+            {
+                if (room.IsLove == true)
+                {
+                    //涓嶅寘鍚敹钘忔埧闂�
+                    continue;
+                }
+                foreach (int sceneId in room.ListSceneId)
+                {
+                    if (listEsxit.Contains(sceneId) == false)
+                    {
+                        listEsxit.Add(sceneId);
+                    }
+                }
+            }
+            foreach (var myScene in this.dicScenes.Values)
+            {
+                if (listEsxit.Contains(myScene.Id) == false)
+                {
+                    sceneUIs.Add(myScene);
+                }
+            }
+            return sceneUIs;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍏ㄩ儴鎴块棿鐨勫叏閮ㄥ満鏅�
+        /// </summary>
+        /// <returns></returns>
+        public List<SceneUI> GetAllRoomSceneList()
+        {
+            List<SceneUI> sceneUIs = new List<SceneUI>();
+            var listAllRoom = HdlRoomLogic.Current.GetAllListRooms();
+            foreach (var room in listAllRoom)
+            {
+                if (room.IsLove == true)
+                {
+                    //涓嶅寘鍚敹钘忔埧闂�
+                    continue;
+                }
+                foreach (int sceneId in room.ListSceneId)
+                {
+                    if (this.dicScenes.ContainsKey(sceneId) == true)
+                    {
+                        sceneUIs.Add(this.dicScenes[sceneId]);
+                    }
+                }
+            }
+            
+            return sceneUIs;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鎸囧畾鎴块棿鐨勫叏閮ㄥ満鏅�
+        /// </summary>
+        /// <returns></returns>
+        public List<SceneUI> GetRoomSceneList(Room i_room)
+        {
+            List<SceneUI> sceneUIs = new List<SceneUI>();
+            foreach (int sceneId in i_room.ListSceneId)
+            {
+                if (this.dicScenes.ContainsKey(sceneId) == true)
+                {
+                    sceneUIs.Add(this.dicScenes[sceneId]);
+                }
+            }
+
+            return sceneUIs;
+        }
+
+        #endregion
+
+        #region 鈻� 璋冪敤鍦烘櫙___________________________
+
+        /// <summary>
+        /// 璋冪敤鍦烘櫙
+        /// </summary>
+        /// <param name="scene"></param>
+        /// <returns></returns>
+        public async Task<bool> ControlScene(SceneUI scene)
+        {
+            if (scene.RemainTime > 0)
+            {
+                HdlThreadLogic.Current.RunMain(() =>
+                {
+                    //璇ュ満鏅鍦ㄥ欢鏃讹紝璇风◢鍚�
+                    var msgContr = new ShowMsgControl(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.TheSceneIsDelaying));
+                    msgContr.Show();
+                });
+                return false;
+            }
+            //濡傛灉鏄櫄鎷熶綇瀹�
+            if (Common.Config.Instance.Home.IsVirtually == true)
+            {
+                //涓嶈皟鐢ㄧ綉鍏�
+                return true;
+            }
+
+            //鎵ц璋冪敤鍦烘櫙
+            var result = await Scene.ControlSceneAsync(scene.Id, scene.SceneDelayTime);
+            if (result == null || result.sceneOpenData == null)
+            {
+                //鎺у埗鍦烘櫙澶辫触
+                string msg = Language.StringByID(R.MyInternationalizationString.ControlSceneFail);
+                //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
+                msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
+                HdlThreadLogic.Current.RunMain(() =>
+                {
+                    //璇ュ満鏅鍦ㄥ欢鏃讹紝璇风◢鍚�
+                    var msgContr = new ShowMsgControl(ShowMsgType.Tip, msg);
+                    msgContr.Show();
+                });
+                return false;
+            }
+            if (result.sceneOpenData.Result == 0)
+            {
+                //鎺у埗鍦烘櫙澶辫触
+                string msg = Language.StringByID(R.MyInternationalizationString.ControlSceneFail);
+                HdlThreadLogic.Current.RunMain(() =>
+                {
+                    //璇ュ満鏅鍦ㄥ欢鏃讹紝璇风◢鍚�
+                    var msgContr = new ShowMsgControl(ShowMsgType.Tip, msg);
+                    msgContr.Show();
+                });
+                return false;
+            }
+            return true;
+        }
+
+        #endregion
+
+        #region 鈻� 鑾峰彇鍦烘櫙鐨勬墽琛岀洰鏍囧垪琛╛____________
+
+        /// <summary>
+        /// 鑾峰彇鍦烘櫙鐨勬墽琛岀洰鏍囧垪琛�
+        /// </summary>
+        /// <param name="i_scene">鍦烘櫙瀵硅薄</param>
+        /// <returns></returns>
+        public List<Scene.DeviceListData> GetAdjustTargetList(SceneUI i_scene)
+        {
+            //濡傛灉浣忓畢涓鸿櫄鎷熶綇瀹�
+            if (Common.Config.Instance.Home.IsVirtually == true)
+            {
+                var listAdjustTarget = new List<Scene.DeviceListData>();
+                listAdjustTarget.AddRange(i_scene.AdjustTargetList);
+                return listAdjustTarget;
+            }
+            //濡傛灉鏄湁妯℃澘,鏈夎澶囩殑鏃跺��,鍦ㄦ病鏈夊彂閫佹垚鍔熶箣鍓�,涓嶅厑璁稿埛鏂版墽琛岀洰鏍囧璞�
+            if (Common.Config.Instance.Home.TemplateMode == 2
+                && Common.Config.Instance.Home.SendTemplateSuccess == false)
+            {
+                var listAdjustTarget = new List<Scene.DeviceListData>();
+                listAdjustTarget.AddRange(i_scene.AdjustTargetList);
+                return listAdjustTarget;
+            }
+            var mainWay = ZbGateway.MainGateWay;
+            if (mainWay == null) { return null; }
+
+            var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 806 } };
+            var data = new Newtonsoft.Json.Linq.JObject { { "ScenesId", i_scene.Id } };
+            jObject.Add("Data", data);
+            //鍙戦�佸懡浠�
+            var result = HdlGatewayLogic.Current.SendJobjectDataToGateway(mainWay.GwId, "Scene/GetDeviceList", jObject.ToString(), "Scene/GetDeviceList_Respon");
+
+            if (result.ErrorMsg != null)
+            {
+                this.ShowTipMsg(result.ErrorMsg);
+                return null;
+            }
+            if (result.ErrorMsgDiv == 0)
+            {
+                //鑾峰彇鎵ц鐩爣澶辫触
+                string msg = Language.StringByID(R.MyInternationalizationString.uGetAdjustTargetFail);
+                //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
+                msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
+
+                this.ShowTipMsg(msg);
+                return null;
+            }
+            var sceneGetDeviceListObj = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.GetSceneDeviceListInfo>(result.ReceiptData);
+
+            i_scene.AdjustTargetList = sceneGetDeviceListObj.DeviceList;
+            //淇濆瓨缂撳瓨
+            i_scene.Save(false);
+
+            var listData = new List<Scene.DeviceListData>();
+            listData.AddRange(sceneGetDeviceListObj.DeviceList);
+
+            return listData;
+        }
+        #endregion
+
+        #region 鈻� 寤舵椂鏃堕棿绾跨▼_______________________
+
+        /// <summary>
+        /// 寮�鍚欢鏃舵椂闂寸嚎绋�(鏃ㄥ湪鍏ㄩ儴鍦版柟鐨勫悓涓�鍦烘櫙鏃堕棿鍚屾)
+        /// </summary>
+        public void StartDelayTimeThread(SceneUI i_scene)
+        {
+            if (i_scene.RemainThreadAction == true)
+            {
+                //绾跨▼鍦ㄨ繍琛屼腑
+                return;
+            }
+            i_scene.RemainThreadAction = true;
+
+            HdlThreadLogic.Current.RunThread(() =>
+            {
+                while (i_scene.RemainTime > 0)
+                {
+                    System.Threading.Thread.Sleep(1000);
+                    i_scene.RemainTime--;
+                }
+                i_scene.RemainThreadAction = false;
+            });
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 鏀瑰彉鍦烘櫙鎴块棿
+        /// </summary>
+        /// <param name="scene">鍦烘櫙瀵硅薄</param>
+        /// <param name="newRoomId">鏂扮殑鎴块棿鐨処D</param>
+        public void ChangedSceneRoom(SceneUI scene, string newRoomId)
+        {
+            var room = HdlRoomLogic.Current.GetRoomBySceneId(scene.Id);
+            if (room != null)
+            {
+                //鎴块棿娌℃湁鏀瑰彉
+                if (room.Id == newRoomId)
+                {
+                    return;
+                }
+                //浠庢埧闂翠腑绉婚櫎缂撳瓨
+                this.DeleteSceneFromRoom(room, scene);
+            }
+            //娣诲姞杩涙柊鎴块棿
+            var newRoom = HdlRoomLogic.Current.GetRoomById(newRoomId);
+            this.AddSceneToRoom(newRoom, scene);
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏈湴鍏ㄩ儴鐨勫満鏅枃浠�
+        /// </summary>
+        /// <returns></returns>
+        public List<string> GetAllSceneFile()
+        {
+            List<string> listSceneFile = new List<string>();
+            List<string> listAllFile = HdlFileLogic.Current.GetRootPathListFile();
+
+            foreach (string file in listAllFile)
+            {
+                if (file.StartsWith("Scene_") == false)
+                {
+                    //濡傛灉涓嶆槸鍦烘櫙鏂囦欢
+                    continue;
+                }
+                listSceneFile.Add(file);
+            }
+            return listSceneFile;
+        }
+
+        /// <summary>
+        /// 鏄剧ず閿欒淇℃伅绐楀彛
+        /// </summary>
+        /// <param name="msg"></param>
+        private void ShowErrorMsg(string msg)
+        {
+            Application.RunOnMainThread(() =>
+            {
+                var contr = new ShowMsgControl(ShowMsgType.Error, msg);
+                contr.Show();
+            });
+        }
+
+        /// <summary>
+        /// 鏄剧ずTip淇℃伅绐楀彛
+        /// </summary>
+        /// <param name="msg"></param>
+        private void ShowTipMsg(string msg)
+        {
+            Application.RunOnMainThread(() =>
+            {
+                var contr = new ShowMsgControl(ShowMsgType.Tip, msg);
+                contr.Show();
+            });
+        }
+
+        #endregion
+    }
+}

--
Gitblit v1.8.0