From 25429f085093d89d543a0b90e30d0d62d1b7dac9 Mon Sep 17 00:00:00 2001 From: hxb <hxb@hdlchina.com.cn> Date: 星期二, 30 八月 2022 09:37:38 +0800 Subject: [PATCH] 合并了IOS的代码 --- ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs | 2758 +++++++++++++++++++++++++++++++++++------------------------ 1 files changed, 1,643 insertions(+), 1,115 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs old mode 100755 new mode 100644 index 04158ce..b173072 --- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs +++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs @@ -1,1115 +1,1643 @@ -锘縰sing Shared.Common; -using System; -using System.Collections.Generic; -using System.Text; -using ZigBee.Device; - -namespace Shared.Phone.UserCenter -{ - /// <summary> - /// 鎴块棿鐨勯�昏緫 - /// </summary> - public class HdlRoomLogic - { - #region 鈻� 鍙橀噺澹版槑___________________________ - - /// <summary> - /// 鎴块棿鐨勯�昏緫 - /// </summary> - private static HdlRoomLogic m_Current = null; - /// <summary> - /// 鎴块棿鐨勯�昏緫 - /// </summary> - public static HdlRoomLogic Current - { - get - { - if (m_Current == null) - { - m_Current = new HdlRoomLogic(); - } - return m_Current; - } - } - /// <summary> - /// 褰撳墠涓婚〉閫夋嫨鐨勬埧闂村璞� - /// </summary> - public Room NowMainPageRoom = null; - /// <summary> - /// 褰撳墠鍒嗙被閫夋嫨鐨勬埧闂村璞� - /// </summary> - public Room NowCategoryRoom = null; - /// <summary> - /// 鎵�鏈夌殑鎴块棿淇℃伅 - /// </summary> - private Dictionary<string, Room> dicRooms = new Dictionary<string, Room>(); - - #endregion - - #region 鈻� 鍒濆鍖朹____________________________ - - /// <summary> - /// 鍒濆鍖栨埧闂翠俊鎭� - /// 浠庢枃浠朵腑鍏ㄩ儴璇诲彇鎵�鏈夌殑鎴块棿鏁版嵁鍒板唴瀛� - /// </summary> - public void InitAllRoom() - { - this.NowMainPageRoom = null; - this.NowCategoryRoom = null; - - //娓呯┖鏈湴缂撳瓨 - this.dicRooms.Clear(); - //妫�娴嬫垜鐨勫枩鐖辫繖涓埧闂村璞� - this.CheckLoveRoom(); - - foreach (var roomId in Config.Instance.Home.ListRooms) - { - //浠庢枃浠堕噷闈㈣幏鍙栨埧闂村璞� - var room = this.GetRoomByFilePath($"Room_{roomId}.json"); - if (room != null) - { - this.dicRooms[room.Id] = (room); - } - } - //璁剧疆褰撳墠妤煎眰鐨処D - Config.Instance.Home.SetCurrentFloorId(); - //椤轰究鍒锋柊鍦烘櫙 - HdlSceneLogic.Current.ReFreshByLocal(); - //鍒锋柊鎴块棿瑙嗗浘鍒楄〃 - this.RefreshRoomListView(); - } - - /// <summary> - /// 浠庢湰鍦伴噸鏂板姞杞藉叏閮ㄧ殑鎴块棿 - /// </summary> - public void RefreshAllRoomByLocation() - { - var homeTemp = Config.Instance.Home; - homeTemp.ListRooms.Clear(); - - var listFile = Global.FileListByHomeId(); - - //鎴戠殑鍠滅埍鐨勬埧闂村繀椤昏鍦ㄧ0浣嶆墠琛� - string fRoom = "Room_Favorite.json"; - if (listFile.Contains(fRoom) == true) - { - listFile.Remove(fRoom); - homeTemp.ListRooms.Add("Favorite"); - } - - var listRoomFile = new List<string>(); - foreach (string fileName in listFile) - { - if (fileName.StartsWith("Room_")) - { - string roomId = fileName.Replace("Room_", string.Empty).Replace(".json", string.Empty); - homeTemp.ListRooms.Add(roomId); - listRoomFile.Add(fileName); - } - } - //妫�娴嬫ゼ灞傛暟鎹殑鍚堟硶鎬� - if (UserCenterResourse.UserInfo.AuthorityNo == 3) - { - this.CheckMemberFloorData(listRoomFile); - } - else - { - this.CheckAdminFloorData(listRoomFile); - } - - homeTemp.Save(false); - InitAllRoom(); - } - - /// <summary> - /// 鍒锋柊鎴块棿瑙嗗浘鍒楄〃 - /// </summary> - public void RefreshRoomListView() - { - Application.RunOnMainThread(() => - { - MainPage.ListRoomViewFrom.Instance?.RefreshListRoom(); - }); - } - - /// <summary> - /// 妫�娴嬫ゼ灞傛暟鎹殑鍚堟硶鎬� - /// </summary> - /// <param name="listRoomFile"></param> - private void CheckAdminFloorData(List<string> listRoomFile) - { - //娌℃湁妤煎眰,鍒欐棤闇�澶勭悊 - if (Config.Instance.Home.FloorDics.Count == 0) { return; } - - //涓讳汉鎴栬�呯鐞嗗憳鐨勮瘽,灏辨娴嬫槸鍚﹀瓨鍦ㄦ湭鍒嗛厤妤煎眰鐨勬埧闂� - for (int i = 0; i < listRoomFile.Count; i++) - { - try - { - var byteData = Global.ReadFileByHomeId(listRoomFile[i]); - string valueData = System.Text.Encoding.UTF8.GetString(byteData); - var roomTemp = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.Room>(valueData); - - //妫�娴嬪涓墜鏈烘潵鍥炲垱寤�,鐒跺悗鍙堝垹闄や箣鍚�,妤煎眰鏁版嵁涓嶈兘淇濊瘉100%鍚屾鐨勯棶棰� - if (roomTemp.FloorId != string.Empty && Config.Instance.Home.FloorDics.ContainsKey(roomTemp.FloorId) == false) - { - //鏈煡妤煎眰 - Config.Instance.Home.FloorDics[roomTemp.FloorId] = Language.StringByID(R.MyInternationalizationString.uUnKnownFloor); - } - } - catch (Exception ex) { HdlLogLogic.Current.WriteLog(ex); } - } - } - - /// <summary> - /// 妫�娴嬫ゼ灞傛暟鎹殑鍚堟硶鎬� - /// </summary> - /// <param name="listRoomFile"></param> - private void CheckMemberFloorData(List<string> listRoomFile) - { - //娌℃湁妤煎眰,鍒欐棤闇�澶勭悊 - if (Config.Instance.Home.FloorDics.Count == 0) { return; } - - //鎴愬憳鐨勮瘽,灏辨娴嬫槸鍚﹀瓨鍦ㄦ病鏈夋埧闂寸殑妤煎眰 - var listEsixtFloor = new List<string>(); - for (int i = 0; i < listRoomFile.Count; i++) - { - try - { - var byteData = Global.ReadFileByHomeId(listRoomFile[i]); - string valueData = System.Text.Encoding.UTF8.GetString(byteData); - var roomTemp = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.Room>(valueData); - if (roomTemp.FloorId != string.Empty && listEsixtFloor.Contains(roomTemp.FloorId) == false) - { - //鏀堕泦妤煎眰 - listEsixtFloor.Add(roomTemp.FloorId); - } - } - catch (Exception ex) { HdlLogLogic.Current.WriteLog(ex); } - } - var listDeleteId = new List<string>(); - foreach (var flootId in Config.Instance.Home.FloorDics.Keys) - { - if (listEsixtFloor.Contains(flootId) == false) - { - //濡傛灉杩欎釜id涓嶅瓨鍦ㄤ簬浠讳綍鎴块棿鐨勮瘽,鏀堕泦瀹� - listDeleteId.Add(flootId); - } - } - foreach (var deleteId in listDeleteId) - { - //鍒犻櫎杩欎釜id - Config.Instance.Home.FloorDics.Remove(deleteId); - } - Config.Instance.Home.Save(false); - } - - #endregion - - #region 鈻� 娣诲姞鎴块棿___________________________ - - /// <summary> - /// 澧炲姞鎴块棿 - /// </summary> - /// <param name="room">Room.</param> - /// <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) - { - return; - } - //娣诲姞鍒扮紦瀛� - this.dicRooms[room.Id] = room; - //鎶婃埧闂碔D娣诲姞鍒颁綇瀹� - Config.Instance.Home.AddRoomId(room.Id); - //鐢熸垚鏂囦欢 - room.Save(); - //澶囦唤 - HdlAutoBackupLogic.AddOrEditorFile(room.FileName); - if (refreshRoomView == true) - { - //鍒锋柊鎴块棿瑙嗗浘鍒楄〃 - this.RefreshRoomListView(); - } - } - - #endregion - - #region 鈻� 鍒犻櫎鎴块棿___________________________ - - /// <summary> - /// 鍒犻櫎鎴块棿 - /// </summary> - /// <param name="roomId">鎴块棿ID</param> - /// <returns></returns> - public void RemoveRoom(string roomId) - { - //鏍规嵁鎴块棿Id锛岃幏鍙栨埧闂村璞� - var room = this.GetRoomById(roomId); - if (room == null) - { - return; - } - //鍒犻櫎鏉ヨ嚜鎷嶇収鎴栬�呯郴缁熷浘搴撶殑鎴块棿鑳屾櫙鍥剧墖 - if (room.BackgroundImageType == 1 || room.BackgroundImageType == 2) - { - //鍒犻櫎鎺夊師鏉ョ殑鑷畾涔夊浘鐗� - if (Global.IsExistsByHomeId(room.BackgroundImage) == true) - { - Global.DeleteFilebyHomeId(room.BackgroundImage); - //鍒犻櫎澶囦唤 - HdlAutoBackupLogic.DeleteFile(room.BackgroundImage); - } - } - //鎴戠殑鍠滅埍 - var loveRoom = this.GetLoveRoom(); - if (loveRoom != null) - { - //绉婚櫎鎴戠殑鍠滅埍閲岄潰鐨勮澶� - for (int i = 0; i < room.ListDevice.Count; i++) - { - loveRoom.ListDevice.Remove(room.ListDevice[i]); - } - //绉婚櫎鎴戠殑鍠滅埍閲岄潰鐨勫満鏅� - for (int i = 0; i < room.ListSceneId.Count; i++) - { - loveRoom.ListSceneId.Remove(room.ListSceneId[i]); - } - loveRoom.Save(false); - } - - Config.Instance.Home.RemoveRoomId(roomId); - this.dicRooms.Remove(roomId); - - string roomFilePath = room.FileName; - if (Global.IsExistsByHomeId(roomFilePath) == true) - { - //鍒犻櫎鏂囦欢 - Global.DeleteFilebyHomeId(roomFilePath); - } - HdlAutoBackupLogic.DeleteFile(roomFilePath); - - //鏍规嵁鎴块棿ID,绉婚櫎鎸囧畾鐨勭湡瀹炵墿鐞嗚澶囩殑鎵�灞炴埧闂磋褰� - Common.LocalDevice.Current.DeleteRealDeviceByRoomId(roomId); - - //鍒锋柊鎴块棿瑙嗗浘鍒楄〃 - this.RefreshRoomListView(); - } - - #endregion - - #region 鈻� 鑾峰彇鎴块棿___________________________ - - /// <summary> - /// 鑾峰彇鍠滅埍鎴块棿 - /// </summary> - /// <returns></returns> - public Room GetLoveRoom() - { - //妫�娴嬫垜鐨勫枩鐖辫繖涓埧闂村璞� - this.CheckLoveRoom(); - - return this.dicRooms["Favorite"]; - } - - /// <summary> - /// 閫氳繃璺緞鑾峰彇鎴块棿 - /// </summary> - /// <returns>The room by file path.</returns> - /// <param name="roomFilePath">Room file path.</param> - private Room GetRoomByFilePath(string roomFilePath) - { - try - { - var roomFile = Global.ReadFileByHomeId(roomFilePath); - var nowRoom = Newtonsoft.Json.JsonConvert.DeserializeObject<Room>(Encoding.UTF8.GetString(roomFile)); - - return nowRoom; - } - catch (Exception ex) - { - HdlLogLogic.Current.WriteLog(ex); - return null; - } - } - - /// <summary> - /// 鏍规嵁鎴块棿Id锛岃幏鍙栨埧闂村璞� - /// </summary> - /// <returns>The room by name.</returns> - /// <param name="roomId">鎴块棿ID</param> - public Room GetRoomById(string roomId) - { - if (this.dicRooms.ContainsKey(roomId) == false) - { - return null; - } - return this.dicRooms[roomId]; - } - - /// <summary> - /// 鏍规嵁璁惧鑾峰彇鎴块棿鍚嶅瓧(妤煎眰+鎴块棿鍚�) - /// </summary> - /// <returns>鎴块棿鍚�</returns> - /// <param name="device">璁惧瀵硅薄</param> - public string GetRoomNameByDevice(CommonDevice device) - { - var room = this.GetRoomByDevice(device); - return this.GetFloorRoomName(room); - } - - /// <summary> - /// 鑾峰彇鎴块棿鍚嶅瓧(妤煎眰+鎴块棿鍚�) - /// </summary> - /// <returns>鎴块棿鍚�</returns> - /// <param name="room">鎴块棿瀵硅薄</param> - public string GetFloorRoomName(Room room) - { - if (room == null) - { - //鏈垎閰嶅尯鍩� - return Language.StringByID(R.MyInternationalizationString.uDeviceNotAssignedRoom); - } - if (Config.Instance.Home.FloorDics.ContainsKey(room.FloorId) == true) - { - //(妤煎眰+鎴块棿鍚�) - return Config.Instance.Home.FloorDics[room.FloorId] + " " + room.Name; - } - return room.Name; - } - - /// <summary> - /// 鑾峰彇璁惧鎵�鍦ㄧ殑鎴块棿(娌℃湁璁剧疆鏈夋埧闂村垯杩斿洖null) - /// </summary> - /// <returns>The room by device.</returns> - /// <param name="device">璁惧瀵硅薄</param> - public Room GetRoomByDevice(CommonDevice device) - { - string mainKeys = LocalDevice.Current.GetDeviceMainKeys(device); - foreach (var room in this.dicRooms.Values) - { - if (room.IsLove == true) - { - //鍠滅埍鎴块棿涓嶅鐞� - continue; - } - if (room.ListDevice.Contains(mainKeys) == true) - { - return room; - } - } - return null; - } - - /// <summary> - /// 閫氳繃鍦烘櫙id鑾峰彇鎴块棿鍚� - /// </summary> - /// <returns>The room name by scene identifier.</returns> - /// <param name="sceneId">Scene identifier.</param> - public string GetRoomNameBySceneId(int sceneId) - { - var room = GetRoomBySceneId(sceneId); - if (room == null) - { - return null; - } - return room.Name; - } - - /// <summary> - /// 閫氳繃鍦烘櫙id鑾峰彇鎴块棿瀵硅薄 - /// </summary> - /// <returns>The room by scene identifier.</returns> - /// <param name="sceneId">Scene identifier.</param> - public Room GetRoomBySceneId(int sceneId) - { - foreach (var room in this.dicRooms.Values) - { - if (room.IsLove == true) - { - //鍠滅埍鎴块棿涓嶅鐞� - continue; - } - if (room.ListSceneId.Contains(sceneId) == true) - { - return room; - } - } - return null; - } - - /// <summary> - /// 鑾峰彇褰撳墠妤煎眰鐨勬埧闂� - /// </summary> - /// <param name="id"></param> - /// <returns></returns> - public List<Room> GetRoomsByFloorId(string id) - { - var listRoom = new List<Room>(); - if (Config.Instance.Home.FloorDics.Count == 0) - { - //娌℃湁妤煎眰 - foreach (var room in this.dicRooms.Values) - { - listRoom.Add(room); - } - } - else - { - foreach (var room in this.dicRooms.Values) - { - if (room.FloorId == id) - { - listRoom.Add(room); - } - } - } - return listRoom; - } - - /// <summary> - /// 鑾峰彇鍏ㄩ儴鐨勬埧闂� - /// </summary> - /// <returns></returns> - public List<Room> GetAllListRooms() - { - var listRoom = new List<Room>(); - foreach (var room in this.dicRooms.Values) - { - listRoom.Add(room); - } - return listRoom; - } - - /// <summary> - /// 鑾峰彇褰撳墠妤煎眰鐨勬埧闂村悕绉� - /// </summary> - /// <param name="id"></param> - /// <returns></returns> - public List<string> GetRoomNamesByFloorId(string id) - { - var listName = new List<string>(); - if (Config.Instance.Home.FloorDics.Count == 0) - { - //娌℃湁妤煎眰 - foreach (var room in this.dicRooms.Values) - { - listName.Add(room.Name); - } - } - else - { - foreach (var room in this.dicRooms.Values) - { - if (room.FloorId == id) - { - listName.Add(room.Name); - } - } - } - return listName; - } - - /// <summary> - /// 鑾峰彇褰撳墠妤煎眰鐨勬埧闂�(鎷兼帴浜嗐�愬父鐢ㄣ�戝湪绗竴浣�) - /// </summary> - /// <param name="id"></param> - /// <returns></returns> - public List<Room> GetRoomsByFloorIdAppendLoveRoom(string id) - { - var listRoom = new List<Room>(); - if (Config.Instance.Home.FloorDics.Count == 0) - { - //娌℃湁妤煎眰 - foreach (var room in this.dicRooms.Values) - { - if (room.IsLove == false) - { - listRoom.Add(room); - } - } - } - else - { - foreach (var room in this.dicRooms.Values) - { - if (room.FloorId == id && room.IsLove == false) - { - listRoom.Add(room); - } - } - } - listRoom.Insert(0, GetLoveRoom()); - return listRoom; - } - - /// <summary> - /// 鑾峰彇褰撳墠妤煎眰鐨勬埧闂�(鎷兼帴浜嗐�愬父鐢ㄣ�戝湪绗竴浣�) - /// </summary> - /// <returns></returns> - public List<Room> GetRoomsByCurrentFloorIdAppendLoveRoom() - { - return this.GetRoomsByFloorIdAppendLoveRoom(Config.Instance.Home.CurrentFloorId); - } - - #endregion - - #region 鈻� 鎴块棿鏂规硶___________________________ - - /// <summary> - /// 璁惧鐨勬埧闂村彉鏇� - /// </summary> - /// <param name="device">璁惧瀵硅薄</param> - /// <param name="roomId">鏂版埧闂碔d</param> - /// <param name="saveRealRoom">鏄惁淇敼鐪熷疄鐗╃悊璁惧鐨勬埧闂�,涓嶅嚭鎰忓,杩欎釜鍊奸粯璁や负true鍗冲彲</param> - public void ChangedRoom(CommonDevice device, string roomId, bool saveRealRoom = true) - { - //閫夋嫨鐨勬槸鏈垎閰� - if (roomId == string.Empty) - { - //浠庡師鏉ョ殑鎴块棿绉婚櫎璁惧 - this.DeleteDevice(device); - //璁惧鏀瑰彉鎴块棿鐨勮瘽,涓婚〉闇�瑕侀噸鏂板埛鏂� - UserView.UserPage.Instance.RefreshForm = true; - return; - } - //鎴块棿鏄惁淇敼 - if (this.IsRoomChanged(device, roomId) == false) - { - return; - } - //浠庡師鏉ョ殑鎴块棿绉婚櫎璁惧,杩欓噷涓嶅垹闄ょ湡瀹炶澶囩殑鎴块棿 - this.DeleteDevice(device, false); - - //娣诲姞鍒版柊鐨勬埧闂� - var room = this.GetRoomById(roomId); - if (room != null) - { - this.AddDevice(room, device, saveRealRoom); - } - //璁惧鏀瑰彉鎴块棿鐨勮瘽,涓婚〉闇�瑕侀噸鏂板埛鏂� - UserView.UserPage.Instance.RefreshForm = true; - } - - /// <summary> - /// 鎴块棿鍚嶅瓧鏄惁鏈変慨鏀� - /// </summary> - /// <param name="device">璁惧瀵硅薄</param> - /// <param name="roomId">鏂版埧闂碔d</param> - /// <returns></returns> - public bool IsRoomChanged(CommonDevice device, string roomId) - { - var room = this.GetRoomByDevice(device); - if (room == null || room.Id != roomId) - { - return true; - } - return false; - } - - /// <summary> - /// 鑾峰彇鎴块棿鎵�鍦ㄥ尯鍩� - /// 妤煎眰,鎴块棿鍚� - /// </summary> - /// <returns></returns> - public string GetZoneName(Room i_room) - { - if (string.IsNullOrEmpty(i_room.FloorId)) - { - return i_room.Name; - } - var floorName = Config.Instance.Home.GetFloorNameById(i_room.FloorId); - if (floorName == null) - { - return i_room.Name; - } - return $"{floorName}锛寋i_room.Name}"; - } - - #endregion - - #region 鈻� 娣诲姞璁惧___________________________ - - /// <summary> - /// 娣诲姞璁惧 - /// </summary> - /// <param name="i_room">鎴块棿瀵硅薄</param> - /// <param name="device">瑕佹坊鍔犵殑璁惧瀵硅薄</param> - /// <param name="saveRealRoom">鏄惁淇敼鐪熷疄鐗╃悊璁惧鐨勬埧闂�,涓嶅嚭鎰忓,杩欎釜鍊奸粯璁や负true鍗冲彲</param> - public void AddDevice(Room i_room, CommonDevice device, bool saveRealRoom) - { - if (device == null) - { - return; - } - //璁惧淇℃伅淇濆瓨鍒版湰鍦� - device.Save(); - - string mainkeys = LocalDevice.Current.GetDeviceMainKeys(device); - if (i_room.ListDevice.Contains(mainkeys) == false) - { - //淇濆瓨鍒版湰鍦� - i_room.ListDevice.Add(mainkeys); - i_room.Save(); - - if (i_room.IsLove == false && saveRealRoom == true && LocalDevice.Current.GetDevicesCountByMac(device.DeviceAddr) == 1) - { - //濡傛灉鍙湁涓�涓洖璺�,鍒欎慨鏀圭湡瀹炵墿鐞嗚澶囩殑鎴块棿 - LocalDevice.Current.SaveRealDeviceRoomId(new List<CommonDevice>() { device }, i_room.Id, false); - } - } - } - - /// <summary> - /// 娣诲姞鍠滅埍璁惧 - /// </summary> - /// <param name="device">瑕佹坊鍔犵殑璁惧瀵硅薄</param> - public void AddLoveDevice(CommonDevice device) - { - if (device == null) - { - return; - } - //鎴戠殑鍠滅埍 - var loveRoom = this.GetLoveRoom(); - if (loveRoom != null) - { - string mainkeys = LocalDevice.Current.GetDeviceMainKeys(device); - if (loveRoom.ListDevice.Contains(mainkeys) == false) - { - //淇濆瓨鍒版湰鍦� - loveRoom.ListDevice.Add(mainkeys); - loveRoom.Save(); - } - } - } - - #endregion - - #region 鈻� 鍒犻櫎璁惧___________________________ - - /// <summary> - /// 鍒犻櫎璁惧(杩欎釜鍑芥暟涓嶅垹闄ゆ垜鐨勫枩鐖�) - /// </summary> - /// <param name="device">瑕佸垹闄ょ殑璁惧瀵硅薄</param> - /// <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) - { - return; - } - //绉婚櫎缂撳瓨 - string mainkeys = LocalDevice.Current.GetDeviceMainKeys(device); - room.ListDevice.Remove(mainkeys); - room.Save(); - //鏇存敼鑷姩澶囦唤 - HdlAutoBackupLogic.AddOrEditorFile(room.FileName); - - //閫掑綊锛氬垹闄ゆ帀浠ュ墠鐨勬棫鏁版嵁瀵艰嚧鐨勫涓埧闂寸殑闂 - this.DeleteDevice(device, deleteReal); - } - - /// <summary> - /// 鍒犻櫎鎴戠殑鍠滅埍鐨勮澶� - /// </summary> - /// <param name="device">瑕佸垹闄ょ殑璁惧瀵硅薄</param> - public void DeleteLoveDevice(CommonDevice device) - { - if (device == null) - { - return; - } - //鎴戠殑鍠滅埍 - var loveRoom = this.GetLoveRoom(); - if (loveRoom != null) - { - //绉婚櫎缂撳瓨 - string mainkeys = LocalDevice.Current.GetDeviceMainKeys(device); - loveRoom.ListDevice.Remove(mainkeys); - loveRoom.Save(); - //鏇存敼鑷姩澶囦唤 - HdlAutoBackupLogic.AddOrEditorFile(loveRoom.FileName); - } - } - - #endregion - - #region 鈻� 鑾峰彇璁惧___________________________ - - /// <summary> - /// 鑾峰彇褰撳墠鎴块棿涓嬬殑鍏ㄩ儴璁惧 - /// </summary> - /// <returns></returns> - public List<CommonDevice> GetRoomListDevice(Room i_room) - { - var dicSort = new Dictionary<string, List<int>>(); - foreach (var mainKeys in i_room.ListDevice) - { - var device = LocalDevice.Current.GetDevice(mainKeys); - if (device != null) - { - if (dicSort.ContainsKey(device.DeviceAddr) == false) - { - dicSort[device.DeviceAddr] = new List<int>(); - } - dicSort[device.DeviceAddr].Add(device.DeviceEpoint); - } - } - var listDevice = new List<CommonDevice>(); - foreach (var strMac in dicSort.Keys) - { - var listEpont = dicSort[strMac]; - //鎺掑簭 - listEpont.Sort(); - for (int i = 0; i < listEpont.Count; i++) - { - var device = LocalDevice.Current.GetDevice(strMac, listEpont[i]); - listDevice.Add(device); - } - } - return listDevice; - } - - /// <summary> - /// 鑾峰彇鎴块棿璁惧绫诲瀷 - /// </summary> - /// <param name="room"></param> - /// <returns></returns> - public List<DeviceType> GetDeviceTypes(Room i_room) - { - var typeList = new List<DeviceType>(); - foreach (var mainKeys in i_room.ListDevice) - { - var device = LocalDevice.Current.GetDevice(mainKeys); - if (device != null) - { - typeList.Add(device.Type); - } - } - return typeList; - } - - /// <summary> - /// 鑾峰彇璇ョ被鍨嬬殑璁惧 - /// </summary> - /// <param name="room"></param> - /// <param name="deviceType"></param> - /// <returns></returns> - public List<CommonDevice> GetRoomListDevice(Room room, DeviceType deviceType) - { - List<CommonDevice> typeList = new List<CommonDevice>(); - foreach (var mainKeys in room.ListDevice) - { - var device = LocalDevice.Current.GetDevice(mainKeys); - if (device != null && device.Type == deviceType) - { - typeList.Add(device); - } - } - - return typeList; - } - - /// <summary> - /// 鑾峰彇鏈垎閰嶅尯鍩熻澶� - /// </summary> - /// <returns></returns> - public List<CommonDevice> GetUnalloctedDevice() - { - var listDevice = new List<CommonDevice>(); - - //宸茬粡瀛樺湪鐨勮澶� - var listEsxit = new HashSet<string>(); - foreach (var room in this.dicRooms.Values) - { - if (room.IsLove == true) - { - //涓嶅寘鍚敹钘忔埧闂� - continue; - } - foreach (string mainkeys in room.ListDevice) - { - if (listEsxit.Contains(mainkeys) == false) - { - listEsxit.Add(mainkeys); - } - } - } - - //鎵�鏈夎澶� - var commonDeviceList = LocalDevice.Current.listAllDevice; - foreach (var device in commonDeviceList) - { - //鍒ゆ柇璇ヨ澶囪兘鍚︽樉绀哄湪涓婚〉 - if (LocalDevice.Current.CanShowInHomeHomeMainPage(device) == false) - { - continue; - } - string mainkeys = LocalDevice.Current.GetDeviceMainKeys(device); - if (listEsxit.Contains(mainkeys) == false) - { - listDevice.Add(device); - } - } - return listDevice; - } - - /// <summary> - /// 鑾峰彇鍏ㄩ儴鎴块棿鍏ㄩ儴鐨勮澶� - /// </summary> - /// <returns></returns> - public List<CommonDevice> GetAllRoomListDevice() - { - var listDevice = new List<CommonDevice>(); - foreach (var room in this.dicRooms.Values) - { - if (room.IsSharedRoom || room.IsLove) - { - continue; - } - listDevice.AddRange(this.GetRoomListDevice(room)); - } - return listDevice; - } - - #endregion - - #region 鈻� 璁惧鏄惁鏀惰棌_______________________ - - /// <summary> - /// 鏄惁鏄敹钘忚澶� - /// </summary> - /// <param name="filePath"></param> - /// <returns></returns> - public bool IsCollectInRoom(CommonDevice device) - { - string mainkeys = LocalDevice.Current.GetDeviceMainKeys(device); - //鍠滅埍鎴块棿 - var room = this.GetLoveRoom(); - return room.ListDevice.Contains(mainkeys); - } - - /// <summary> - /// 鏄惁鏄敹钘忚澶� - /// </summary> - /// <param name="filePath"></param> - /// <returns></returns> - public bool IsCollectInRoom(SceneUI scene) - { - //鍠滅埍鎴块棿 - var room = this.GetLoveRoom(); - return room.ListSceneId.Contains(scene.Id); - } - - #endregion - - #region 鈻� 妤煎眰鍜屾埧闂撮『搴忕浉鍏砡________________ - - /// <summary> - /// 鏍规嵁妤煎眰鐨勪富閿幏鍙栨帓搴忓悗鐨勬埧闂村垪琛�(鏀寔鏃犳ゼ灞傛ā寮�) - /// </summary> - /// <param name="i_floorKeys">妤煎眰鐨勪富閿�</param> - /// <param name="getShard">鍒嗕韩鐨勬埧闂存槸鍚︿篃鑾峰彇</param> - /// <returns></returns> - public List<Room> GetFloorSortRoom(string i_floorKeys, bool getShard = true) - { - 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); - var strData = UserCenterLogic.LoadFileContent(fullName); - if (strData != null) - { - dicAllSort = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, List<string>>>(strData); - } - - var listRoomSort = new List<string>(); - if (dicAllSort.ContainsKey(i_floorKeys) == true) - { - listRoomSort = dicAllSort[i_floorKeys]; - } - else - { - dicAllSort[i_floorKeys] = listRoomSort; - } - - var dicRoom = new Dictionary<string, Common.Room>(); - foreach (var room in this.dicRooms.Values) - { - if (room.FloorId != i_floorKeys && i_floorKeys != string.Empty) - { - //涓嶆槸鍚屼竴涓ゼ灞� - continue; - } - if (room.IsLove == true) - { - //涓嶈鎴戠殑鍠滅埍 - continue; - } - if (listRoomSort.Contains(room.Id) == false) - { - //鏂版坊鍔犵殑鎴块棿 - listRoomSort.Add(room.Id); - } - if (getShard == false && room.IsSharedRoom == true) - { - //涓嶈鍒嗕韩鐨勬埧闂� - continue; - } - dicRoom[room.Id] = room; - } - - var listSortRoom = new List<Room>(); - for (int i = 0; i < listRoomSort.Count; i++) - { - if (dicRoom.ContainsKey(listRoomSort[i]) == true) - { - listSortRoom.Add(dicRoom[listRoomSort[i]]); - } - } - - //淇濆瓨椤哄簭 - UserCenterLogic.SaveFileContent(fullName, dicAllSort); - return listSortRoom; - } - - /// <summary> - /// 淇濆瓨鎴块棿鐨勯『搴� - /// </summary> - /// <param name="i_floorKeys">妤煎眰涓婚敭</param> - /// <param name="listSort">鎴块棿椤哄簭(鎴块棿鐨勪富閿�)</param> - public void SaveRoomSort(string i_floorKeys, List<string> listSort) - { - Dictionary<string, List<string>> dicAllSort = new Dictionary<string, List<string>>(); - //璇诲彇鎴块棿椤哄簭 - string fullName = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.RoomSortFile); - var strData = UserCenterLogic.LoadFileContent(fullName); - if (strData != null) - { - dicAllSort = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, List<string>>>(strData); - } - - //淇濆瓨椤哄簭 - dicAllSort[i_floorKeys] = listSort; - UserCenterLogic.SaveFileContent(fullName, dicAllSort); - dicAllSort.Clear(); - } - - /// <summary> - /// 鑾峰彇鎺掑簭鍚庣殑妤煎眰 - /// </summary> - /// <returns></returns> - public Dictionary<string, string> GetFloorSortList() - { - //璇诲彇妤煎眰椤哄簭 - var listFloorSort = new List<string>(); - string fullName = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.FloorSortFile); - var strData = UserCenterLogic.LoadFileContent(fullName); - if (strData != null) - { - listFloorSort = Newtonsoft.Json.JsonConvert.DeserializeObject<List<string>>(strData); - } - foreach (string keys in Common.Config.Instance.Home.FloorDics.Keys) - { - if (listFloorSort.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> - /// 鍏嬮殕鎴块棿瀵硅薄 - /// </summary> - /// <returns></returns> - public Room CloneRoomClass(Room i_room) - { - var newRoom = new Room(); - //鍏嬮殕灞炴�� - newRoom.Id = i_room.Id; - newRoom.FloorId = i_room.FloorId; - newRoom.TemperatrueDevice = i_room.TemperatrueDevice; - newRoom.Temperatrue = i_room.Temperatrue; - newRoom.HumidityDevice = i_room.HumidityDevice; - newRoom.Humidity = i_room.Humidity; - newRoom.Name = i_room.Name; - newRoom.BackgroundImage = i_room.BackgroundImage; - newRoom.BackgroundImageType = i_room.BackgroundImageType; - - return newRoom; - } - - #endregion - - #region 鈻� 涓�鑸柟娉昣__________________________ - - /// <summary> - /// 妫�娴嬫垜鐨勫枩鐖辫繖涓埧闂村璞� - /// </summary> - private void CheckLoveRoom() - { - if (Config.Instance.Home.ListRooms.Contains("Favorite") == false) - { - //榛樿娣诲姞鍠滅埍鐨勬埧闂�--绂佹淇敼鎴块棿鍚� - var love = new Room { Name = Language.StringByID(R.MyInternationalizationString.Favorite), BackgroundImage = "RoomIcon/0.jpg", Id = "Favorite" }; - love.Save(false); - //娣诲姞鍒癶ouse 鎴块棿璺緞鍒楄〃 - var currentHome = Config.Instance.Home; - currentHome.ListRooms.Insert(0, love.Id); - currentHome.Save(false); - - this.dicRooms["Favorite"] = love; - } - } - - #endregion - } -} +锘縰sing Shared.Common; +using System; +using System.Collections.Generic; +using System.Text; +using ZigBee.Device; + +namespace Shared.Phone.UserCenter +{ + /// <summary> + /// 鎴块棿鐨勯�昏緫 + /// </summary> + public class HdlRoomLogic + { + #region 鈻� 鍙橀噺澹版槑___________________________ + + /// <summary> + /// 鎴块棿鐨勯�昏緫 + /// </summary> + private static HdlRoomLogic m_Current = null; + /// <summary> + /// 鎴块棿鐨勯�昏緫 + /// </summary> + public static HdlRoomLogic Current + { + get + { + if (m_Current == null) + { + m_Current = new HdlRoomLogic(); + } + return m_Current; + } + } + /// <summary> + /// 褰撳墠涓婚〉閫夋嫨鐨勬埧闂村璞� + /// </summary> + public Room NowMainPageRoom = null; + /// <summary> + /// 褰撳墠鍒嗙被閫夋嫨鐨勬埧闂村璞� + /// </summary> + public Room NowCategoryRoom = null; + /// <summary> + /// 鎵�鏈夌殑鎴块棿淇℃伅 + /// </summary> + private Dictionary<string, Room> dicRooms = new Dictionary<string, Room>(); + /// <summary> + /// 鐗╃悊璁惧灞炰簬鍝釜鎴块棿鐨勮褰� + /// </summary> + private Dictionary<string, string> dicDeviceRoomId = null; + + #endregion + + #region 鈻� 鍒濆鍖朹____________________________ + + /// <summary> + /// 鍒濆鍖栨埧闂翠俊鎭� + /// 浠庢枃浠朵腑鍏ㄩ儴璇诲彇鎵�鏈夌殑鎴块棿鏁版嵁鍒板唴瀛� + /// </summary> + public void InitAllRoom() + { + this.NowMainPageRoom = null; + this.NowCategoryRoom = null; + + //娓呯┖鏈湴缂撳瓨 + this.dicRooms.Clear(); + //妫�娴嬫垜鐨勫枩鐖辫繖涓埧闂村璞� + this.CheckLoveRoom(); + + var listFile = HdlFileLogic.Current.GetRootPathListFile(); + foreach (var fileName in listFile) + { + if (fileName.StartsWith("Room_") == true) + { + //浠庢枃浠堕噷闈㈣幏鍙栨埧闂村璞� + var room = this.GetRoomByFilePath(fileName); + if (room != null) + { + this.dicRooms[room.Id] = (room); + } + } + } + //椤轰究鍒锋柊鍦烘櫙 + HdlSceneLogic.Current.ReFreshByLocal(); + //鍒锋柊鎴块棿瑙嗗浘鍒楄〃 + this.RefreshRoomListView(); + } + + /// <summary> + /// 浠庢湰鍦伴噸鏂板姞杞藉叏閮ㄧ殑鎴块棿 + /// </summary> + public void RefreshAllRoomByLocation() + { + var listFile = HdlFileLogic.Current.GetRootPathListFile(); + + //鎴戠殑鍠滅埍鐨勬埧闂村繀椤昏鍦ㄧ0浣嶆墠琛� + string fRoom = "Room_Favorite.json"; + if (listFile.Contains(fRoom) == true) + { + listFile.Remove(fRoom); + } + + var listRoomFile = new List<string>(); + foreach (string fileName in listFile) + { + if (fileName.StartsWith("Room_")) + { + string roomId = fileName.Replace("Room_", string.Empty).Replace(".json", string.Empty); + listRoomFile.Add(fileName); + } + } + //妫�娴嬫ゼ灞傛暟鎹殑鍚堟硶鎬� + if (UserCenterResourse.UserInfo.AuthorityNo == 3) + { + this.CheckMemberFloorData(listRoomFile); + } + else + { + this.CheckAdminFloorData(listRoomFile); + } + + this.InitAllRoom(); + } + + /// <summary> + /// 鍒锋柊鎴块棿瑙嗗浘鍒楄〃 + /// </summary> + public void RefreshRoomListView() + { + Application.RunOnMainThread(() => + { + MainPage.LeftListRoomViewFrom.Instance?.RefreshListRoom(); + }); + } + + /// <summary> + /// 妫�娴嬫ゼ灞傛暟鎹殑鍚堟硶鎬� + /// </summary> + /// <param name="listRoomFile"></param> + private void CheckAdminFloorData(List<string> listRoomFile) + { + //娌℃湁妤煎眰,鍒欐棤闇�澶勭悊 + if (Config.Instance.Home.FloorDics.Count == 0) { return; } + + //涓讳汉鎴栬�呯鐞嗗憳鐨勮瘽,灏辨娴嬫槸鍚﹀瓨鍦ㄦ湭鍒嗛厤妤煎眰鐨勬埧闂� + for (int i = 0; i < listRoomFile.Count; i++) + { + try + { + var byteData = Global.ReadFileByHomeId(listRoomFile[i]); + string valueData = System.Text.Encoding.UTF8.GetString(byteData); + var roomTemp = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.Room>(valueData); + + //妫�娴嬪涓墜鏈烘潵鍥炲垱寤�,鐒跺悗鍙堝垹闄や箣鍚�,妤煎眰鏁版嵁涓嶈兘淇濊瘉100%鍚屾鐨勯棶棰� + if (roomTemp.FloorId != string.Empty && Config.Instance.Home.FloorDics.ContainsKey(roomTemp.FloorId) == false) + { + //鏈煡妤煎眰 + Config.Instance.Home.FloorDics[roomTemp.FloorId] = Language.StringByID(R.MyInternationalizationString.uUnKnownFloor); + } + } + catch (Exception ex) { HdlLogLogic.Current.WriteLog(ex); } + } + } + + /// <summary> + /// 妫�娴嬫ゼ灞傛暟鎹殑鍚堟硶鎬� + /// </summary> + /// <param name="listRoomFile"></param> + private void CheckMemberFloorData(List<string> listRoomFile) + { + //娌℃湁妤煎眰,鍒欐棤闇�澶勭悊 + if (Config.Instance.Home.FloorDics.Count == 0) { return; } + + //鎴愬憳鐨勮瘽,灏辨娴嬫槸鍚﹀瓨鍦ㄦ病鏈夋埧闂寸殑妤煎眰 + var listEsixtFloor = new List<string>(); + for (int i = 0; i < listRoomFile.Count; i++) + { + try + { + var byteData = Global.ReadFileByHomeId(listRoomFile[i]); + string valueData = System.Text.Encoding.UTF8.GetString(byteData); + var roomTemp = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.Room>(valueData); + if (roomTemp.FloorId != string.Empty && listEsixtFloor.Contains(roomTemp.FloorId) == false) + { + //鏀堕泦妤煎眰 + listEsixtFloor.Add(roomTemp.FloorId); + } + } + catch (Exception ex) { HdlLogLogic.Current.WriteLog(ex); } + } + var listDeleteId = new List<string>(); + foreach (var flootId in Config.Instance.Home.FloorDics.Keys) + { + if (listEsixtFloor.Contains(flootId) == false) + { + //濡傛灉杩欎釜id涓嶅瓨鍦ㄤ簬浠讳綍鎴块棿鐨勮瘽,鏀堕泦瀹� + listDeleteId.Add(flootId); + } + } + foreach (var deleteId in listDeleteId) + { + //鍒犻櫎杩欎釜id + Config.Instance.Home.FloorDics.Remove(deleteId); + } + Config.Instance.Home.Save(false); + } + + #endregion + + #region 鈻� 娣诲姞鎴块棿___________________________ + + /// <summary> + /// 澧炲姞鎴块棿 + /// </summary> + /// <param name="room">Room.</param> + /// <param name="rorefreshRoomViewom">鏄惁鍒锋柊鎴块棿瑙嗗浘鍒楄〃鐣岄潰</param> + public void AddRoom(Room room, bool refreshRoomView = true) + { + if (Global.IsExistsByHomeId(room.FileName) == true) + { + return; + } + //娣诲姞鍒扮紦瀛� + this.dicRooms[room.Id] = room; + //鐢熸垚鏂囦欢 + room.Save(); + //澶囦唤 + HdlAutoBackupLogic.AddOrEditorFile(room.FileName); + if (refreshRoomView == true) + { + //鍒锋柊鎴块棿瑙嗗浘鍒楄〃 + this.RefreshRoomListView(); + } + } + + #endregion + + #region 鈻� 鍒犻櫎鎴块棿___________________________ + + /// <summary> + /// 鍒犻櫎鎴块棿 + /// </summary> + /// <param name="roomId">鎴块棿ID</param> + /// <param name="refreshLeftView">鏄惁鍒锋柊宸︽粦鐣岄潰(姝ゅ彉閲忕洰鍓嶆槸缁欏垹闄ゅ叏閮ㄦ埧闂寸敤鐨�)</param> + /// <returns></returns> + 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) + { + return; + } + //鍒犻櫎鏉ヨ嚜鎷嶇収鎴栬�呯郴缁熷浘搴撶殑鎴块棿鑳屾櫙鍥剧墖 + if (room.BackgroundImageType == 1 || room.BackgroundImageType == 2) + { + //鍒犻櫎鎺夊師鏉ョ殑鑷畾涔夊浘鐗� + if (Global.IsExistsByHomeId(room.BackgroundImage) == true) + { + Global.DeleteFilebyHomeId(room.BackgroundImage); + //鍒犻櫎澶囦唤 + HdlAutoBackupLogic.DeleteFile(room.BackgroundImage); + } + } + //鎴戠殑鍠滅埍 + var loveRoom = this.GetLoveRoom(); + if (loveRoom != null) + { + //绉婚櫎鎴戠殑鍠滅埍閲岄潰鐨勮澶� + for (int i = 0; i < room.ListDevice.Count; i++) + { + loveRoom.ListDevice.Remove(room.ListDevice[i]); + } + //绉婚櫎鎴戠殑鍠滅埍閲岄潰鐨勫満鏅� + for (int i = 0; i < room.ListSceneId.Count; i++) + { + loveRoom.ListSceneId.Remove(room.ListSceneId[i]); + } + loveRoom.Save(false); + } + this.dicRooms.Remove(roomId); + + string roomFilePath = room.FileName; + if (Global.IsExistsByHomeId(roomFilePath) == true) + { + //鍒犻櫎鏂囦欢 + Global.DeleteFilebyHomeId(roomFilePath); + } + HdlAutoBackupLogic.DeleteFile(roomFilePath); + + //鏍规嵁鎴块棿ID,绉婚櫎鎸囧畾鐨勭湡瀹炵墿鐞嗚澶囩殑鎵�灞炴埧闂磋褰� + HdlRoomLogic.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 + + #region 鈻� 鑾峰彇鎴块棿___________________________ + + /// <summary> + /// 鑾峰彇鍠滅埍鎴块棿 + /// </summary> + /// <returns></returns> + public Room GetLoveRoom() + { + //妫�娴嬫垜鐨勫枩鐖辫繖涓埧闂村璞� + this.CheckLoveRoom(); + + return this.dicRooms["Favorite"]; + } + + /// <summary> + /// 閫氳繃璺緞鑾峰彇鎴块棿 + /// </summary> + /// <returns>The room by file path.</returns> + /// <param name="roomFilePath">Room file path.</param> + private Room GetRoomByFilePath(string roomFilePath) + { + try + { + var roomFile = Global.ReadFileByHomeId(roomFilePath); + var nowRoom = Newtonsoft.Json.JsonConvert.DeserializeObject<Room>(Encoding.UTF8.GetString(roomFile)); + + return nowRoom; + } + catch (Exception ex) + { + HdlLogLogic.Current.WriteLog(ex); + return null; + } + } + + /// <summary> + /// 鏍规嵁鎴块棿Id锛岃幏鍙栨埧闂村璞� + /// </summary> + /// <returns>The room by name.</returns> + /// <param name="roomId">鎴块棿ID</param> + public Room GetRoomById(string roomId) + { + if (this.dicRooms.ContainsKey(roomId) == false) + { + return null; + } + return this.dicRooms[roomId]; + } + + /// <summary> + /// 鏍规嵁璁惧鑾峰彇鎴块棿鍚嶅瓧(妤煎眰+鎴块棿鍚�) + /// </summary> + /// <returns>鎴块棿鍚�</returns> + /// <param name="device">璁惧瀵硅薄</param> + public string GetRoomNameByDevice(CommonDevice device) + { + var room = this.GetRoomByDevice(device); + return this.GetRoomName(room); + } + + /// <summary> + /// 鑾峰彇鎴块棿鍚嶅瓧(妤煎眰+鎴块棿鍚�) + /// </summary> + /// <returns>鎴块棿鍚�</returns> + /// <param name="room">鎴块棿瀵硅薄</param> + public string GetRoomName(Room room) + { + if (room == null) + { + //鏈垎閰嶅尯鍩� + return Language.StringByID(R.MyInternationalizationString.uDeviceNotAssignedRoom); + } + if (Config.Instance.Home.FloorDics.ContainsKey(room.FloorId) == true) + { + //(妤煎眰+鎴块棿鍚�) + return Config.Instance.Home.FloorDics[room.FloorId] + " " + room.Name; + } + return room.Name; + } + + /// <summary> + /// 鑾峰彇璁惧鎵�鍦ㄧ殑鎴块棿(娌℃湁璁剧疆鏈夋埧闂村垯杩斿洖null) + /// </summary> + /// <returns>The room by device.</returns> + /// <param name="device">璁惧瀵硅薄</param> + public Room GetRoomByDevice(CommonDevice device) + { + string mainKeys = LocalDevice.Current.GetDeviceMainKeys(device); + foreach (var room in this.dicRooms.Values) + { + if (room.IsLove == true) + { + //鍠滅埍鎴块棿涓嶅鐞� + continue; + } + if (room.ListDevice.Contains(mainKeys) == true) + { + return room; + } + } + return null; + } + + /// <summary> + /// 閫氳繃鍦烘櫙id鑾峰彇鎴块棿鍚� + /// </summary> + /// <returns>The room name by scene identifier.</returns> + /// <param name="sceneId">Scene identifier.</param> + public string GetRoomNameBySceneId(int sceneId) + { + var room = GetRoomBySceneId(sceneId); + if (room == null) + { + return null; + } + return room.Name; + } + + /// <summary> + /// 閫氳繃鍦烘櫙id鑾峰彇鎴块棿瀵硅薄 + /// </summary> + /// <returns>The room by scene identifier.</returns> + /// <param name="sceneId">Scene identifier.</param> + public Room GetRoomBySceneId(int sceneId) + { + foreach (var room in this.dicRooms.Values) + { + if (room.IsLove == true) + { + //鍠滅埍鎴块棿涓嶅鐞� + continue; + } + if (room.ListSceneId.Contains(sceneId) == true) + { + return room; + } + } + return null; + } + + /// <summary> + /// 鑾峰彇褰撳墠妤煎眰鐨勬埧闂� + /// </summary> + /// <param name="id"></param> + /// <returns></returns> + public List<Room> GetRoomsByFloorId(string id) + { + var listRoom = new List<Room>(); + if (Config.Instance.Home.FloorDics.Count == 0) + { + //娌℃湁妤煎眰 + foreach (var room in this.dicRooms.Values) + { + listRoom.Add(room); + } + } + else + { + foreach (var room in this.dicRooms.Values) + { + if (room.FloorId == id) + { + listRoom.Add(room); + } + } + } + return this.SortRoom(listRoom); + } + + /// <summary> + /// 鑾峰彇鍏ㄩ儴鐨勬埧闂� + /// </summary> + /// <returns></returns> + public List<Room> GetAllListRooms() + { + var listRoom = new List<Room>(); + foreach (var room in this.dicRooms.Values) + { + listRoom.Add(room); + } + return this.SortRoom(listRoom); + } + + /// <summary> + /// 鑾峰彇褰撳墠妤煎眰鐨勬埧闂�(鎷兼帴浜嗐�愬父鐢ㄣ�戝湪绗竴浣�) + /// </summary> + /// <param name="id"></param> + /// <returns></returns> + public List<Room> GetRoomsByFloorIdAppendLoveRoom(string id) + { + var listRoom = new List<Room>(); + if (Config.Instance.Home.FloorDics.Count == 0) + { + //娌℃湁妤煎眰 + foreach (var room in this.dicRooms.Values) + { + if (room.IsLove == false) + { + listRoom.Add(room); + } + } + } + else + { + foreach (var room in this.dicRooms.Values) + { + if (room.FloorId == id && room.IsLove == false) + { + listRoom.Add(room); + } + } + } + listRoom = this.SortRoom(listRoom); + + listRoom.Insert(0, GetLoveRoom()); + return listRoom; + } + + /// <summary> + /// 鑾峰彇缃戝叧鎵�鍦ㄧ殑鎴块棿 + /// </summary> + /// <param name="zbGateway">缃戝叧瀵硅薄</param> + /// <returns></returns> + public Room GetRoomByGateway(ZbGateway zbGateway) + { + return this.GetRoomByGateway(zbGateway.GwId); + } + + /// <summary> + /// 鑾峰彇缃戝叧鎵�鍦ㄧ殑鎴块棿 + /// </summary> + /// <param name="gatewayId">缃戝叧ID</param> + /// <returns></returns> + public Room GetRoomByGateway(string gatewayId) + { + var localGateway = HdlGatewayLogic.Current.GetLocalGateway(gatewayId); + if (localGateway == null) + { + return null; + } + return HdlRoomLogic.Current.GetRoomById(localGateway.RoomId); + } + + /// <summary> + /// 鍙樻洿缃戝叧鎴块棿 + /// </summary> + /// <param name="gwId">缃戝叧Id</param> + /// <param name="roomId">鎴块棿ID</param> + public void ChangedGatewayRoom(string gwId, string roomId) + { + var localGateway = HdlGatewayLogic.Current.GetLocalGateway(gwId); + if (localGateway != null) + { + localGateway.RoomId = roomId; + localGateway.ReSave(); + //娣诲姞澶囦唤 + HdlAutoBackupLogic.AddOrEditorFile(localGateway.FilePath); + } + } + + #endregion + + + #region 鈻� 鐗╃悊璁惧鎵�灞炴埧闂確__________________ + + /// <summary> + /// 鍒濆鍖栫墿鐞嗚澶囨墍灞炴埧闂寸殑璁板綍 + /// </summary> + public void InitRealDeviceRoomId() + { + this.dicDeviceRoomId = new Dictionary<string, string>(); + string fullName = DirNameResourse.DeviceRoomIdFile; + var strData = HdlFileLogic.Current.ReadFileTextContent(fullName); + if (strData != null) + { + this.dicDeviceRoomId = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(strData); + } + } + + /// <summary> + /// 鑾峰彇鍏ㄩ儴鐗╃悊璁惧鎵�灞炴埧闂寸殑璁板綍 + /// </summary> + /// <returns></returns> + public Dictionary<string, string> GetAllRealDeviceRoomData() + { + return this.dicDeviceRoomId; + } + + /// <summary> + /// 淇濆瓨鐗╃悊璁惧鎵�灞炴埧闂寸殑璁板綍 + /// </summary> + /// <param name="listDevice">闇�瑕佷繚瀛樼殑璁惧瀵硅薄</param> + /// <param name="roomId">闇�瑕佷繚瀛樼殑鍝釜璁惧鐨勬埧闂碔D</param> + /// <param name="saveRoadDevice">濡傛灉鍙湁涓�涓洖璺�,鏄惁鎶婂洖璺殑鎴块棿涓�璧蜂慨鏀�</param> + public void SaveRealDeviceRoomId(List<CommonDevice> listDevice, string roomId, bool saveRoadDevice = true) + { + if (listDevice == null || listDevice.Count == 0) + { + return; + } + //濡傛灉璁惧鍙湁涓�涓洖璺紝濡傛灉鏀瑰彉浜嗙湡瀹炶澶囧尯鍩燂紝鍒欏畠鐨勫洖璺殑鍖哄煙涔熶竴璧锋敼浜� + if (saveRoadDevice == true && listDevice.Count == 1) + { + if ((listDevice[0] is OTADevice) == false) + { + //ota璁惧涓嶉渶瑕佸鐞� + HdlRoomLogic.Current.ChangedRoom(listDevice[0], roomId, false); + } + } + bool save = false; + if (roomId == string.Empty) + { + //閫夋嫨鐨勬槸鏈垎閰� + this.dicDeviceRoomId.Remove(listDevice[0].DeviceAddr); + save = true; + } + else + { + if (this.dicDeviceRoomId.ContainsKey(listDevice[0].DeviceAddr) == false) + { + this.dicDeviceRoomId[listDevice[0].DeviceAddr] = roomId; + save = true; + } + else + { + //2020.05.18杩藉姞:濡傛灉璁板綍鐨勬埧闂碔D鏄笉瀛樺湪鐨勮瘽,鍒欓噸鏂拌鐩� + var room = HdlRoomLogic.Current.GetRoomById(this.dicDeviceRoomId[listDevice[0].DeviceAddr]); + if (room == null || this.dicDeviceRoomId[listDevice[0].DeviceAddr] != roomId) + { + this.dicDeviceRoomId[listDevice[0].DeviceAddr] = roomId; + save = true; + } + } + } + + if (save == true) + { + //淇濆瓨璁板綍 + HdlFileLogic.Current.SaveFileContent(DirNameResourse.DeviceRoomIdFile, this.dicDeviceRoomId); + + //娣诲姞鑷姩澶囦唤 + HdlAutoBackupLogic.AddOrEditorFile(DirNameResourse.DeviceRoomIdFile); + } + } + + /// <summary> + /// 鑾峰彇鐪熷疄鐗╃悊璁惧鐨勬埧闂村悕瀛� + /// </summary> + /// <param name="device">璁惧鐨勬煇涓�涓洖璺�</param> + /// <returns></returns> + public string GeteRealDeviceRoomName(CommonDevice device) + { + if (this.dicDeviceRoomId.ContainsKey(device.DeviceAddr) == false) + { + //鏈垎閰嶅尯鍩� + return Language.StringByID(R.MyInternationalizationString.uDeviceNotAssignedRoom); + } + var room = HdlRoomLogic.Current.GetRoomById(this.dicDeviceRoomId[device.DeviceAddr]); + return HdlRoomLogic.Current.GetRoomName(room); + } + + /// <summary> + /// 鑾峰彇鐪熷疄鐗╃悊璁惧灞炰簬鍝釜鎴块棿 + /// </summary> + /// <param name="device">璁惧鐨勬煇涓�涓洖璺�</param> + /// <returns></returns> + public Room GeteRealDeviceRoom(CommonDevice device) + { + if (this.dicDeviceRoomId.ContainsKey(device.DeviceAddr) == false) + { + return null; + } + return HdlRoomLogic.Current.GetRoomById(this.dicDeviceRoomId[device.DeviceAddr]); + } + + /// <summary> + /// 灏嗙湡瀹炵墿鐞嗚澶囦粠鎴块棿涓Щ闄� + /// </summary> + /// <param name="device">闅忎究涓�涓洖璺�</param> + public void DeleteRealDeviceFromRoom(CommonDevice device) + { + //灏嗙湡瀹炵墿鐞嗚澶囦粠鎴块棿涓Щ闄� + this.DeleteRealDeviceFromRoom(new List<string>() { device.DeviceAddr }); + } + + /// <summary> + /// 灏嗙湡瀹炵墿鐞嗚澶囦粠鎴块棿涓Щ闄� + /// </summary> + /// <param name="listMac">璁惧Mac鍦板潃</param> + public void DeleteRealDeviceFromRoom(List<string> listMac) + { + bool save = false; + foreach (var deviceMacAddr in listMac) + { + if (this.dicDeviceRoomId.ContainsKey(deviceMacAddr) == true) + { + this.dicDeviceRoomId.Remove(deviceMacAddr); + save = true; + } + } + if (save == false) + { + //娌℃湁鏀瑰彉,涓嶉渶瑕佷繚瀛� + return; + } + //淇濆瓨璁板綍 + HdlFileLogic.Current.SaveFileContent(DirNameResourse.DeviceRoomIdFile, this.dicDeviceRoomId); + + //娣诲姞鑷姩澶囦唤 + HdlAutoBackupLogic.AddOrEditorFile(DirNameResourse.DeviceRoomIdFile); + } + + /// <summary> + /// 鏍规嵁鎴块棿ID,绉婚櫎鎸囧畾鐨勭湡瀹炵墿鐞嗚澶囩殑鎵�灞炴埧闂磋褰� + /// </summary> + /// <param name="i_RoomId"></param> + public void DeleteRealDeviceByRoomId(string i_RoomId) + { + var listDeleteKey = new List<string>(); + foreach (var deviceAddr in this.dicDeviceRoomId.Keys) + { + if (this.dicDeviceRoomId[deviceAddr] == i_RoomId + && listDeleteKey.Contains(deviceAddr) == false) + { + listDeleteKey.Add(deviceAddr); + } + } + //灏嗙湡瀹炵墿鐞嗚澶囦粠鎴块棿涓Щ闄� + this.DeleteRealDeviceFromRoom(listDeleteKey); + } + + #endregion + + #region 鈻� 鎴块棿鏂规硶___________________________ + + /// <summary> + /// 璁惧鐨勬埧闂村彉鏇� + /// </summary> + /// <param name="device">璁惧瀵硅薄</param> + /// <param name="roomId">鏂版埧闂碔d</param> + /// <param name="saveRealRoom">鏄惁淇敼鐪熷疄鐗╃悊璁惧鐨勬埧闂�,涓嶅嚭鎰忓,杩欎釜鍊奸粯璁や负true鍗冲彲</param> + public void ChangedRoom(CommonDevice device, string roomId, bool saveRealRoom = true) + { + //閫夋嫨鐨勬槸鏈垎閰� + if (roomId == string.Empty) + { + //浠庡師鏉ョ殑鎴块棿绉婚櫎璁惧 + this.DeleteDevice(device); + //绉婚櫎鎴戠殑鍠滅埍 + this.DeleteLoveDevice(device); + //璁惧鏀瑰彉鎴块棿鐨勮瘽,涓婚〉闇�瑕侀噸鏂板埛鏂� + UserView.UserPage.Instance.RefreshAllForm = true; + return; + } + //鎴块棿鏄惁淇敼 + if (this.IsRoomChanged(device, roomId) == false) + { + return; + } + //浠庡師鏉ョ殑鎴块棿绉婚櫎璁惧,杩欓噷涓嶅垹闄ょ湡瀹炶澶囩殑鎴块棿 + this.DeleteDevice(device, false); + + //娣诲姞鍒版柊鐨勬埧闂� + var room = this.GetRoomById(roomId); + if (room != null) + { + this.AddDevice(room, device, saveRealRoom); + } + //璁惧鏀瑰彉鎴块棿鐨勮瘽,涓婚〉闇�瑕侀噸鏂板埛鏂� + UserView.UserPage.Instance.RefreshAllForm = true; + } + + /// <summary> + /// 鎴块棿鍚嶅瓧鏄惁鏈変慨鏀� + /// </summary> + /// <param name="device">璁惧瀵硅薄</param> + /// <param name="roomId">鏂版埧闂碔d</param> + /// <returns></returns> + public bool IsRoomChanged(CommonDevice device, string roomId) + { + var room = this.GetRoomByDevice(device); + if (room == null || room.Id != roomId) + { + return true; + } + return false; + } + + #endregion + + #region 鈻� 娣诲姞璁惧___________________________ + + /// <summary> + /// 娣诲姞璁惧 + /// </summary> + /// <param name="i_room">鎴块棿瀵硅薄</param> + /// <param name="device">瑕佹坊鍔犵殑璁惧瀵硅薄</param> + /// <param name="saveRealRoom">鏄惁淇敼鐪熷疄鐗╃悊璁惧鐨勬埧闂�,涓嶅嚭鎰忓,杩欎釜鍊奸粯璁や负true鍗冲彲</param> + public void AddDevice(Room i_room, CommonDevice device, bool saveRealRoom) + { + if (device == null) + { + return; + } + //璁惧淇℃伅淇濆瓨鍒版湰鍦� + device.Save(); + + string mainkeys = LocalDevice.Current.GetDeviceMainKeys(device); + if (i_room.ListDevice.Contains(mainkeys) == false) + { + //淇濆瓨鍒版湰鍦� + i_room.ListDevice.Add(mainkeys); + i_room.Save(); + + if (i_room.IsLove == false && saveRealRoom == true && LocalDevice.Current.GetDevicesCountByMac(device.DeviceAddr) == 1) + { + //濡傛灉鍙湁涓�涓洖璺�,鍒欎慨鏀圭湡瀹炵墿鐞嗚澶囩殑鎴块棿 + this.SaveRealDeviceRoomId(new List<CommonDevice>() { device }, i_room.Id, false); + } + } + } + + /// <summary> + /// 娣诲姞鍠滅埍璁惧 + /// </summary> + /// <param name="device">瑕佹坊鍔犵殑璁惧瀵硅薄</param> + public void AddLoveDevice(CommonDevice device) + { + if (device == null) + { + return; + } + //鎴戠殑鍠滅埍 + var loveRoom = this.GetLoveRoom(); + if (loveRoom != null) + { + string mainkeys = LocalDevice.Current.GetDeviceMainKeys(device); + if (loveRoom.ListDevice.Contains(mainkeys) == false) + { + //淇濆瓨鍒版湰鍦� + loveRoom.ListDevice.Add(mainkeys); + loveRoom.Save(); + //娣诲姞鏀惰棌璁惧鏃�,闇�瑕佸埛鏂颁富椤� + UserView.UserPage.Instance.RefreshAllForm = true; + } + } + } + + #endregion + + #region 鈻� 鍒犻櫎璁惧___________________________ + + /// <summary> + /// 鍒犻櫎璁惧(杩欎釜鍑芥暟涓嶅垹闄ゆ垜鐨勫枩鐖�) + /// </summary> + /// <param name="device">瑕佸垹闄ょ殑璁惧瀵硅薄</param> + /// <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) + { + //鍒犻櫎鎺夊畠鐨勭湡瀹炵墿鐞嗚澶囩殑鎵�鍦ㄤ綅缃� + HdlRoomLogic.Current.DeleteRealDeviceFromRoom(device); + } + + //鏍规嵁璁惧锛岃幏鍙栨墍鍦ㄧ殑鎴块棿 + var room = this.GetRoomByDevice(device); + if (room == null) + { + return; + } + //绉婚櫎缂撳瓨 + string mainkeys = LocalDevice.Current.GetDeviceMainKeys(device); + room.ListDevice.Remove(mainkeys); + room.Save(); + //鏇存敼鑷姩澶囦唤 + HdlAutoBackupLogic.AddOrEditorFile(room.FileName); + + //閫掑綊锛氬垹闄ゆ帀浠ュ墠鐨勬棫鏁版嵁瀵艰嚧鐨勫涓埧闂寸殑闂 + this.DeleteDevice(device, deleteReal); + } + + /// <summary> + /// 鍒犻櫎鎴戠殑鍠滅埍鐨勮澶� + /// </summary> + /// <param name="device">瑕佸垹闄ょ殑璁惧瀵硅薄</param> + public void DeleteLoveDevice(CommonDevice device) + { + if (device == null) + { + return; + } + //鎴戠殑鍠滅埍 + var loveRoom = this.GetLoveRoom(); + if (loveRoom != null) + { + //绉婚櫎缂撳瓨 + string mainkeys = LocalDevice.Current.GetDeviceMainKeys(device); + loveRoom.ListDevice.Remove(mainkeys); + loveRoom.Save(); + //鏇存敼鑷姩澶囦唤 + HdlAutoBackupLogic.AddOrEditorFile(loveRoom.FileName); + //娣诲姞鏀惰棌璁惧鏃�,闇�瑕佸埛鏂颁富椤� + UserView.UserPage.Instance.RefreshAllForm = true; + } + } + + #endregion + + #region 鈻� 鑾峰彇璁惧___________________________ + + /// <summary> + /// 鑾峰彇褰撳墠鎴块棿涓嬬殑鍏ㄩ儴璁惧 + /// </summary> + /// <returns></returns> + public List<CommonDevice> GetRoomListDevice(Room i_room) + { + var dicSort = new Dictionary<string, List<int>>(); + foreach (var mainKeys in i_room.ListDevice) + { + var device = LocalDevice.Current.GetDevice(mainKeys); + if (device != null) + { + if (dicSort.ContainsKey(device.DeviceAddr) == false) + { + dicSort[device.DeviceAddr] = new List<int>(); + } + dicSort[device.DeviceAddr].Add(device.DeviceEpoint); + } + } + var listDevice = new List<CommonDevice>(); + foreach (var strMac in dicSort.Keys) + { + var listEpont = dicSort[strMac]; + //鎺掑簭 + listEpont.Sort(); + for (int i = 0; i < listEpont.Count; i++) + { + var device = LocalDevice.Current.GetDevice(strMac, listEpont[i]); + listDevice.Add(device); + } + } + return listDevice; + } + + /// <summary> + /// 鑾峰彇鎴块棿璁惧绫诲瀷 + /// </summary> + /// <param name="room"></param> + /// <returns></returns> + public List<DeviceType> GetDeviceTypes(Room i_room) + { + var typeList = new List<DeviceType>(); + foreach (var mainKeys in i_room.ListDevice) + { + var device = LocalDevice.Current.GetDevice(mainKeys); + if (device != null) + { + typeList.Add(device.Type); + } + } + return typeList; + } + + /// <summary> + /// 鑾峰彇璇ョ被鍨嬬殑璁惧 + /// </summary> + /// <param name="room"></param> + /// <param name="deviceType"></param> + /// <returns></returns> + public List<CommonDevice> GetRoomListDevice(Room room, DeviceType deviceType) + { + List<CommonDevice> typeList = new List<CommonDevice>(); + foreach (var mainKeys in room.ListDevice) + { + var device = LocalDevice.Current.GetDevice(mainKeys); + if (device != null && device.Type == deviceType) + { + typeList.Add(device); + } + } + + return typeList; + } + + /// <summary> + /// 鑾峰彇鏈垎閰嶅尯鍩熻澶� + /// </summary> + /// <returns></returns> + public List<CommonDevice> GetUnalloctedDevice() + { + var listDevice = new List<CommonDevice>(); + + //宸茬粡瀛樺湪鐨勮澶� + var listEsxit = new HashSet<string>(); + foreach (var room in this.dicRooms.Values) + { + if (room.IsLove == true) + { + //涓嶅寘鍚敹钘忔埧闂� + continue; + } + foreach (string mainkeys in room.ListDevice) + { + if (listEsxit.Contains(mainkeys) == false) + { + listEsxit.Add(mainkeys); + } + } + } + + //鎵�鏈夎澶� + var commonDeviceList = LocalDevice.Current.listAllDevice; + foreach (var device in commonDeviceList) + { + //鍒ゆ柇璇ヨ澶囪兘鍚︽樉绀哄湪涓婚〉 + if (LocalDevice.Current.CanShowInHomeHomeMainPage(device) == false) + { + continue; + } + string mainkeys = LocalDevice.Current.GetDeviceMainKeys(device); + if (listEsxit.Contains(mainkeys) == false) + { + listDevice.Add(device); + } + } + return listDevice; + } + + /// <summary> + /// 鑾峰彇鍏ㄩ儴鎴块棿鍏ㄩ儴鐨勮澶� + /// </summary> + /// <returns></returns> + public List<CommonDevice> GetAllRoomListDevice() + { + var listDevice = new List<CommonDevice>(); + foreach (var room in this.dicRooms.Values) + { + if (room.IsSharedRoom || room.IsLove) + { + continue; + } + listDevice.AddRange(this.GetRoomListDevice(room)); + } + return listDevice; + } + + #endregion + + #region 鈻� 璁惧鏄惁鏀惰棌_______________________ + + /// <summary> + /// 鏄惁鏄敹钘忚澶� + /// </summary> + /// <param name="filePath"></param> + /// <returns></returns> + public bool IsCollectInRoom(CommonDevice device) + { + string mainkeys = LocalDevice.Current.GetDeviceMainKeys(device); + //鍠滅埍鎴块棿 + var room = this.GetLoveRoom(); + return room.ListDevice.Contains(mainkeys); + } + + /// <summary> + /// 鏄惁鏄敹钘忚澶� + /// </summary> + /// <param name="filePath"></param> + /// <returns></returns> + public bool IsCollectInRoom(SceneUI scene) + { + //鍠滅埍鎴块棿 + var room = this.GetLoveRoom(); + return room.ListSceneId.Contains(scene.Id); + } + + #endregion + + #region 鈻� 妤煎眰鍜屾埧闂撮『搴忕浉鍏砡________________ + + /// <summary> + /// 鏍规嵁妤煎眰鐨勪富閿幏鍙栨帓搴忓悗鐨勬埧闂村垪琛�(鏀寔鏃犳ゼ灞傛ā寮�,涓嶈幏鍙栨敹钘忔埧闂�) + /// </summary> + /// <param name="i_floorKeys">妤煎眰鐨勪富閿�</param> + /// <param name="getShard">鍒嗕韩鐨勬埧闂存槸鍚︿篃鑾峰彇</param> + /// <returns></returns> + public List<Room> GetFloorSortRoom(string i_floorKeys, bool getShard = true) + { + if (i_floorKeys == null) + { + i_floorKeys = string.Empty; + } + var listRoom = new List<Room>(); + foreach (var room in this.dicRooms.Values) + { + if (room.FloorId != i_floorKeys && i_floorKeys != string.Empty + || room.IsLove == true) + { + //涓嶆槸鍚屼竴涓ゼ灞�,涓嶈鎴戠殑鍠滅埍 + continue; + } + if (getShard == false && room.IsSharedRoom == true) + { + //涓嶈鍒嗕韩鐨勬埧闂� + continue; + } + listRoom.Add(room); + } + return this.SortRoom(listRoom); + } + + /// <summary> + /// 鎺掑簭鎴块棿瀵硅薄 + /// </summary> + /// <param name="listRoom"></param> + /// <returns></returns> + public List<Room> SortRoom(List<Room> listRoom) + { + //浠庝竴鍫嗘枃瀛椾腑,鑾峰彇杩欎竴鍫嗘枃瀛楅噷闈㈡暟瀛楀瓧绗︿覆鐨勬渶闀块暱搴� + var listName = new List<string>(); + foreach (var room in listRoom) + { + listName.Add(room.Name); + } + int numberLength = this.GetNumberMaxLength(listName); + + 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> + /// 鑾峰彇鎺掑簭鍚庣殑妤煎眰 + /// </summary> + /// <returns></returns> + public Dictionary<string, string> GetFloorSortList() + { + //娌℃湁妤煎眰 + if (Config.Instance.Home.FloorDics.Count == 0) + { + return new Dictionary<string, string>(); + } + //浠庝竴鍫嗘枃瀛椾腑,鑾峰彇杩欎竴鍫嗘枃瀛楅噷闈㈡暟瀛楀瓧绗︿覆鐨勬渶闀块暱搴� + var listName = new List<string>(); + foreach (var floorName in Config.Instance.Home.FloorDics.Values) + { + 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>(); + foreach (var strArry in listSort) + { + dic[strArry[0]] = Config.Instance.Home.FloorDics[strArry[0]]; + } + return dic; + } + + #endregion + + #region 鈻� 鍙戦�佹埧闂翠俊鎭粰缃戝叧_________________ + + /// <summary> + /// 鍙戦�佹埧闂翠俊鎭粰缃戝叧 + /// </summary> + public void SetRoomInfoToGateway() + { + if (UserCenterResourse.UserInfo.AuthorityNo != 1 && UserCenterResourse.UserInfo.AuthorityNo != 2) + { + //涓嶆槸涓讳汉鍜岀鐞嗗憳,鍒欎笉澶勭悊 + return; + } + var realMain = ZbGateway.MainGateWay; + if (realMain == null || Common.Config.Instance.Home.IsVirtually == true) + { + //娌℃湁涓荤綉鍏�,鍒欎笉鐞� + return; + } + //鑾峰彇鎴块棿鍏ㄩ儴鐨勮澶囧璞� + string strSendDeviceRoomInfo = string.Empty; + foreach (var room in this.dicRooms.Values) + { + if (room.IsSharedRoom || room.IsLove) + { + continue; + } + var listDevice = this.GetRoomListDevice(room); + //鍙戦�佺粰缃戝叧鐨勮澶囨埧闂磈son + foreach (var device in listDevice) + { + if (strSendDeviceRoomInfo != string.Empty) + { + strSendDeviceRoomInfo += "\r\n"; + } + strSendDeviceRoomInfo += " " + this.SetDoublMark(device.DeviceAddr) + " "; + strSendDeviceRoomInfo += this.SetDoublMark("0x" + Convert.ToString(device.DeviceEpoint, 16).PadLeft(2, '0')) + " "; + strSendDeviceRoomInfo += this.SetDoublMark(LocalDevice.Current.GetDeviceEpointName(device).Replace(UserCenterResourse.douMarks, string.Empty)) + " "; + strSendDeviceRoomInfo += this.SetDoublMark(room.Id); + } + } + + var listAreaSpaceInfo = new List<AreaSpaceInfo>(); + //棣栧厛娣诲姞浣忓畢 + var houseInfo = new AreaSpaceInfo(); + houseInfo.name = Common.Config.Instance.Home.Name; + houseInfo.uid = Common.Config.Instance.Home.Id; + houseInfo.parentId = null; + listAreaSpaceInfo.Add(houseInfo); + //鐒跺悗娣诲姞妤煎眰 + foreach (var floorId in Common.Config.Instance.Home.FloorDics.Keys) + { + var floorInfo = new AreaSpaceInfo(); + floorInfo.name = Common.Config.Instance.Home.FloorDics[floorId]; + floorInfo.uid = floorId; + floorInfo.parentId = Common.Config.Instance.Home.Id; + listAreaSpaceInfo.Add(floorInfo); + } + //鐒跺悗娣诲姞鎴块棿 + var listRoom = this.GetAllListRooms(); + foreach (var room in listRoom) + { + if (room.IsLove == true) { continue; } + + var roomInfo = new AreaSpaceInfo(); + roomInfo.name = room.Name; + roomInfo.uid = room.Id; + if (Common.Config.Instance.Home.FloorDics.ContainsKey(room.FloorId) == true) + { + roomInfo.parentId = room.FloorId; + } + else + { + roomInfo.parentId = Common.Config.Instance.Home.Id; + } + listAreaSpaceInfo.Add(roomInfo); + } + //鐒跺悗娣诲姞缃戝叧鎴块棿淇℃伅 + var gatewayInfo = new GatewayAreaSpaceInfo(); + + var loaclGateway = HdlGatewayLogic.Current.GetLocalGateway(realMain.GwId); + if (loaclGateway == null || loaclGateway.GwMac == string.Empty) + { + //娌℃湁mac,鎴栬�呮壘涓嶅埌瀵硅薄,鍒欎笉涓婁紶 + return; + } + string gwMac = loaclGateway.GwMac.Replace(":", string.Empty); + gatewayInfo.uid = "000101" + gwMac.Substring(2) + "07"; + gatewayInfo.name = HdlGatewayLogic.Current.GetGatewayName(loaclGateway); + + var roomGateway = HdlRoomLogic.Current.GetRoomByGateway(loaclGateway); + if (roomGateway != null) + { + gatewayInfo.parentId = roomGateway.Id; + } + gatewayInfo.hwInfo = new GatewayHwInfo(); + gatewayInfo.pkgInfo = new GatewayPkgInfo { version = loaclGateway.LinuxFirmwareVersion.ToString() }; + gatewayInfo.swInfo = new List<GatewaySwInfo> { new GatewaySwInfo { ver = loaclGateway.LinuxFirmwareVersion.ToString() } }; + gatewayInfo.ip = loaclGateway.GwIP; + gatewayInfo.mac = loaclGateway.GwMac; + + var data = new { spaces = listAreaSpaceInfo, gateway = gatewayInfo }; + string strSendRoomInfo = Newtonsoft.Json.JsonConvert.SerializeObject(data); + + HdlThreadLogic.Current.RunThread(async () => + { + //鍙戦�佽澶囧尯鍩熶俊鎭� + if (strSendDeviceRoomInfo != string.Empty) + { + //鍒涘缓鏂囦欢瀵硅薄 + var result0 = await realMain.CreateFileAsync("DeviceRoomInfo.json"); + if (result0 == null) + { + return; + } + if (result0.Result != 0 && result0.Result != 2) + { + //濡傛灉鏄�2,鍏佽涓婁紶 + return; + } + //鍙戦�佹暟鎹祦 + var byteData = ASCIIEncoding.UTF8.GetBytes(strSendDeviceRoomInfo); + var result1 = await realMain.SendFileAsync(byteData); + if (result1 == null || result1.Result != 0) + { + return; + } + + } + + //鍒涘缓鏂囦欢瀵硅薄 + var result3 = await realMain.CreateFileAsync("space.json"); + if (result3 == null) + { + return; + } + if (result3.Result != 0 && result3.Result != 2) + { + //濡傛灉鏄�2,鍏佽涓婁紶 + return; + } + + //鍙戦�佸尯鍩熶俊鎭� + var byteData2 = ASCIIEncoding.UTF8.GetBytes(strSendRoomInfo); + var result4 = await realMain.SendFileAsync(byteData2); + }); + } + + /// <summary> + /// 璁剧疆鍙屽紩鍙� + /// </summary> + /// <param name="i_text"></param> + /// <returns></returns> + private string SetDoublMark(string i_text) + { + return UserCenterResourse.douMarks + i_text + UserCenterResourse.douMarks; + } + + /// <summary> + /// 绌洪棿鍖哄煙淇℃伅 + /// </summary> + private class AreaSpaceInfo + { + /// <summary> + /// 浣忓畢ID 鎴栬�� 妤煎眰ID 鎴栬�� 鎴块棿ID + /// </summary> + public string uid = string.Empty; + /// <summary> + /// 浣忓畢鍚嶇О 鎴栬�� 妤煎眰鍚嶇О 鎴栬�� 鎴块棿鍚嶇О + /// </summary> + public string name = string.Empty; + /// <summary> + /// 褰撳墠ID鐨勭埗ID,濡傛灉娌℃湁,鍒欎负甯﹀弻寮曞彿鐨�"null" 姣斿 妤煎眰ID灏卞~浣忓畢ID 鎴块棿ID灏卞~妤煎眰ID + /// </summary> + public string parentId = string.Empty; + } + + /// <summary> + /// 缃戝叧绌洪棿鍖哄煙淇℃伅 + /// </summary> + private class GatewayAreaSpaceInfo + { + /// <summary> + /// 銆�000101銆�+缁戝畾缃戝叧鐨勬椂闂存埑杞�16杩涘埗+銆�07銆� + /// </summary> + public string uid = string.Empty; + /// <summary> + /// 杩欎釜鍥哄畾 + /// </summary> + public string name = "hdl_bus_gatway"; + /// <summary> + /// 缃戝叧鎵�鍦ㄧ殑鎴块棿ID + /// </summary> + public string parentId = string.Empty; + /// <summary> + /// 杩欎釜鍥哄畾 + /// </summary> + public int deviceType = 61184; + /// <summary> + /// 缃戝叧纭欢淇℃伅 + /// </summary> + public GatewayHwInfo hwInfo = null; + /// <summary> + /// 缃戝叧鏍囧噯淇℃伅 + /// </summary> + public GatewayPkgInfo pkgInfo = null; + /// <summary> + /// 缃戝叧鍥轰欢鐗堟湰 + /// </summary> + public List<GatewaySwInfo> swInfo = null; + /// <summary> + /// 缃戝叧IP + /// </summary> + public string ip = string.Empty; + /// <summary> + /// 缃戝叧鐨凪ac + /// </summary> + public string mac = string.Empty; + } + + /// <summary> + /// 缃戝叧纭欢淇℃伅 + /// </summary> + private class GatewayHwInfo + { + /// <summary> + /// 杩欎釜鍥哄畾 + /// </summary> + public string brand = "MIPS"; + /// <summary> + /// 杩欎釜鍥哄畾 + /// </summary> + public string model = "MT7688"; + } + + /// <summary> + /// 缃戝叧鏍囧噯淇℃伅 + /// </summary> + private class GatewayPkgInfo + { + /// <summary> + /// 杩欎釜鏄疞inux鐨勫浐浠剁増鏈� + /// </summary> + public string version = string.Empty; + } + + /// <summary> + /// 缃戝叧鍥轰欢鐗堟湰 + /// </summary> + private class GatewaySwInfo + { + /// <summary> + /// 杩欎釜鍥哄畾 + /// </summary> + public string name = "HDL"; + /// <summary> + /// 杩欎釜鏄疞inux鐨勫浐浠剁増鏈� + /// </summary> + public string ver = string.Empty; + } + + #endregion + + #region 鈻� 鍏嬮殕鎴块棿瀵硅薄_______________________ + + /// <summary> + /// 鍏嬮殕鎴块棿瀵硅薄 + /// </summary> + /// <returns></returns> + public Room CloneRoomClass(Room i_room) + { + var newRoom = new Room(); + //鍏嬮殕灞炴�� + newRoom.Id = i_room.Id; + newRoom.FloorId = i_room.FloorId; + newRoom.TemperatrueDevice = i_room.TemperatrueDevice; + newRoom.HumidityDevice = i_room.HumidityDevice; + newRoom.Name = i_room.Name; + newRoom.BackgroundImage = i_room.BackgroundImage; + newRoom.BackgroundImageType = i_room.BackgroundImageType; + + return newRoom; + } + + #endregion + + #region 鈻� 涓�鑸柟娉昣__________________________ + + /// <summary> + /// 鑾峰彇鎴块棿鎬绘暟 + /// </summary> + /// <returns></returns> + public int GetRoomCount() + { + return this.dicRooms.Count; + } + + /// <summary> + /// 妫�娴嬫垜鐨勫枩鐖辫繖涓埧闂村璞� + /// </summary> + private void CheckLoveRoom() + { + 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); + 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