From 25429f085093d89d543a0b90e30d0d62d1b7dac9 Mon Sep 17 00:00:00 2001
From: hxb <hxb@hdlchina.com.cn>
Date: 星期二, 30 八月 2022 09:37:38 +0800
Subject: [PATCH] 合并了IOS的代码

---
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs | 2761 ++++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 1,643 insertions(+), 1,118 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs
old mode 100755
new mode 100644
index 2edc90e..b173072
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs
@@ -1,1118 +1,1643 @@
-锘縰sing Shared.Common;
-using System;
-using System.Collections.Generic;
-using System.Text;
-using ZigBee.Device;
-
-namespace Shared.Phone.UserCenter
-{
-    /// <summary>
-    /// 鎴块棿鐨勯�昏緫
-    /// </summary>
-    public class HdlRoomLogic
-    {
-        #region 鈻� 鍙橀噺澹版槑___________________________
-
-        /// <summary>
-        /// 鎴块棿鐨勯�昏緫
-        /// </summary>
-        private static HdlRoomLogic m_Current = null;
-        /// <summary>
-        /// 鎴块棿鐨勯�昏緫
-        /// </summary>
-        public static HdlRoomLogic Current
-        {
-            get
-            {
-                if (m_Current == null)
-                {
-                    m_Current = new HdlRoomLogic();
-                }
-                return m_Current;
-            }
-        }
-
-        /// <summary>
-        /// 褰撳墠閫夋嫨鐨勬埧闂�
-        /// </summary>
-        private Room m_CurrentRoom = null;
-        /// <summary>
-        /// 褰撳墠閫夋嫨鐨勬埧闂�
-        /// </summary>
-        public Room CurrentRoom
-        {
-            get
-            {
-                if (m_CurrentRoom == null && dicRooms.Count > 0)
-                {
-                    //璁剧疆鍒濆鍊�
-                    foreach (var room in dicRooms.Values)
-                    {
-                        m_CurrentRoom = room;
-                        break;
-                    }
-                }
-                return m_CurrentRoom;
-            }
-            set { m_CurrentRoom = value; }
-        }
-
-        /// <summary>
-        /// 鎵�鏈夌殑鎴块棿淇℃伅
-        /// </summary>
-        private Dictionary<string, Room> dicRooms = new Dictionary<string, Room>();
-
-        #endregion
-
-        #region 鈻� 鍒濆鍖朹____________________________
-
-        /// <summary>
-        /// 鍒濆鍖栨埧闂翠俊鎭�
-        /// 浠庢枃浠朵腑鍏ㄩ儴璇诲彇鎵�鏈夌殑鎴块棿鏁版嵁鍒板唴瀛�
-        /// </summary>
-        public void InitAllRoom()
-        {
-            //娓呯┖鏈湴缂撳瓨
-            this.dicRooms.Clear();
-            //妫�娴嬫垜鐨勫枩鐖辫繖涓埧闂村璞�
-            this.CheckLoveRoom();
-            
-            foreach (var roomId in Config.Instance.Home.ListRooms)
-            {
-                //浠庢枃浠堕噷闈㈣幏鍙栨埧闂村璞�
-                var room = this.GetRoomByFilePath($"Room_{roomId}.json");
-                if (room != null)
-                {
-                    this.dicRooms[room.Id] = (room);
-                }
-            }
-            //璁剧疆褰撳墠妤煎眰鐨処D
-            Config.Instance.Home.SetCurrentFloorId();
-            //椤轰究鍒锋柊鍦烘櫙
-            HdlSceneLogic.Current.ReFreshByLocal();
-            //鍒锋柊鎴块棿瑙嗗浘鍒楄〃
-            this.RefreshRoomListView();
-        }
-
-        /// <summary>
-        /// 浠庢湰鍦伴噸鏂板姞杞藉叏閮ㄧ殑鎴块棿
-        /// </summary>
-        public void RefreshAllRoomByLocation()
-        {
-            var homeTemp = Config.Instance.Home;
-            homeTemp.ListRooms.Clear();
-
-            var listFile = Global.FileListByHomeId();
-
-            //鎴戠殑鍠滅埍鐨勬埧闂村繀椤昏鍦ㄧ0浣嶆墠琛�
-            string fRoom = "Room_Favorite.json";
-            if (listFile.Contains(fRoom) == true)
-            {
-                listFile.Remove(fRoom);
-                homeTemp.ListRooms.Add("Favorite");
-            }
-
-            var listRoomFile = new List<string>();
-            foreach (string fileName in listFile)
-            {
-                if (fileName.StartsWith("Room_"))
-                {
-                    string roomId = fileName.Replace("Room_", string.Empty).Replace(".json", string.Empty);
-                    homeTemp.ListRooms.Add(roomId);
-                    listRoomFile.Add(fileName);
-                }
-            }
-            //妫�娴嬫ゼ灞傛暟鎹殑鍚堟硶鎬�
-            if (UserCenterResourse.UserInfo.AuthorityNo == 3)
-            {
-                this.CheckMemberFloorData(listRoomFile);
-            }
-            else
-            {
-                this.CheckAdminFloorData(listRoomFile);
-            }
-
-            homeTemp.Save(false);
-            InitAllRoom();
-        }
-
-        /// <summary>
-        /// 鍒锋柊鎴块棿瑙嗗浘鍒楄〃
-        /// </summary>
-        public void RefreshRoomListView()
-        {
-            Application.RunOnMainThread(() =>
-            {
-                MainPage.ListRoomViewFrom.Instance?.RefreshListRoom();
-            });
-        }
-
-        /// <summary>
-        /// 妫�娴嬫ゼ灞傛暟鎹殑鍚堟硶鎬�
-        /// </summary>
-        /// <param name="listRoomFile"></param>
-        private void CheckAdminFloorData(List<string> listRoomFile)
-        {
-            //娌℃湁妤煎眰,鍒欐棤闇�澶勭悊
-            if (Config.Instance.Home.FloorDics.Count == 0) { return; }
-
-            //涓讳汉鎴栬�呯鐞嗗憳鐨勮瘽,灏辨娴嬫槸鍚﹀瓨鍦ㄦ湭鍒嗛厤妤煎眰鐨勬埧闂�
-            for (int i = 0; i < listRoomFile.Count; i++)
-            {
-                try
-                {
-                    var byteData = Global.ReadFileByHomeId(listRoomFile[i]);
-                    string valueData = System.Text.Encoding.UTF8.GetString(byteData);
-                    var roomTemp = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.Room>(valueData);
-
-                    //妫�娴嬪涓墜鏈烘潵鍥炲垱寤�,鐒跺悗鍙堝垹闄や箣鍚�,妤煎眰鏁版嵁涓嶈兘淇濊瘉100%鍚屾鐨勯棶棰�
-                    if (roomTemp.FloorId != string.Empty && Config.Instance.Home.FloorDics.ContainsKey(roomTemp.FloorId) == false)
-                    {
-                        //鏈煡妤煎眰
-                        Config.Instance.Home.FloorDics[roomTemp.FloorId] = Language.StringByID(R.MyInternationalizationString.uUnKnownFloor);
-                    }
-                }
-                catch (Exception ex) { HdlLogLogic.Current.WriteLog(ex); }
-            }
-        }
-
-        /// <summary>
-        /// 妫�娴嬫ゼ灞傛暟鎹殑鍚堟硶鎬�
-        /// </summary>
-        /// <param name="listRoomFile"></param>
-        private void CheckMemberFloorData(List<string> listRoomFile)
-        {
-            //娌℃湁妤煎眰,鍒欐棤闇�澶勭悊
-            if (Config.Instance.Home.FloorDics.Count == 0) { return; }
-
-            //鎴愬憳鐨勮瘽,灏辨娴嬫槸鍚﹀瓨鍦ㄦ病鏈夋埧闂寸殑妤煎眰
-            var listEsixtFloor = new List<string>();
-            for (int i = 0; i < listRoomFile.Count; i++)
-            {
-                try
-                {
-                    var byteData = Global.ReadFileByHomeId(listRoomFile[i]);
-                    string valueData = System.Text.Encoding.UTF8.GetString(byteData);
-                    var roomTemp = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.Room>(valueData);
-                    if (roomTemp.FloorId != string.Empty && listEsixtFloor.Contains(roomTemp.FloorId) == false)
-                    {
-                        //鏀堕泦妤煎眰
-                        listEsixtFloor.Add(roomTemp.FloorId);
-                    }
-                }
-                catch (Exception ex) { HdlLogLogic.Current.WriteLog(ex); }
-            }
-            var listDeleteId = new List<string>();
-            foreach (var flootId in Config.Instance.Home.FloorDics.Keys)
-            {
-                if (listEsixtFloor.Contains(flootId) == false)
-                {
-                    //濡傛灉杩欎釜id涓嶅瓨鍦ㄤ簬浠讳綍鎴块棿鐨勮瘽,鏀堕泦瀹�
-                    listDeleteId.Add(flootId);
-                }
-            }
-            foreach (var deleteId in listDeleteId)
-            {
-                //鍒犻櫎杩欎釜id
-                Config.Instance.Home.FloorDics.Remove(deleteId);
-            }
-            Config.Instance.Home.Save(false);
-        }
-
-        #endregion
-
-        #region 鈻� 娣诲姞鎴块棿___________________________
-
-        /// <summary>
-        /// 澧炲姞鎴块棿
-        /// </summary>
-        /// <param name="room">Room.</param>
-        /// <param name="rorefreshRoomViewom">鏄惁鍒锋柊鎴块棿瑙嗗浘鍒楄〃鐣岄潰</param>
-        public void AddRoom(Room room, bool refreshRoomView = true)
-        {
-            if (Global.IsExistsByHomeId(room.FileName) == true
-                || Config.Instance.Home.ListRooms.Contains(room.Id) == true)
-            {
-                return;
-            }
-            //娣诲姞鍒扮紦瀛�
-            this.dicRooms[room.Id] = room;
-            //鎶婃埧闂碔D娣诲姞鍒颁綇瀹�
-            Config.Instance.Home.AddRoomId(room.Id);
-            //鐢熸垚鏂囦欢
-            room.Save();
-            //澶囦唤
-            HdlAutoBackupLogic.AddOrEditorFile(room.FileName);
-            if (refreshRoomView == true)
-            {
-                //鍒锋柊鎴块棿瑙嗗浘鍒楄〃
-                this.RefreshRoomListView();
-            }
-        }
-
-        #endregion
-
-        #region 鈻� 鍒犻櫎鎴块棿___________________________
-
-        /// <summary>
-        /// 鍒犻櫎鎴块棿
-        /// </summary>
-        /// <param name="roomId">鎴块棿ID</param>
-        /// <returns></returns>
-        public void RemoveRoom(string roomId)
-        {
-            //鏍规嵁鎴块棿Id锛岃幏鍙栨埧闂村璞�
-            var room = this.GetRoomById(roomId);
-            if (room == null)
-            {
-                return;
-            }
-            //鍒犻櫎鏉ヨ嚜鎷嶇収鎴栬�呯郴缁熷浘搴撶殑鎴块棿鑳屾櫙鍥剧墖
-            if (room.BackgroundImageType == 1 || room.BackgroundImageType == 2)
-            {
-                //鍒犻櫎鎺夊師鏉ョ殑鑷畾涔夊浘鐗�
-                if (Global.IsExistsByHomeId(room.BackgroundImage) == true)
-                {
-                    Global.DeleteFilebyHomeId(room.BackgroundImage);
-                    //鍒犻櫎澶囦唤
-                    HdlAutoBackupLogic.DeleteFile(room.BackgroundImage);
-                }
-            }
-            //鎴戠殑鍠滅埍
-            var loveRoom = this.GetLoveRoom();
-            if (loveRoom != null)
-            {
-                //绉婚櫎鎴戠殑鍠滅埍閲岄潰鐨勮澶�
-                for (int i = 0; i < room.ListDevice.Count; i++)
-                {
-                    loveRoom.ListDevice.Remove(room.ListDevice[i]);
-                }
-                //绉婚櫎鎴戠殑鍠滅埍閲岄潰鐨勫満鏅�
-                for (int i = 0; i < room.ListSceneId.Count; i++)
-                {
-                    loveRoom.ListSceneId.Remove(room.ListSceneId[i]);
-                }
-                loveRoom.Save(false);
-            }
-
-            Config.Instance.Home.RemoveRoomId(roomId);
-            this.dicRooms.Remove(roomId);
-
-            string roomFilePath = room.FileName;
-            if (Global.IsExistsByHomeId(roomFilePath) == true)
-            {
-                //鍒犻櫎鏂囦欢
-                Global.DeleteFilebyHomeId(roomFilePath);
-            }
-            HdlAutoBackupLogic.DeleteFile(roomFilePath);
-            //鍒锋柊鎴块棿瑙嗗浘鍒楄〃
-            this.RefreshRoomListView();
-        }
-
-        #endregion
-
-        #region 鈻� 鑾峰彇鎴块棿___________________________
-
-        /// <summary>
-        /// 鑾峰彇鍠滅埍鎴块棿
-        /// </summary>
-        /// <returns></returns>
-        public Room GetLoveRoom()
-        {
-            //妫�娴嬫垜鐨勫枩鐖辫繖涓埧闂村璞�
-            this.CheckLoveRoom();
-
-            return this.dicRooms["Favorite"];
-        }
-
-        /// <summary>
-        /// 閫氳繃璺緞鑾峰彇鎴块棿
-        /// </summary>
-        /// <returns>The room by file path.</returns>
-        /// <param name="roomFilePath">Room file path.</param>
-        private Room GetRoomByFilePath(string roomFilePath)
-        {
-            try
-            {
-                var roomFile = Global.ReadFileByHomeId(roomFilePath);
-                var nowRoom = Newtonsoft.Json.JsonConvert.DeserializeObject<Room>(Encoding.UTF8.GetString(roomFile));
-
-                return nowRoom;
-            }
-            catch (Exception ex)
-            {
-                HdlLogLogic.Current.WriteLog(ex);
-                return null;
-            }
-        }
-
-        /// <summary>
-        /// 鏍规嵁鎴块棿Id锛岃幏鍙栨埧闂村璞�
-        /// </summary>
-        /// <returns>The room by name.</returns>
-        /// <param name="roomId">鎴块棿ID</param>
-        public Room GetRoomById(string roomId)
-        {
-            if (this.dicRooms.ContainsKey(roomId) == false)
-            {
-                return null;
-            }
-            return this.dicRooms[roomId];
-        }
-
-        /// <summary>
-        /// 鏍规嵁璁惧鑾峰彇鎴块棿鍚嶅瓧(妤煎眰+鎴块棿鍚�)
-        /// </summary>
-        /// <returns>鎴块棿鍚�</returns>
-        /// <param name="device">璁惧瀵硅薄</param>
-        public string GetRoomNameByDevice(CommonDevice device)
-        {
-            var room = this.GetRoomByDevice(device);
-            return this.GetFloorRoomName(room);
-        }
-
-        /// <summary>
-        /// 鑾峰彇鎴块棿鍚嶅瓧(妤煎眰+鎴块棿鍚�)
-        /// </summary>
-        /// <returns>鎴块棿鍚�</returns>
-        /// <param name="room">鎴块棿瀵硅薄</param>
-        public string GetFloorRoomName(Room room)
-        {
-            if (room == null)
-            {
-                //鏈垎閰嶅尯鍩�
-                return Language.StringByID(R.MyInternationalizationString.uDeviceNotAssignedRoom);
-            }
-            if (Config.Instance.Home.FloorDics.ContainsKey(room.FloorId) == true)
-            {
-                //(妤煎眰+鎴块棿鍚�)
-                return Config.Instance.Home.FloorDics[room.FloorId] + " " + room.Name;
-            }
-            return room.Name;
-        }
-
-        /// <summary>
-        /// 鑾峰彇璁惧鎵�鍦ㄧ殑鎴块棿(娌℃湁璁剧疆鏈夋埧闂村垯杩斿洖null)
-        /// </summary>
-        /// <returns>The room by device.</returns>
-        /// <param name="device">璁惧瀵硅薄</param>
-        public Room GetRoomByDevice(CommonDevice device)
-        {
-            string mainKeys = LocalDevice.Current.GetDeviceMainKeys(device);
-            foreach (var room in this.dicRooms.Values)
-            {
-                if (room.IsLove == true)
-                {
-                    //鍠滅埍鎴块棿涓嶅鐞�
-                    continue;
-                }
-                if (room.ListDevice.Contains(mainKeys) == true)
-                {
-                    return room;
-                }
-            }
-            return null;
-        }
-
-        /// <summary>
-        /// 閫氳繃鍦烘櫙id鑾峰彇鎴块棿鍚�
-        /// </summary>
-        /// <returns>The room name by scene identifier.</returns>
-        /// <param name="sceneId">Scene identifier.</param>
-        public string GetRoomNameBySceneId(int sceneId)
-        {
-            var room = GetRoomBySceneId(sceneId);
-            if (room == null)
-            {
-                return null;
-            }
-            return room.Name;
-        }
-
-        /// <summary>
-        /// 閫氳繃鍦烘櫙id鑾峰彇鎴块棿瀵硅薄
-        /// </summary>
-        /// <returns>The room  by scene identifier.</returns>
-        /// <param name="sceneId">Scene identifier.</param>
-        public Room GetRoomBySceneId(int sceneId)
-        {
-            foreach (var room in this.dicRooms.Values)
-            {
-                if (room.IsLove == true)
-                {
-                    //鍠滅埍鎴块棿涓嶅鐞�
-                    continue;
-                }
-                if (room.ListSceneId.Contains(sceneId) == true)
-                {
-                    return room;
-                }
-            }
-            return null;
-        }
-
-        /// <summary>
-        /// 鑾峰彇褰撳墠妤煎眰鐨勬埧闂�
-        /// </summary>
-        /// <param name="id"></param>
-        /// <returns></returns>
-        public List<Room> GetRoomsByFloorId(string id)
-        {
-            var listRoom = new List<Room>();
-            if (Config.Instance.Home.FloorDics.Count == 0)
-            {
-                //娌℃湁妤煎眰
-                foreach (var room in this.dicRooms.Values)
-                {
-                    listRoom.Add(room);
-                }
-            }
-            else
-            {
-                foreach (var room in this.dicRooms.Values)
-                {
-                    if (room.FloorId == id)
-                    {
-                        listRoom.Add(room);
-                    }
-                }
-            }
-            return listRoom;
-        }
-
-        /// <summary>
-        /// 鑾峰彇鍏ㄩ儴鐨勬埧闂�
-        /// </summary>
-        /// <returns></returns>
-        public List<Room> GetAllListRooms()
-        {
-            var listRoom = new List<Room>();
-            foreach (var room in this.dicRooms.Values)
-            {
-                listRoom.Add(room);
-            }
-            return listRoom;
-        }
-
-        /// <summary>
-        /// 鑾峰彇褰撳墠妤煎眰鐨勬埧闂村悕绉�
-        /// </summary>
-        /// <param name="id"></param>
-        /// <returns></returns>
-        public List<string> GetRoomNamesByFloorId(string id)
-        {
-            var listName = new List<string>();
-            if (Config.Instance.Home.FloorDics.Count == 0)
-            {
-                //娌℃湁妤煎眰
-                foreach (var room in this.dicRooms.Values)
-                {
-                    listName.Add(room.Name);
-                }
-            }
-            else
-            {
-                foreach (var room in this.dicRooms.Values)
-                {
-                    if (room.FloorId == id)
-                    {
-                        listName.Add(room.Name);
-                    }
-                }
-            }
-            return listName;
-        }
-
-        /// <summary>
-        /// 鑾峰彇褰撳墠妤煎眰鐨勬埧闂�(鎷兼帴浜嗐�愬父鐢ㄣ�戝湪绗竴浣�)
-        /// </summary>
-        /// <param name="id"></param>
-        /// <returns></returns>
-        public List<Room> GetRoomsByFloorIdAppendLoveRoom(string id)
-        {
-            var listRoom = new List<Room>();
-            if (Config.Instance.Home.FloorDics.Count == 0)
-            {
-                //娌℃湁妤煎眰
-                foreach (var room in this.dicRooms.Values)
-                {
-                    if (room.IsLove == false)
-                    {
-                        listRoom.Add(room);
-                    }
-                }
-            }
-            else
-            {
-                foreach (var room in this.dicRooms.Values)
-                {
-                    if (room.FloorId == id && room.IsLove == false)
-                    {
-                        listRoom.Add(room);
-                    }
-                }
-            }
-            listRoom.Insert(0, GetLoveRoom());
-            return listRoom;
-        }
-
-        /// <summary>
-        /// 鑾峰彇褰撳墠妤煎眰鐨勬埧闂�(鎷兼帴浜嗐�愬父鐢ㄣ�戝湪绗竴浣�)
-        /// </summary>
-        /// <returns></returns>
-        public List<Room> GetRoomsByCurrentFloorIdAppendLoveRoom()
-        {
-            return this.GetRoomsByFloorIdAppendLoveRoom(Config.Instance.Home.CurrentFloorId);
-        }
-
-        #endregion
-
-        #region 鈻� 鎴块棿鏂规硶___________________________
-
-        /// <summary>
-        /// 璁惧鐨勬埧闂村彉鏇�
-        /// </summary>
-        /// <param name="device">璁惧瀵硅薄</param>
-        /// <param name="roomId">鏂版埧闂碔d</param>
-        /// <param name="saveRealRoom">鏄惁淇敼鐪熷疄鐗╃悊璁惧鐨勬埧闂�,涓嶅嚭鎰忓,杩欎釜鍊奸粯璁や负true鍗冲彲</param>
-        public void ChangedRoom(CommonDevice device, string roomId, bool saveRealRoom = true)
-        {
-            //閫夋嫨鐨勬槸鏈垎閰�
-            if (roomId == string.Empty)
-            {
-                //浠庡師鏉ョ殑鎴块棿绉婚櫎璁惧
-                this.DeleteDevice(device);
-                //璁惧鏀瑰彉鎴块棿鐨勮瘽,涓婚〉闇�瑕侀噸鏂板埛鏂�
-                UserView.UserPage.Instance.RefreshForm = true;
-                return;
-            }
-            //鎴块棿鏄惁淇敼
-            if (this.IsRoomChanged(device, roomId) == false)
-            {
-                return;
-            }
-            //浠庡師鏉ョ殑鎴块棿绉婚櫎璁惧
-            this.DeleteDevice(device);
-
-            //娣诲姞鍒版柊鐨勬埧闂�
-            var room = this.GetRoomById(roomId);
-            if (room != null)
-            {
-                this.AddDevice(room, device, saveRealRoom);
-            }
-            //璁惧鏀瑰彉鎴块棿鐨勮瘽,涓婚〉闇�瑕侀噸鏂板埛鏂�
-            UserView.UserPage.Instance.RefreshForm = true;
-        }
-
-        /// <summary>
-        /// 鎴块棿鍚嶅瓧鏄惁鏈変慨鏀�
-        /// </summary>
-        /// <param name="device">璁惧瀵硅薄</param>
-        /// <param name="roomId">鏂版埧闂碔d</param>
-        /// <returns></returns>
-        public bool IsRoomChanged(CommonDevice device, string roomId)
-        {
-            var room = this.GetRoomByDevice(device);
-            if (room == null || room.Id != roomId)
-            {
-                return true;
-            }
-            return false;
-        }
-
-        /// <summary>
-        /// 鑾峰彇鎴块棿鎵�鍦ㄥ尯鍩�
-        /// 妤煎眰,鎴块棿鍚�
-        /// </summary>
-        /// <returns></returns>
-        public string GetZoneName(Room i_room)
-        {
-            if (string.IsNullOrEmpty(i_room.FloorId))
-            {
-                return i_room.Name;
-            }
-            var floorName = Config.Instance.Home.GetFloorNameById(i_room.FloorId);
-            if (floorName == null)
-            {
-                return i_room.Name;
-            }
-            return $"{floorName}锛寋i_room.Name}";
-        }
-
-        #endregion
-
-        #region 鈻� 娣诲姞璁惧___________________________
-
-        /// <summary>
-        /// 娣诲姞璁惧
-        /// </summary>
-        /// <param name="i_room">鎴块棿瀵硅薄</param>
-        /// <param name="device">瑕佹坊鍔犵殑璁惧瀵硅薄</param>
-        /// <param name="saveRealRoom">鏄惁淇敼鐪熷疄鐗╃悊璁惧鐨勬埧闂�,涓嶅嚭鎰忓,杩欎釜鍊奸粯璁や负true鍗冲彲</param>
-        public void AddDevice(Room i_room, CommonDevice device, bool saveRealRoom)
-        {
-            if (device == null)
-            {
-                return;
-            }
-            //璁惧淇℃伅淇濆瓨鍒版湰鍦�
-            device.Save();
-
-            string mainkeys = LocalDevice.Current.GetDeviceMainKeys(device);
-            if (i_room.ListDevice.Contains(mainkeys) == false)
-            {
-                //淇濆瓨鍒版湰鍦�
-                i_room.ListDevice.Add(mainkeys);
-                i_room.Save();
-
-                if (i_room.IsLove == false && saveRealRoom == true && LocalDevice.Current.GetDevicesCountByMac(device.DeviceAddr) == 1)
-                {
-                    //濡傛灉鍙湁涓�涓洖璺�,鍒欎慨鏀圭湡瀹炵墿鐞嗚澶囩殑鎴块棿
-                    LocalDevice.Current.SaveRealDeviceRoomId(new List<CommonDevice>() { device }, i_room.Id, false);
-                }
-            }
-        }
-
-        /// <summary>
-        /// 娣诲姞鍠滅埍璁惧
-        /// </summary>
-        /// <param name="device">瑕佹坊鍔犵殑璁惧瀵硅薄</param>
-        public void AddLoveDevice(CommonDevice device)
-        {
-            if (device == null)
-            {
-                return;
-            }
-            //鎴戠殑鍠滅埍
-            var loveRoom = this.GetLoveRoom();
-            if (loveRoom != null)
-            {
-                string mainkeys = LocalDevice.Current.GetDeviceMainKeys(device);
-                if (loveRoom.ListDevice.Contains(mainkeys) == false)
-                {
-                    //淇濆瓨鍒版湰鍦�
-                    loveRoom.ListDevice.Add(mainkeys);
-                    loveRoom.Save();
-                }
-            }
-        }
-
-        #endregion
-
-        #region 鈻� 鍒犻櫎璁惧___________________________
-
-        /// <summary>
-        /// 鍒犻櫎璁惧(杩欎釜鍑芥暟涓嶅垹闄ゆ垜鐨勫枩鐖�)
-        /// </summary>
-        /// <param name="device">瑕佸垹闄ょ殑璁惧瀵硅薄</param>
-        public void DeleteDevice(CommonDevice device)
-        {
-            if (device == null)
-            {
-                return;
-            }
-            //鏍规嵁璁惧锛岃幏鍙栨墍鍦ㄧ殑鎴块棿
-            var room = this.GetRoomByDevice(device);
-            if (room == null)
-            {
-                return;
-            }
-            //绉婚櫎缂撳瓨
-            string mainkeys = LocalDevice.Current.GetDeviceMainKeys(device);
-            room.ListDevice.Remove(mainkeys);
-            room.Save();
-            //鏇存敼鑷姩澶囦唤
-            HdlAutoBackupLogic.AddOrEditorFile(room.FileName);
-
-            //閫掑綊锛氬垹闄ゆ帀浠ュ墠鐨勬棫鏁版嵁瀵艰嚧鐨勫涓埧闂寸殑闂
-            this.DeleteDevice(device);
-        }
-
-        /// <summary>
-        /// 鍒犻櫎鎴戠殑鍠滅埍鐨勮澶�
-        /// </summary>
-        /// <param name="device">瑕佸垹闄ょ殑璁惧瀵硅薄</param>
-        public void DeleteLoveDevice(CommonDevice device)
-        {
-            if (device == null)
-            {
-                return;
-            }
-            //鎴戠殑鍠滅埍
-            var loveRoom = this.GetLoveRoom();
-            if (loveRoom != null)
-            {
-                //绉婚櫎缂撳瓨
-                string mainkeys = LocalDevice.Current.GetDeviceMainKeys(device);
-                loveRoom.ListDevice.Remove(mainkeys);
-                loveRoom.Save();
-                //鏇存敼鑷姩澶囦唤
-                HdlAutoBackupLogic.AddOrEditorFile(loveRoom.FileName);
-            }
-        }
-
-        #endregion
-
-        #region 鈻� 鑾峰彇璁惧___________________________
-
-        /// <summary>
-        /// 鑾峰彇褰撳墠鎴块棿涓嬬殑鍏ㄩ儴璁惧
-        /// </summary>
-        /// <returns></returns>
-        public List<CommonDevice> GetRoomListDevice(Room i_room)
-        {
-            var dicSort = new Dictionary<string, List<int>>();
-            foreach (var mainKeys in i_room.ListDevice)
-            {
-                var device = LocalDevice.Current.GetDevice(mainKeys);
-                if (device != null)
-                {
-                    if (dicSort.ContainsKey(device.DeviceAddr) == false)
-                    {
-                        dicSort[device.DeviceAddr] = new List<int>();
-                    }
-                    dicSort[device.DeviceAddr].Add(device.DeviceEpoint);
-                }
-            }
-            var listDevice = new List<CommonDevice>();
-            foreach (var strMac in dicSort.Keys)
-            {
-                var listEpont = dicSort[strMac];
-                //鎺掑簭
-                listEpont.Sort();
-                for (int i = 0; i < listEpont.Count; i++)
-                {
-                    var device = LocalDevice.Current.GetDevice(strMac, listEpont[i]);
-                    listDevice.Add(device);
-                }
-            }
-            return listDevice;
-        }
-
-        /// <summary>
-        /// 鑾峰彇鎴块棿璁惧绫诲瀷
-        /// </summary>
-        /// <param name="room"></param>
-        /// <returns></returns>
-        public List<DeviceType> GetDeviceTypes(Room i_room)
-        {
-            var typeList = new List<DeviceType>();
-            foreach (var mainKeys in i_room.ListDevice)
-            {
-                var device = LocalDevice.Current.GetDevice(mainKeys);
-                if (device != null)
-                {
-                    typeList.Add(device.Type);
-                }
-            }
-            return typeList;
-        }
-
-        /// <summary>
-        /// 鑾峰彇璇ョ被鍨嬬殑璁惧
-        /// </summary>
-        /// <param name="room"></param>
-        /// <param name="deviceType"></param>
-        /// <returns></returns>
-        public List<CommonDevice> GetRoomListDevice(Room room, DeviceType deviceType)
-        {
-            List<CommonDevice> typeList = new List<CommonDevice>();
-            foreach (var mainKeys in room.ListDevice)
-            {
-                var device = LocalDevice.Current.GetDevice(mainKeys);
-                if (device != null && device.Type == deviceType)
-                {
-                    typeList.Add(device);
-                }
-            }
-
-            return typeList;
-        }
-
-        /// <summary>
-        /// 鑾峰彇鏈垎閰嶅尯鍩熻澶�
-        /// </summary>
-        /// <returns></returns>
-        public List<CommonDevice> GetUnalloctedDevice()
-        {
-            var listDevice = new List<CommonDevice>();
-
-            //宸茬粡瀛樺湪鐨勮澶�
-            var listEsxit = new HashSet<string>();
-            foreach (var room in this.dicRooms.Values)
-            {
-                if (room.IsLove == true)
-                {
-                    //涓嶅寘鍚敹钘忔埧闂�
-                    continue;
-                }
-                foreach (string mainkeys in room.ListDevice)
-                {
-                    if (listEsxit.Contains(mainkeys) == false)
-                    {
-                        listEsxit.Add(mainkeys);
-                    }
-                }
-            }
-
-            //鎵�鏈夎澶�
-            var commonDeviceList = LocalDevice.Current.listAllDevice;
-            foreach (var device in commonDeviceList)
-            {
-                //鍒ゆ柇璇ヨ澶囪兘鍚︽樉绀哄湪涓婚〉
-                if (LocalDevice.Current.CanShowInHomeHomeMainPage(device) == false)
-                {
-                    continue;
-                }
-                string mainkeys = LocalDevice.Current.GetDeviceMainKeys(device);
-                if (listEsxit.Contains(mainkeys) == false)
-                {
-                    listDevice.Add(device);
-                }
-            }
-            return listDevice;
-        }
-
-        /// <summary>
-        /// 鑾峰彇鍏ㄩ儴鎴块棿鍏ㄩ儴鐨勮澶�
-        /// </summary>
-        /// <returns></returns>
-        public List<CommonDevice> GetAllRoomListDevice()
-        {
-            var listDevice = new List<CommonDevice>();
-            foreach (var room in this.dicRooms.Values)
-            {
-                if (room.IsSharedRoom || room.IsLove)
-                {
-                    continue;
-                }
-                listDevice.AddRange(this.GetRoomListDevice(room));
-            }
-            return listDevice;
-        }
-
-        #endregion
-
-        #region 鈻� 璁惧鏄惁鏀惰棌_______________________
-
-        /// <summary>
-        /// 鏄惁鏄敹钘忚澶�
-        /// </summary>
-        /// <param name="filePath"></param>
-        /// <returns></returns>
-        public bool IsCollectInRoom(CommonDevice device)
-        {
-            string mainkeys = LocalDevice.Current.GetDeviceMainKeys(device);
-            //鍠滅埍鎴块棿
-            var room = this.GetLoveRoom();
-            return room.ListDevice.Contains(mainkeys);
-        }
-
-        /// <summary>
-        /// 鏄惁鏄敹钘忚澶�
-        /// </summary>
-        /// <param name="filePath"></param>
-        /// <returns></returns>
-        public bool IsCollectInRoom(SceneUI scene)
-        {
-            //鍠滅埍鎴块棿
-            var room = this.GetLoveRoom();
-            return room.ListSceneId.Contains(scene.Id);
-        }
-
-        #endregion
-
-        #region 鈻� 妤煎眰鍜屾埧闂撮『搴忕浉鍏砡________________
-
-        /// <summary>
-        /// 鏍规嵁妤煎眰鐨勪富閿幏鍙栨帓搴忓悗鐨勬埧闂村垪琛�(鏀寔鏃犳ゼ灞傛ā寮�)
-        /// </summary>
-        /// <param name="i_floorKeys">妤煎眰鐨勪富閿�</param>
-        /// <param name="getShard">鍒嗕韩鐨勬埧闂存槸鍚︿篃鑾峰彇</param>
-        /// <returns></returns>
-        public List<Room> GetFloorSortRoom(string i_floorKeys, bool getShard = true)
-        {
-            if (i_floorKeys == null)
-            {
-                i_floorKeys = string.Empty;
-            }
-            Dictionary<string, List<string>> dicAllSort = new Dictionary<string, List<string>>();
-            //璇诲彇鎴块棿椤哄簭
-            string fullName = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.RoomSortFile);
-            var strData = UserCenterLogic.LoadFileContent(fullName);
-            if (strData != null)
-            {
-                dicAllSort = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, List<string>>>(strData);
-            }
-
-            var listRoomSort = new List<string>();
-            if (dicAllSort.ContainsKey(i_floorKeys) == true)
-            {
-                listRoomSort = dicAllSort[i_floorKeys];
-            }
-            else
-            {
-                dicAllSort[i_floorKeys] = listRoomSort;
-            }
-
-            var dicRoom = new Dictionary<string, Common.Room>();
-            foreach (var room in this.dicRooms.Values)
-            {
-                if (room.FloorId != i_floorKeys && i_floorKeys != string.Empty)
-                {
-                    //涓嶆槸鍚屼竴涓ゼ灞�
-                    continue;
-                }
-                if (room.IsLove == true)
-                {
-                    //涓嶈鎴戠殑鍠滅埍
-                    continue;
-                }
-                if (listRoomSort.Contains(room.Id) == false)
-                {
-                    //鏂版坊鍔犵殑鎴块棿
-                    listRoomSort.Add(room.Id);
-                }
-                if (getShard == false && room.IsSharedRoom == true)
-                {
-                    //涓嶈鍒嗕韩鐨勬埧闂�
-                    continue;
-                }
-                dicRoom[room.Id] = room;
-            }
-
-            var listSortRoom = new List<Room>();
-            for (int i = 0; i < listRoomSort.Count; i++)
-            {
-                if (dicRoom.ContainsKey(listRoomSort[i]) == true)
-                {
-                    listSortRoom.Add(dicRoom[listRoomSort[i]]);
-                }
-            }
-
-            //淇濆瓨椤哄簭
-            UserCenterLogic.SaveFileContent(fullName, dicAllSort);
-            return listSortRoom;
-        }
-
-        /// <summary>
-        /// 淇濆瓨鎴块棿鐨勯『搴�
-        /// </summary>
-        /// <param name="i_floorKeys">妤煎眰涓婚敭</param>
-        /// <param name="listSort">鎴块棿椤哄簭(鎴块棿鐨勪富閿�)</param>
-        public void SaveRoomSort(string i_floorKeys, List<string> listSort)
-        {
-            Dictionary<string, List<string>> dicAllSort = new Dictionary<string, List<string>>();
-            //璇诲彇鎴块棿椤哄簭
-            string fullName = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.RoomSortFile);
-            var strData = UserCenterLogic.LoadFileContent(fullName);
-            if (strData != null)
-            {
-                dicAllSort = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, List<string>>>(strData);
-            }
-
-            //淇濆瓨椤哄簭
-            dicAllSort[i_floorKeys] = listSort;
-            UserCenterLogic.SaveFileContent(fullName, dicAllSort);
-            dicAllSort.Clear();
-        }
-
-        /// <summary>
-        /// 鑾峰彇鎺掑簭鍚庣殑妤煎眰
-        /// </summary>
-        /// <returns></returns>
-        public Dictionary<string, string> GetFloorSortList()
-        {
-            //璇诲彇妤煎眰椤哄簭
-            var listFloorSort = new List<string>();
-            string fullName = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.FloorSortFile);
-            var strData = UserCenterLogic.LoadFileContent(fullName);
-            if (strData != null)
-            {
-                listFloorSort = Newtonsoft.Json.JsonConvert.DeserializeObject<List<string>>(strData);
-            }
-            foreach (string keys in Common.Config.Instance.Home.FloorDics.Keys)
-            {
-                if (listFloorSort.Contains(keys) == false)
-                {
-                    //鏂版坊鍔犵殑妤煎眰
-                    listFloorSort.Add(keys);
-                }
-            }
-
-            var dic = new Dictionary<string, string>();
-            for (int i = 0; i < listFloorSort.Count; i++)
-            {
-                if (Config.Instance.Home.FloorDics.ContainsKey(listFloorSort[i]) == true)
-                {
-                    dic[listFloorSort[i]] = Config.Instance.Home.FloorDics[listFloorSort[i]];
-                }
-            }
-
-            //淇濆瓨椤哄簭
-            UserCenterLogic.SaveFileContent(fullName, listFloorSort);
-            return dic;
-        }
-
-        /// <summary>
-        /// 淇濆瓨妤煎眰鐨勯『搴�
-        /// </summary>
-        /// <param name="listSort">妤煎眰鐨勪富閿�</param>
-        public void SaveFloorSort(List<string> listSort)
-        {
-            string fullName = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.FloorSortFile);
-            //淇濆瓨椤哄簭
-            UserCenterLogic.SaveFileContent(fullName, listSort);
-        }
-
-        #endregion
-
-        #region 鈻� 鍏嬮殕鎴块棿瀵硅薄_______________________
-
-        /// <summary>
-        /// 鍏嬮殕鎴块棿瀵硅薄
-        /// </summary>
-        /// <returns></returns>
-        public Room CloneRoomClass(Room i_room)
-        {
-            var newRoom = new Room();
-            //鍏嬮殕灞炴��
-            newRoom.Id = i_room.Id;
-            newRoom.FloorId = i_room.FloorId;
-            newRoom.TemperatrueDevice = i_room.TemperatrueDevice;
-            newRoom.Temperatrue = i_room.Temperatrue;
-            newRoom.HumidityDevice = i_room.HumidityDevice;
-            newRoom.Humidity = i_room.Humidity;
-            newRoom.Name = i_room.Name;
-            newRoom.BackgroundImage = i_room.BackgroundImage;
-            newRoom.BackgroundImageType = i_room.BackgroundImageType;
-
-            return newRoom;
-        }
-
-        #endregion
-
-        #region 鈻� 涓�鑸柟娉昣__________________________
-
-        /// <summary>
-        /// 妫�娴嬫垜鐨勫枩鐖辫繖涓埧闂村璞�
-        /// </summary>
-        private void CheckLoveRoom()
-        {
-            if (Config.Instance.Home.ListRooms.Contains("Favorite") == false)
-            {
-                //榛樿娣诲姞鍠滅埍鐨勬埧闂�--绂佹淇敼鎴块棿鍚�
-                var love = new Room { Name = Language.StringByID(R.MyInternationalizationString.Favorite), BackgroundImage = "RoomIcon/0.jpg", Id = "Favorite" };
-                love.Save(false);
-                //娣诲姞鍒癶ouse 鎴块棿璺緞鍒楄〃
-                var currentHome = Config.Instance.Home;
-                currentHome.ListRooms.Insert(0, love.Id);
-                currentHome.Save(false);
-
-                this.dicRooms["Favorite"] = love;
-            }
-        }
-
-        #endregion
-    }
-}
+锘縰sing Shared.Common;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using ZigBee.Device;
+
+namespace Shared.Phone.UserCenter
+{
+    /// <summary>
+    /// 鎴块棿鐨勯�昏緫
+    /// </summary>
+    public class HdlRoomLogic
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 鎴块棿鐨勯�昏緫
+        /// </summary>
+        private static HdlRoomLogic m_Current = null;
+        /// <summary>
+        /// 鎴块棿鐨勯�昏緫
+        /// </summary>
+        public static HdlRoomLogic Current
+        {
+            get
+            {
+                if (m_Current == null)
+                {
+                    m_Current = new HdlRoomLogic();
+                }
+                return m_Current;
+            }
+        }
+        /// <summary>
+        /// 褰撳墠涓婚〉閫夋嫨鐨勬埧闂村璞�
+        /// </summary>
+        public Room NowMainPageRoom = null;
+        /// <summary>
+        /// 褰撳墠鍒嗙被閫夋嫨鐨勬埧闂村璞�
+        /// </summary>
+        public Room NowCategoryRoom = null;
+        /// <summary>
+        /// 鎵�鏈夌殑鎴块棿淇℃伅
+        /// </summary>
+        private Dictionary<string, Room> dicRooms = new Dictionary<string, Room>();
+        /// <summary>
+        /// 鐗╃悊璁惧灞炰簬鍝釜鎴块棿鐨勮褰�
+        /// </summary>
+        private Dictionary<string, string> dicDeviceRoomId = null;
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鍒濆鍖栨埧闂翠俊鎭�
+        /// 浠庢枃浠朵腑鍏ㄩ儴璇诲彇鎵�鏈夌殑鎴块棿鏁版嵁鍒板唴瀛�
+        /// </summary>
+        public void InitAllRoom()
+        {
+            this.NowMainPageRoom = null;
+            this.NowCategoryRoom = null;
+
+            //娓呯┖鏈湴缂撳瓨
+            this.dicRooms.Clear();
+            //妫�娴嬫垜鐨勫枩鐖辫繖涓埧闂村璞�
+            this.CheckLoveRoom();
+
+            var listFile = HdlFileLogic.Current.GetRootPathListFile();
+            foreach (var fileName in listFile)
+            {
+                if (fileName.StartsWith("Room_") == true)
+                {
+                    //浠庢枃浠堕噷闈㈣幏鍙栨埧闂村璞�
+                    var room = this.GetRoomByFilePath(fileName);
+                    if (room != null)
+                    {
+                        this.dicRooms[room.Id] = (room);
+                    }
+                }
+            }
+            //椤轰究鍒锋柊鍦烘櫙
+            HdlSceneLogic.Current.ReFreshByLocal();
+            //鍒锋柊鎴块棿瑙嗗浘鍒楄〃
+            this.RefreshRoomListView();
+        }
+
+        /// <summary>
+        /// 浠庢湰鍦伴噸鏂板姞杞藉叏閮ㄧ殑鎴块棿
+        /// </summary>
+        public void RefreshAllRoomByLocation()
+        {
+            var listFile = HdlFileLogic.Current.GetRootPathListFile();
+
+            //鎴戠殑鍠滅埍鐨勬埧闂村繀椤昏鍦ㄧ0浣嶆墠琛�
+            string fRoom = "Room_Favorite.json";
+            if (listFile.Contains(fRoom) == true)
+            {
+                listFile.Remove(fRoom);
+            }
+
+            var listRoomFile = new List<string>();
+            foreach (string fileName in listFile)
+            {
+                if (fileName.StartsWith("Room_"))
+                {
+                    string roomId = fileName.Replace("Room_", string.Empty).Replace(".json", string.Empty);
+                    listRoomFile.Add(fileName);
+                }
+            }
+            //妫�娴嬫ゼ灞傛暟鎹殑鍚堟硶鎬�
+            if (UserCenterResourse.UserInfo.AuthorityNo == 3)
+            {
+                this.CheckMemberFloorData(listRoomFile);
+            }
+            else
+            {
+                this.CheckAdminFloorData(listRoomFile);
+            }
+
+            this.InitAllRoom();
+        }
+
+        /// <summary>
+        /// 鍒锋柊鎴块棿瑙嗗浘鍒楄〃
+        /// </summary>
+        public void RefreshRoomListView()
+        {
+            Application.RunOnMainThread(() =>
+            {
+                MainPage.LeftListRoomViewFrom.Instance?.RefreshListRoom();
+            });
+        }
+
+        /// <summary>
+        /// 妫�娴嬫ゼ灞傛暟鎹殑鍚堟硶鎬�
+        /// </summary>
+        /// <param name="listRoomFile"></param>
+        private void CheckAdminFloorData(List<string> listRoomFile)
+        {
+            //娌℃湁妤煎眰,鍒欐棤闇�澶勭悊
+            if (Config.Instance.Home.FloorDics.Count == 0) { return; }
+
+            //涓讳汉鎴栬�呯鐞嗗憳鐨勮瘽,灏辨娴嬫槸鍚﹀瓨鍦ㄦ湭鍒嗛厤妤煎眰鐨勬埧闂�
+            for (int i = 0; i < listRoomFile.Count; i++)
+            {
+                try
+                {
+                    var byteData = Global.ReadFileByHomeId(listRoomFile[i]);
+                    string valueData = System.Text.Encoding.UTF8.GetString(byteData);
+                    var roomTemp = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.Room>(valueData);
+
+                    //妫�娴嬪涓墜鏈烘潵鍥炲垱寤�,鐒跺悗鍙堝垹闄や箣鍚�,妤煎眰鏁版嵁涓嶈兘淇濊瘉100%鍚屾鐨勯棶棰�
+                    if (roomTemp.FloorId != string.Empty && Config.Instance.Home.FloorDics.ContainsKey(roomTemp.FloorId) == false)
+                    {
+                        //鏈煡妤煎眰
+                        Config.Instance.Home.FloorDics[roomTemp.FloorId] = Language.StringByID(R.MyInternationalizationString.uUnKnownFloor);
+                    }
+                }
+                catch (Exception ex) { HdlLogLogic.Current.WriteLog(ex); }
+            }
+        }
+
+        /// <summary>
+        /// 妫�娴嬫ゼ灞傛暟鎹殑鍚堟硶鎬�
+        /// </summary>
+        /// <param name="listRoomFile"></param>
+        private void CheckMemberFloorData(List<string> listRoomFile)
+        {
+            //娌℃湁妤煎眰,鍒欐棤闇�澶勭悊
+            if (Config.Instance.Home.FloorDics.Count == 0) { return; }
+
+            //鎴愬憳鐨勮瘽,灏辨娴嬫槸鍚﹀瓨鍦ㄦ病鏈夋埧闂寸殑妤煎眰
+            var listEsixtFloor = new List<string>();
+            for (int i = 0; i < listRoomFile.Count; i++)
+            {
+                try
+                {
+                    var byteData = Global.ReadFileByHomeId(listRoomFile[i]);
+                    string valueData = System.Text.Encoding.UTF8.GetString(byteData);
+                    var roomTemp = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.Room>(valueData);
+                    if (roomTemp.FloorId != string.Empty && listEsixtFloor.Contains(roomTemp.FloorId) == false)
+                    {
+                        //鏀堕泦妤煎眰
+                        listEsixtFloor.Add(roomTemp.FloorId);
+                    }
+                }
+                catch (Exception ex) { HdlLogLogic.Current.WriteLog(ex); }
+            }
+            var listDeleteId = new List<string>();
+            foreach (var flootId in Config.Instance.Home.FloorDics.Keys)
+            {
+                if (listEsixtFloor.Contains(flootId) == false)
+                {
+                    //濡傛灉杩欎釜id涓嶅瓨鍦ㄤ簬浠讳綍鎴块棿鐨勮瘽,鏀堕泦瀹�
+                    listDeleteId.Add(flootId);
+                }
+            }
+            foreach (var deleteId in listDeleteId)
+            {
+                //鍒犻櫎杩欎釜id
+                Config.Instance.Home.FloorDics.Remove(deleteId);
+            }
+            Config.Instance.Home.Save(false);
+        }
+
+        #endregion
+
+        #region 鈻� 娣诲姞鎴块棿___________________________
+
+        /// <summary>
+        /// 澧炲姞鎴块棿
+        /// </summary>
+        /// <param name="room">Room.</param>
+        /// <param name="rorefreshRoomViewom">鏄惁鍒锋柊鎴块棿瑙嗗浘鍒楄〃鐣岄潰</param>
+        public void AddRoom(Room room, bool refreshRoomView = true)
+        {
+            if (Global.IsExistsByHomeId(room.FileName) == true)
+            {
+                return;
+            }
+            //娣诲姞鍒扮紦瀛�
+            this.dicRooms[room.Id] = room;
+            //鐢熸垚鏂囦欢
+            room.Save();
+            //澶囦唤
+            HdlAutoBackupLogic.AddOrEditorFile(room.FileName);
+            if (refreshRoomView == true)
+            {
+                //鍒锋柊鎴块棿瑙嗗浘鍒楄〃
+                this.RefreshRoomListView();
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 鍒犻櫎鎴块棿___________________________
+
+        /// <summary>
+        /// 鍒犻櫎鎴块棿
+        /// </summary>
+        /// <param name="roomId">鎴块棿ID</param>
+        /// <param name="refreshLeftView">鏄惁鍒锋柊宸︽粦鐣岄潰(姝ゅ彉閲忕洰鍓嶆槸缁欏垹闄ゅ叏閮ㄦ埧闂寸敤鐨�)</param>
+        /// <returns></returns>
+        public void RemoveRoom(string roomId, bool refreshLeftView = true)
+        {
+            if (this.NowMainPageRoom != null && this.NowMainPageRoom.Id == roomId)
+            {
+                //褰撳垹闄ょ殑鏄富椤电殑鎴块棿鐨勬椂鍊�
+                this.NowMainPageRoom = this.GetLoveRoom();
+            }
+            if (this.NowCategoryRoom != null && this.NowCategoryRoom.Id == roomId)
+            {
+                //褰撳垹闄ょ殑鏄垎绫荤殑鎴块棿鐨勬椂鍊�
+                this.NowCategoryRoom = this.GetLoveRoom();
+            }
+
+            //鏍规嵁鎴块棿Id锛岃幏鍙栨埧闂村璞�
+            var room = this.GetRoomById(roomId);
+            if (room == null)
+            {
+                return;
+            }
+            //鍒犻櫎鏉ヨ嚜鎷嶇収鎴栬�呯郴缁熷浘搴撶殑鎴块棿鑳屾櫙鍥剧墖
+            if (room.BackgroundImageType == 1 || room.BackgroundImageType == 2)
+            {
+                //鍒犻櫎鎺夊師鏉ョ殑鑷畾涔夊浘鐗�
+                if (Global.IsExistsByHomeId(room.BackgroundImage) == true)
+                {
+                    Global.DeleteFilebyHomeId(room.BackgroundImage);
+                    //鍒犻櫎澶囦唤
+                    HdlAutoBackupLogic.DeleteFile(room.BackgroundImage);
+                }
+            }
+            //鎴戠殑鍠滅埍
+            var loveRoom = this.GetLoveRoom();
+            if (loveRoom != null)
+            {
+                //绉婚櫎鎴戠殑鍠滅埍閲岄潰鐨勮澶�
+                for (int i = 0; i < room.ListDevice.Count; i++)
+                {
+                    loveRoom.ListDevice.Remove(room.ListDevice[i]);
+                }
+                //绉婚櫎鎴戠殑鍠滅埍閲岄潰鐨勫満鏅�
+                for (int i = 0; i < room.ListSceneId.Count; i++)
+                {
+                    loveRoom.ListSceneId.Remove(room.ListSceneId[i]);
+                }
+                loveRoom.Save(false);
+            }
+            this.dicRooms.Remove(roomId);
+
+            string roomFilePath = room.FileName;
+            if (Global.IsExistsByHomeId(roomFilePath) == true)
+            {
+                //鍒犻櫎鏂囦欢
+                Global.DeleteFilebyHomeId(roomFilePath);
+            }
+            HdlAutoBackupLogic.DeleteFile(roomFilePath);
+
+            //鏍规嵁鎴块棿ID,绉婚櫎鎸囧畾鐨勭湡瀹炵墿鐞嗚澶囩殑鎵�灞炴埧闂磋褰�
+            HdlRoomLogic.Current.DeleteRealDeviceByRoomId(roomId);
+            if (refreshLeftView == true)
+            {
+                //鍒锋柊鎴块棿瑙嗗浘鍒楄〃
+                this.RefreshRoomListView();
+            }
+        }
+
+        /// <summary>
+        /// 鍒犻櫎鍏ㄩ儴鐨勬埧闂�
+        /// </summary>
+        public void DeleteAllRoom()
+        {
+            var listRoomId = new List<string>();
+            foreach (var room in this.dicRooms.Values)
+            {
+                if (room.IsLove == false)
+                {
+                    listRoomId.Add(room.Id);
+                }
+            }
+            foreach (var roomId in listRoomId)
+            {
+                this.RemoveRoom(roomId, false);
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 鑾峰彇鎴块棿___________________________
+
+        /// <summary>
+        /// 鑾峰彇鍠滅埍鎴块棿
+        /// </summary>
+        /// <returns></returns>
+        public Room GetLoveRoom()
+        {
+            //妫�娴嬫垜鐨勫枩鐖辫繖涓埧闂村璞�
+            this.CheckLoveRoom();
+
+            return this.dicRooms["Favorite"];
+        }
+
+        /// <summary>
+        /// 閫氳繃璺緞鑾峰彇鎴块棿
+        /// </summary>
+        /// <returns>The room by file path.</returns>
+        /// <param name="roomFilePath">Room file path.</param>
+        private Room GetRoomByFilePath(string roomFilePath)
+        {
+            try
+            {
+                var roomFile = Global.ReadFileByHomeId(roomFilePath);
+                var nowRoom = Newtonsoft.Json.JsonConvert.DeserializeObject<Room>(Encoding.UTF8.GetString(roomFile));
+
+                return nowRoom;
+            }
+            catch (Exception ex)
+            {
+                HdlLogLogic.Current.WriteLog(ex);
+                return null;
+            }
+        }
+
+        /// <summary>
+        /// 鏍规嵁鎴块棿Id锛岃幏鍙栨埧闂村璞�
+        /// </summary>
+        /// <returns>The room by name.</returns>
+        /// <param name="roomId">鎴块棿ID</param>
+        public Room GetRoomById(string roomId)
+        {
+            if (this.dicRooms.ContainsKey(roomId) == false)
+            {
+                return null;
+            }
+            return this.dicRooms[roomId];
+        }
+
+        /// <summary>
+        /// 鏍规嵁璁惧鑾峰彇鎴块棿鍚嶅瓧(妤煎眰+鎴块棿鍚�)
+        /// </summary>
+        /// <returns>鎴块棿鍚�</returns>
+        /// <param name="device">璁惧瀵硅薄</param>
+        public string GetRoomNameByDevice(CommonDevice device)
+        {
+            var room = this.GetRoomByDevice(device);
+            return this.GetRoomName(room);
+        }
+
+        /// <summary>
+        /// 鑾峰彇鎴块棿鍚嶅瓧(妤煎眰+鎴块棿鍚�)
+        /// </summary>
+        /// <returns>鎴块棿鍚�</returns>
+        /// <param name="room">鎴块棿瀵硅薄</param>
+        public string GetRoomName(Room room)
+        {
+            if (room == null)
+            {
+                //鏈垎閰嶅尯鍩�
+                return Language.StringByID(R.MyInternationalizationString.uDeviceNotAssignedRoom);
+            }
+            if (Config.Instance.Home.FloorDics.ContainsKey(room.FloorId) == true)
+            {
+                //(妤煎眰+鎴块棿鍚�)
+                return Config.Instance.Home.FloorDics[room.FloorId] + " " + room.Name;
+            }
+            return room.Name;
+        }
+
+        /// <summary>
+        /// 鑾峰彇璁惧鎵�鍦ㄧ殑鎴块棿(娌℃湁璁剧疆鏈夋埧闂村垯杩斿洖null)
+        /// </summary>
+        /// <returns>The room by device.</returns>
+        /// <param name="device">璁惧瀵硅薄</param>
+        public Room GetRoomByDevice(CommonDevice device)
+        {
+            string mainKeys = LocalDevice.Current.GetDeviceMainKeys(device);
+            foreach (var room in this.dicRooms.Values)
+            {
+                if (room.IsLove == true)
+                {
+                    //鍠滅埍鎴块棿涓嶅鐞�
+                    continue;
+                }
+                if (room.ListDevice.Contains(mainKeys) == true)
+                {
+                    return room;
+                }
+            }
+            return null;
+        }
+
+        /// <summary>
+        /// 閫氳繃鍦烘櫙id鑾峰彇鎴块棿鍚�
+        /// </summary>
+        /// <returns>The room name by scene identifier.</returns>
+        /// <param name="sceneId">Scene identifier.</param>
+        public string GetRoomNameBySceneId(int sceneId)
+        {
+            var room = GetRoomBySceneId(sceneId);
+            if (room == null)
+            {
+                return null;
+            }
+            return room.Name;
+        }
+
+        /// <summary>
+        /// 閫氳繃鍦烘櫙id鑾峰彇鎴块棿瀵硅薄
+        /// </summary>
+        /// <returns>The room  by scene identifier.</returns>
+        /// <param name="sceneId">Scene identifier.</param>
+        public Room GetRoomBySceneId(int sceneId)
+        {
+            foreach (var room in this.dicRooms.Values)
+            {
+                if (room.IsLove == true)
+                {
+                    //鍠滅埍鎴块棿涓嶅鐞�
+                    continue;
+                }
+                if (room.ListSceneId.Contains(sceneId) == true)
+                {
+                    return room;
+                }
+            }
+            return null;
+        }
+
+        /// <summary>
+        /// 鑾峰彇褰撳墠妤煎眰鐨勬埧闂�
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        public List<Room> GetRoomsByFloorId(string id)
+        {
+            var listRoom = new List<Room>();
+            if (Config.Instance.Home.FloorDics.Count == 0)
+            {
+                //娌℃湁妤煎眰
+                foreach (var room in this.dicRooms.Values)
+                {
+                    listRoom.Add(room);
+                }
+            }
+            else
+            {
+                foreach (var room in this.dicRooms.Values)
+                {
+                    if (room.FloorId == id)
+                    {
+                        listRoom.Add(room);
+                    }
+                }
+            }
+            return this.SortRoom(listRoom);
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍏ㄩ儴鐨勬埧闂�
+        /// </summary>
+        /// <returns></returns>
+        public List<Room> GetAllListRooms()
+        {
+            var listRoom = new List<Room>();
+            foreach (var room in this.dicRooms.Values)
+            {
+                listRoom.Add(room);
+            }
+            return this.SortRoom(listRoom);
+        }
+
+        /// <summary>
+        /// 鑾峰彇褰撳墠妤煎眰鐨勬埧闂�(鎷兼帴浜嗐�愬父鐢ㄣ�戝湪绗竴浣�)
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        public List<Room> GetRoomsByFloorIdAppendLoveRoom(string id)
+        {
+            var listRoom = new List<Room>();
+            if (Config.Instance.Home.FloorDics.Count == 0)
+            {
+                //娌℃湁妤煎眰
+                foreach (var room in this.dicRooms.Values)
+                {
+                    if (room.IsLove == false)
+                    {
+                        listRoom.Add(room);
+                    }
+                }
+            }
+            else
+            {
+                foreach (var room in this.dicRooms.Values)
+                {
+                    if (room.FloorId == id && room.IsLove == false)
+                    {
+                        listRoom.Add(room);
+                    }
+                }
+            }
+            listRoom = this.SortRoom(listRoom);
+
+            listRoom.Insert(0, GetLoveRoom());
+            return listRoom;
+        }
+
+        /// <summary>
+        /// 鑾峰彇缃戝叧鎵�鍦ㄧ殑鎴块棿
+        /// </summary>
+        /// <param name="zbGateway">缃戝叧瀵硅薄</param>
+        /// <returns></returns>
+        public Room GetRoomByGateway(ZbGateway zbGateway)
+        {
+            return this.GetRoomByGateway(zbGateway.GwId);
+        }
+
+        /// <summary>
+        /// 鑾峰彇缃戝叧鎵�鍦ㄧ殑鎴块棿
+        /// </summary>
+        /// <param name="gatewayId">缃戝叧ID</param>
+        /// <returns></returns>
+        public Room GetRoomByGateway(string gatewayId)
+        {
+            var localGateway = HdlGatewayLogic.Current.GetLocalGateway(gatewayId);
+            if (localGateway == null)
+            {
+                return null;
+            }
+            return HdlRoomLogic.Current.GetRoomById(localGateway.RoomId);
+        }
+
+        /// <summary>
+        /// 鍙樻洿缃戝叧鎴块棿
+        /// </summary>
+        /// <param name="gwId">缃戝叧Id</param>
+        /// <param name="roomId">鎴块棿ID</param>
+        public void ChangedGatewayRoom(string gwId, string roomId)
+        {
+            var localGateway = HdlGatewayLogic.Current.GetLocalGateway(gwId);
+            if (localGateway != null)
+            {
+                localGateway.RoomId = roomId;
+                localGateway.ReSave();
+                //娣诲姞澶囦唤
+                HdlAutoBackupLogic.AddOrEditorFile(localGateway.FilePath);
+            }
+        }
+
+        #endregion
+
+
+        #region 鈻� 鐗╃悊璁惧鎵�灞炴埧闂確__________________
+
+        /// <summary>
+        /// 鍒濆鍖栫墿鐞嗚澶囨墍灞炴埧闂寸殑璁板綍
+        /// </summary>
+        public void InitRealDeviceRoomId()
+        {
+            this.dicDeviceRoomId = new Dictionary<string, string>();
+            string fullName = DirNameResourse.DeviceRoomIdFile;
+            var strData = HdlFileLogic.Current.ReadFileTextContent(fullName);
+            if (strData != null)
+            {
+                this.dicDeviceRoomId = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(strData);
+            }
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍏ㄩ儴鐗╃悊璁惧鎵�灞炴埧闂寸殑璁板綍
+        /// </summary>
+        /// <returns></returns>
+        public Dictionary<string, string> GetAllRealDeviceRoomData()
+        {
+            return this.dicDeviceRoomId;
+        }
+
+        /// <summary>
+        /// 淇濆瓨鐗╃悊璁惧鎵�灞炴埧闂寸殑璁板綍
+        /// </summary>
+        /// <param name="listDevice">闇�瑕佷繚瀛樼殑璁惧瀵硅薄</param>
+        /// <param name="roomId">闇�瑕佷繚瀛樼殑鍝釜璁惧鐨勬埧闂碔D</param>
+        /// <param name="saveRoadDevice">濡傛灉鍙湁涓�涓洖璺�,鏄惁鎶婂洖璺殑鎴块棿涓�璧蜂慨鏀�</param>
+        public void SaveRealDeviceRoomId(List<CommonDevice> listDevice, string roomId, bool saveRoadDevice = true)
+        {
+            if (listDevice == null || listDevice.Count == 0)
+            {
+                return;
+            }
+            //濡傛灉璁惧鍙湁涓�涓洖璺紝濡傛灉鏀瑰彉浜嗙湡瀹炶澶囧尯鍩燂紝鍒欏畠鐨勫洖璺殑鍖哄煙涔熶竴璧锋敼浜�
+            if (saveRoadDevice == true && listDevice.Count == 1)
+            {
+                if ((listDevice[0] is OTADevice) == false)
+                {
+                    //ota璁惧涓嶉渶瑕佸鐞�
+                    HdlRoomLogic.Current.ChangedRoom(listDevice[0], roomId, false);
+                }
+            }
+            bool save = false;
+            if (roomId == string.Empty)
+            {
+                //閫夋嫨鐨勬槸鏈垎閰�
+                this.dicDeviceRoomId.Remove(listDevice[0].DeviceAddr);
+                save = true;
+            }
+            else
+            {
+                if (this.dicDeviceRoomId.ContainsKey(listDevice[0].DeviceAddr) == false)
+                {
+                    this.dicDeviceRoomId[listDevice[0].DeviceAddr] = roomId;
+                    save = true;
+                }
+                else
+                {
+                    //2020.05.18杩藉姞:濡傛灉璁板綍鐨勬埧闂碔D鏄笉瀛樺湪鐨勮瘽,鍒欓噸鏂拌鐩�
+                    var room = HdlRoomLogic.Current.GetRoomById(this.dicDeviceRoomId[listDevice[0].DeviceAddr]);
+                    if (room == null || this.dicDeviceRoomId[listDevice[0].DeviceAddr] != roomId)
+                    {
+                        this.dicDeviceRoomId[listDevice[0].DeviceAddr] = roomId;
+                        save = true;
+                    }
+                }
+            }
+
+            if (save == true)
+            {
+                //淇濆瓨璁板綍
+                HdlFileLogic.Current.SaveFileContent(DirNameResourse.DeviceRoomIdFile, this.dicDeviceRoomId);
+
+                //娣诲姞鑷姩澶囦唤
+                HdlAutoBackupLogic.AddOrEditorFile(DirNameResourse.DeviceRoomIdFile);
+            }
+        }
+
+        /// <summary>
+        /// 鑾峰彇鐪熷疄鐗╃悊璁惧鐨勬埧闂村悕瀛�
+        /// </summary>
+        /// <param name="device">璁惧鐨勬煇涓�涓洖璺�</param>
+        /// <returns></returns>
+        public string GeteRealDeviceRoomName(CommonDevice device)
+        {
+            if (this.dicDeviceRoomId.ContainsKey(device.DeviceAddr) == false)
+            {
+                //鏈垎閰嶅尯鍩�
+                return Language.StringByID(R.MyInternationalizationString.uDeviceNotAssignedRoom);
+            }
+            var room = HdlRoomLogic.Current.GetRoomById(this.dicDeviceRoomId[device.DeviceAddr]);
+            return HdlRoomLogic.Current.GetRoomName(room);
+        }
+
+        /// <summary>
+        /// 鑾峰彇鐪熷疄鐗╃悊璁惧灞炰簬鍝釜鎴块棿
+        /// </summary>
+        /// <param name="device">璁惧鐨勬煇涓�涓洖璺�</param>
+        /// <returns></returns>
+        public Room GeteRealDeviceRoom(CommonDevice device)
+        {
+            if (this.dicDeviceRoomId.ContainsKey(device.DeviceAddr) == false)
+            {
+                return null;
+            }
+            return HdlRoomLogic.Current.GetRoomById(this.dicDeviceRoomId[device.DeviceAddr]);
+        }
+
+        /// <summary>
+        /// 灏嗙湡瀹炵墿鐞嗚澶囦粠鎴块棿涓Щ闄�
+        /// </summary>
+        /// <param name="device">闅忎究涓�涓洖璺�</param>
+        public void DeleteRealDeviceFromRoom(CommonDevice device)
+        {
+            //灏嗙湡瀹炵墿鐞嗚澶囦粠鎴块棿涓Щ闄�
+            this.DeleteRealDeviceFromRoom(new List<string>() { device.DeviceAddr });
+        }
+
+        /// <summary>
+        /// 灏嗙湡瀹炵墿鐞嗚澶囦粠鎴块棿涓Щ闄�
+        /// </summary>
+        /// <param name="listMac">璁惧Mac鍦板潃</param>
+        public void DeleteRealDeviceFromRoom(List<string> listMac)
+        {
+            bool save = false;
+            foreach (var deviceMacAddr in listMac)
+            {
+                if (this.dicDeviceRoomId.ContainsKey(deviceMacAddr) == true)
+                {
+                    this.dicDeviceRoomId.Remove(deviceMacAddr);
+                    save = true;
+                }
+            }
+            if (save == false)
+            {
+                //娌℃湁鏀瑰彉,涓嶉渶瑕佷繚瀛�
+                return;
+            }
+            //淇濆瓨璁板綍
+            HdlFileLogic.Current.SaveFileContent(DirNameResourse.DeviceRoomIdFile, this.dicDeviceRoomId);
+
+            //娣诲姞鑷姩澶囦唤
+            HdlAutoBackupLogic.AddOrEditorFile(DirNameResourse.DeviceRoomIdFile);
+        }
+
+        /// <summary>
+        /// 鏍规嵁鎴块棿ID,绉婚櫎鎸囧畾鐨勭湡瀹炵墿鐞嗚澶囩殑鎵�灞炴埧闂磋褰�
+        /// </summary>
+        /// <param name="i_RoomId"></param>
+        public void DeleteRealDeviceByRoomId(string i_RoomId)
+        {
+            var listDeleteKey = new List<string>();
+            foreach (var deviceAddr in this.dicDeviceRoomId.Keys)
+            {
+                if (this.dicDeviceRoomId[deviceAddr] == i_RoomId
+                    && listDeleteKey.Contains(deviceAddr) == false)
+                {
+                    listDeleteKey.Add(deviceAddr);
+                }
+            }
+            //灏嗙湡瀹炵墿鐞嗚澶囦粠鎴块棿涓Щ闄�
+            this.DeleteRealDeviceFromRoom(listDeleteKey);
+        }
+
+        #endregion
+
+        #region 鈻� 鎴块棿鏂规硶___________________________
+
+        /// <summary>
+        /// 璁惧鐨勬埧闂村彉鏇�
+        /// </summary>
+        /// <param name="device">璁惧瀵硅薄</param>
+        /// <param name="roomId">鏂版埧闂碔d</param>
+        /// <param name="saveRealRoom">鏄惁淇敼鐪熷疄鐗╃悊璁惧鐨勬埧闂�,涓嶅嚭鎰忓,杩欎釜鍊奸粯璁や负true鍗冲彲</param>
+        public void ChangedRoom(CommonDevice device, string roomId, bool saveRealRoom = true)
+        {
+            //閫夋嫨鐨勬槸鏈垎閰�
+            if (roomId == string.Empty)
+            {
+                //浠庡師鏉ョ殑鎴块棿绉婚櫎璁惧
+                this.DeleteDevice(device);
+                //绉婚櫎鎴戠殑鍠滅埍
+                this.DeleteLoveDevice(device);
+                //璁惧鏀瑰彉鎴块棿鐨勮瘽,涓婚〉闇�瑕侀噸鏂板埛鏂�
+                UserView.UserPage.Instance.RefreshAllForm = true;
+                return;
+            }
+            //鎴块棿鏄惁淇敼
+            if (this.IsRoomChanged(device, roomId) == false)
+            {
+                return;
+            }
+            //浠庡師鏉ョ殑鎴块棿绉婚櫎璁惧,杩欓噷涓嶅垹闄ょ湡瀹炶澶囩殑鎴块棿
+            this.DeleteDevice(device, false);
+
+            //娣诲姞鍒版柊鐨勬埧闂�
+            var room = this.GetRoomById(roomId);
+            if (room != null)
+            {
+                this.AddDevice(room, device, saveRealRoom);
+            }
+            //璁惧鏀瑰彉鎴块棿鐨勮瘽,涓婚〉闇�瑕侀噸鏂板埛鏂�
+            UserView.UserPage.Instance.RefreshAllForm = true;
+        }
+
+        /// <summary>
+        /// 鎴块棿鍚嶅瓧鏄惁鏈変慨鏀�
+        /// </summary>
+        /// <param name="device">璁惧瀵硅薄</param>
+        /// <param name="roomId">鏂版埧闂碔d</param>
+        /// <returns></returns>
+        public bool IsRoomChanged(CommonDevice device, string roomId)
+        {
+            var room = this.GetRoomByDevice(device);
+            if (room == null || room.Id != roomId)
+            {
+                return true;
+            }
+            return false;
+        }
+
+        #endregion
+
+        #region 鈻� 娣诲姞璁惧___________________________
+
+        /// <summary>
+        /// 娣诲姞璁惧
+        /// </summary>
+        /// <param name="i_room">鎴块棿瀵硅薄</param>
+        /// <param name="device">瑕佹坊鍔犵殑璁惧瀵硅薄</param>
+        /// <param name="saveRealRoom">鏄惁淇敼鐪熷疄鐗╃悊璁惧鐨勬埧闂�,涓嶅嚭鎰忓,杩欎釜鍊奸粯璁や负true鍗冲彲</param>
+        public void AddDevice(Room i_room, CommonDevice device, bool saveRealRoom)
+        {
+            if (device == null)
+            {
+                return;
+            }
+            //璁惧淇℃伅淇濆瓨鍒版湰鍦�
+            device.Save();
+
+            string mainkeys = LocalDevice.Current.GetDeviceMainKeys(device);
+            if (i_room.ListDevice.Contains(mainkeys) == false)
+            {
+                //淇濆瓨鍒版湰鍦�
+                i_room.ListDevice.Add(mainkeys);
+                i_room.Save();
+
+                if (i_room.IsLove == false && saveRealRoom == true && LocalDevice.Current.GetDevicesCountByMac(device.DeviceAddr) == 1)
+                {
+                    //濡傛灉鍙湁涓�涓洖璺�,鍒欎慨鏀圭湡瀹炵墿鐞嗚澶囩殑鎴块棿
+                    this.SaveRealDeviceRoomId(new List<CommonDevice>() { device }, i_room.Id, false);
+                }
+            }
+        }
+
+        /// <summary>
+        /// 娣诲姞鍠滅埍璁惧
+        /// </summary>
+        /// <param name="device">瑕佹坊鍔犵殑璁惧瀵硅薄</param>
+        public void AddLoveDevice(CommonDevice device)
+        {
+            if (device == null)
+            {
+                return;
+            }
+            //鎴戠殑鍠滅埍
+            var loveRoom = this.GetLoveRoom();
+            if (loveRoom != null)
+            {
+                string mainkeys = LocalDevice.Current.GetDeviceMainKeys(device);
+                if (loveRoom.ListDevice.Contains(mainkeys) == false)
+                {
+                    //淇濆瓨鍒版湰鍦�
+                    loveRoom.ListDevice.Add(mainkeys);
+                    loveRoom.Save();
+                    //娣诲姞鏀惰棌璁惧鏃�,闇�瑕佸埛鏂颁富椤�
+                    UserView.UserPage.Instance.RefreshAllForm = true;
+                }
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 鍒犻櫎璁惧___________________________
+
+        /// <summary>
+        /// 鍒犻櫎璁惧(杩欎釜鍑芥暟涓嶅垹闄ゆ垜鐨勫枩鐖�)
+        /// </summary>
+        /// <param name="device">瑕佸垹闄ょ殑璁惧瀵硅薄</param>
+        /// <param name="deleteReal">鏄惁鍒犻櫎鐪熷疄鐗╃悊璁惧鐨勬埧闂�</param>
+        public void DeleteDevice(CommonDevice device, bool deleteReal = true)
+        {
+            if (device == null)
+            {
+                return;
+            }
+            //濡傛灉瀹冨彧鏈変竴涓洖璺�
+            if (deleteReal == true && LocalDevice.Current.GetDevicesCountByMac(device.DeviceAddr) == 1)
+            {
+                //鍒犻櫎鎺夊畠鐨勭湡瀹炵墿鐞嗚澶囩殑鎵�鍦ㄤ綅缃�
+                HdlRoomLogic.Current.DeleteRealDeviceFromRoom(device);
+            }
+
+            //鏍规嵁璁惧锛岃幏鍙栨墍鍦ㄧ殑鎴块棿
+            var room = this.GetRoomByDevice(device);
+            if (room == null)
+            {
+                return;
+            }
+            //绉婚櫎缂撳瓨
+            string mainkeys = LocalDevice.Current.GetDeviceMainKeys(device);
+            room.ListDevice.Remove(mainkeys);
+            room.Save();
+            //鏇存敼鑷姩澶囦唤
+            HdlAutoBackupLogic.AddOrEditorFile(room.FileName);
+
+            //閫掑綊锛氬垹闄ゆ帀浠ュ墠鐨勬棫鏁版嵁瀵艰嚧鐨勫涓埧闂寸殑闂
+            this.DeleteDevice(device, deleteReal);
+        }
+
+        /// <summary>
+        /// 鍒犻櫎鎴戠殑鍠滅埍鐨勮澶�
+        /// </summary>
+        /// <param name="device">瑕佸垹闄ょ殑璁惧瀵硅薄</param>
+        public void DeleteLoveDevice(CommonDevice device)
+        {
+            if (device == null)
+            {
+                return;
+            }
+            //鎴戠殑鍠滅埍
+            var loveRoom = this.GetLoveRoom();
+            if (loveRoom != null)
+            {
+                //绉婚櫎缂撳瓨
+                string mainkeys = LocalDevice.Current.GetDeviceMainKeys(device);
+                loveRoom.ListDevice.Remove(mainkeys);
+                loveRoom.Save();
+                //鏇存敼鑷姩澶囦唤
+                HdlAutoBackupLogic.AddOrEditorFile(loveRoom.FileName);
+                //娣诲姞鏀惰棌璁惧鏃�,闇�瑕佸埛鏂颁富椤�
+                UserView.UserPage.Instance.RefreshAllForm = true;
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 鑾峰彇璁惧___________________________
+
+        /// <summary>
+        /// 鑾峰彇褰撳墠鎴块棿涓嬬殑鍏ㄩ儴璁惧
+        /// </summary>
+        /// <returns></returns>
+        public List<CommonDevice> GetRoomListDevice(Room i_room)
+        {
+            var dicSort = new Dictionary<string, List<int>>();
+            foreach (var mainKeys in i_room.ListDevice)
+            {
+                var device = LocalDevice.Current.GetDevice(mainKeys);
+                if (device != null)
+                {
+                    if (dicSort.ContainsKey(device.DeviceAddr) == false)
+                    {
+                        dicSort[device.DeviceAddr] = new List<int>();
+                    }
+                    dicSort[device.DeviceAddr].Add(device.DeviceEpoint);
+                }
+            }
+            var listDevice = new List<CommonDevice>();
+            foreach (var strMac in dicSort.Keys)
+            {
+                var listEpont = dicSort[strMac];
+                //鎺掑簭
+                listEpont.Sort();
+                for (int i = 0; i < listEpont.Count; i++)
+                {
+                    var device = LocalDevice.Current.GetDevice(strMac, listEpont[i]);
+                    listDevice.Add(device);
+                }
+            }
+            return listDevice;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鎴块棿璁惧绫诲瀷
+        /// </summary>
+        /// <param name="room"></param>
+        /// <returns></returns>
+        public List<DeviceType> GetDeviceTypes(Room i_room)
+        {
+            var typeList = new List<DeviceType>();
+            foreach (var mainKeys in i_room.ListDevice)
+            {
+                var device = LocalDevice.Current.GetDevice(mainKeys);
+                if (device != null)
+                {
+                    typeList.Add(device.Type);
+                }
+            }
+            return typeList;
+        }
+
+        /// <summary>
+        /// 鑾峰彇璇ョ被鍨嬬殑璁惧
+        /// </summary>
+        /// <param name="room"></param>
+        /// <param name="deviceType"></param>
+        /// <returns></returns>
+        public List<CommonDevice> GetRoomListDevice(Room room, DeviceType deviceType)
+        {
+            List<CommonDevice> typeList = new List<CommonDevice>();
+            foreach (var mainKeys in room.ListDevice)
+            {
+                var device = LocalDevice.Current.GetDevice(mainKeys);
+                if (device != null && device.Type == deviceType)
+                {
+                    typeList.Add(device);
+                }
+            }
+
+            return typeList;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏈垎閰嶅尯鍩熻澶�
+        /// </summary>
+        /// <returns></returns>
+        public List<CommonDevice> GetUnalloctedDevice()
+        {
+            var listDevice = new List<CommonDevice>();
+
+            //宸茬粡瀛樺湪鐨勮澶�
+            var listEsxit = new HashSet<string>();
+            foreach (var room in this.dicRooms.Values)
+            {
+                if (room.IsLove == true)
+                {
+                    //涓嶅寘鍚敹钘忔埧闂�
+                    continue;
+                }
+                foreach (string mainkeys in room.ListDevice)
+                {
+                    if (listEsxit.Contains(mainkeys) == false)
+                    {
+                        listEsxit.Add(mainkeys);
+                    }
+                }
+            }
+
+            //鎵�鏈夎澶�
+            var commonDeviceList = LocalDevice.Current.listAllDevice;
+            foreach (var device in commonDeviceList)
+            {
+                //鍒ゆ柇璇ヨ澶囪兘鍚︽樉绀哄湪涓婚〉
+                if (LocalDevice.Current.CanShowInHomeHomeMainPage(device) == false)
+                {
+                    continue;
+                }
+                string mainkeys = LocalDevice.Current.GetDeviceMainKeys(device);
+                if (listEsxit.Contains(mainkeys) == false)
+                {
+                    listDevice.Add(device);
+                }
+            }
+            return listDevice;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍏ㄩ儴鎴块棿鍏ㄩ儴鐨勮澶�
+        /// </summary>
+        /// <returns></returns>
+        public List<CommonDevice> GetAllRoomListDevice()
+        {
+            var listDevice = new List<CommonDevice>();
+            foreach (var room in this.dicRooms.Values)
+            {
+                if (room.IsSharedRoom || room.IsLove)
+                {
+                    continue;
+                }
+                listDevice.AddRange(this.GetRoomListDevice(room));
+            }
+            return listDevice;
+        }
+
+        #endregion
+
+        #region 鈻� 璁惧鏄惁鏀惰棌_______________________
+
+        /// <summary>
+        /// 鏄惁鏄敹钘忚澶�
+        /// </summary>
+        /// <param name="filePath"></param>
+        /// <returns></returns>
+        public bool IsCollectInRoom(CommonDevice device)
+        {
+            string mainkeys = LocalDevice.Current.GetDeviceMainKeys(device);
+            //鍠滅埍鎴块棿
+            var room = this.GetLoveRoom();
+            return room.ListDevice.Contains(mainkeys);
+        }
+
+        /// <summary>
+        /// 鏄惁鏄敹钘忚澶�
+        /// </summary>
+        /// <param name="filePath"></param>
+        /// <returns></returns>
+        public bool IsCollectInRoom(SceneUI scene)
+        {
+            //鍠滅埍鎴块棿
+            var room = this.GetLoveRoom();
+            return room.ListSceneId.Contains(scene.Id);
+        }
+
+        #endregion
+
+        #region 鈻� 妤煎眰鍜屾埧闂撮『搴忕浉鍏砡________________
+
+        /// <summary>
+        /// 鏍规嵁妤煎眰鐨勪富閿幏鍙栨帓搴忓悗鐨勬埧闂村垪琛�(鏀寔鏃犳ゼ灞傛ā寮�,涓嶈幏鍙栨敹钘忔埧闂�)
+        /// </summary>
+        /// <param name="i_floorKeys">妤煎眰鐨勪富閿�</param>
+        /// <param name="getShard">鍒嗕韩鐨勬埧闂存槸鍚︿篃鑾峰彇</param>
+        /// <returns></returns>
+        public List<Room> GetFloorSortRoom(string i_floorKeys, bool getShard = true)
+        {
+            if (i_floorKeys == null)
+            {
+                i_floorKeys = string.Empty;
+            }
+            var listRoom = new List<Room>();
+            foreach (var room in this.dicRooms.Values)
+            {
+                if (room.FloorId != i_floorKeys && i_floorKeys != string.Empty
+                    || room.IsLove == true)
+                {
+                    //涓嶆槸鍚屼竴涓ゼ灞�,涓嶈鎴戠殑鍠滅埍
+                    continue;
+                }
+                if (getShard == false && room.IsSharedRoom == true)
+                {
+                    //涓嶈鍒嗕韩鐨勬埧闂�
+                    continue;
+                }
+                listRoom.Add(room);
+            }
+            return this.SortRoom(listRoom);
+        }
+
+        /// <summary>
+        /// 鎺掑簭鎴块棿瀵硅薄
+        /// </summary>
+        /// <param name="listRoom"></param>
+        /// <returns></returns>
+        public List<Room> SortRoom(List<Room> listRoom)
+        {
+            //浠庝竴鍫嗘枃瀛椾腑,鑾峰彇杩欎竴鍫嗘枃瀛楅噷闈㈡暟瀛楀瓧绗︿覆鐨勬渶闀块暱搴�
+            var listName = new List<string>();
+            foreach (var room in listRoom)
+            {
+                listName.Add(room.Name);
+            }
+            int numberLength = this.GetNumberMaxLength(listName);
+
+            var listSort = new List<string[]>();
+            foreach (var room in listRoom)
+            {
+                var strArry = new string[2];
+                strArry[0] = room.Id;
+                strArry[1] = string.Empty;
+
+                string value = string.Empty;
+                foreach (var c in room.Name)
+                {
+                    if (char.IsNumber(c) == true)
+                    {
+                        //鏁板瓧
+                        value += c.ToString();
+                        continue;
+                    }
+                    else if (value != string.Empty)
+                    {
+                        //濡傛灉鎴块棿鍚嶅瓧甯︽湁鏁板瓧鐨勮瘽,鍒欏乏杈瑰姞闆�,鍥犱负杩欓噷鏈変釜鎺掑簭鐨勯棶棰�
+                        strArry[1] += value.PadLeft(numberLength, '0');
+                        value = string.Empty;
+                    }
+                    strArry[1] += c.ToString();
+                }
+                if (value != string.Empty)
+                {
+                    //浠ユ暟瀛楃粨灏剧殑璇�
+                    strArry[1] += value.PadLeft(numberLength, '0');
+                }
+                listSort.Add(strArry);
+            }
+            //鎺掑簭
+            listSort.Sort((obj1, obj2) =>
+            {
+                if (obj1[1].CompareTo(obj2[1]) > 0)
+                {
+                    return 1;
+                }
+                return -1;
+            });
+            var listSortRoom = new List<Room>();
+            foreach (var strArry in listSort)
+            {
+                var room = this.GetRoomById(strArry[0]);
+                listSortRoom.Add(room);
+            }
+            return listSortRoom;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鎺掑簭鍚庣殑妤煎眰
+        /// </summary>
+        /// <returns></returns>
+        public Dictionary<string, string> GetFloorSortList()
+        {
+            //娌℃湁妤煎眰
+            if (Config.Instance.Home.FloorDics.Count == 0)
+            {
+                return new Dictionary<string, string>();
+            }
+            //浠庝竴鍫嗘枃瀛椾腑,鑾峰彇杩欎竴鍫嗘枃瀛楅噷闈㈡暟瀛楀瓧绗︿覆鐨勬渶闀块暱搴�
+            var listName = new List<string>();
+            foreach (var floorName in Config.Instance.Home.FloorDics.Values)
+            {
+                listName.Add(floorName);
+            }
+            int numberLength = this.GetNumberMaxLength(listName);
+
+            var listSort = new List<string[]>();
+            foreach (var floorId in Config.Instance.Home.FloorDics.Keys)
+            {
+                var strArry = new string[2];
+                strArry[0] = floorId;
+                strArry[1] = string.Empty;
+
+                string value = string.Empty;
+                string floorName = Config.Instance.Home.FloorDics[floorId];
+                foreach (var c in floorName)
+                {
+                    if (char.IsNumber(c) == true)
+                    {
+                        //鏁板瓧
+                        value += c.ToString();
+                        continue;
+                    }
+                    else if (value != string.Empty)
+                    {
+                        //濡傛灉鎴块棿鍚嶅瓧甯︽湁鏁板瓧鐨勮瘽,鍒欏乏杈瑰姞闆�,鍥犱负杩欓噷鏈変釜鎺掑簭鐨勯棶棰�
+                        strArry[1] += value.PadLeft(numberLength, '0');
+                        value = string.Empty;
+                    }
+                    strArry[1] += c.ToString();
+                }
+                if (value != string.Empty)
+                {
+                    //浠ユ暟瀛楃粨灏剧殑璇�
+                    strArry[1] += value.PadLeft(numberLength, '0');
+                }
+                listSort.Add(strArry);
+            }
+            //妤煎眰鎺掑簭
+            listSort.Sort((obj1, obj2) =>
+            {
+                if (obj1[1].CompareTo(obj2[1]) > 0)
+                {
+                    return 1;
+                }
+                return -1;
+            });
+            var dic = new Dictionary<string, string>();
+            foreach (var strArry in listSort)
+            {
+                dic[strArry[0]] = Config.Instance.Home.FloorDics[strArry[0]];
+            }
+            return dic;
+        }
+
+        #endregion
+
+        #region 鈻� 鍙戦�佹埧闂翠俊鎭粰缃戝叧_________________
+
+        /// <summary>
+        /// 鍙戦�佹埧闂翠俊鎭粰缃戝叧
+        /// </summary>
+        public void SetRoomInfoToGateway()
+        {
+            if (UserCenterResourse.UserInfo.AuthorityNo != 1 && UserCenterResourse.UserInfo.AuthorityNo != 2)
+            {
+                //涓嶆槸涓讳汉鍜岀鐞嗗憳,鍒欎笉澶勭悊
+                return;
+            }
+            var realMain = ZbGateway.MainGateWay;
+            if (realMain == null || Common.Config.Instance.Home.IsVirtually == true)
+            {
+                //娌℃湁涓荤綉鍏�,鍒欎笉鐞�
+                return;
+            }
+            //鑾峰彇鎴块棿鍏ㄩ儴鐨勮澶囧璞�
+            string strSendDeviceRoomInfo = string.Empty;
+            foreach (var room in this.dicRooms.Values)
+            {
+                if (room.IsSharedRoom || room.IsLove)
+                {
+                    continue;
+                }
+                var listDevice = this.GetRoomListDevice(room);
+                //鍙戦�佺粰缃戝叧鐨勮澶囨埧闂磈son
+                foreach (var device in listDevice)
+                {
+                    if (strSendDeviceRoomInfo != string.Empty)
+                    {
+                        strSendDeviceRoomInfo += "\r\n";
+                    }
+                    strSendDeviceRoomInfo += " " + this.SetDoublMark(device.DeviceAddr) + " ";
+                    strSendDeviceRoomInfo += this.SetDoublMark("0x" + Convert.ToString(device.DeviceEpoint, 16).PadLeft(2, '0')) + " ";
+                    strSendDeviceRoomInfo += this.SetDoublMark(LocalDevice.Current.GetDeviceEpointName(device).Replace(UserCenterResourse.douMarks, string.Empty)) + " ";
+                    strSendDeviceRoomInfo += this.SetDoublMark(room.Id);
+                }
+            }
+
+            var listAreaSpaceInfo = new List<AreaSpaceInfo>();
+            //棣栧厛娣诲姞浣忓畢
+            var houseInfo = new AreaSpaceInfo();
+            houseInfo.name = Common.Config.Instance.Home.Name;
+            houseInfo.uid = Common.Config.Instance.Home.Id;
+            houseInfo.parentId = null;
+            listAreaSpaceInfo.Add(houseInfo);
+            //鐒跺悗娣诲姞妤煎眰
+            foreach (var floorId in Common.Config.Instance.Home.FloorDics.Keys)
+            {
+                var floorInfo = new AreaSpaceInfo();
+                floorInfo.name = Common.Config.Instance.Home.FloorDics[floorId];
+                floorInfo.uid = floorId;
+                floorInfo.parentId = Common.Config.Instance.Home.Id;
+                listAreaSpaceInfo.Add(floorInfo);
+            }
+            //鐒跺悗娣诲姞鎴块棿
+            var listRoom = this.GetAllListRooms();
+            foreach (var room in listRoom)
+            {
+                if (room.IsLove == true) { continue; }
+
+                var roomInfo = new AreaSpaceInfo();
+                roomInfo.name = room.Name;
+                roomInfo.uid = room.Id;
+                if (Common.Config.Instance.Home.FloorDics.ContainsKey(room.FloorId) == true)
+                {
+                    roomInfo.parentId = room.FloorId;
+                }
+                else
+                {
+                    roomInfo.parentId = Common.Config.Instance.Home.Id;
+                }
+                listAreaSpaceInfo.Add(roomInfo);
+            }
+            //鐒跺悗娣诲姞缃戝叧鎴块棿淇℃伅
+            var gatewayInfo = new GatewayAreaSpaceInfo();
+
+            var loaclGateway = HdlGatewayLogic.Current.GetLocalGateway(realMain.GwId);
+            if (loaclGateway == null || loaclGateway.GwMac == string.Empty)
+            {
+                //娌℃湁mac,鎴栬�呮壘涓嶅埌瀵硅薄,鍒欎笉涓婁紶
+                return;
+            }
+            string gwMac = loaclGateway.GwMac.Replace(":", string.Empty);
+            gatewayInfo.uid = "000101" + gwMac.Substring(2) + "07";
+            gatewayInfo.name = HdlGatewayLogic.Current.GetGatewayName(loaclGateway);
+
+            var roomGateway = HdlRoomLogic.Current.GetRoomByGateway(loaclGateway);
+            if (roomGateway != null)
+            {
+                gatewayInfo.parentId = roomGateway.Id;
+            }
+            gatewayInfo.hwInfo = new GatewayHwInfo();
+            gatewayInfo.pkgInfo = new GatewayPkgInfo { version = loaclGateway.LinuxFirmwareVersion.ToString() };
+            gatewayInfo.swInfo = new List<GatewaySwInfo> { new GatewaySwInfo { ver = loaclGateway.LinuxFirmwareVersion.ToString() } };
+            gatewayInfo.ip = loaclGateway.GwIP;
+            gatewayInfo.mac = loaclGateway.GwMac;
+
+            var data = new { spaces = listAreaSpaceInfo, gateway = gatewayInfo };
+            string strSendRoomInfo = Newtonsoft.Json.JsonConvert.SerializeObject(data);
+
+            HdlThreadLogic.Current.RunThread(async () =>
+            {
+                //鍙戦�佽澶囧尯鍩熶俊鎭�
+                if (strSendDeviceRoomInfo != string.Empty)
+                {
+                    //鍒涘缓鏂囦欢瀵硅薄
+                    var result0 = await realMain.CreateFileAsync("DeviceRoomInfo.json");
+                    if (result0 == null)
+                    {
+                        return;
+                    }
+                    if (result0.Result != 0 && result0.Result != 2)
+                    {
+                        //濡傛灉鏄�2,鍏佽涓婁紶
+                        return;
+                    }
+                    //鍙戦�佹暟鎹祦
+                    var byteData = ASCIIEncoding.UTF8.GetBytes(strSendDeviceRoomInfo);
+                    var result1 = await realMain.SendFileAsync(byteData);
+                    if (result1 == null || result1.Result != 0)
+                    {
+                        return;
+                    }
+
+                }
+
+                //鍒涘缓鏂囦欢瀵硅薄
+                var result3 = await realMain.CreateFileAsync("space.json");
+                if (result3 == null)
+                {
+                    return;
+                }
+                if (result3.Result != 0 && result3.Result != 2)
+                {
+                    //濡傛灉鏄�2,鍏佽涓婁紶
+                    return;
+                }
+
+                //鍙戦�佸尯鍩熶俊鎭�
+                var byteData2 = ASCIIEncoding.UTF8.GetBytes(strSendRoomInfo);
+                var result4 = await realMain.SendFileAsync(byteData2);
+            });
+        }
+
+        /// <summary>
+        /// 璁剧疆鍙屽紩鍙�
+        /// </summary>
+        /// <param name="i_text"></param>
+        /// <returns></returns>
+        private string SetDoublMark(string i_text)
+        {
+            return UserCenterResourse.douMarks + i_text + UserCenterResourse.douMarks;
+        }
+
+        /// <summary>
+        /// 绌洪棿鍖哄煙淇℃伅
+        /// </summary>
+        private class AreaSpaceInfo
+        {
+            /// <summary>
+            /// 浣忓畢ID 鎴栬�� 妤煎眰ID 鎴栬�� 鎴块棿ID
+            /// </summary>
+            public string uid = string.Empty;
+            /// <summary>
+            /// 浣忓畢鍚嶇О 鎴栬�� 妤煎眰鍚嶇О 鎴栬�� 鎴块棿鍚嶇О
+            /// </summary>
+            public string name = string.Empty;
+            /// <summary>
+            /// 褰撳墠ID鐨勭埗ID,濡傛灉娌℃湁,鍒欎负甯﹀弻寮曞彿鐨�"null" 姣斿 妤煎眰ID灏卞~浣忓畢ID  鎴块棿ID灏卞~妤煎眰ID
+            /// </summary>
+            public string parentId = string.Empty;
+        }
+
+        /// <summary>
+        /// 缃戝叧绌洪棿鍖哄煙淇℃伅
+        /// </summary>
+        private class GatewayAreaSpaceInfo
+        {
+            /// <summary>
+            /// 銆�000101銆�+缁戝畾缃戝叧鐨勬椂闂存埑杞�16杩涘埗+銆�07銆�
+            /// </summary>
+            public string uid = string.Empty;
+            /// <summary>
+            /// 杩欎釜鍥哄畾
+            /// </summary>
+            public string name = "hdl_bus_gatway";
+            /// <summary>
+            /// 缃戝叧鎵�鍦ㄧ殑鎴块棿ID
+            /// </summary>
+            public string parentId = string.Empty;
+            /// <summary>
+            /// 杩欎釜鍥哄畾
+            /// </summary>
+            public int deviceType = 61184;
+            /// <summary>
+            /// 缃戝叧纭欢淇℃伅
+            /// </summary>
+            public GatewayHwInfo hwInfo = null;
+            /// <summary>
+            /// 缃戝叧鏍囧噯淇℃伅
+            /// </summary>
+            public GatewayPkgInfo pkgInfo = null;
+            /// <summary>
+            /// 缃戝叧鍥轰欢鐗堟湰
+            /// </summary>
+            public List<GatewaySwInfo> swInfo = null;
+            /// <summary>
+            /// 缃戝叧IP
+            /// </summary>
+            public string ip = string.Empty;
+            /// <summary>
+            /// 缃戝叧鐨凪ac
+            /// </summary>
+            public string mac = string.Empty;
+        }
+
+        /// <summary>
+        /// 缃戝叧纭欢淇℃伅
+        /// </summary>
+        private class GatewayHwInfo
+        {
+            /// <summary>
+            /// 杩欎釜鍥哄畾
+            /// </summary>
+            public string brand = "MIPS";
+            /// <summary>
+            /// 杩欎釜鍥哄畾
+            /// </summary>
+            public string model = "MT7688";
+        }
+
+        /// <summary>
+        /// 缃戝叧鏍囧噯淇℃伅
+        /// </summary>
+        private class GatewayPkgInfo
+        {
+            /// <summary>
+            /// 杩欎釜鏄疞inux鐨勫浐浠剁増鏈�
+            /// </summary>
+            public string version = string.Empty;
+        }
+
+        /// <summary>
+        /// 缃戝叧鍥轰欢鐗堟湰
+        /// </summary>
+        private class GatewaySwInfo
+        {
+            /// <summary>
+            /// 杩欎釜鍥哄畾
+            /// </summary>
+            public string name = "HDL";
+            /// <summary>
+            /// 杩欎釜鏄疞inux鐨勫浐浠剁増鏈�
+            /// </summary>
+            public string ver = string.Empty;
+        }
+
+        #endregion
+
+        #region 鈻� 鍏嬮殕鎴块棿瀵硅薄_______________________
+
+        /// <summary>
+        /// 鍏嬮殕鎴块棿瀵硅薄
+        /// </summary>
+        /// <returns></returns>
+        public Room CloneRoomClass(Room i_room)
+        {
+            var newRoom = new Room();
+            //鍏嬮殕灞炴��
+            newRoom.Id = i_room.Id;
+            newRoom.FloorId = i_room.FloorId;
+            newRoom.TemperatrueDevice = i_room.TemperatrueDevice;
+            newRoom.HumidityDevice = i_room.HumidityDevice;
+            newRoom.Name = i_room.Name;
+            newRoom.BackgroundImage = i_room.BackgroundImage;
+            newRoom.BackgroundImageType = i_room.BackgroundImageType;
+
+            return newRoom;
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 鑾峰彇鎴块棿鎬绘暟
+        /// </summary>
+        /// <returns></returns>
+        public int GetRoomCount()
+        {
+            return this.dicRooms.Count;
+        }
+
+        /// <summary>
+        /// 妫�娴嬫垜鐨勫枩鐖辫繖涓埧闂村璞�
+        /// </summary>
+        private void CheckLoveRoom()
+        {
+            if (this.dicRooms.ContainsKey("Favorite") == true)
+            {
+                return;
+            }
+            //璇诲彇鏈湴鎴戠殑鍠滅埍鏂囦欢
+            string favoriteFile = System.IO.Path.Combine(Common.Config.Instance.FullPath, "Room_Favorite.json");
+            var fileContent = HdlFileLogic.Current.ReadFileTextContent(favoriteFile);
+            if (fileContent != null)
+            {
+                var love = Newtonsoft.Json.JsonConvert.DeserializeObject<Room>(fileContent);
+                this.dicRooms["Favorite"] = love;
+            }
+            else
+            {
+                //榛樿娣诲姞鍠滅埍鐨勬埧闂�--绂佹淇敼鎴块棿鍚�
+                var love = new Room { Name = Language.StringByID(R.MyInternationalizationString.Favorite), BackgroundImage = "RoomIcon/0.jpg", Id = "Favorite" };
+                love.Save(false);
+                this.dicRooms["Favorite"] = love;
+            }
+        }
+
+        /// <summary>
+        /// 浠庝竴鍫嗘枃瀛椾腑,鑾峰彇杩欎竴鍫嗘枃瀛楅噷闈㈡暟瀛楀瓧绗︿覆鐨勬渶闀块暱搴�
+        /// </summary>
+        /// <param name="listText"></param>
+        /// <returns></returns>
+        private int GetNumberMaxLength(List<string> listText)
+        {
+            int maxLength = 0;
+            foreach (var text in listText)
+            {
+                string value = string.Empty;
+                foreach (var c in text)
+                {
+                    if (char.IsNumber(c) == true)
+                    {
+                        //鏁板瓧
+                        value += c.ToString();
+                        continue;
+                    }
+                    else if (value != string.Empty)
+                    {
+                        //鍒ゆ柇鏁板瓧闀垮害
+                        if (maxLength <= value.Length)
+                        {
+                            maxLength = value.Length;
+                        }
+                        value = string.Empty;
+                    }
+                }
+                //鍒ゆ柇鏁板瓧闀垮害
+                if (maxLength <= value.Length)
+                {
+                    maxLength = value.Length;
+                }
+            }
+            return maxLength;
+        }
+
+        #endregion
+    }
+}

--
Gitblit v1.8.0