From 6fa9d69da922c8049f5acfcbb9ce9fd26811024c Mon Sep 17 00:00:00 2001
From: xm <1271024303@qq.com>
Date: 星期四, 16 四月 2020 17:10:57 +0800
Subject: [PATCH] 请合并代码

---
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs | 1112 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 1,112 insertions(+), 0 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs
new file mode 100644
index 0000000..798ab93
--- /dev/null
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs
@@ -0,0 +1,1112 @@
+锘縰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?.ShowForm();
+            });
+        }
+
+        /// <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>
+        public void AddRoom(Room room)
+        {
+            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);
+            //鍒锋柊鎴块棿瑙嗗浘鍒楄〃
+            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);
+                return;
+            }
+            //鎴块棿鏄惁淇敼
+            if (this.IsRoomChanged(device, roomId) == false)
+            {
+                return;
+            }
+            //浠庡師鏉ョ殑鎴块棿绉婚櫎璁惧
+            this.DeleteDevice(device);
+
+            //娣诲姞鍒版柊鐨勬埧闂�
+            var room = this.GetRoomById(roomId);
+            if (room != null)
+            {
+                this.AddDevice(room, device, saveRealRoom);
+            }
+        }
+
+        /// <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)
+        {
+            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 != null)
+                {
+                    if (listFloorSort.Contains(keys) == false)
+                    {
+                        //鏂版坊鍔犵殑妤煎眰
+                        listFloorSort.Add(keys);
+                    }
+                }
+            }
+
+            var dic = new Dictionary<string, string>();
+            if (listFloorSort != null)
+            {
+                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
+    }
+}

--
Gitblit v1.8.0