From c7df85937f73fb347ee0b19e9c052d2d00a6df6c Mon Sep 17 00:00:00 2001
From: 黄学彪 <hxb@hdlchina.com.cn>
Date: 星期五, 18 九月 2020 13:58:19 +0800
Subject: [PATCH] 新版本

---
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs |  544 ++++++++++++++++++++++++++++++++---------------------
 1 files changed, 328 insertions(+), 216 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs
index 4f3a0c7..91c4949 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs
@@ -31,32 +31,14 @@
                 return m_Current;
             }
         }
-
         /// <summary>
-        /// 褰撳墠閫夋嫨鐨勬埧闂�
+        /// 褰撳墠涓婚〉閫夋嫨鐨勬埧闂村璞�
         /// </summary>
-        private Room m_CurrentRoom = null;
+        public Room NowMainPageRoom = 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; }
-        }
-
+        public Room NowCategoryRoom = null;
         /// <summary>
         /// 鎵�鏈夌殑鎴块棿淇℃伅
         /// </summary>
@@ -72,22 +54,27 @@
         /// </summary>
         public void InitAllRoom()
         {
+            this.NowMainPageRoom = null;
+            this.NowCategoryRoom = null;
+
             //娓呯┖鏈湴缂撳瓨
             this.dicRooms.Clear();
             //妫�娴嬫垜鐨勫枩鐖辫繖涓埧闂村璞�
             this.CheckLoveRoom();
-            
-            foreach (var roomId in Config.Instance.Home.ListRooms)
+
+            var listFile = HdlFileLogic.Current.GetRootPathListFile();
+            foreach (var fileName in listFile)
             {
-                //浠庢枃浠堕噷闈㈣幏鍙栨埧闂村璞�
-                var room = this.GetRoomByFilePath($"Room_{roomId}.json");
-                if (room != null)
+                if (fileName.StartsWith("Room_") == true)
                 {
-                    this.dicRooms[room.Id] = (room);
+                    //浠庢枃浠堕噷闈㈣幏鍙栨埧闂村璞�
+                    var room = this.GetRoomByFilePath(fileName);
+                    if (room != null)
+                    {
+                        this.dicRooms[room.Id] = (room);
+                    }
                 }
             }
-            //璁剧疆褰撳墠妤煎眰鐨処D
-            Config.Instance.Home.SetCurrentFloorId();
             //椤轰究鍒锋柊鍦烘櫙
             HdlSceneLogic.Current.ReFreshByLocal();
             //鍒锋柊鎴块棿瑙嗗浘鍒楄〃
@@ -99,17 +86,13 @@
         /// </summary>
         public void RefreshAllRoomByLocation()
         {
-            var homeTemp = Config.Instance.Home;
-            homeTemp.ListRooms.Clear();
-
-            var listFile = Global.FileListByHomeId();
+            var listFile = HdlFileLogic.Current.GetRootPathListFile();
 
             //鎴戠殑鍠滅埍鐨勬埧闂村繀椤昏鍦ㄧ0浣嶆墠琛�
             string fRoom = "Room_Favorite.json";
             if (listFile.Contains(fRoom) == true)
             {
                 listFile.Remove(fRoom);
-                homeTemp.ListRooms.Add("Favorite");
             }
 
             var listRoomFile = new List<string>();
@@ -118,15 +101,20 @@
                 if (fileName.StartsWith("Room_"))
                 {
                     string roomId = fileName.Replace("Room_", string.Empty).Replace(".json", string.Empty);
-                    homeTemp.ListRooms.Add(roomId);
                     listRoomFile.Add(fileName);
                 }
             }
             //妫�娴嬫ゼ灞傛暟鎹殑鍚堟硶鎬�
-            this.CheckFloorData(listRoomFile);
+            if (UserCenterResourse.UserInfo.AuthorityNo == 3)
+            {
+                this.CheckMemberFloorData(listRoomFile);
+            }
+            else
+            {
+                this.CheckAdminFloorData(listRoomFile);
+            }
 
-            homeTemp.Save(false);
-            InitAllRoom();
+            this.InitAllRoom();
         }
 
         /// <summary>
@@ -136,7 +124,7 @@
         {
             Application.RunOnMainThread(() =>
             {
-                MainPage.ListRoomViewFrom.Instance?.ShowForm();
+                MainPage.LeftListRoomViewFrom.Instance?.RefreshListRoom();
             });
         }
 
@@ -144,8 +132,12 @@
         /// 妫�娴嬫ゼ灞傛暟鎹殑鍚堟硶鎬�
         /// </summary>
         /// <param name="listRoomFile"></param>
-        private void CheckFloorData(List<string> listRoomFile)
+        private void CheckAdminFloorData(List<string> listRoomFile)
         {
+            //娌℃湁妤煎眰,鍒欐棤闇�澶勭悊
+            if (Config.Instance.Home.FloorDics.Count == 0) { return; }
+
+            //涓讳汉鎴栬�呯鐞嗗憳鐨勮瘽,灏辨娴嬫槸鍚﹀瓨鍦ㄦ湭鍒嗛厤妤煎眰鐨勬埧闂�
             for (int i = 0; i < listRoomFile.Count; i++)
             {
                 try
@@ -165,6 +157,49 @@
             }
         }
 
+        /// <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 鈻� 娣诲姞鎴块棿___________________________
@@ -173,23 +208,24 @@
         /// 澧炲姞鎴块棿
         /// </summary>
         /// <param name="room">Room.</param>
-        public void AddRoom(Room room)
+        /// <param name="rorefreshRoomViewom">鏄惁鍒锋柊鎴块棿瑙嗗浘鍒楄〃鐣岄潰</param>
+        public void AddRoom(Room room, bool refreshRoomView = true)
         {
-            if (Global.IsExistsByHomeId(room.FileName) == true
-                || Config.Instance.Home.ListRooms.Contains(room.Id) == true)
+            if (Global.IsExistsByHomeId(room.FileName) == true)
             {
                 return;
             }
             //娣诲姞鍒扮紦瀛�
             this.dicRooms[room.Id] = room;
-            //鎶婃埧闂碔D娣诲姞鍒颁綇瀹�
-            Config.Instance.Home.AddRoomId(room.Id);
             //鐢熸垚鏂囦欢
             room.Save();
             //澶囦唤
             HdlAutoBackupLogic.AddOrEditorFile(room.FileName);
-            //鍒锋柊鎴块棿瑙嗗浘鍒楄〃
-            this.RefreshRoomListView();
+            if (refreshRoomView == true)
+            {
+                //鍒锋柊鎴块棿瑙嗗浘鍒楄〃
+                this.RefreshRoomListView();
+            }
         }
 
         #endregion
@@ -200,9 +236,21 @@
         /// 鍒犻櫎鎴块棿
         /// </summary>
         /// <param name="roomId">鎴块棿ID</param>
+        /// <param name="refreshLeftView">鏄惁鍒锋柊宸︽粦鐣岄潰(姝ゅ彉閲忕洰鍓嶆槸缁欏垹闄ゅ叏閮ㄦ埧闂寸敤鐨�)</param>
         /// <returns></returns>
-        public void RemoveRoom(string roomId)
+        public void RemoveRoom(string roomId, bool refreshLeftView = true)
         {
+            if (this.NowMainPageRoom != null && this.NowMainPageRoom.Id == roomId)
+            {
+                //褰撳垹闄ょ殑鏄富椤电殑鎴块棿鐨勬椂鍊�
+                this.NowMainPageRoom = this.GetLoveRoom();
+            }
+            if (this.NowCategoryRoom != null && this.NowCategoryRoom.Id == roomId)
+            {
+                //褰撳垹闄ょ殑鏄垎绫荤殑鎴块棿鐨勬椂鍊�
+                this.NowCategoryRoom = this.GetLoveRoom();
+            }
+
             //鏍规嵁鎴块棿Id锛岃幏鍙栨埧闂村璞�
             var room = this.GetRoomById(roomId);
             if (room == null)
@@ -236,8 +284,6 @@
                 }
                 loveRoom.Save(false);
             }
-
-            Config.Instance.Home.RemoveRoomId(roomId);
             this.dicRooms.Remove(roomId);
 
             string roomFilePath = room.FileName;
@@ -247,8 +293,33 @@
                 Global.DeleteFilebyHomeId(roomFilePath);
             }
             HdlAutoBackupLogic.DeleteFile(roomFilePath);
-            //鍒锋柊鎴块棿瑙嗗浘鍒楄〃
-            this.RefreshRoomListView();
+
+            //鏍规嵁鎴块棿ID,绉婚櫎鎸囧畾鐨勭湡瀹炵墿鐞嗚澶囩殑鎵�灞炴埧闂磋褰�
+            Common.LocalDevice.Current.DeleteRealDeviceByRoomId(roomId);
+            if (refreshLeftView == true)
+            {
+                //鍒锋柊鎴块棿瑙嗗浘鍒楄〃
+                this.RefreshRoomListView();
+            }
+        }
+
+        /// <summary>
+        /// 鍒犻櫎鍏ㄩ儴鐨勬埧闂�
+        /// </summary>
+        public void DeleteAllRoom()
+        {
+            var listRoomId = new List<string>();
+            foreach (var room in this.dicRooms.Values)
+            {
+                if (room.IsLove == false)
+                {
+                    listRoomId.Add(room.Id);
+                }
+            }
+            foreach (var roomId in listRoomId)
+            {
+                this.RemoveRoom(roomId, false);
+            }
         }
 
         #endregion
@@ -310,7 +381,7 @@
         public string GetRoomNameByDevice(CommonDevice device)
         {
             var room = this.GetRoomByDevice(device);
-            return this.GetFloorRoomName(room);
+            return this.GetRoomName(room);
         }
 
         /// <summary>
@@ -318,7 +389,7 @@
         /// </summary>
         /// <returns>鎴块棿鍚�</returns>
         /// <param name="room">鎴块棿瀵硅薄</param>
-        public string GetFloorRoomName(Room room)
+        public string GetRoomName(Room room)
         {
             if (room == null)
             {
@@ -419,7 +490,7 @@
                     }
                 }
             }
-            return listRoom;
+            return this.SortRoom(listRoom);
         }
 
         /// <summary>
@@ -433,36 +504,7 @@
             {
                 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;
+            return this.SortRoom(listRoom);
         }
 
         /// <summary>
@@ -494,17 +536,10 @@
                     }
                 }
             }
+            listRoom = this.SortRoom(listRoom);
+
             listRoom.Insert(0, GetLoveRoom());
             return listRoom;
-        }
-
-        /// <summary>
-        /// 鑾峰彇褰撳墠妤煎眰鐨勬埧闂�(鎷兼帴浜嗐�愬父鐢ㄣ�戝湪绗竴浣�)
-        /// </summary>
-        /// <returns></returns>
-        public List<Room> GetRoomsByCurrentFloorIdAppendLoveRoom()
-        {
-            return this.GetRoomsByFloorIdAppendLoveRoom(Config.Instance.Home.CurrentFloorId);
         }
 
         #endregion
@@ -524,6 +559,10 @@
             {
                 //浠庡師鏉ョ殑鎴块棿绉婚櫎璁惧
                 this.DeleteDevice(device);
+                //绉婚櫎鎴戠殑鍠滅埍
+                this.DeleteLoveDevice(device);
+                //璁惧鏀瑰彉鎴块棿鐨勮瘽,涓婚〉闇�瑕侀噸鏂板埛鏂�
+                UserView.UserPage.Instance.RefreshAllForm = true;
                 return;
             }
             //鎴块棿鏄惁淇敼
@@ -531,8 +570,8 @@
             {
                 return;
             }
-            //浠庡師鏉ョ殑鎴块棿绉婚櫎璁惧
-            this.DeleteDevice(device);
+            //浠庡師鏉ョ殑鎴块棿绉婚櫎璁惧,杩欓噷涓嶅垹闄ょ湡瀹炶澶囩殑鎴块棿
+            this.DeleteDevice(device, false);
 
             //娣诲姞鍒版柊鐨勬埧闂�
             var room = this.GetRoomById(roomId);
@@ -540,6 +579,8 @@
             {
                 this.AddDevice(room, device, saveRealRoom);
             }
+            //璁惧鏀瑰彉鎴块棿鐨勮瘽,涓婚〉闇�瑕侀噸鏂板埛鏂�
+            UserView.UserPage.Instance.RefreshAllForm = true;
         }
 
         /// <summary>
@@ -556,25 +597,6 @@
                 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
@@ -631,6 +653,8 @@
                     //淇濆瓨鍒版湰鍦�
                     loveRoom.ListDevice.Add(mainkeys);
                     loveRoom.Save();
+                    //娣诲姞鏀惰棌璁惧鏃�,闇�瑕佸埛鏂颁富椤�
+                    UserView.UserPage.Instance.RefreshAllForm = true;
                 }
             }
         }
@@ -643,12 +667,20 @@
         /// 鍒犻櫎璁惧(杩欎釜鍑芥暟涓嶅垹闄ゆ垜鐨勫枩鐖�)
         /// </summary>
         /// <param name="device">瑕佸垹闄ょ殑璁惧瀵硅薄</param>
-        public void DeleteDevice(CommonDevice device)
+        /// <param name="deleteReal">鏄惁鍒犻櫎鐪熷疄鐗╃悊璁惧鐨勬埧闂�</param>
+        public void DeleteDevice(CommonDevice device, bool deleteReal = true)
         {
             if (device == null)
             {
                 return;
             }
+            //濡傛灉瀹冨彧鏈変竴涓洖璺�
+            if (deleteReal == true && LocalDevice.Current.GetDevicesCountByMac(device.DeviceAddr) == 1)
+            {
+                //鍒犻櫎鎺夊畠鐨勭湡瀹炵墿鐞嗚澶囩殑鎵�鍦ㄤ綅缃�
+                LocalDevice.Current.DeleteRealDeviceFromRoom(device);
+            }
+
             //鏍规嵁璁惧锛岃幏鍙栨墍鍦ㄧ殑鎴块棿
             var room = this.GetRoomByDevice(device);
             if (room == null)
@@ -663,7 +695,7 @@
             HdlAutoBackupLogic.AddOrEditorFile(room.FileName);
 
             //閫掑綊锛氬垹闄ゆ帀浠ュ墠鐨勬棫鏁版嵁瀵艰嚧鐨勫涓埧闂寸殑闂
-            this.DeleteDevice(device);
+            this.DeleteDevice(device, deleteReal);
         }
 
         /// <summary>
@@ -686,6 +718,8 @@
                 loveRoom.Save();
                 //鏇存敼鑷姩澶囦唤
                 HdlAutoBackupLogic.AddOrEditorFile(loveRoom.FileName);
+                //娣诲姞鏀惰棌璁惧鏃�,闇�瑕佸埛鏂颁富椤�
+                UserView.UserPage.Instance.RefreshAllForm = true;
             }
         }
 
@@ -863,92 +897,98 @@
         #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)
+            if (i_floorKeys == null)
             {
-                dicAllSort = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, List<string>>>(strData);
+                i_floorKeys = string.Empty;
             }
-
-            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>();
+            var listRoom = new List<Room>();
             foreach (var room in this.dicRooms.Values)
             {
-                if (room.FloorId != i_floorKeys && i_floorKeys != string.Empty)
+                if (room.FloorId != i_floorKeys && i_floorKeys != string.Empty
+                    || room.IsLove == true)
                 {
-                    //涓嶆槸鍚屼竴涓ゼ灞�
+                    //涓嶆槸鍚屼竴涓ゼ灞�,涓嶈鎴戠殑鍠滅埍
                     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;
+                listRoom.Add(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;
+            return this.SortRoom(listRoom);
         }
 
         /// <summary>
-        /// 淇濆瓨鎴块棿鐨勯『搴�
+        /// 鎺掑簭鎴块棿瀵硅薄
         /// </summary>
-        /// <param name="i_floorKeys">妤煎眰涓婚敭</param>
-        /// <param name="listSort">鎴块棿椤哄簭(鎴块棿鐨勪富閿�)</param>
-        public void SaveRoomSort(string i_floorKeys, List<string> listSort)
+        /// <param name="listRoom"></param>
+        /// <returns></returns>
+        public List<Room> SortRoom(List<Room> listRoom)
         {
-            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)
+            //浠庝竴鍫嗘枃瀛椾腑,鑾峰彇杩欎竴鍫嗘枃瀛楅噷闈㈡暟瀛楀瓧绗︿覆鐨勬渶闀块暱搴�
+            var listName = new List<string>();
+            foreach (var room in listRoom)
             {
-                dicAllSort = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, List<string>>>(strData);
+                listName.Add(room.Name);
             }
+            int numberLength = this.GetNumberMaxLength(listName);
 
-            //淇濆瓨椤哄簭
-            dicAllSort[i_floorKeys] = listSort;
-            UserCenterLogic.SaveFileContent(fullName, dicAllSort);
-            dicAllSort.Clear();
+            var listSort = new List<string[]>();
+            foreach (var room in listRoom)
+            {
+                var strArry = new string[2];
+                strArry[0] = room.Id;
+                strArry[1] = string.Empty;
+
+                string value = string.Empty;
+                foreach (var c in room.Name)
+                {
+                    if (char.IsNumber(c) == true)
+                    {
+                        //鏁板瓧
+                        value += c.ToString();
+                        continue;
+                    }
+                    else if (value != string.Empty)
+                    {
+                        //濡傛灉鎴块棿鍚嶅瓧甯︽湁鏁板瓧鐨勮瘽,鍒欏乏杈瑰姞闆�,鍥犱负杩欓噷鏈変釜鎺掑簭鐨勯棶棰�
+                        strArry[1] += value.PadLeft(numberLength, '0');
+                        value = string.Empty;
+                    }
+                    strArry[1] += c.ToString();
+                }
+                if (value != string.Empty)
+                {
+                    //浠ユ暟瀛楃粨灏剧殑璇�
+                    strArry[1] += value.PadLeft(numberLength, '0');
+                }
+                listSort.Add(strArry);
+            }
+            //鎺掑簭
+            listSort.Sort((obj1, obj2) =>
+            {
+                if (obj1[1].CompareTo(obj2[1]) > 0)
+                {
+                    return 1;
+                }
+                return -1;
+            });
+            var listSortRoom = new List<Room>();
+            foreach (var strArry in listSort)
+            {
+                var room = this.GetRoomById(strArry[0]);
+                listSortRoom.Add(room);
+            }
+            return listSortRoom;
         }
 
         /// <summary>
@@ -957,46 +997,66 @@
         /// <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)
+            //娌℃湁妤煎眰
+            if (Config.Instance.Home.FloorDics.Count == 0)
             {
-                listFloorSort = Newtonsoft.Json.JsonConvert.DeserializeObject<List<string>>(strData);
+                return new Dictionary<string, string>();
             }
-            foreach (string keys in Common.Config.Instance.Home.FloorDics.Keys)
+            //浠庝竴鍫嗘枃瀛椾腑,鑾峰彇杩欎竴鍫嗘枃瀛楅噷闈㈡暟瀛楀瓧绗︿覆鐨勬渶闀块暱搴�
+            var listName = new List<string>();
+            foreach (var floorName in Config.Instance.Home.FloorDics.Values)
             {
-                if (listFloorSort.Contains(keys) == false)
-                {
-                    //鏂版坊鍔犵殑妤煎眰
-                    listFloorSort.Add(keys);
-                }
+                listName.Add(floorName);
             }
+            int numberLength = this.GetNumberMaxLength(listName);
 
+            var listSort = new List<string[]>();
+            foreach (var floorId in Config.Instance.Home.FloorDics.Keys)
+            {
+                var strArry = new string[2];
+                strArry[0] = floorId;
+                strArry[1] = string.Empty;
+
+                string value = string.Empty;
+                string floorName = Config.Instance.Home.FloorDics[floorId];
+                foreach (var c in floorName)
+                {
+                    if (char.IsNumber(c) == true)
+                    {
+                        //鏁板瓧
+                        value += c.ToString();
+                        continue;
+                    }
+                    else if (value != string.Empty)
+                    {
+                        //濡傛灉鎴块棿鍚嶅瓧甯︽湁鏁板瓧鐨勮瘽,鍒欏乏杈瑰姞闆�,鍥犱负杩欓噷鏈変釜鎺掑簭鐨勯棶棰�
+                        strArry[1] += value.PadLeft(numberLength, '0');
+                        value = string.Empty;
+                    }
+                    strArry[1] += c.ToString();
+                }
+                if (value != string.Empty)
+                {
+                    //浠ユ暟瀛楃粨灏剧殑璇�
+                    strArry[1] += value.PadLeft(numberLength, '0');
+                }
+                listSort.Add(strArry);
+            }
+            //妤煎眰鎺掑簭
+            listSort.Sort((obj1, obj2) =>
+            {
+                if (obj1[1].CompareTo(obj2[1]) > 0)
+                {
+                    return 1;
+                }
+                return -1;
+            });
             var dic = new Dictionary<string, string>();
-            for (int i = 0; i < listFloorSort.Count; i++)
+            foreach (var strArry in listSort)
             {
-                if (Config.Instance.Home.FloorDics.ContainsKey(listFloorSort[i]) == true)
-                {
-                    dic[listFloorSort[i]] = Config.Instance.Home.FloorDics[listFloorSort[i]];
-                }
+                dic[strArry[0]] = Config.Instance.Home.FloorDics[strArry[0]];
             }
-
-            //淇濆瓨椤哄簭
-            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
@@ -1014,9 +1074,7 @@
             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;
@@ -1029,24 +1087,78 @@
         #region 鈻� 涓�鑸柟娉昣__________________________
 
         /// <summary>
+        /// 鑾峰彇鎴块棿鎬绘暟
+        /// </summary>
+        /// <returns></returns>
+        public int GetRoomCount()
+        {
+            return this.dicRooms.Count;
+        }
+
+        /// <summary>
         /// 妫�娴嬫垜鐨勫枩鐖辫繖涓埧闂村璞�
         /// </summary>
         private void CheckLoveRoom()
         {
-            if (Config.Instance.Home.ListRooms.Contains("Favorite") == false)
+            if (this.dicRooms.ContainsKey("Favorite") == true)
+            {
+                return;
+            }
+            //璇诲彇鏈湴鎴戠殑鍠滅埍鏂囦欢
+            string favoriteFile = System.IO.Path.Combine(Common.Config.Instance.FullPath, "Room_Favorite.json");
+            var fileContent = HdlFileLogic.Current.ReadFileTextContent(favoriteFile);
+            if (fileContent != null)
+            {
+                var love = Newtonsoft.Json.JsonConvert.DeserializeObject<Room>(fileContent);
+                this.dicRooms["Favorite"] = love;
+            }
+            else
             {
                 //榛樿娣诲姞鍠滅埍鐨勬埧闂�--绂佹淇敼鎴块棿鍚�
                 var love = new Room { Name = Language.StringByID(R.MyInternationalizationString.Favorite), BackgroundImage = "RoomIcon/0.jpg", Id = "Favorite" };
                 love.Save(false);
-                //娣诲姞鍒癶ouse 鎴块棿璺緞鍒楄〃
-                var currentHome = Config.Instance.Home;
-                currentHome.ListRooms.Insert(0, love.Id);
-                currentHome.Save(false);
-
                 this.dicRooms["Favorite"] = love;
             }
         }
 
+        /// <summary>
+        /// 浠庝竴鍫嗘枃瀛椾腑,鑾峰彇杩欎竴鍫嗘枃瀛楅噷闈㈡暟瀛楀瓧绗︿覆鐨勬渶闀块暱搴�
+        /// </summary>
+        /// <param name="listText"></param>
+        /// <returns></returns>
+        private int GetNumberMaxLength(List<string> listText)
+        {
+            int maxLength = 0;
+            foreach (var text in listText)
+            {
+                string value = string.Empty;
+                foreach (var c in text)
+                {
+                    if (char.IsNumber(c) == true)
+                    {
+                        //鏁板瓧
+                        value += c.ToString();
+                        continue;
+                    }
+                    else if (value != string.Empty)
+                    {
+                        //鍒ゆ柇鏁板瓧闀垮害
+                        if (maxLength <= value.Length)
+                        {
+                            maxLength = value.Length;
+                        }
+                        value = string.Empty;
+                    }
+                }
+                //鍒ゆ柇鏁板瓧闀垮害
+                if (maxLength <= value.Length)
+                {
+                    maxLength = value.Length;
+                }
+            }
+            return maxLength;
+        }
+
         #endregion
     }
 }

--
Gitblit v1.8.0