From 66a9965c44ecc32a6696abca876ab9d1cd091584 Mon Sep 17 00:00:00 2001
From: gxc <guoxuecheng@guoxuechengdeMacBook-Pro.local>
Date: 星期五, 28 二月 2020 15:25:13 +0800
Subject: [PATCH] 2020.2.28

---
 ZigbeeApp/Shared/Common/Room.cs | 1241 +++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 907 insertions(+), 334 deletions(-)

diff --git a/ZigbeeApp/Shared/Common/Room.cs b/ZigbeeApp/Shared/Common/Room.cs
index f14649b..e5c8d07 100644
--- a/ZigbeeApp/Shared/Common/Room.cs
+++ b/ZigbeeApp/Shared/Common/Room.cs
@@ -27,20 +27,33 @@
                 return $"Room_{Id}.json";
             }
         }
-
         /// <summary>
         /// 鎴块棿id--浣跨敤guid
         /// Guid.NewGuid().ToString()
         /// </summary>
         public string Id = Guid.NewGuid().ToString();
-
+        /// <summary>
+        /// 妤煎眰Id
+        /// 鏂板鏃朵娇鐢℅uid
+        /// </summary>
+        public string FloorId = string.Empty;
+        /// <summary>
+        /// 妤煎眰鍚嶇О
+        /// </summary>
+        public string FloorName
+        {
+            get
+            {
+               return Config.Instance.Home.GetFloorNameById(FloorId);
+            }
+        }
         /// <summary>
         /// 鎴块棿鍚�
         /// </summary>
         public string Name = string.Empty;
 
         /// <summary>
-        /// 鎴块棿鐨勬椂鍊欒儗鏅浘
+        /// 鎴块棿鑳屾櫙鍥�
         /// </summary>
         public string BackgroundImage = string.Empty;
 
@@ -54,10 +67,44 @@
         /// </summary>
         public Dictionary<string, string> FloorList = new Dictionary<string, string> { };
 
+        /// <summary>
+        /// 娓╁害浼犳劅鍣�(璁惧涓婚敭)
+        /// </summary>
+        public string TemperatrueDevice = string.Empty;
+        /// <summary>
+        /// 婀垮害浼犳劅鍣�(璁惧涓婚敭)
+        /// </summary>
+        public string HumidityDevice = string.Empty;
+        /// <summary>
+        /// 娓╁害
+        /// </summary>
+        public decimal Temperatrue;
+        /// <summary>
+        /// 婀垮害
+        /// </summary>
+        public decimal Humidity;
+
+        /// <summary>
+        /// 褰撳墠閫夋嫨鐨勬埧闂�
+        /// </summary>
+        private static Room m_CurrentRoom = null;
         /// <summary>
         /// 褰撳墠閫夋嫨鐨勬埧闂�
         /// </summary>
-        public static Room CurrentRoom;
+        [Newtonsoft.Json.JsonIgnore]
+        public static Room CurrentRoom
+        {
+            get
+            {
+                if (m_CurrentRoom == null && Lists.Count > 0)
+                {
+                    if (m_CurrentRoom == null) { m_CurrentRoom = Lists[0]; }
+                    return Lists[0];
+                }
+                return m_CurrentRoom;
+            }
+            set { m_CurrentRoom = value; }
+        }
 
         /// <summary>
         /// 鎴块棿閲屾墍鏈夌殑璁惧鍒楄〃
@@ -70,6 +117,11 @@
         public readonly List<string> DeviceUIFilePathList = new List<string>();
 
         /// <summary>
+        /// 鍠滅埍鎴块棿id
+        /// </summary>
+        public const string LoveRoomId= "Favorite";
+
+        /// <summary>
         /// 鏄惁鏄粯璁ゅ枩鐖辨埧闂�
         /// </summary>
         /// <value><c>true</c> if is love; otherwise, <c>false</c>.</value>
@@ -78,7 +130,7 @@
         {
             get
             {
-                return Id == "Favorite";
+                return Id == LoveRoomId;
             }
         }
 
@@ -87,12 +139,6 @@
         /// 娉細鍒嗕韩杩囨潵鐨勬埧闂翠笉鑳藉垹闄わ紝涓嶈兘缂栬緫璇ユ埧闂达紝涓嶈兘瀵硅澶囷紙鍔熻兘锛夈�佸満鏅繘琛屽鍒犳敼
         /// </summary>
         public bool IsSharedRoom = false;
-
-        /// <summary>
-        /// 鏄惁鍙互鍒锋柊鎴块棿鏁版嵁浜�
-        /// 闇�瑕佺瓑鍒濆鍖栨湰鍦拌澶囨暟鎹悗鍦ㄥ彲浠ュ垵濮嬪寲鎴块棿鏁版嵁
-        /// </summary>
-        public static bool canInitAllRoom;
 
         /// <summary>
         /// 鑾峰彇鍠滅埍鎴块棿鐨勬墍鏈夎澶囪矾寰�
@@ -107,18 +153,34 @@
                 {
                     return new List<string> { };
                 }
-                var loveRoom = Lists[0];
-                return loveRoom.DeviceUIFilePathList;
+                return CurrentRoom.GetLoveRoom().DeviceUIFilePathList;
             }
         }
 
         /// <summary>
         /// 鎵�鏈夋埧闂寸殑鎵�鏈夎澶囩被鍨�
-        /// 鍏堣皟鐢� GetAllRoomDeviceTypeList()
         /// </summary>
         /// <value>All room device type list.</value>
         [Newtonsoft.Json.JsonIgnore]
-        public static List<DeviceType> AllRoomDeviceTypeList = new List<DeviceType> { };
+        public static List<DeviceType> AllRoomDeviceTypeList
+        {
+            get
+            {
+                var typeList = new List<DeviceType> { };
+                foreach (var deviceUI in AllRoomDeviceUIList)
+                {
+                    if (deviceUI == null || deviceUI.CommonDevice == null)
+                    {
+                        continue;
+                    }
+                    if (!typeList.Contains(deviceUI.CommonDevice.Type))
+                    {
+                        typeList.Add(deviceUI.CommonDevice.Type);
+                    }
+                }
+                return typeList;
+            }
+        }
 
         /// <summary>
         /// 鑾峰彇鎵�鏈夋埧闂寸殑鎵�鏈夊満鏅�
@@ -132,6 +194,10 @@
                 var sceneList = new List<SceneUI> { };
                 foreach (var r in Shared.Common.Room.Lists)
                 {
+                    if(r.IsLove)
+                    {
+                        continue;
+                    }
                     if (r.SceneUIList.Count == 0)
                     {
                         continue;
@@ -148,6 +214,37 @@
                 return sceneList;
             }
         }
+
+        /// <summary>
+        /// 鑾峰彇鎵�鏈夋埧闂寸殑鎵�鏈夊満鏅矾寰�
+        /// </summary>
+        /// <value>All room scene UIL ist.</value>
+        [Newtonsoft.Json.JsonIgnore]
+        public  List<string> AllRoomSceneUIFilepathList
+        {
+            get
+            {
+                var pathList = new List<string> { };
+                foreach (var r in Lists)
+                {
+                    if(r.IsLove)
+                    {
+                        continue;
+                    }
+
+                    if (r.SceneUIFilePathList.Count == 0)
+                    {
+                        continue;
+                    }
+                    foreach (var path in r.SceneUIFilePathList)
+                    {
+                        pathList.Add(path);
+                    }
+                }
+                return pathList;
+            }
+        }
+
         /// <summary>
         /// 鍦烘櫙鍒楄〃---涓嶅啀搴忓垪鍖�
         /// </summary>
@@ -165,11 +262,41 @@
 
         /// <summary>
         /// 鑾峰彇鎵�鏈夋埧闂寸殑鎵�鏈夎澶�
-        /// 璇峰厛璋冪敤 GetAllRoomDeviceUIList()鏂规硶
         /// </summary>
         /// <value>All room device UIL ist.</value>
         [Newtonsoft.Json.JsonIgnore]
-        public static List<DeviceUI> AllRoomDeviceUIList = new List<DeviceUI> { };
+        public static List<DeviceUI> AllRoomDeviceUIList
+        {
+            get
+            {
+                List<DeviceUI> deviceList = new List<DeviceUI>();
+                for (int i = 0; i < Lists.Count; i++)
+                {
+                    var room = Lists[i];
+                    if (room.IsSharedRoom || room.IsLove)
+                    {
+                        continue;
+                    }
+                    if (room.DeviceUIList.Count == 0)
+                    {
+                        continue;
+                    }
+                    for (int j = 0; j < room.DeviceUIList.Count; j++)
+                    {
+                        var device = room.DeviceUIList[j];
+                        if (device == null || device.CommonDevice == null)
+                        {
+                            continue;
+                        }
+                        if (deviceList.Find((obj) => obj.FileName == device.FileName) == null)
+                        {
+                            deviceList.Add(device);
+                        }
+                    }
+                }
+                return deviceList;
+            }
+        }
 
         #endregion
 
@@ -193,43 +320,46 @@
         /// </summary>
         public static void InitAllRoom()
         {
-            if (canInitAllRoom == false)
-            {
-                return;
-            }
             Lists.Clear();
             if (Config.Instance.Home.RoomFilePathList.Contains("Room_Favorite.json") == false)
             {
                 //榛樿娣诲姞鍠滅埍鐨勬埧闂�--绂佹淇敼鎴块棿鍚�
-                var love = new Room { Name = Language.StringByID(R.MyInternationalizationString.Favorite), BackgroundImage = "Room/r0.png", Id = "Favorite" };
-                love.Save(true);
+                var love = new Room { Name = Language.StringByID(R.MyInternationalizationString.Favorite), BackgroundImage = "RoomIcon/0.JPG", Id = LoveRoomId };
+                love.Save(false);
                 //娣诲姞鍒癶ouse 鎴块棿璺緞鍒楄〃
                 var currentHome = Config.Instance.Home;
                 currentHome.RoomFilePathList.Insert(0, love.FileName);
-                currentHome.Save();
+                currentHome.Save(false);
             }
             foreach (var roomFilePath in Config.Instance.Home.RoomFilePathList)
             {
                 var room = GetRoomByFilePath(roomFilePath);
-                System.Console.WriteLine(roomFilePath);
-                System.Console.WriteLine(room?.FileName);
-                System.Console.WriteLine(room?.Name);
 
                 if (null != room)
                 {
                     if (room.IsSharedRoom)
                     {
-                        var sharedName = $"{room.Name}({Language.StringByID(R.MyInternationalizationString.Shared)})";
-                        if (Lists.Find((obj) => obj.Name == sharedName) == null)
-                        {
-
-                        }
-                        room.Name = $"{room.Name}({Language.StringByID(R.MyInternationalizationString.Shared)})";
-                        room.Save();
+                        room.Name = $"{room.Name}";
                     }
                     Lists.Add(room);
+
                 }
             }
+
+            Config.Instance.Home.InitFloor();
+
+            CurrentRoom.RefreshRoomListView();
+        }
+
+        /// <summary>
+        /// 鍒锋柊鎴块棿瑙嗗浘鍒楄〃
+        /// </summary>
+        public void RefreshRoomListView()
+        {
+            Application.RunOnMainThread(() =>
+            {
+                Phone.Device.Room.RoomManagement.Instance.Show();
+            });
         }
 
         /// <summary>
@@ -237,7 +367,6 @@
         /// </summary>
         public static void RefreshAllRoomByLocation()
         {
-            Lists.Clear();
             var homeTemp = Config.Instance.Home;
             homeTemp.RoomFilePathList.Clear();
 
@@ -248,19 +377,48 @@
             if (listFile.Contains(fRoom) == true)
             {
                 listFile.Remove(fRoom);
-                homeTemp.AddRoomListFilePath(fRoom);
+                homeTemp.RoomFilePathList.Add(fRoom);
             }
 
+            var listRoomFile = new List<string>();
             foreach (string fileName in listFile)
             {
                 if (fileName.StartsWith("Room_"))
                 {
-                    homeTemp.AddRoomListFilePath(fileName);
+                    homeTemp.RoomFilePathList.Add(fileName);
+                    listRoomFile.Add(fileName);
                 }
             }
+            //妫�娴嬫ゼ灞傛暟鎹殑鍚堟硶鎬�
+            CheckFloorData(listRoomFile);
+
             homeTemp.Save(false);
-            canInitAllRoom = true;
             InitAllRoom();
+        }
+
+        /// <summary>
+        /// 妫�娴嬫ゼ灞傛暟鎹殑鍚堟硶鎬�
+        /// </summary>
+        /// <param name="listRoomFile"></param>
+        private static void CheckFloorData(List<string> listRoomFile)
+        {
+            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); }
+            }
         }
 
         #endregion
@@ -290,6 +448,7 @@
             }
             Save();
             HdlAutoBackupLogic.AddOrEditorFile(room.FileName);
+            CurrentRoom.RefreshRoomListView();
             return true;
         }
 
@@ -310,8 +469,33 @@
             //鍒犻櫎鏉ヨ嚜鎷嶇収鎴栬�呯郴缁熷浘搴撶殑鎴块棿鑳屾櫙鍥剧墖
             if (room.BackgroundImageType == 1 || room.BackgroundImageType == 2)
             {
-                DeleteBackGroundIamageFilebyHomeId(room.BackgroundImage);
+                //鍒犻櫎鎺夊師鏉ョ殑鑷畾涔夊浘鐗�
+                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.DeviceUIFilePathList.Count; i++)
+                {
+                    loveRoom.DeviceUIFilePathList.Remove(room.DeviceUIFilePathList[i]);
+                    loveRoom.DeviceUIList.RemoveAll((obj) => { return room.DeviceUIFilePathList[i] == obj.FileName; });
+                }
+                //绉婚櫎鎴戠殑鍠滅埍閲岄潰鐨勫満鏅�
+                for (int i = 0; i < room.SceneUIFilePathList.Count; i++)
+                {
+                    loveRoom.SceneUIFilePathList.Remove(room.SceneUIFilePathList[i]);
+                    loveRoom.SceneUIList.RemoveAll((obj) => { return room.SceneUIFilePathList[i] == obj.FileName; });
+                }
+                loveRoom.Save(false);
+            }
+
             if (Global.IsExistsByHomeId(roomFilePath) == false)
             {
                 return false;
@@ -321,12 +505,24 @@
             Global.DeleteFilebyHomeId(roomFilePath);
             Lists.Remove(room);
             HdlAutoBackupLogic.DeleteFile(roomFilePath);
+
+            CurrentRoom.RefreshRoomListView();
+
             return true;
         }
 
         #endregion
 
         #region 鈼� 鑾峰彇鎴块棿________________________
+
+        /// <summary>
+        /// 鑾峰彇鍠滅埍鎴块棿
+        /// </summary>
+        /// <returns></returns>
+        public Room GetLoveRoom()
+        {
+            return CurrentRoom.GetRoomById(LoveRoomId);
+        }
 
         /// <summary>
         /// 閫氳繃璺緞鑾峰彇鎴块棿
@@ -427,6 +623,20 @@
         }
 
         /// <summary>
+        /// 鏍规嵁鎴块棿Id锛岃幏鍙栨埧闂村璞�
+        /// </summary>
+        /// <returns>The room by name.</returns>
+        /// <param name="roomId">鎴块棿ID</param>
+        public Room GetRoomById(string roomId)
+        {
+            if (string.IsNullOrEmpty(roomId))
+            {
+                return null;
+            }
+            return Lists.Find((obj) => obj.Id == roomId);
+        }
+
+        /// <summary>
         /// 鏍规嵁鎴块棿鍚嶅瓧锛岃幏鍙栨埧闂村璞�
         /// </summary>
         /// <returns>The room by name.</returns>
@@ -437,59 +647,35 @@
         }
 
         /// <summary>
-        /// 鏍规嵁璁惧鑾峰彇鎴块棿鍚嶅瓧
-        /// </summary>
-        /// <returns>鎴块棿鍚�</returns>
-        /// <param name="device">璁惧瀵硅薄</param>
-        public List<string> GetRoomListNameByDevice(CommonDevice device)
-        {
-            var listName = new List<string>();
-            var listroom = this.GetRoomByDevice(device);
-            foreach (var room in listroom)
-            {
-                listName.Add(room.Name);
-            }
-
-            return listName;
-        }
-
-        /// <summary>
-        /// 鏍规嵁璁惧鑾峰彇鎴块棿鍚嶅瓧(澶氫釜鎴块棿鐨勬椂鍊欙紝鐢ㄢ��,鈥濆垎鍓�)
+        /// 鏍规嵁璁惧鑾峰彇鎴块棿鍚嶅瓧(妤煎眰+鎴块棿鍚�)
         /// </summary>
         /// <returns>鎴块棿鍚�</returns>
         /// <param name="device">璁惧瀵硅薄</param>
         public string GetRoomNameByDevice(CommonDevice device)
         {
-            var listName = this.GetRoomListNameByDevice(device);
-
-            return this.GetRoomName(listName);
-        }
-
-        /// <summary>
-        /// 鑾峰彇澶氫釜鎴块棿鐨勮繛鎺ヨ捣鏉ョ殑鍚嶅瓧
-        /// </summary>
-        /// <param name="listName"></param>
-        /// <returns></returns>
-        public string GetRoomName(List<string> listName)
-        {
-            if (listName.Count == 0)
-            {
-                //鏈垎閰嶅尯鍩�
-                return Language.StringByID(R.MyInternationalizationString.uDeviceNotAssignedRoom);
+            var room = this.GetRoomByDevice(device);
+            if (room == null)
+            {
+                //鏈垎閰嶅尯鍩�
+                return Language.StringByID(R.MyInternationalizationString.uDeviceNotAssignedRoom);
             }
-            return string.Join(",", listName);
+            if (Config.Instance.Home.FloorDics.ContainsKey(room.FloorId) == true)
+            {
+                //(妤煎眰+鎴块棿鍚�)
+                return Config.Instance.Home.FloorDics[room.FloorId] + " " + room.Name;
+            }
+            return room.Name;
         }
 
         /// <summary>
-        /// 鑾峰彇鎵�鏈夋埧闂寸殑鎵�鏈夎澶�
+        /// 鑾峰彇璁惧鎵�鍦ㄧ殑鎴块棿
         /// </summary>
         /// <returns>The room by device.</returns>
         /// <param name="device">璁惧瀵硅薄</param>
-        public List<Room> GetRoomByDevice(CommonDevice device)
+        public Room GetRoomByDevice(CommonDevice device)
         {
-            var deviceUI = new DeviceUI { };
-            deviceUI.DeviceFileName = device.FilePath;
-            return Lists.FindAll((obj) => obj.DeviceUIFilePathList.Contains(deviceUI.FileName));
+            string deviceFile = device.FilePath;
+            return Lists.Find((obj) => obj.IsLove == false && obj.DeviceUIFilePathList.Contains(deviceFile));
         }
 
         /// <summary>
@@ -516,6 +702,10 @@
         {
             foreach (var r in Lists)
             {
+                if(r.IsLove)
+                {
+                    continue;
+                }
                 foreach (var scene in r.SceneUIList)
                 {
                     if (scene.Id == sceneId)
@@ -527,6 +717,80 @@
             return null;
         }
 
+        /// <summary>
+        /// 鑾峰彇褰撳墠妤煎眰鐨勬埧闂�
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        public List<Room> GetRoomsByFloorId(string id)
+        {
+            try
+            {
+                if (Lists == null || Lists.Count == 0 || Lists.Count == 1)
+                {
+                    return null;
+                }
+                if (Config.Instance.Home.FloorDics.Count == 0)
+                {
+                    return Lists;
+                }
+                return Lists.FindAll((obj) => obj.FloorId == id);
+            }
+            catch(Exception ex)
+            {
+                System.Console.WriteLine(ex.Message);
+                return null;
+            }
+
+        }
+        /// <summary>
+        /// 鑾峰彇褰撳墠妤煎眰鐨勬埧闂村悕绉�
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        public List<string> GetRoomNamesByFloorId(string id)
+        {
+            List<string> names = new List<string> { };
+            foreach (var r in Lists)
+            {
+                if (r.FloorId == id)
+                {
+                    names.Add(r.Name);
+                }
+            }
+            return names;
+        }
+
+        /// <summary>
+        /// 鑾峰彇褰撳墠妤煎眰鐨勬埧闂�(鎷兼帴浜嗐�愬父鐢ㄣ�戝湪绗竴浣�)
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        public  List<Room> GetRoomsByFloorIdAppendLoveRoom(string id)
+        {
+            if (Config.Instance.Home.FloorDics.Count == 0)
+            {
+                return Lists;
+            }
+            var r= Lists.FindAll((obj) => obj.FloorId == id);
+            r.Insert(0, GetLoveRoom());
+            return r;
+        }
+
+        /// <summary>
+        /// 鑾峰彇褰撳墠妤煎眰鐨勬埧闂�(鎷兼帴浜嗐�愬父鐢ㄣ�戝湪绗竴浣�)
+        /// </summary>
+        /// <returns></returns>
+        public  List<Room> GetRoomsByCurrentFloorIdAppendLoveRoom()
+        {
+            if(Config.Instance.Home.FloorDics.Count==0)
+            {
+                return Lists;
+            }
+            var r = Lists.FindAll((obj) => obj.FloorId == Config.Instance.Home.CurrentFloorId);
+            r.Insert(0, GetLoveRoom());
+            return r;
+        }
 
         #endregion
 
@@ -536,54 +800,59 @@
         /// 璁惧鐨勬埧闂村彉鏇�
         /// </summary>
         /// <param name="device">璁惧瀵硅薄</param>
-        /// <param name="listnewName">鏂版埧闂村悕瀛楀垪琛�</param>
-        public void ChangedRoom(CommonDevice device, List<string> listnewName)
+        /// <param name="roomId">鏂版埧闂碔d</param>
+        /// <param name="saveRealRoom">鏄惁淇敼鐪熷疄鐗╃悊璁惧鐨勬埧闂�,涓嶅嚭鎰忓,杩欎釜鍊奸粯璁や负true鍗冲彲</param>
+        public void ChangedRoom(CommonDevice device, string roomId, bool saveRealRoom = true)
         {
             //鎴块棿鏄惁淇敼
-            if (this.IsRoomChanged(device, listnewName) == false)
+            if (this.IsRoomChanged(device, roomId) == false)
             {
                 return;
             }
-            var list = new List<string>();
-            list.AddRange(listnewName);
-
-            //浠庡師鏉ョ殑鎴块棿绉婚櫎璁惧,浣嗘槸涓嶅垹闄I鏂囦欢
-            this.DeleteDevice(device, ref list, false);
+            //浠庡師鏉ョ殑鎴块棿绉婚櫎璁惧
+            this.DeleteDevice(device);
 
             //娣诲姞鍒版柊鐨勬埧闂�
-            foreach (string newRoom in list)
-            {
-                var room = this.GetRoomByName(newRoom);
-                if (room != null)
-                {
-                    //涓嶈鐩朥I鏂囦欢
-                    room.AddDevice(device, false);
-                }
+            var room = this.GetRoomById(roomId);
+            if (room != null)
+            {
+                room.AddDevice(device, saveRealRoom);
             }
-        }
-
+        }
+
         /// <summary>
         /// 鎴块棿鍚嶅瓧鏄惁鏈変慨鏀�
         /// </summary>
         /// <param name="device">璁惧瀵硅薄</param>
-        /// <param name="listnewName">鏂版埧闂村悕瀛楀垪琛�</param>
+        /// <param name="roomId">鏂版埧闂碔d</param>
         /// <returns></returns>
-        public bool IsRoomChanged(CommonDevice device, List<string> listnewName)
+        public bool IsRoomChanged(CommonDevice device, string roomId)
         {
-            var listOld = this.GetRoomListNameByDevice(device);
-            if (listOld.Count != listnewName.Count)
-            {
-                return true;
-            }
-            //涓暟涓�鏍锋椂锛屾瘮杈冨唴瀹�
-            foreach (string newstring in listnewName)
-            {
-                if (listOld.Contains(newstring) == false)
-                {
-                    return true;
-                }
+            var room = this.GetRoomByDevice(device);
+            if (room == null || room.Id != roomId)
+            {
+                return true;
             }
             return false;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鎴块棿鎵�鍦ㄥ尯鍩�
+        /// 妤煎眰,鎴块棿鍚�
+        /// </summary>
+        /// <returns></returns>
+        public string GetZoneName()
+        {
+            if (string.IsNullOrEmpty(FloorId))
+            {
+                return Name;
+            }
+            var floorName = Config.Instance.Home.GetFloorNameById(FloorId);
+            if (floorName == null)
+            {
+                return Name;
+            }
+            return $"{floorName},{Name}";
         }
 
         #endregion
@@ -602,31 +871,6 @@
         #endregion
 
         #region 鈼� 鎴块棿鑳屾櫙鍥剧殑鐩稿叧___________________
-        /// <summary>
-        /// 鍒犻櫎鑳屾櫙鍥剧墖
-        /// </summary>
-        /// <param name="fileName">fileName瀹為檯涓婂寘鍚簡浣忓畢璺姴 濡� 浣忓畢/鏂囦欢鍚�.</param>
-        public static void DeleteBackGroundIamageFilebyHomeId(string fileName)
-        {
-            if (fileName == null)
-            {
-                return;
-            }
-            var pathLists = fileName.Split('/');
-            if (pathLists == null || pathLists.Count() < 9 || pathLists[8] == null)
-            {
-                return;
-            }
-            var path = System.IO.Path.Combine(Config.Instance.FullPath, fileName);
-            if (!Global.IsExistsByHomeId(pathLists[8]))
-            {
-                return;
-            }
-            //鍒犻櫎鏈湴鍥剧墖
-            System.IO.File.Delete(path);
-            //鍒犻櫎澶囦唤
-            Phone.UserCenter.HdlAutoBackupLogic.DeleteFile(pathLists[8]);
-        }
 
         /// <summary>
         /// 绉诲姩鑳屾櫙鍥剧墖鍒颁綇瀹呯洰褰曚笅
@@ -655,7 +899,7 @@
         #region 鈼� 娣诲姞璁惧________________________
 
         /// <summary>
-        /// 娣诲姞璁惧
+        /// 娣诲姞璁惧(姝ゆ柟娉曠洰鍓嶅彧缁欍�愭垜鐨勫枩鐖便�戜娇鐢�)
         /// </summary>
         /// <param name="deviceUIFilePath">Device UIF ile path.</param>
         public void AddDevice(string deviceUIFilePath)
@@ -664,9 +908,8 @@
             {
                 return;
             }
-            var jsonInfo = Encoding.UTF8.GetString(Global.ReadFileByHomeId(deviceUIFilePath));
-            var deviceUI = Newtonsoft.Json.JsonConvert.DeserializeObject<DeviceUI>(jsonInfo);
-            if (null == deviceUI || null == deviceUI.CommonDevice)
+            var deviceUI = Common.LocalDevice.Current.GetDeviceUI(deviceUIFilePath);
+            if (null == deviceUI.CommonDevice)
             {
                 //褰撳墠瀵硅薄鏁版嵁鏃犳晥
                 return;
@@ -681,11 +924,11 @@
         }
 
         /// <summary>
-        /// 娣诲姞璁惧
+        /// 娣诲姞璁惧(姝ゆ柟娉曠洰鍓嶅彧缁橰oom閲岄潰浣跨敤)
         /// </summary>
         /// <param name="device">瑕佹坊鍔犵殑璁惧瀵硅薄</param>
-        /// <param name="backUpUI">鏄惁瑕佽鐩朥I鏂囦欢</param>
-        public void AddDevice(CommonDevice device, bool backUpUI = true)
+        /// <param name="saveRealRoom">鏄惁淇敼鐪熷疄鐗╃悊璁惧鐨勬埧闂�,涓嶅嚭鎰忓,杩欎釜鍊奸粯璁や负true鍗冲彲</param>
+        public void AddDevice(CommonDevice device, bool saveRealRoom)
         {
             if (device == null)
             {
@@ -694,23 +937,7 @@
             //璁惧淇℃伅淇濆瓨鍒版湰鍦�
             device.Save();
 
-            //娣诲姞鑷姩澶囦唤
-            HdlAutoBackupLogic.AddOrEditorFile(device.FilePath);
-
-            DeviceUI deviceUI = Common.LocalDevice.Current.GetDeviceUI(device);
-            deviceUI.DeviceFileName = device.FilePath;
-            if (backUpUI == true)
-            {
-                deviceUI.ReSave();
-            }
-            else
-            {
-                deviceUI.Save();
-            }
-
-            //娣诲姞鑷姩澶囦唤
-            HdlAutoBackupLogic.AddOrEditorFile(deviceUI.FileName);
-
+            var deviceUI = Common.LocalDevice.Current.GetDeviceUI(device);
             if (DeviceUIFilePathList.Contains(deviceUI.FileName) == false)
             {
                 DeviceUIFilePathList.Add(deviceUI.FileName);
@@ -718,15 +945,17 @@
                 //淇濆瓨鍒版湰鍦�
                 Save();
 
-                //娣诲姞鑷姩澶囦唤
-                HdlAutoBackupLogic.AddOrEditorFile(FileName);
+                if (saveRealRoom == true && LocalDevice.Current.GetDevicesCountByMac(device.DeviceAddr) == 1)
+                {
+                    //濡傛灉鍙湁涓�涓洖璺�,鍒欎慨鏀圭湡瀹炵墿鐞嗚澶囩殑鎴块棿
+                    LocalDevice.Current.SaveRealDeviceRoomId(new List<CommonDevice>() { device }, this.Id, false);
+                }
             }
         }
 
         #endregion
 
         #region 鈼� 鍒犻櫎璁惧_________________________
-
         /// <summary>
         /// 鍒犻櫎鍔熻兘-璁惧
         /// </summary>
@@ -734,11 +963,10 @@
         public void DeleteDevice(string deviceUIFilePath)
         {
             if (deviceUIFilePath == null) return;
-            if (DeviceUIFilePathList.Contains(deviceUIFilePath) && Global.IsExistsByHomeId(deviceUIFilePath))
+            if (DeviceUIFilePathList.Contains(deviceUIFilePath))
             {
                 DeviceUIFilePathList.Remove(deviceUIFilePath);
                 DeviceUIList.RemoveAll((obj) => obj.FileName == deviceUIFilePath);
-                HdlAutoBackupLogic.DeleteFile(deviceUIFilePath);
                 Save();
             }
         }
@@ -747,97 +975,63 @@
         /// 鍒犻櫎璁惧
         /// </summary>
         /// <param name="device">瑕佸垹闄ょ殑璁惧瀵硅薄</param>
-        /// <param name="DeleteUi">鏄惁鍒犻櫎UI鏂囦欢</param>
-        public void DeleteDevice(CommonDevice device, bool DeleteUi = true)
-        {
-            List<string> listNotDelRoom = new List<string>();
-            //鍒犻櫎璁惧
-            this.DeleteDevice(device, ref listNotDelRoom, DeleteUi);
-        }
-
-        /// <summary>
-        /// 鍒犻櫎璁惧(鐗规畩鍑芥暟,鐜伴樁娈垫槸缁欒澶囧彉鏇存埧闂翠娇鐢ㄧ殑)
-        /// </summary>
-        /// <param name="device">瑕佸垹闄ょ殑璁惧瀵硅薄</param>
-        /// <param name="listNotDelRoom">涓嶆墽琛屽垹闄ょ殑鎴块棿,褰撴寚瀹氱殑涓嶈兘鍒犻櫎鐨勬埧闂村瓨鍦ㄦ椂锛屼細浠庤繖涓垪琛ㄤ腑绉婚櫎锛屾渶缁堝彧鍓╀笅鏂扮殑鎴块棿</param>
-        /// <param name="DeleteUi">鏄惁鍒犻櫎UI鏂囦欢</param>
-        public void DeleteDevice(CommonDevice device, ref List<string> listNotDelRoom, bool DeleteUi)
+        public void DeleteDevice(CommonDevice device)
         {
             if (device == null)
             {
                 return;
             }
-            DeviceUI deviceUI = new DeviceUI();
-            deviceUI.DeviceFileName = device.FilePath;
+            //鏍规嵁璁惧锛岃幏鍙栨墍鍦ㄧ殑鎴块棿
+            var room = this.GetRoomByDevice(device);
+            if (room == null)
+            {
+                return;
+            }
+            string deviceFile = device.FilePath;
+            //绉婚櫎缂撳瓨
+            if (room.DeviceUIFilePathList.Contains(deviceFile) == false)
+            {
+                return;
+            }
+            room.DeviceUIFilePathList.Remove(deviceFile);
+
+            room.DeviceUIList.RemoveAll((obj) => obj.FileName == deviceFile);
+            room.Save();
+            //鏇存敼鑷姩澶囦唤
+            HdlAutoBackupLogic.AddOrEditorFile(room.FileName);
 
-            //鏍规嵁璁惧锛岃幏鍙栨墍鍦ㄧ殑鎴块棿锛屽洜涓哄畠鍒犵殑涓嶄竴瀹氭槸褰撳墠鎴块棿
-            List<Room> listroom = this.GetRoomByDevice(device);
+            //閫掑綊锛氬垹闄ゆ帀浠ュ墠鐨勬棫鏁版嵁瀵艰嚧鐨勫涓埧闂寸殑闂
+            this.DeleteDevice(device);
+        }
 
-            //鍒犻櫎UI鏂囦欢
-            if (DeleteUi == true && Global.IsExistsByHomeId(deviceUI.FileName) == true)
+        /// <summary>
+        /// 鍒犻櫎鎴戠殑鍠滅埍鐨勮澶�
+        /// </summary>
+        /// <param name="device">瑕佸垹闄ょ殑璁惧瀵硅薄</param>
+        public void DeleteLoveDevice(CommonDevice device)
+        {
+            if (device == null)
             {
-                Global.DeleteFilebyHomeId(deviceUI.FileName);
-                //鍒犻櫎鑷姩澶囦唤
-                Phone.UserCenter.HdlAutoBackupLogic.DeleteFile(deviceUI.FileName);
+                return;
             }
-
-            foreach (Room room in listroom)
-            {
-                if (listNotDelRoom.Contains(room.Name) == true)
-                {
-                    listNotDelRoom.Remove(room.Name);
-                    continue;
-                }
-                //绉婚櫎缂撳瓨
-                if (room.DeviceUIFilePathList.Contains(deviceUI.FileName) == false)
-                {
-                    return;
-                }
-                room.DeviceUIFilePathList.Remove(deviceUI.FileName);
-
-                room.DeviceUIList.RemoveAll((obj) => obj.FileName == deviceUI.FileName);
-                room.Save();
-                //鏇存敼鑷姩澶囦唤
-                Phone.UserCenter.HdlAutoBackupLogic.AddOrEditorFile(room.FileName);
+            //鎴戠殑鍠滅埍
+            var loveRoom = this.GetLoveRoom();
+            if (loveRoom != null)
+            {
+                string deviceFile = device.FilePath;
+                //绉婚櫎缂撳瓨
+                if (loveRoom.DeviceUIFilePathList.Contains(deviceFile) == false)
+                {
+                    return;
+                }
+                loveRoom.DeviceUIFilePathList.Remove(deviceFile);
+                loveRoom.DeviceUIList.RemoveAll((obj) => obj.FileName == deviceFile);
             }
         }
 
         #endregion
 
         #region 鈼� 鑾峰彇璁惧_________________________
-
-        /// <summary>
-        /// 鑾峰彇鎵�鏈夋埧闂寸殑鎵�鏈夎澶�
-        /// </summary>
-        public static void GetAllRoomDeviceUIList()
-        {
-            List<string> devicePathList = new List<string>();
-            //鎵�鏈夋埧闂寸殑鎵�鏈夎澶�
-            AllRoomDeviceUIList.Clear();
-            foreach (var room in Shared.Common.Room.Lists)
-            {
-                if(room.IsSharedRoom)
-                {
-                    continue;
-                }
-                if (room.DeviceUIList.Count == 0)
-                {
-                    continue;
-                }
-                foreach (var device in room.DeviceUIList)
-                {
-                    if (device == null || device.CommonDevice == null)
-                    {
-                        continue;
-                    }
-                    if (!devicePathList.Contains(device.FileName))
-                    {
-                        AllRoomDeviceUIList.Add(device);
-                        devicePathList.Add(device.FileName);
-                    }
-                }
-            }
-        }
 
         /// <summary>
         /// 鏍规嵁璁惧鑾峰彇瀹冪殑UI瀵硅薄锛屽鏋滀笉瀛樺湪鍒欐柊寤�
@@ -849,24 +1043,98 @@
             return Common.LocalDevice.Current.GetDeviceUI(device);
         }
 
+        /// <summary>
+        /// 鑾峰彇褰撳墠鎴块棿涓嬬殑鍏ㄩ儴璁惧
+        /// </summary>
+        /// <returns></returns>
+        public List<CommonDevice> GetRoomListDevice()
+        {
+            var listDevice = new List<CommonDevice>();
+            foreach (var device in this.DeviceUIList)
+            {
+                if (device == null || device.CommonDevice == null)
+                {
+                    continue;
+                }
+                listDevice.Add(device.CommonDevice);
+            }
+            return listDevice;
+        }
+
         /// <summary>
-        /// 閲嶆柊鑾峰彇-鎵�鏈夋埧闂寸殑鎵�鏈夎澶囩被鍨�
+        /// 鑾峰彇鎴块棿璁惧绫诲瀷
         /// </summary>
-        public static void GetAllRoomDeviceTypeList()
+        /// <param name="room"></param>
+        /// <returns></returns>
+        public static List<DeviceType> GetdeviceTypes(Room room)
         {
-            AllRoomDeviceTypeList.Clear();
-            foreach (var deviceUI in AllRoomDeviceUIList)
+            List<DeviceType> typeList = new List<DeviceType> { };
+            foreach (var deviceUI in room.DeviceUIList)
             {
                 if (deviceUI == null || deviceUI.CommonDevice == null)
                 {
                     continue;
                 }
-                if (!AllRoomDeviceTypeList.Contains(deviceUI.CommonDevice.Type))
+                if (!typeList.Contains(deviceUI.CommonDevice.Type))
                 {
-                    AllRoomDeviceTypeList.Add(deviceUI.CommonDevice.Type);
+                    typeList.Add(deviceUI.CommonDevice.Type);
                 }
             }
+            return typeList;
         }
+
+        /// <summary>
+        /// 鑾峰彇璇ョ被鍨嬬殑璁惧
+        /// </summary>
+        /// <param name="room"></param>
+        /// <param name="deviceType"></param>
+        /// <returns></returns>
+        public static List<DeviceUI> GetDeviceUIs(Room room ,DeviceType deviceType)
+        {
+            List<DeviceUI> typeList = new List<DeviceUI> { };
+            foreach (var deviceUI in room.DeviceUIList)
+            {
+                if (deviceUI == null || deviceUI.CommonDevice == null)
+                {
+                    continue;
+                }
+                if(deviceUI.CommonDevice.Type!=deviceType)
+                {
+                    continue;
+                }
+                if (!typeList.Contains(deviceUI))
+                {
+                    typeList.Add(deviceUI);
+                }
+            }
+            return typeList;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏈垎閰嶅尯鍩熻澶�
+        /// </summary>
+        /// <returns></returns>
+        public List<DeviceUI> GetUnalloctedDeviceUIs()
+        {
+            List<DeviceUI> deviceUIs = new List<DeviceUI> { };
+            var dList = AllRoomDeviceUIList;
+            var commonDeviceList = Common.LocalDevice.Current.listAllDevice;
+            
+            foreach (var device in commonDeviceList)
+            {
+                if (dList.Find((obj) => obj.CommonDevice.DeviceEpoint == device.DeviceEpoint && obj.CommonDevice.DeviceAddr == device.DeviceAddr) == null)
+                {
+                    deviceUIs.Add(Common.LocalDevice.Current.GetDeviceUI(device));
+                }
+            }
+            if (deviceUIs.Count == 0)
+            {
+                return null;
+            }
+            return deviceUIs;
+        }
+
+        //public List<DeviceUI> GetUnalloctedDeviceUITypes
 
         #endregion
 
@@ -880,27 +1148,23 @@
         /// <param name="sceneIconPath">鑳屾櫙鍥剧墖锛屼笉鍖呭惈浣忓畢璺緞 濡傛灉iconPathType=1鎴栬��2 闇�瑕佹嫾鎺ヤ綇瀹� 鍙樻垚 浣忓畢/sceneIconPath</param>
         /// <param name="commons">Commons.</param>
         /// <param name="iconPathType">I鍦烘櫙鑳屾櫙鍥剧墖鏉ユ簮绫诲瀷 鍥剧墖鏉ユ簮 0--鏈湴鍥惧簱 1--鎷嶇収 2--绯荤粺鍥惧簱 榛樿0</param>
-        public async System.Threading.Tasks.Task<int> AddScene(string sceneName, string sceneIconPath, List<ZigBee.Device.Scene.AddSceneMemberData> commons, int iconPathType = 0)
+        public async System.Threading.Tasks.Task<int> AddScene(string sceneName, string sceneIconPath, List<ZigBee.Device.Scene.AddSceneMemberData> commons, int iconPathType)
         {
-            if (AllRoomSceneUIList.Find(s => s.Name == sceneName) != null)
-            {
-                return -1;
-            }
+            //var scenes = GetSceneUIsByFloorId(FloorId);
+            //if(scenes!=null && scenes.Count>0)
+            //{
+            //    if (scenes.Find(s => s.Name == sceneName) != null)
+            //    {
+            //        return -1;
+            //    }
+            //}
+
             var getSceneIdAllData = await ZigBee.Device.Scene.GetSceneNewIdAsync(sceneName);
             if (getSceneIdAllData == null || getSceneIdAllData.getSceneIdData == null)
             {
                 return 0;
             }
             var getSceneIdData = getSceneIdAllData.getSceneIdData;
-            //寰幆鐩稿悓鎶ラ敊
-            foreach (var tempSceneUI in AllRoomSceneUIList)
-            {
-                if (tempSceneUI.Id == getSceneIdAllData.getSceneIdData.NewScenesId)
-                {
-                    //鍦烘櫙宸插瓨鍦�
-                    return -1;
-                }
-            }
 
             bool result = true;
             foreach (var common in commons)
@@ -908,12 +1172,13 @@
                 //娣诲姞鏂版垚鍛�
                 var addSceneMemberData = new ZigBee.Device.Scene.AddSceneMemberData
                 {
-                    DeviceAddr = common.DeviceAddr,
                     Type = common.Type,
+                    DeviceAddr = common.DeviceAddr,
                     Epoint = common.Epoint,
                     ScenesId = getSceneIdData.NewScenesId,
                     TaskList = common.TaskList,
                     DelayTime = common.DelayTime,
+                    MemberNumber=common.MemberNumber,
                     ElseScenesId = common.ElseScenesId
                 };
                 //common.ScenesId = getSceneIdData.NewScenesId;
@@ -932,26 +1197,18 @@
             //鍔犲叆鎴愬姛
             if (result)
             {
-                //iconPathType=0 鐩存帴浼犲�硷紝 iconPathType=1鍜宨conPathType=2闇�瑕佹嫾鎺ヤ綇瀹呰矾寰�
-                var fullPath = sceneIconPath;
-                if (iconPathType == 1 || iconPathType == 2)
-                {
-                    Common.Room.CurrentRoom.MoveBackGroundIamageFileToDirectory(sceneIconPath, $"{Config.Instance.FullPath}/{sceneIconPath}");
-                    fullPath = $"{Config.Instance.FullPath}/{sceneIconPath}";
-                }
                 var sceneUI = new SceneUI
                 {
                     Name = sceneName,
                     Id = getSceneIdData.NewScenesId,
-                    IconPath = fullPath,
+                    IconPath = sceneIconPath,
                     IconPathType = iconPathType,
                     AddSceneMemberDataList= commons
                 };
+                sceneUI.Save();
                 SceneUIList.Add(sceneUI);
                 SceneUIFilePathList.Add(sceneUI.FileName);
-                sceneUI.Save();
                 Save();
-                HdlAutoBackupLogic.AddOrEditorFile(sceneUI.FileName);
                 return 1;
             }
             return 0;
@@ -963,20 +1220,44 @@
         /// <param name="scene">Scene.</param>
         public void AddScene(SceneUI scene)
         {
-            var sceneUI = new SceneUI
-            {
-                Name = scene.Name,
-                Id = scene.Id,
-                IconPath = scene.IconPath,
-                IconPathType = scene.IconPathType,
-                AddSceneMemberDataList = scene.AddSceneMemberDataList
-            };
-            SceneUIList.Add(sceneUI);
-            SceneUIFilePathList.Add(sceneUI.FileName);
-            sceneUI.Save();
+            SceneUIList.Add(scene);
+            SceneUIFilePathList.Add(scene.FileName);
             Save();
         }
 
+        /// <summary>
+        /// 鍒犻櫎鍦烘櫙
+        /// </summary>
+        /// <param name="scene"></param>
+        public void DeleteScene(SceneUI scene)
+        {
+            var curScene = SceneUIList.Find((obj) => obj.Id == scene.Id);
+            if (curScene == null)
+            {
+                return;
+            }
+            SceneUIList.Remove(curScene);
+            SceneUIFilePathList.Remove(curScene.FileName);
+            Save();
+        }
+
+        #endregion
+
+        #region 鈼� 璁惧鏄惁鏀惰棌______________________
+
+        /// <summary>
+        /// 鏄惁鏄敹钘忚澶�
+        /// </summary>
+        /// <param name="filePath"></param>
+        /// <returns></returns>
+        public bool IsCollectInRoom(string filePath)
+        {
+            if (GetLoveRoom().DeviceUIFilePathList.Find((obj) => obj == filePath) == null)
+            {
+                return false;
+            }
+            return true;
+        }
         #endregion
 
         #region 鈼� 淇敼鍦烘櫙________________________
@@ -990,10 +1271,10 @@
         /// <param name="addCommons">Add commons.</param>
         public async System.Threading.Tasks.Task<int> ModifyScene(SceneUI sceneUI, Scene.SceneRemoveMemberData sceneRemoveMemberData, List<Scene.AddSceneMemberData> addCommons)
         {
-            if (AllRoomSceneUIList.Find(s => s.Name == sceneUI.Name) == null)
-            {
-                return 0;
-            }
+            //if (AllRoomSceneUIList.Find(s => s.Name == sceneUI.Name) == null)
+            //{
+            //    return 0;
+            //}
 
             bool result = true;
             //绉婚櫎鎴愬憳 杩斿洖缁撴灉
@@ -1023,7 +1304,8 @@
                     ScenesId = sceneUI.Id,
                     TaskList = addCommon.TaskList,
                     DelayTime = addCommon.DelayTime,
-                    ElseScenesId = addCommon.ElseScenesId
+                    ElseScenesId = addCommon.ElseScenesId,
+                    MemberNumber=addCommon.MemberNumber
                 };
                 //娣诲姞鏂版垚鍛� 杩斿洖缁撴灉
                 var addSceneMemberResponseAllData = await ZigBee.Device.Scene.AddSceneMemberAsync(addSceneMemberData);
@@ -1044,9 +1326,61 @@
             {
                 sceneUI.AddSceneMemberDataList = addCommons;
                 sceneUI.Save();
+                if (IsLove == false)
+                {
+                    var curScene = Common.Room.CurrentRoom.GetLoveRoom().SceneUIList.Find((obj) => obj.Id == sceneUI.Id);
+                    if (curScene != null)
+                    {
+                        curScene.Name = sceneUI.Name;
+                        curScene.IconPath = sceneUI.IconPath;
+                        curScene.IconPathType = sceneUI.IconPathType;
+                        curScene.AddSceneMemberDataList = sceneUI.AddSceneMemberDataList;
+                        curScene.SceneDelayTime = sceneUI.SceneDelayTime;
+                        curScene.Save(false);
+                        Common.Room.CurrentRoom.GetLoveRoom().Save();
+                    }
+                }
                 return 1;
             }
             return 0;
+        }
+
+        /// <summary>
+        /// 璁剧疆銆佸悓姝ュ欢鏃舵椂闂�
+        /// </summary>
+        /// <param name="scene"></param>
+        public void ModifySceneDelayTime(SceneUI scene)
+        {
+            if (IsLove)
+            {
+                foreach (var r in Lists)
+                {
+                    if (r.IsLove || r.SceneUIList.Count == 0)
+                    {
+                        continue;
+                    }
+                    foreach (var sce in r.SceneUIList)
+                    {
+                        if (sce.Id == scene.Id)
+                        {
+                            sce.SceneDelayTime = scene.SceneDelayTime;
+                            sce.Save(false);
+                            r.Save(false);
+                            break;
+                        }
+                    }
+                }
+            }
+            else
+            {
+                var curScene = Common.Room.CurrentRoom.GetLoveRoom().SceneUIList.Find((obj) => obj.Id == scene.Id);
+                if (curScene != null)
+                {
+                    curScene.SceneDelayTime = scene.SceneDelayTime;
+                    curScene.Save(false);
+                    Common.Room.CurrentRoom.GetLoveRoom().Save(false);
+                }
+            }
         }
 
         #endregion
@@ -1063,12 +1397,30 @@
             {
                 return;
             }
+
+            if (sceneUI.IconPathType == 1 || sceneUI.IconPathType == 2)
+            {
+                if (Global.IsExistsByHomeId(sceneUI.IconPath))
+                {
+                    Global.DeleteFilebyHomeId(sceneUI.IconPath);
+                    HdlAutoBackupLogic.DeleteFile(sceneUI.IconPath);
+                }
+            }
+
+            if (IsLove == false)
+            {
+                if (CurrentRoom.GetLoveRoom().SceneUIList.Find((obj) => obj.Id == sceneUI.Id) != null)
+                {
+                    CurrentRoom.GetLoveRoom().DeleteScene(sceneUI);
+                }
+            }
+
             SceneUIList.Remove(sceneUI);
             SceneUIFilePathList.Remove(sceneUI.FileName);
             Save();
+
             Global.DeleteFilebyHomeId(sceneUI.FileName);
             HdlAutoBackupLogic.DeleteFile(sceneUI.FileName);
-            HdlAutoBackupLogic.AddOrEditorFile(FileName);
         }
 
         #endregion
@@ -1084,6 +1436,10 @@
         {
             foreach (var r in Lists)
             {
+                if (r.IsLove)
+                {
+                    continue;
+                }
                 foreach (var sceneUI in r.SceneUIList)
                 {
                     if (sceneUI.Id == sceneId)
@@ -1095,6 +1451,89 @@
             return null;
         }
 
+        /// <summary>
+        /// 鑾峰彇璇ユゼ灞傛墍鏈夊満鏅�
+        /// </summary>
+        /// <param name="floorId"></param>
+        /// <returns></returns>
+        public List<SceneUI> GetSameFloorScenes(string floorId)
+        {
+            List<SceneUI> sceneUIs = new List<SceneUI> { };
+            var rooms= CurrentRoom.GetRoomsByFloorId(floorId);
+            foreach(var r in rooms)
+            {
+                sceneUIs.AddRange(r.SceneUIList);
+            }
+            return sceneUIs;
+        }
+
+        /// <summary>
+        /// 鑾峰彇璇ユゼ灞傜殑鍦烘櫙
+        /// </summary>
+        /// <param name="floorId"></param>
+        /// <returns></returns>
+        public List<SceneUI> GetSceneUIsByFloorId(string floorId)
+        {
+            var rooms = GetRoomsByFloorId(floorId);
+            if (rooms == null)
+            {
+                return null;
+            }
+            var sceneList = new List<SceneUI> { };
+            foreach (var r in rooms)
+            {
+                if (r.SceneUIList.Count == 0)
+                {
+                    continue;
+                }
+                foreach (var sceneUI in r.SceneUIList)
+                {
+                    if (sceneUI == null)
+                    {
+                        continue;
+                    }
+                    sceneList.Add(sceneUI);
+                }
+            }
+            return sceneList;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏈垎閰嶅尯鍩熷満鏅�
+        /// </summary>
+        /// <returns></returns>
+        public List<SceneUI> GetUnalloctedScenes()
+        {
+            List<SceneUI> sceneUIs = new List<SceneUI> { };
+            var sList = AllRoomSceneUIFilepathList;
+
+            List<string> sfile = new List<string> { };
+            foreach (var path in Global.FileListByHomeId())
+            {
+                if (path.StartsWith("Scene_", StringComparison.Ordinal))
+                {
+                    sfile.Add(path);
+                }
+            }
+            foreach (var path in sfile)
+            {
+                if (sList.Find((obj) => obj == path) == null)
+                {
+                    var jsonInfo = Encoding.UTF8.GetString(Global.ReadFileByHomeId(path));
+                    var tempSceneUI = Newtonsoft.Json.JsonConvert.DeserializeObject<SceneUI>(jsonInfo);
+                    if (tempSceneUI != null)
+                    {
+                        sceneUIs.Add(tempSceneUI);
+                    }
+                }
+            }
+            if (sceneUIs.Count == 0)
+            {
+                return null;
+            }
+            return sceneUIs;
+        }
+
         #endregion
 
         #region 鈼� 鍒锋柊鍦烘櫙_________________________
@@ -1104,51 +1543,45 @@
         /// </summary>
         public async System.Threading.Tasks.Task<bool> RefreshSceneUIList()
         {
-            return false;
-            //System.Console.WriteLine($"寮�濮嬭姹傜綉鍏冲満鏅�****{DateTime.Now.ToString("yyMMdd hhmmss fff")}*****");
-            //bool result = true;
-            //var sceneList = await ZigBee.Device.Scene.GetSceneListAsync();
-            //System.Console.WriteLine($"缁撴潫璇锋眰缃戝叧鍦烘櫙****{DateTime.Now.ToString("yyMMdd hhmmss fff")}*****");
-            //if (sceneList == null)
-            //{
-            //    return false;
-            //}
-            //List<int> sceneIDList = new List<int> { };
-            //System.Console.WriteLine($"寮�濮嬫湰鍦板満鏅�****{DateTime.Now.ToString("yyMMdd hhmmss fff")}*****");
-            //foreach (var scene in sceneList)
-            //{
-            //    if (scene == null)
-            //    {
-            //        continue;
-            //    }
-            //    sceneIDList.Add(scene.ScenesId);
-            //}
-            //foreach(var r in Lists)
-            //{
-            //    if(r.SceneUIList==null || r.SceneUIList.Count==0)
-            //    {
-            //        continue;
-            //    }
-            //    foreach(var rScene in r.SceneUIList)
-            //    {
-            //        if(rScene==null)
-            //        {
-            //            continue;
-            //        }
-            //        //var scene = sceneList.Find((obj) => rScene.ScenesId == obj.ScenesId);
-            //        if(sceneIDList.Contains(rScene.ScenesId)==false)
-            //        {
-            //            var removeResult = r.SceneUIList.Remove(rScene);
-            //            r.Save();
-            //            if (removeResult == false)
-            //            {
-            //                result = false;
-            //            }
-            //        }
-            //    }
-            //}
-            //System.Console.WriteLine($"缁撴潫鏈湴鍦烘櫙****{DateTime.Now.ToString("yyMMdd hhmmss fff")}*****");
-            //return result;
+            bool result = true;
+            var sceneList = await ZigBee.Device.Scene.GetSceneListAsync();
+            if (sceneList == null)
+            {
+                return false;
+            }
+            List<int> sceneIDList = new List<int> { };
+            foreach (var scene in sceneList)
+            {
+                if (scene == null)
+                {
+                    continue;
+                }
+                sceneIDList.Add(scene.ScenesId);
+            }
+            foreach (var r in Lists)
+            {
+                if(r.IsLove)
+                {
+                    continue;
+                }
+                if (r.SceneUIList == null || r.SceneUIList.Count == 0)
+                {
+                    continue;
+                }
+                foreach (var rScene in r.SceneUIList)
+                {
+                    if (rScene == null)
+                    {
+                        continue;
+                    }
+                    if (sceneIDList.Contains(rScene.Id) == false)
+                    { 
+                        r.RemoveScene(rScene);
+                        result = true;
+                    }
+                }
+            }
+            return result;
         }
 
         #endregion
@@ -1171,6 +1604,142 @@
 
         #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 Common.Room.Lists)
+            {
+                if (room.FloorId != i_floorKeys || 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>
@@ -1182,6 +1751,9 @@
             var newRoom = new Room();
             //鍏嬮殕灞炴��
             newRoom.Id = this.Id;
+            newRoom.FloorId = this.FloorId;
+            newRoom.TemperatrueDevice = this.TemperatrueDevice;
+            newRoom.HumidityDevice = this.HumidityDevice;
             newRoom.Name = this.Name;
             newRoom.BackgroundImage = this.BackgroundImage;
             newRoom.BackgroundImageType = this.BackgroundImageType;
@@ -1190,5 +1762,6 @@
         }
 
         #endregion
+
     }
 }

--
Gitblit v1.8.0