From 9ef48d7b2da7c408b53f73be0f6eef3cbac1c84a Mon Sep 17 00:00:00 2001 From: 黄学彪 <hxb@hdlchina.com.cn> Date: 星期四, 19 十一月 2020 10:23:45 +0800 Subject: [PATCH] Evoyo.Home1.1.0120111601_Release --- ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs | 241 ++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 234 insertions(+), 7 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs index e0c1f4e..e3836b1 100755 --- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs +++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs @@ -43,6 +43,10 @@ /// 鎵�鏈夌殑鎴块棿淇℃伅 /// </summary> private Dictionary<string, Room> dicRooms = new Dictionary<string, Room>(); + /// <summary> + /// 鐗╃悊璁惧灞炰簬鍝釜鎴块棿鐨勮褰� + /// </summary> + private Dictionary<string, string> dicDeviceRoomId = null; #endregion @@ -295,7 +299,7 @@ HdlAutoBackupLogic.DeleteFile(roomFilePath); //鏍规嵁鎴块棿ID,绉婚櫎鎸囧畾鐨勭湡瀹炵墿鐞嗚澶囩殑鎵�灞炴埧闂磋褰� - Common.LocalDevice.Current.DeleteRealDeviceByRoomId(roomId); + HdlRoomLogic.Current.DeleteRealDeviceByRoomId(roomId); if (refreshLeftView == true) { //鍒锋柊鎴块棿瑙嗗浘鍒楄〃 @@ -542,6 +546,219 @@ 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 鈻� 鎴块棿鏂规硶___________________________ @@ -628,7 +845,7 @@ if (i_room.IsLove == false && saveRealRoom == true && LocalDevice.Current.GetDevicesCountByMac(device.DeviceAddr) == 1) { //濡傛灉鍙湁涓�涓洖璺�,鍒欎慨鏀圭湡瀹炵墿鐞嗚澶囩殑鎴块棿 - LocalDevice.Current.SaveRealDeviceRoomId(new List<CommonDevice>() { device }, i_room.Id, false); + this.SaveRealDeviceRoomId(new List<CommonDevice>() { device }, i_room.Id, false); } } } @@ -678,7 +895,7 @@ if (deleteReal == true && LocalDevice.Current.GetDevicesCountByMac(device.DeviceAddr) == 1) { //鍒犻櫎鎺夊畠鐨勭湡瀹炵墿鐞嗚澶囩殑鎵�鍦ㄤ綅缃� - LocalDevice.Current.DeleteRealDeviceFromRoom(device); + HdlRoomLogic.Current.DeleteRealDeviceFromRoom(device); } //鏍规嵁璁惧锛岃幏鍙栨墍鍦ㄧ殑鎴块棿 @@ -1107,7 +1324,7 @@ var houseInfo = new AreaSpaceInfo(); houseInfo.name = Common.Config.Instance.Home.Name; houseInfo.uid = Common.Config.Instance.Home.Id; - houseInfo.parentId = "null"; + houseInfo.parentId = null; listAreaSpaceInfo.Add(houseInfo); //鐒跺悗娣诲姞妤煎眰 foreach (var floorId in Common.Config.Instance.Home.FloorDics.Keys) @@ -1150,7 +1367,7 @@ gatewayInfo.uid = "000101" + gwMac.Substring(2) + "07"; gatewayInfo.name = HdlGatewayLogic.Current.GetGatewayName(loaclGateway); - var roomGateway = HdlGatewayLogic.Current.GetRoomByGateway(loaclGateway); + var roomGateway = HdlRoomLogic.Current.GetRoomByGateway(loaclGateway); if (roomGateway != null) { gatewayInfo.parentId = roomGateway.Id; @@ -1171,8 +1388,13 @@ { //鍒涘缓鏂囦欢瀵硅薄 var result0 = await realMain.CreateFileAsync("DeviceRoomInfo.json"); - if (result0 == null || result0.Result != 0) + if (result0 == null) { + return; + } + if (result0.Result != 0 && result0.Result != 2) + { + //濡傛灉鏄�2,鍏佽涓婁紶 return; } //鍙戦�佹暟鎹祦 @@ -1187,10 +1409,15 @@ //鍒涘缓鏂囦欢瀵硅薄 var result3 = await realMain.CreateFileAsync("space.json"); - if (result3 == null || result3.Result != 0) + if (result3 == null) { return; } + if (result3.Result != 0 && result3.Result != 2) + { + //濡傛灉鏄�2,鍏佽涓婁紶 + return; + } //鍙戦�佸尯鍩熶俊鎭� var byteData2 = ASCIIEncoding.UTF8.GetBytes(strSendRoomInfo); -- Gitblit v1.8.0