From 2ed75b8b337048e5d75e6d9ec8307633134f02fd Mon Sep 17 00:00:00 2001
From: 黄学彪 <hxb@hdlchina.com.cn>
Date: 星期四, 10 十月 2019 11:33:04 +0800
Subject: [PATCH] 个人中心添加楼层和创建房间,实装二级验证

---
 ZigbeeApp/Shared/Common/Room.cs |  325 +++++++++++++++++++++++++++++++++--------------------
 1 files changed, 200 insertions(+), 125 deletions(-)

diff --git a/ZigbeeApp/Shared/Common/Room.cs b/ZigbeeApp/Shared/Common/Room.cs
index c9ca441..e3440a1 100755
--- a/ZigbeeApp/Shared/Common/Room.cs
+++ b/ZigbeeApp/Shared/Common/Room.cs
@@ -32,7 +32,11 @@
         /// Guid.NewGuid().ToString()
         /// </summary>
         public string Id = Guid.NewGuid().ToString();
-
+        /// <summary>
+        /// 妤煎眰Id
+        /// 鏂板鏃朵娇鐢℅uid
+        /// </summary>
+        public string FloorId = string.Empty;
         /// <summary>
         /// 鎴块棿鍚�
         /// </summary>
@@ -91,7 +95,7 @@
         /// 鏄惁鍙互鍒锋柊鎴块棿鏁版嵁浜�
         /// 闇�瑕佺瓑鍒濆鍖栨湰鍦拌澶囨暟鎹悗鍦ㄥ彲浠ュ垵濮嬪寲鎴块棿鏁版嵁
         /// </summary>
-        public static bool canInitAllRoom;
+        public static bool CanInitAllRoom;
 
         /// <summary>
         /// 鑾峰彇鍠滅埍鎴块棿鐨勬墍鏈夎澶囪矾寰�
@@ -192,7 +196,7 @@
         /// </summary>
         public static void InitAllRoom()
         {
-            if (canInitAllRoom == false)
+            if (CanInitAllRoom == false)
             {
                 return;
             }
@@ -249,7 +253,7 @@
                 }
             }
             homeTemp.Save(false);
-            canInitAllRoom = true;
+            CanInitAllRoom = true;
             InitAllRoom();
         }
 
@@ -417,71 +421,48 @@
         }
 
         /// <summary>
-        /// 鏍规嵁鎴块棿鍚嶅瓧锛岃幏鍙栨埧闂村璞�
+        /// 鏍规嵁鎴块棿Id锛岃幏鍙栨埧闂村璞�
         /// </summary>
         /// <returns>The room by name.</returns>
-        /// <param name="roomName">鎴块棿鍚�</param>
-        public Room GetRoomByName(string roomName)
+        /// <param name="roomId">鎴块棿ID</param>
+        public Room GetRoomById(string roomId)
         {
-            return Lists.Find((obj) => obj.Name == roomName);
+            return Lists.Find((obj) => obj.Id == roomId);
         }
 
         /// <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.DeviceAddr = device.DeviceAddr;
             deviceUI.DeviceEpoint = device.DeviceEpoint;
 
-            return Lists.FindAll((obj) => obj.DeviceUIFilePathList.Contains(deviceUI.FileName));
+            return Lists.Find((obj) => obj.DeviceUIFilePathList.Contains(deviceUI.FileName));
         }
 
         /// <summary>
@@ -528,52 +509,37 @@
         /// 璁惧鐨勬埧闂村彉鏇�
         /// </summary>
         /// <param name="device">璁惧瀵硅薄</param>
-        /// <param name="listnewName">鏂版埧闂村悕瀛楀垪琛�</param>
-        public void ChangedRoom(CommonDevice device, List<string> listnewName)
+        /// <param name="roomId">鏂版埧闂碔d</param>
+        public void ChangedRoom(CommonDevice device, string roomId)
         {
             //鎴块棿鏄惁淇敼
-            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);
             }
-        }
-
+        }
+
         /// <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;
         }
@@ -676,8 +642,7 @@
         /// 娣诲姞璁惧
         /// </summary>
         /// <param name="device">瑕佹坊鍔犵殑璁惧瀵硅薄</param>
-        /// <param name="backUpUI">鏄惁瑕佽鐩朥I鏂囦欢</param>
-        public void AddDevice(CommonDevice device, bool backUpUI = true)
+        public void AddDevice(CommonDevice device)
         {
             if (device == null)
             {
@@ -726,21 +691,7 @@
         /// 鍒犻櫎璁惧
         /// </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)
             {
@@ -750,36 +701,23 @@
             deviceUI.DeviceAddr = device.DeviceAddr;
             deviceUI.DeviceEpoint = device.DeviceEpoint;
 
-            //鏍规嵁璁惧锛岃幏鍙栨墍鍦ㄧ殑鎴块棿锛屽洜涓哄畠鍒犵殑涓嶄竴瀹氭槸褰撳墠鎴块棿
-            List<Room> listroom = this.GetRoomByDevice(device);
-
-            //鍒犻櫎UI鏂囦欢
-            if (DeleteUi == true && Global.IsExistsByHomeId(deviceUI.FileName) == true)
-            {
-                Global.DeleteFilebyHomeId(deviceUI.FileName);
-                //鍒犻櫎鑷姩澶囦唤
-                Phone.UserCenter.HdlAutoBackupLogic.DeleteFile(deviceUI.FileName);
-            }
-
-            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 room = this.GetRoomByDevice(device);
+            if (room == null)
+            {
+                return;
+            }
+            //绉婚櫎缂撳瓨
+            if (room.DeviceUIFilePathList.Contains(deviceUI.FileName) == false)
+            {
+                return;
+            }
+            room.DeviceUIFilePathList.Remove(deviceUI.FileName);
+
+            room.DeviceUIList.RemoveAll((obj) => obj.FileName == deviceUI.FileName);
+            room.Save();
+            //鏇存敼鑷姩澶囦唤
+            HdlAutoBackupLogic.AddOrEditorFile(room.FileName);
         }
 
         #endregion
@@ -1151,6 +1089,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)
+                {
+                    //涓嶆槸鍚屼竴涓ゼ灞�
+                    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>
@@ -1162,6 +1236,7 @@
             var newRoom = new Room();
             //鍏嬮殕灞炴��
             newRoom.Id = this.Id;
+            newRoom.FloorId = this.FloorId;
             newRoom.Name = this.Name;
             newRoom.BackgroundImage = this.BackgroundImage;
             newRoom.BackgroundImageType = this.BackgroundImageType;

--
Gitblit v1.8.0