From 48ba446936b51fffafa7c3600c0dadc6ac0e8c20 Mon Sep 17 00:00:00 2001 From: 陈嘉乐 <cjl@hdlchina.com.cn> Date: 星期五, 10 七月 2020 10:52:13 +0800 Subject: [PATCH] 2020-07-10-01 --- ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs | 196 ++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 152 insertions(+), 44 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs index a44eb08..75af7bc 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,6 +54,9 @@ /// </summary> public void InitAllRoom() { + this.NowMainPageRoom = null; + this.NowCategoryRoom = null; + //娓呯┖鏈湴缂撳瓨 this.dicRooms.Clear(); //妫�娴嬫垜鐨勫枩鐖辫繖涓埧闂村璞� @@ -123,7 +108,14 @@ } } //妫�娴嬫ゼ灞傛暟鎹殑鍚堟硶鎬� - this.CheckFloorData(listRoomFile); + if (UserCenterResourse.UserInfo.AuthorityNo == 3) + { + this.CheckMemberFloorData(listRoomFile); + } + else + { + this.CheckAdminFloorData(listRoomFile); + } homeTemp.Save(false); InitAllRoom(); @@ -136,7 +128,7 @@ { Application.RunOnMainThread(() => { - Phone.Device.Room.RoomManagement.Instance.Show(); + MainPage.ListRoomViewFrom.Instance?.RefreshListRoom(); }); } @@ -144,8 +136,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 +161,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,7 +212,8 @@ /// 澧炲姞鎴块棿 /// </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) @@ -188,8 +228,11 @@ room.Save(); //澶囦唤 HdlAutoBackupLogic.AddOrEditorFile(room.FileName); - //鍒锋柊鎴块棿瑙嗗浘鍒楄〃 - this.RefreshRoomListView(); + if (refreshRoomView == true) + { + //鍒锋柊鎴块棿瑙嗗浘鍒楄〃 + this.RefreshRoomListView(); + } } #endregion @@ -247,6 +290,10 @@ Global.DeleteFilebyHomeId(roomFilePath); } HdlAutoBackupLogic.DeleteFile(roomFilePath); + + //鏍规嵁鎴块棿ID,绉婚櫎鎸囧畾鐨勭湡瀹炵墿鐞嗚澶囩殑鎵�灞炴埧闂磋褰� + Common.LocalDevice.Current.DeleteRealDeviceByRoomId(roomId); + //鍒锋柊鎴块棿瑙嗗浘鍒楄〃 this.RefreshRoomListView(); } @@ -307,10 +354,19 @@ /// </summary> /// <returns>鎴块棿鍚�</returns> /// <param name="device">璁惧瀵硅薄</param> - /// <param name="append">鍦ㄦゼ灞傚拰鎴块棿鍚嶅瓧鐨勪腑闂存坊鍔犵殑瀛楃(浠呴檺鏈夋ゼ灞傜殑鏃跺�欐湁鏁�)</param> - public string GetRoomNameByDevice(CommonDevice device, string append = " ") + public string GetRoomNameByDevice(CommonDevice device) { var room = this.GetRoomByDevice(device); + return this.GetFloorRoomName(room); + } + + /// <summary> + /// 鑾峰彇鎴块棿鍚嶅瓧(妤煎眰+鎴块棿鍚�) + /// </summary> + /// <returns>鎴块棿鍚�</returns> + /// <param name="room">鎴块棿瀵硅薄</param> + public string GetFloorRoomName(Room room) + { if (room == null) { //鏈垎閰嶅尯鍩� @@ -319,7 +375,7 @@ if (Config.Instance.Home.FloorDics.ContainsKey(room.FloorId) == true) { //(妤煎眰+鎴块棿鍚�) - return Config.Instance.Home.FloorDics[room.FloorId] + append + room.Name; + return Config.Instance.Home.FloorDics[room.FloorId] + " " + room.Name; } return room.Name; } @@ -510,13 +566,24 @@ /// <param name="saveRealRoom">鏄惁淇敼鐪熷疄鐗╃悊璁惧鐨勬埧闂�,涓嶅嚭鎰忓,杩欎釜鍊奸粯璁や负true鍗冲彲</param> public void ChangedRoom(CommonDevice device, string roomId, bool saveRealRoom = true) { + //閫夋嫨鐨勬槸鏈垎閰� + if (roomId == string.Empty) + { + //浠庡師鏉ョ殑鎴块棿绉婚櫎璁惧 + this.DeleteDevice(device); + //绉婚櫎鎴戠殑鍠滅埍 + this.DeleteLoveDevice(device); + //璁惧鏀瑰彉鎴块棿鐨勮瘽,涓婚〉闇�瑕侀噸鏂板埛鏂� + UserView.UserPage.Instance.RefreshForm = true; + return; + } //鎴块棿鏄惁淇敼 if (this.IsRoomChanged(device, roomId) == false) { return; } - //浠庡師鏉ョ殑鎴块棿绉婚櫎璁惧 - this.DeleteDevice(device); + //浠庡師鏉ョ殑鎴块棿绉婚櫎璁惧,杩欓噷涓嶅垹闄ょ湡瀹炶澶囩殑鎴块棿 + this.DeleteDevice(device, false); //娣诲姞鍒版柊鐨勬埧闂� var room = this.GetRoomById(roomId); @@ -524,6 +591,8 @@ { this.AddDevice(room, device, saveRealRoom); } + //璁惧鏀瑰彉鎴块棿鐨勮瘽,涓婚〉闇�瑕侀噸鏂板埛鏂� + UserView.UserPage.Instance.RefreshForm = true; } /// <summary> @@ -553,7 +622,7 @@ { return i_room.Name; } - var floorName = Config.Instance.Home.GetFloorNameById(i_room.FloorId); + var floorName = HdlResidenceLogic.Current.GetFloorNameById(i_room.FloorId); if (floorName == null) { return i_room.Name; @@ -627,12 +696,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) @@ -647,7 +724,7 @@ HdlAutoBackupLogic.AddOrEditorFile(room.FileName); //閫掑綊锛氬垹闄ゆ帀浠ュ墠鐨勬棫鏁版嵁瀵艰嚧鐨勫涓埧闂寸殑闂 - this.DeleteDevice(device); + this.DeleteDevice(device, deleteReal); } /// <summary> @@ -683,12 +760,28 @@ /// <returns></returns> public List<CommonDevice> GetRoomListDevice(Room i_room) { - var listDevice = new List<CommonDevice>(); + var dicSort = new Dictionary<string, List<int>>(); foreach (var mainKeys in i_room.ListDevice) { var device = LocalDevice.Current.GetDevice(mainKeys); if (device != null) { + if (dicSort.ContainsKey(device.DeviceAddr) == false) + { + dicSort[device.DeviceAddr] = new List<int>(); + } + dicSort[device.DeviceAddr].Add(device.DeviceEpoint); + } + } + var listDevice = new List<CommonDevice>(); + foreach (var strMac in dicSort.Keys) + { + var listEpont = dicSort[strMac]; + //鎺掑簭 + listEpont.Sort(); + for (int i = 0; i < listEpont.Count; i++) + { + var device = LocalDevice.Current.GetDevice(strMac, listEpont[i]); listDevice.Add(device); } } @@ -747,6 +840,11 @@ var listEsxit = new HashSet<string>(); foreach (var room in this.dicRooms.Values) { + if (room.IsLove == true) + { + //涓嶅寘鍚敹钘忔埧闂� + continue; + } foreach (string mainkeys in room.ListDevice) { if (listEsxit.Contains(mainkeys) == false) @@ -760,15 +858,16 @@ var commonDeviceList = LocalDevice.Current.listAllDevice; foreach (var device in commonDeviceList) { + //鍒ゆ柇璇ヨ澶囪兘鍚︽樉绀哄湪涓婚〉 + if (LocalDevice.Current.CanShowInHomeHomeMainPage(device) == false) + { + continue; + } string mainkeys = LocalDevice.Current.GetDeviceMainKeys(device); if (listEsxit.Contains(mainkeys) == false) { listDevice.Add(device); } - } - if (listDevice.Count == 0) - { - return null; } return listDevice; } @@ -825,13 +924,17 @@ #region 鈻� 妤煎眰鍜屾埧闂撮『搴忕浉鍏砡________________ /// <summary> - /// 鏍规嵁妤煎眰鐨勪富閿幏鍙栨帓搴忓悗鐨勬埧闂村垪琛� + /// 鏍规嵁妤煎眰鐨勪富閿幏鍙栨帓搴忓悗鐨勬埧闂村垪琛�(鏀寔鏃犳ゼ灞傛ā寮�,涓嶈幏鍙栨敹钘忔埧闂�) /// </summary> /// <param name="i_floorKeys">妤煎眰鐨勪富閿�</param> /// <param name="getShard">鍒嗕韩鐨勬埧闂存槸鍚︿篃鑾峰彇</param> /// <returns></returns> public List<Room> GetFloorSortRoom(string i_floorKeys, bool getShard = true) { + if (i_floorKeys == null) + { + i_floorKeys = string.Empty; + } Dictionary<string, List<string>> dicAllSort = new Dictionary<string, List<string>>(); //璇诲彇鎴块棿椤哄簭 string fullName = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.RoomSortFile); @@ -854,9 +957,14 @@ var dicRoom = new Dictionary<string, Common.Room>(); foreach (var room in this.dicRooms.Values) { - if (room.FloorId != i_floorKeys || room.IsLove == true) + if (room.FloorId != i_floorKeys && i_floorKeys != string.Empty) { //涓嶆槸鍚屼竴涓ゼ灞� + continue; + } + if (room.IsLove == true) + { + //涓嶈鎴戠殑鍠滅埍 continue; } if (listRoomSort.Contains(room.Id) == false) @@ -993,7 +1101,7 @@ if (Config.Instance.Home.ListRooms.Contains("Favorite") == false) { //榛樿娣诲姞鍠滅埍鐨勬埧闂�--绂佹淇敼鎴块棿鍚� - var love = new Room { Name = Language.StringByID(R.MyInternationalizationString.Favorite), BackgroundImage = "RoomIcon/0.JPG", Id = "Favorite" }; + 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; -- Gitblit v1.8.0