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/HdlShardLogic.cs | 680 ++++++++++++++++++++++++++++++++------------------------ 1 files changed, 389 insertions(+), 291 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlShardLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlShardLogic.cs index ef0bb03..4244dad 100755 --- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlShardLogic.cs +++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlShardLogic.cs @@ -39,6 +39,11 @@ m_Current = value; } } + /// <summary> + /// 鍒嗕韩鐨勮澶囨枃浠�(key:璁惧涓婚敭,value:璁惧鏂囦欢) + /// </summary> + private Dictionary<string, string> dicShardDeviceFile = new Dictionary<string, string>(); + #endregion #region 鈻� 鑾峰彇鍒嗕韩鏂囦欢_______________________ @@ -48,13 +53,13 @@ /// </summary> /// <param name="listDistributedMark"></param> /// <returns></returns> - public async Task<List<string>> SetShardFileToLocation(List<string> listDistributedMark) + private async Task<List<string>> SetShardFileToLocation(List<string> listDistributedMark) { if (listDistributedMark.Count == 0) { return new List<string>(); } - ProgressBar.SetMaxValue(listDistributedMark.Count); + int listMarkCount = listDistributedMark.Count; List<string> listFile = new List<string>(); //鏂囦欢澶� @@ -62,17 +67,18 @@ //涓嶅厑璁告寜绯荤粺鐨勮繑鍥為敭 Shared.Common.CommonPage.BackKeyCanClick = false; - UserCenterResourse.Option.AppCanSignout = false; + UserCenterResourse.AccountOption.AppCanSignout = false; - foreach (string keys in listDistributedMark) + for (int i = 0; i < listDistributedMark.Count; i++) { - var dataPra = new { DistributedMark = keys, HouseDistributedMark = Common.Config.Instance.Home.Id, IsOtherAccountControl = Common.Config.Instance.isAdministrator }; + string keys = listDistributedMark[i]; + var dataPra = new { DistributedMark = keys, HouseDistributedMark = Common.Config.Instance.Home.Id, IsOtherAccountControl = Common.Config.Instance.Home.IsOthreShare }; var result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeDataShare/GetOneShareData", false, dataPra); if (result == null) { //鍏佽鎸夌郴缁熺殑杩斿洖閿� Shared.Common.CommonPage.BackKeyCanClick = true; - UserCenterResourse.Option.AppCanSignout = true; + UserCenterResourse.AccountOption.AppCanSignout = true; return null; } var dataResult = Newtonsoft.Json.JsonConvert.DeserializeObject<GetShardInfoResult>(result); @@ -81,12 +87,12 @@ //淇濆瓨鍒版寚瀹氭枃浠跺す涓� Global.WriteFileToDirectoryByBytes(strDir, dataResult.ShareName, dataResult.ShareDataBytes); //璁剧疆杩涘害鍊� - ProgressBar.SetValue(1); + ProgressFormBar.Current.SetValue(i + 1, listMarkCount); } //鍏佽鎸夌郴缁熺殑杩斿洖閿� Shared.Common.CommonPage.BackKeyCanClick = true; - UserCenterResourse.Option.AppCanSignout = true; + UserCenterResourse.AccountOption.AppCanSignout = true; return listFile; } @@ -220,118 +226,10 @@ /// </summary> public void ClearShardDirectory() { + this.dicShardDeviceFile.Clear(); //鍒涘缓鏂囦欢澶� string strDir = System.IO.Path.Combine(DirNameResourse.LocalMemoryDirectory, DirNameResourse.DownLoadShardDirectory); Global.CreateEmptyDirectory(strDir, true); - } - - #endregion - - #region 鈻� 鑾峰彇鎴愬憳鍏变韩鍒楄〃___________________ - - /// <summary> - /// 浠庢湰鍦拌幏鍙栨垚鍛樼殑鍒嗕韩鍒楄〃 - /// </summary> - /// <param name="memberShardInfo">鎴愬憳鐨勫垎浜暟鎹殑缂撳瓨(璋冪敤杩欎釜鍑芥暟浼氬埛鏂拌繖涓彉閲忕殑淇℃伅)</param> - public void GetMemberShardContentListFromLocal(MemberShardInfoData memberShardInfo) - { - memberShardInfo.dicShardRoom = new Dictionary<string, Common.Room>(); - - var listDeviceFile = new HashSet<string>(); - var listSceneFile = new HashSet<string>(); - - var listFile = this.GetLocalAllShardFile(); - //鍏堝垵濮嬪寲鎴块棿 - foreach (string fileName in listFile) - { - if (fileName.StartsWith("Room_") == true) - { - //鎴块棿鏂囦欢 - var byteData = this.GetShardFileContent(fileName); - if (byteData != null) - { - string valueData = System.Text.Encoding.UTF8.GetString(byteData); - var roomTemp = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.Room>(valueData); - memberShardInfo.dicShardRoom[fileName] = roomTemp; - } - } - else if (fileName == DirNameResourse.ShardFloorFile) - { - //妤煎眰鏂囦欢 - var byteData = this.GetShardFileContent(fileName); - if (byteData != null) - { - string valueData = System.Text.Encoding.UTF8.GetString(byteData); - memberShardInfo.dicShardFloor = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(valueData); - } - } - else if (fileName.StartsWith("Device_") == true) - { - //璁惧鏂囦欢 - listDeviceFile.Add(fileName); - } - else if (fileName.StartsWith("Scene_") == true) - { - //鍦烘櫙鏂囦欢 - listSceneFile.Add(fileName); - } - } - - //璁剧疆鎴块棿閲岄潰璁惧鐨刄I瀵硅薄(鍥犱负杩欎釜涓滆タ鏄弽搴忓垪鍖栧嚭鏉ョ殑,璁惧UI瀵硅薄鏄笉搴忓垪鍖栧璞�) - foreach (var tempRoom in memberShardInfo.dicShardRoom.Values) - { - //杩樺師璁惧瀵硅薄 - tempRoom.DeviceUIList.Clear(); - foreach (string uiPath in tempRoom.DeviceUIFilePathList) - { - string deviceFile = uiPath.Replace("DeviceUI_", string.Empty); - //杩欎釜璁惧鏂囦欢鍖归厤寰楀埌鎴块棿 - listDeviceFile.Remove(deviceFile); - if (this.IsFileExists(deviceFile) == false) - { - continue; - } - tempRoom.DeviceUIList.Add(Common.LocalDevice.Current.GetDeviceUI(uiPath)); - } - //杩樺師鍦烘櫙瀵硅薄 - tempRoom.SceneUIList.Clear(); - foreach (string uiPath in tempRoom.SceneUIFilePathList) - { - //杩欎釜鍦烘櫙鏂囦欢鍖归厤寰楀埌鎴块棿 - listSceneFile.Remove(uiPath); - var byteData = this.GetShardFileContent(uiPath); - if (byteData == null) - { - continue; - } - string valueData = System.Text.Encoding.UTF8.GetString(byteData); - var tempUi = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.SceneUI>(valueData); - tempRoom.SceneUIList.Add(tempUi); - } - } - //濡傛灉瀛樺湪鍖归厤涓嶄笂鐨勬枃浠� - if (listDeviceFile.Count != 0 || listSceneFile.Count != 0) - { - //鍒涘缓涓�涓复鏃舵埧闂存潵瀛樺偍 - var roomTemp = new Room(); - roomTemp.Id = "Other"; - roomTemp.FloorId = "Other"; - memberShardInfo.dicShardRoom[roomTemp.FileName] = roomTemp; - roomTemp.Name = Language.StringByID(R.MyInternationalizationString.uSharedRoom); - //杩樺師璁惧瀵硅薄 - foreach (string deviceFile in listDeviceFile) - { - roomTemp.DeviceUIList.Add(Common.LocalDevice.Current.GetDeviceUI(deviceFile)); - } - //杩樺師鍦烘櫙瀵硅薄 - foreach (string uiPath in listSceneFile) - { - var byteData = this.GetShardFileContent(uiPath); - string valueData = System.Text.Encoding.UTF8.GetString(byteData); - var tempUi = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.SceneUI>(valueData); - roomTemp.SceneUIList.Add(tempUi); - } - } } #endregion @@ -350,7 +248,7 @@ } //鑾峰彇涓讳汉鍒嗕韩缁欐垚鍛樼殑鏂囦欢鍒楄〃 - var infoPra = new { DistributedMark = Config.Instance.Guid, HouseDistributedMark = Common.Config.Instance.Home.Id, IsOtherAccountControl = Common.Config.Instance.isAdministrator }; + var infoPra = new { DistributedMark = Config.Instance.Guid, HouseDistributedMark = Common.Config.Instance.Home.Id, IsOtherAccountControl = Common.Config.Instance.Home.IsOthreShare }; var listNotShow = new List<string>() { "NotSetAgain" }; var result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeDataShare/GetShareDataBySubAccount", false, infoPra, listNotShow); if (string.IsNullOrEmpty(result) == true) @@ -387,11 +285,9 @@ //浠庝簯绔幏鍙栦笅鏉ユ枃浠� if (listAddMark.Count > 0) { - //寮哄埗鎸囧畾鏂囨湰闄勫姞淇℃伅锛氬叡浜暟鎹悓姝ヤ腑 - string msg = Language.StringByID(R.MyInternationalizationString.uShardDataIsSynchronizing); - //寮�鍚繘搴︽潯 - ProgressBar.Show(msg); - ProgressBar.SetAppendText(msg); + //寮�鍚繘搴︽潯 鍏变韩鏁版嵁鍚屾涓� + ProgressFormBar.Current.Start(); + ProgressFormBar.Current.SetMsg(Language.StringByID(R.MyInternationalizationString.uShardDataIsSynchronizing)); //灏嗗垎浜殑鏁版嵁瀛樺叆鏈湴(鑾峰彇鐨勬槸鏈湴娌℃湁鐨�) this.ClearShardDirectory(); @@ -399,19 +295,21 @@ if (listDbFile == null) { //鍏抽棴 - ProgressBar.Close(); + ProgressFormBar.Current.Close(); return false; } //鐢熸垚鏂囦欢 foreach (string fileName in listDbFile) { - var data = this.GetShardFileContent(fileName); - Global.WriteFileByBytesByHomeId(fileName, data); + var oldPath = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.DownLoadShardDirectory, fileName); + var newPath = System.IO.Path.Combine(Config.Instance.FullPath, fileName); + System.IO.File.Copy(oldPath, newPath, true); + if (fileName.StartsWith("Room_") == true) { //鎴块棿鏂囦欢鐗规畩澶勭悊 - Config.Instance.Home.AddRoomListFilePath(fileName); + Config.Instance.Home.AddRoomId(fileName.Replace("Room_", string.Empty).Replace(".json", string.Empty)); } } //娓呯┖鍏变韩鏂囦欢澶� @@ -435,11 +333,9 @@ //鍙湁鎴愬憳鎵嶆湁杩欎釜姒傚康 return true; } - //寮哄埗鎸囧畾鏂囨湰闄勫姞淇℃伅锛氬叡浜暟鎹悓姝ヤ腑 - string msg = Language.StringByID(R.MyInternationalizationString.uShardDataIsSynchronizing); - //寮�鍚繘搴︽潯 - ProgressBar.Show(msg); - ProgressBar.SetAppendText(msg); + //寮�鍚繘搴︽潯 鍏变韩鏁版嵁鍚屾涓� + ProgressFormBar.Current.Start(); + ProgressFormBar.Current.SetMsg(Language.StringByID(R.MyInternationalizationString.uShardDataIsSynchronizing)); if (dicUpdateTime == null) { @@ -452,13 +348,13 @@ { listShardFile = new HashSet<string>(); //鑾峰彇涓讳汉鍒嗕韩缁欐垚鍛樼殑鏂囦欢鍒楄〃 - var infoPra = new { DistributedMark = Config.Instance.Guid, HouseDistributedMark = Common.Config.Instance.Home.Id, IsOtherAccountControl = Common.Config.Instance.isAdministrator }; + var infoPra = new { DistributedMark = Config.Instance.Guid, HouseDistributedMark = Common.Config.Instance.Home.Id, IsOtherAccountControl = Common.Config.Instance.Home.IsOthreShare }; var listNotShow = new List<string>() { "NotSetAgain" }; var result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeDataShare/GetShareDataBySubAccount", false, infoPra, listNotShow); if (string.IsNullOrEmpty(result) == true) { //鍏抽棴 - ProgressBar.Close(); + ProgressFormBar.Current.Close(); return false; } var listShardData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<GetShardInfoResult>>(result); @@ -469,17 +365,30 @@ } } + //娓呯┖妤煎眰鏁版嵁 + Common.Config.Instance.Home.FloorDics.Clear(); //鐒跺悗妫�娴嬫湰鍦扮殑鏂囦欢 var listLocalFile = Global.FileListByHomeId(); foreach (string fileName in listLocalFile) { + if (fileName == DirNameResourse.ShardFloorFile) + { + //妤煎眰鏂囦欢 + var varData = Global.ReadFileByHomeId(fileName); + var dicFloor = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(Encoding.UTF8.GetString(varData)); + Common.Config.Instance.Home.FloorDics = dicFloor; + //鏆傛椂涓嶄繚瀛�,鐣欏湪鏈�鍚庨潰鎵嶄繚瀛� + Global.DeleteFilebyHomeId(fileName); + } + if (listShardFile.Contains(fileName) == true) { //鏈湴鐨勮繖涓枃浠惰繕鍒嗕韩鐫�,娌℃湁闂 continue; } + //妫�娴嬫湰鍦拌澶囨枃浠�,鏄惁瀛樺湪宸茬粡鍙栨秷浜嗗叡浜簡鐨� - if (fileName.StartsWith(Common.LocalDevice.deviceFirstName) == true) + if (fileName.StartsWith("Device_") == true) { //鍒犻櫎鎺夎繖涓澶囨枃浠� Global.DeleteFilebyHomeId(fileName); @@ -499,10 +408,8 @@ //鍒犻櫎鎺夎繖涓埧闂存枃浠� Global.DeleteFilebyHomeId(fileName); dicUpdateTime.Remove(fileName); - if (Config.Instance.Home.RoomFilePathList.Contains(fileName) == true) - { - Config.Instance.Home.RemoveRoomListFilePath(fileName); - } + + Config.Instance.Home.RemoveRoomId(nowRoom.Id); } //妫�娴嬫湰鍦板満鏅枃浠�,鏄惁瀛樺湪宸茬粡鍙栨秷浜嗗叡浜簡鐨� else if (fileName.StartsWith("Scene_") == true) @@ -519,12 +426,16 @@ dicUpdateTime.Remove(fileName); } } + + //淇濆瓨妤煎眰鏁版嵁 + Common.Config.Instance.Home.Save(false); + //缃戝叧鏂囦欢闈炲悎娉曟�ф槸鍒锋柊璁惧鍒楄〃鐨勫嚱鏁伴噷闈㈠疄鐜� //淇濆瓨鍏ㄩ儴鍒嗕韩鏂囦欢鐨勬洿鏂版棩鏈� this.SaveAllShardFileAgoUpdateTime(dicUpdateTime); //鍏抽棴 - ProgressBar.Close(); + ProgressFormBar.Current.Close(); return true; } @@ -540,7 +451,7 @@ private Dictionary<string, string> GetAllShardFileAgoUpdateTime() { var dicTime = new Dictionary<string, string>(); - var data = Global.ReadFileByDirectory(DirNameResourse.LocalMemoryDirectory, DirNameResourse.ShardFileUpdateFile); + var data = Global.ReadFileByDirectory(DirNameResourse.LocalMemoryDirectory, DirNameResourse.ShardFileUpdateTimeFile); if (data == null) { //鐩爣鏂囦欢涓嶅瓨鍦� @@ -558,7 +469,7 @@ { var data = Newtonsoft.Json.JsonConvert.SerializeObject(dicTime); var byteData = System.Text.Encoding.UTF8.GetBytes(data); - Global.WriteFileToDirectoryByBytes(DirNameResourse.LocalMemoryDirectory, DirNameResourse.ShardFileUpdateFile, byteData); + Global.WriteFileToDirectoryByBytes(DirNameResourse.LocalMemoryDirectory, DirNameResourse.ShardFileUpdateTimeFile, byteData); } #endregion @@ -570,7 +481,6 @@ /// <summary> /// 鑾峰彇鎴愬憳鍏变韩鍒楄〃鐒跺悗淇濆瓨鍒版湰鍦�(鐢ㄥ畬涔嬪悗鏈�濂借皟鐢ㄦ竻绌� ClearShardDirectory鍑芥暟娓呯┖) /// </summary> - /// <param name="SubAccountDistributedMark">鎴愬憳鍒楄〃鎺ュ彛杩斿洖鐨凷ubAccountDistributedMark</param> /// <param name="memberShardInfo"> /// <para>鎴愬憳鐨勫垎浜暟鎹�</para> /// <para>濡傛灉涓嶇煡閬撹繖鏄粈涔堜笢瑗�,灏盢ew涓�涓�,鐒跺悗缂撳瓨璧锋潵,璋冪敤鍏朵粬鍑芥暟閮介渶瑕佽繖涓笢瑗�</para> @@ -581,24 +491,27 @@ { if (memberShardInfo.Refresh == false) { + //浠庢湰鍦拌幏鍙栨垚鍛樼殑鍒嗕韩鍒楄〃 + this.GetMemberShardContentListFromLocal(memberShardInfo); return true; } memberShardInfo.Refresh = false; - //鎵撳紑杩涘害鏉� - ProgressBar.Show(); + //姝e湪鑾峰彇鍒嗕韩鏁版嵁 + ProgressFormBar.Current.Start(); + ProgressFormBar.Current.SetMsg(Language.StringByID(R.MyInternationalizationString.uShardContentGetting)); var infoPra = new { DistributedMark = memberShardInfo.SubAccountDistributedMark, HouseDistributedMark = Shared.Common.Config.Instance.HomeId, - IsOtherAccountControl = Common.Config.Instance.isAdministrator + IsOtherAccountControl = Common.Config.Instance.Home.IsOthreShare }; var result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeDataShare/GetShareDataBySubAccount", false, infoPra); if (result == null) { //鍏抽棴杩涘害鏉� - ProgressBar.Close(); + ProgressFormBar.Current.Close(); return false; } var listData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<ReceiveShardInfoResult>>(result); @@ -633,13 +546,179 @@ if (listFile == null) { //鍏抽棴杩涘害鏉� - ProgressBar.Close(); + ProgressFormBar.Current.Close(); return false; } + + //浠庢湰鍦拌幏鍙栨垚鍛樼殑鍒嗕韩鍒楄〃 + this.GetMemberShardContentListFromLocal(memberShardInfo); + //鍏抽棴杩涘害鏉� - ProgressBar.Close(); + ProgressFormBar.Current.Close(); return true; + } + + /// <summary> + /// 浠庢湰鍦拌幏鍙栨垚鍛樼殑鍒嗕韩鍒楄〃 + /// </summary> + /// <param name="memberShardInfo">鎴愬憳鐨勫垎浜暟鎹殑缂撳瓨(璋冪敤杩欎釜鍑芥暟浼氬埛鏂拌繖涓彉閲忕殑淇℃伅)</param> + private void GetMemberShardContentListFromLocal(MemberShardInfoData memberShardInfo) + { + memberShardInfo.dicShardRoom = new Dictionary<string, Common.Room>(); + this.dicShardDeviceFile.Clear(); + + //keys:涓婚敭 value:鏂囦欢鍚� + var dicDeviceFile = new Dictionary<string, string>(); + //keys:鍦烘櫙id value:鏂囦欢鍚� + var dicSceneFile = new Dictionary<int, string>(); + + var listFile = this.GetLocalAllShardFile(); + //鍏堝垵濮嬪寲鎴块棿 + foreach (string fileName in listFile) + { + try + { + if (fileName.StartsWith("Room_") == true) + { + //鎴块棿鏂囦欢 + var byteData = this.GetShardFileContent(fileName); + if (byteData != null) + { + string valueData = System.Text.Encoding.UTF8.GetString(byteData); + var roomTemp = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.Room>(valueData); + memberShardInfo.dicShardRoom[fileName] = roomTemp; + } + } + else if (fileName == DirNameResourse.ShardFloorFile) + { + //妤煎眰鏂囦欢 + var byteData = this.GetShardFileContent(fileName); + if (byteData != null) + { + string valueData = System.Text.Encoding.UTF8.GetString(byteData); + memberShardInfo.dicShardFloor = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(valueData); + } + } + else if (fileName.StartsWith("Device_") == true) + { + string[] Arry = fileName.Split(new string[] { "_" }, StringSplitOptions.RemoveEmptyEntries); + string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(Arry[2], Convert.ToInt32(Arry[3])); + this.dicShardDeviceFile[mainKeys] = fileName; + + //璁惧鏂囦欢 + dicDeviceFile[mainKeys] = fileName; + } + else if (fileName.StartsWith("Scene_") == true) + { + //鍦烘櫙鏂囦欢 + dicSceneFile[(Convert.ToInt32(fileName.Replace("Scene_", string.Empty).Replace(".json", string.Empty)))] = fileName; + } + } + catch (Exception ex) { HdlLogLogic.Current.WriteLog(ex); } + } + + //妫�鏌ヨ澶囩殑鍖归厤鎯呭喌 + foreach (var tempRoom in memberShardInfo.dicShardRoom.Values) + { + //妫�鏌ヨ澶� + for (int i = 0; i < tempRoom.ListDevice.Count; i++) + { + string deviceKeys = tempRoom.ListDevice[i]; + if (dicDeviceFile.ContainsKey(deviceKeys) == false) + { + //绉婚櫎鎺夎繖涓笉瀵瑰姴鐨勮矾寰� + tempRoom.ListDevice.RemoveAt(i); + i--; + continue; + } + //杩欎釜璁惧鏂囦欢鍖归厤寰楀埌鎴块棿 + dicDeviceFile.Remove(deviceKeys); + } + //妫�鏌ュ満鏅� + for (int i = 0; i < tempRoom.ListSceneId.Count; i++) + { + int intId = tempRoom.ListSceneId[i]; + if (dicSceneFile.ContainsKey(intId) == false) + { + //绉婚櫎鎺夎繖涓笉瀵瑰姴鐨勮矾寰� + tempRoom.ListSceneId.RemoveAt(i); + i--; + continue; + } + var byteData = this.GetShardFileContent(dicSceneFile[intId]); + //杩欎釜鍦烘櫙鏂囦欢鍖归厤寰楀埌鎴块棿 + dicSceneFile.Remove(intId); + if (byteData == null) + { + //绉婚櫎鎺夎繖涓笉瀵瑰姴鐨勮矾寰� + tempRoom.ListSceneId.RemoveAt(i); + i--; + continue; + } + string valueData = System.Text.Encoding.UTF8.GetString(byteData); + var tempUi = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.SceneUI>(valueData); + + //鑾峰彇鍦烘櫙閲岄潰鐨勫叏閮ㄧ洰鏍�(2019.11.05杩藉姞鎿嶄綔,鏈夊彲鑳介偅涓澶囨槸鐢卞満鏅祵濂楁潵鐨�,鎵�浠ュ畠鏈夊彲鑳戒笉灞炰簬浠讳綍鎴块棿) + foreach (var data in tempUi.AdjustTargetList) + { + //璁惧 + if (data.Type == 0) + { + string mainkey = LocalDevice.Current.GetDeviceMainKeys(data.DeviceAddr, data.Epoint); + if (dicShardDeviceFile.ContainsKey(mainkey) == true ) + { + //杩欎釜璁惧鏂囦欢鍖归厤寰楀埌 + dicDeviceFile.Remove(mainkey); + } + } + if (data.Type == 1) + { + //杩欎釜鍦烘櫙鏂囦欢鍖归厤寰楀埌 + dicSceneFile.Remove(data.ElseScenesId); + } + } + } + } + //濡傛灉瀛樺湪鍖归厤涓嶄笂鐨勬枃浠� + if (dicDeviceFile.Count != 0 || dicSceneFile.Count != 0) + { + //鍒涘缓涓�涓复鏃舵埧闂存潵瀛樺偍 + var roomTemp = new Room(); + roomTemp.Id = "Other"; + roomTemp.FloorId = "Other"; + memberShardInfo.dicShardRoom[roomTemp.FileName] = roomTemp; + roomTemp.Name = Language.StringByID(R.MyInternationalizationString.uUnallocated); + //杩樺師璁惧瀵硅薄 + foreach (string deviceKeys in dicDeviceFile.Keys) + { + roomTemp.ListDevice.Add(deviceKeys); + } + //杩樺師鍦烘櫙瀵硅薄 + foreach (int intId in dicSceneFile.Keys) + { + roomTemp.ListSceneId.Add(intId); + } + } + } + + + #endregion + + #region 鈻� 鑾峰彇璁惧鏂囦欢鍚峗____________________ + + /// <summary> + /// 鑾峰彇璁惧鏂囦欢鍚�,涓嶅瓨鍦ㄦ椂,杩斿洖绌哄瓧绗︿覆(浠呴檺鍒嗕韩浜嗙殑璁惧) + /// </summary> + /// <param name="deviceKeys">璁惧涓婚敭</param> + /// <returns></returns> + public string GetShardDeviceFileName(string deviceKeys) + { + if (this.dicShardDeviceFile.ContainsKey(deviceKeys) == true) + { + return this.dicShardDeviceFile[deviceKeys]; + } + return string.Empty; } #endregion @@ -685,7 +764,7 @@ } //闃叉鍑虹幇閿欒,鏆傛椂淇濆瓨涓や釜鍒楄〃(铏界劧娌¢偅涔堥夯鐑︼紝涓嶈繃鏃㈢劧宸茬粡杩欐牱鍐欎簡灏辫繖鏍蜂簡) var dicBackDevice = new Dictionary<string, List<string>>(); - var dicBackScene = new Dictionary<string, List<string>>(); + var dicBackScene = new Dictionary<string, List<int>>(); //涓存椂澶囦唤鎴块棿璁惧鍒楄〃 this.BackupRoomDevicelistTemporary(memberShardInfo, dicBackDevice, dicBackScene); @@ -695,7 +774,7 @@ //涓嶅厑璁告寜绯荤粺鐨勮繑鍥為敭 Shared.Common.CommonPage.BackKeyCanClick = false; - UserCenterResourse.Option.AppCanSignout = false; + UserCenterResourse.AccountOption.AppCanSignout = false; if (BarMaxValue == -1) { @@ -725,7 +804,7 @@ //鍏佽鎸夌郴缁熺殑杩斿洖閿� Shared.Common.CommonPage.BackKeyCanClick = true; - UserCenterResourse.Option.AppCanSignout = true; + UserCenterResourse.AccountOption.AppCanSignout = true; if (result == false) { @@ -770,15 +849,14 @@ if (memberShardInfo.dicShardRoom.ContainsKey(nowRoom.FileName) == false) { //鍏嬮殕涓�涓璞� - roomTemp = nowRoom.CloneRoomClass(); + roomTemp = HdlRoomLogic.Current.CloneRoomClass(nowRoom); memberShardInfo.TempRoom = roomTemp; - //鏂板垎浜殑鎴块棿,濡傛灉鍥剧墖鏄嚜瀹氫箟鐨�,鍒欎笂浼犲浘鐗� - if (roomTemp.BackgroundImageType != 0) + //鏂板垎浜殑鎴块棿,濡傛灉鍥剧墖鏄嚜瀹氫箟鐨�,骞朵笖杩欎釜鍥剧墖鏄瓨鍦ㄧ殑,鍒欎笂浼犲浘鐗� + if (roomTemp.BackgroundImageType != 0 && Common.Global.IsExistsByHomeId(roomTemp.BackgroundImage) == true) { //鑷畾涔夌殑鍥剧墖,瀹冨瓨鍦ㄤ簬鏈湴,浣嗘槸瀹冩槸鍏ㄨ矾寰� - string[] Arry = roomTemp.BackgroundImage.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries); - listFile.Add(Arry[Arry.Length - 1]); - this.AddShardFile(Arry[Arry.Length - 1]); + listFile.Add(roomTemp.BackgroundImage); + this.AddShardFile(roomTemp.BackgroundImage); } } else @@ -790,15 +868,13 @@ if (roomTemp.BackgroundImageType != 0) { //鍒犻櫎鑷畾涔夊浘鐗� - string[] Arry = roomTemp.BackgroundImage.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries); - listDelPic.Add(Arry[Arry.Length - 1]); + listDelPic.Add(roomTemp.BackgroundImage); } - if (nowRoom.BackgroundImageType != 0) + if (nowRoom.BackgroundImageType != 0 && Common.Global.IsExistsByHomeId(nowRoom.BackgroundImage) == true) { //鑷畾涔夌殑鍥剧墖,瀹冨瓨鍦ㄤ簬鏈湴,浣嗘槸瀹冩槸鍏ㄨ矾寰� - string[] Arry = nowRoom.BackgroundImage.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries); - listFile.Add(Arry[Arry.Length - 1]); - this.AddShardFile(Arry[Arry.Length - 1]); + listFile.Add(nowRoom.BackgroundImage); + this.AddShardFile(nowRoom.BackgroundImage); } //鍙樻洿鍥剧墖璁剧疆 roomTemp.BackgroundImageType = nowRoom.BackgroundImageType; @@ -812,11 +888,13 @@ listFile.Add(device.FilePath); this.AddShardFile(device.FilePath); - //璁惧鐨刄I - var deviceUi = $"DeviceUI_{device.FilePath}"; - if (roomTemp.DeviceUIFilePathList.Contains(deviceUi) == false) + //鍔犵偣缂撳瓨 + string mainKeys = LocalDevice.Current.GetDeviceMainKeys(device); + this.dicShardDeviceFile[mainKeys] = device.FilePath; + + if (roomTemp.ListDevice.Contains(mainKeys) == false) { - roomTemp.DeviceUIFilePathList.Add(deviceUi); + roomTemp.ListDevice.Add(mainKeys); } } //閫掑綊鑾峰彇鐨勮澶囦笉闇�瑕佸姞鍏ュ埌鎴块棿 @@ -825,25 +903,27 @@ //璁惧 listFile.Add(device.FilePath); this.AddShardFile(device.FilePath); + + //鍔犵偣缂撳瓨 + this.dicShardDeviceFile[LocalDevice.Current.GetDeviceMainKeys(device)] = device.FilePath; } //鍦烘櫙 foreach (var secene in listScene) { - if (secene.IconPathType != 0) + if (secene.IconPathType != 0 && Common.Global.IsExistsByHomeId(secene.IconPath) == true) { - //鑷畾涔夌殑鍥剧墖,瀹冨瓨鍦ㄤ簬鏈湴,浣嗘槸瀹冩槸鍏ㄨ矾寰� - string[] Arry = secene.IconPath.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries); - listFile.Add(Arry[Arry.Length - 1]); - this.AddShardFile(Arry[Arry.Length - 1]); + //鑷畾涔夌殑鍥剧墖,瀹冨瓨鍦ㄤ簬鏈湴 + listFile.Add(secene.IconPath); + this.AddShardFile(secene.IconPath); } listFile.Add(secene.FileName); this.AddShardFile(secene); - if (roomTemp.SceneUIFilePathList.Contains(secene.FileName) == false) + if (roomTemp.ListSceneId.Contains(secene.Id) == false) { - roomTemp.SceneUIFilePathList.Add(secene.FileName); + roomTemp.ListSceneId.Add(secene.Id); } } //閫掑綊鑾峰彇鐨勫満鏅笉闇�瑕佸姞鍏ュ埌鎴块棿 @@ -859,7 +939,7 @@ //鍙嶆妤煎眰鏂囦欢寰堝皬,涓�璧风粰杩囧幓鍚� if (roomTemp.FloorId != string.Empty) { - memberShardInfo.dicShardFloor[roomTemp.FloorId] = roomTemp.FloorName; ; + memberShardInfo.dicShardFloor[roomTemp.FloorId] = HdlResidenceLogic.Current.GetFloorNameById(roomTemp.FloorId); } this.AddShardFile(memberShardInfo.dicShardFloor); listFile.Add(DirNameResourse.ShardFloorFile); @@ -868,7 +948,7 @@ } /// <summary> - /// 浠庣綉鍏宠幏鍙栧満鏅殑鐩爣璁惧鍒楄〃 + /// 鑾峰彇鍦烘櫙鐨勭洰鏍囪澶囧垪琛�(杩欎釜涓嶈兘浠庡垎浜暟鎹腑鑾峰彇) /// </summary> /// <param name="scene">鍦烘櫙</param> /// <param name="listCheck">閲嶅妫�娴嬬敤</param> @@ -877,7 +957,7 @@ /// <returns></returns> public void GetSceneDeviceList(Common.SceneUI scene, HashSet<string> listCheck, List<Common.SceneUI> listSceneUI, List<CommonDevice> listDevice) { - foreach (var data in scene.AddSceneMemberDataList) + foreach (var data in scene.AdjustTargetList) { //璁惧 if (data.Type == 0) @@ -908,7 +988,7 @@ listCheck.Add(mainKeys); //鑾峰彇鍦烘櫙瀵硅薄 - var sceneUi = Room.CurrentRoom.GetSceneUIBySceneId(data.ElseScenesId); + var sceneUi = HdlSceneLogic.Current.GetSceneUIBySceneId(data.ElseScenesId); if (sceneUi != null) { listSceneUI.Add(sceneUi); @@ -964,7 +1044,7 @@ if (memberShardInfo.dicAllShardKeys.ContainsKey(fileName) == false) { var result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeDataShare/AddShareData", false, info); - if (string.IsNullOrEmpty(result) == true) + if (result == null) { return false; } @@ -1012,24 +1092,19 @@ nvc.Add("HouseDistributedMark", Common.Config.Instance.Home.Id); nvc.Add("SubAccountDistributedMark", memberShardInfo.SubAccountDistributedMark); nvc.Add("ShareDataBytes", Convert.ToBase64String(this.GetShardFileContent(fileName))); - nvc.Add("IsOtherAccountCtrl", Common.Config.Instance.isAdministrator.ToString()); //杩藉姞鍏变韩 if (memberShardInfo.dicAllShardKeys.ContainsKey(fileName) == false) { - var result = this.UpLoadBigBackupFileToDB("ZigbeeDataShare/AddShareData", fullName, nvc); - if (string.IsNullOrEmpty(result) == true) - { - return null; - } //杩欓噷鏈夌偣鐗规畩锛屾帴鍙f槸鐩存帴杩斿洖涓婚敭鍥炴潵鐨勶紝鑰屼笉鏄疛soin + var result = this.DoUpLoadBigBackupFileToDB("ZigbeeDataShare/AddShareData", fullName, nvc); return result; } else { nvc.Add("DistributedMark", memberShardInfo.dicAllShardKeys[fileName]); - var result = this.UpLoadBigBackupFileToDB("ZigbeeDataShare/EditShareData", fullName, nvc); - if (result != "1") + var result = this.DoUpLoadBigBackupFileToDB("ZigbeeDataShare/EditShareData", fullName, nvc); + if (result == null) { return null; } @@ -1038,26 +1113,17 @@ } /// <summary> - /// 涓婁紶澶ф枃浠� + /// 鎵ц涓婁紶澶ф枃浠� /// </summary> /// <param name="RequestName">璇锋眰鎺ュ彛</param> /// <param name="fullFileName">鏂囦欢鍚嶅瓧(鍚矾寰�)</param> /// <param name="nvc"></param> /// <returns></returns> - private string UpLoadBigBackupFileToDB(string RequestName, string fullFileName, NameValueCollection nvc) + private string DoUpLoadBigBackupFileToDB(string RequestName, string fullFileName, NameValueCollection nvc) { string paramName = "file"; string contentType = "application/octet-stream"; string requestUrl = $"{CommonPage.RequestHttpsHost}/{RequestName}"; - //鍚敤绠$悊鍛樻潈闄� - //if (Config.Instance.isAdministrator == true) - //{ - // requestUrl = $"{Config.Instance.AdminRequestBaseUrl}/{RequestName}"; - //} - //else - //{ - // requestUrl = $"{CommonPage.RequestHttpsHost}/{RequestName}"; - //} string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x"); byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); @@ -1067,6 +1133,8 @@ wr.Method = "POST"; wr.KeepAlive = true; wr.Credentials = System.Net.CredentialCache.DefaultCredentials; + + wr.Headers.Add(HttpRequestHeader.Authorization, Config.Instance.Token); var rs = wr.GetRequestStream(); @@ -1106,23 +1174,24 @@ StreamReader reader2 = new StreamReader(stream2); string result = reader2.ReadToEnd(); - if (RequestName == "ZigbeeDataShare/AddShareData") - { - return result; - } var data = Newtonsoft.Json.JsonConvert.DeserializeObject<Shared.Common.ResponseEntity.ResponsePack>(result); bool flage = UserCenterLogic.CheckNotEorrorMsg(data, requestUrl); if (flage == true) { - return "1"; + //缂栬緫鐨勬椂鍊欙紝杩欎釜涓滆タ浼氭槸null + return data.ResponseData == null ? "1" : data.ResponseData.ToString(); } - return "0"; + + //Log鍑哄姏 + IMessageCommon.Current.GetMsgByRequestName(RequestName, data, nvc); + + return null; } catch { - return "-1"; + return null; } finally { @@ -1147,15 +1216,15 @@ /// <param name="dicBackDevice">绌虹殑璁惧澶囦唤鍒楄〃</param> /// <param name="dicBackScene">绌虹殑鍦烘櫙澶囦唤鍒楄〃</param> private void BackupRoomDevicelistTemporary(MemberShardInfoData memberShardInfo, Dictionary<string, List<string>> dicBackDevice, - Dictionary<string, List<string>> dicBackScene) + Dictionary<string, List<int>> dicBackScene) { foreach (var roomKeys in memberShardInfo.dicShardRoom.Keys) { dicBackDevice[roomKeys] = new List<string>(); - dicBackScene[roomKeys] = new List<string>(); + dicBackScene[roomKeys] = new List<int>(); - dicBackDevice[roomKeys].AddRange(memberShardInfo.dicShardRoom[roomKeys].DeviceUIFilePathList); - dicBackScene[roomKeys].AddRange(memberShardInfo.dicShardRoom[roomKeys].SceneUIFilePathList); + dicBackDevice[roomKeys].AddRange(memberShardInfo.dicShardRoom[roomKeys].ListDevice); + dicBackScene[roomKeys].AddRange(memberShardInfo.dicShardRoom[roomKeys].ListSceneId); } } @@ -1167,7 +1236,7 @@ /// <param name="dicBackScene">涓存椂澶囦唤鐨勫満鏅浠藉垪琛�</param> /// <param name="listFile">涓婁紶鐨勬枃浠跺悕</param> private void RecoverRoomDevicelistTemporary(MemberShardInfoData memberShardInfo, Dictionary<string, List<string>> dicBackDevice, - Dictionary<string, List<string>> dicBackScene, List<string> listFile) + Dictionary<string, List<int>> dicBackScene, List<string> listFile) { foreach (string fileName in listFile) { @@ -1181,11 +1250,11 @@ { continue; } - memberShardInfo.dicShardRoom[roomKeys].DeviceUIFilePathList.Clear(); - memberShardInfo.dicShardRoom[roomKeys].DeviceUIFilePathList.AddRange(dicBackDevice[roomKeys]); + memberShardInfo.dicShardRoom[roomKeys].ListDevice.Clear(); + memberShardInfo.dicShardRoom[roomKeys].ListDevice.AddRange(dicBackDevice[roomKeys]); - memberShardInfo.dicShardRoom[roomKeys].SceneUIFilePathList.Clear(); - memberShardInfo.dicShardRoom[roomKeys].SceneUIFilePathList.AddRange(dicBackScene[roomKeys]); + memberShardInfo.dicShardRoom[roomKeys].ListSceneId.Clear(); + memberShardInfo.dicShardRoom[roomKeys].ListSceneId.AddRange(dicBackScene[roomKeys]); //瑕嗙洊鎴块棿鏂囦欢 this.AddShardFile(memberShardInfo.dicShardRoom[roomKeys]); @@ -1212,25 +1281,25 @@ var roomTemp = memberShardInfo.dicShardRoom[nowRoom.FileName]; //闃叉鍑洪敊,鍏堝浠藉垪琛� var listBackDevice = new List<string>(); - listBackDevice.AddRange(roomTemp.DeviceUIFilePathList); - var listBackScene = new List<string>(); - listBackScene.AddRange(roomTemp.SceneUIFilePathList); + listBackDevice.AddRange(roomTemp.ListDevice); + var listBackScene = new List<int>(); + listBackScene.AddRange(roomTemp.ListSceneId); var listMark = new List<string>(); //瑕佸垹闄ょ殑鏂囦欢鍚嶅瓧 var listDeleteFile = new List<string>(); //闄や簡瑕佸垹闄ょ殑鐩爣澶栵紝杩樺垎浜殑鏁版嵁 - var listHadShard = this.GetAllShardedFileNameFromDictionary(memberShardInfo, nowRoom, listDevice, listSceneUI); + var listHadShardKeys = this.GetAllShardedKeysFromDictionary(memberShardInfo, nowRoom, listDevice, listSceneUI); //鍏堝紕璁惧 foreach (var device in listDevice) { string deviceFileName = device.FilePath; - + string mainKeys = LocalDevice.Current.GetDeviceMainKeys(device); //绉婚櫎璺緞鍒楄〃 - roomTemp.DeviceUIFilePathList.Remove($"DeviceUI_{device.FilePath}"); - if (listHadShard.Contains(deviceFileName) == true) + roomTemp.ListDevice.Remove(mainKeys); + if (listHadShardKeys.Contains(mainKeys) == true) { //鍏朵粬鍦烘櫙鍒嗕韩鏈夎繖涓澶�,鎵�浠ヤ笉鍒犻櫎杩欎釜璁惧鐨勬牴婧愭枃浠�,鍙槸鎶婃埧闂寸殑璁惧鍒楄〃璺緞绉婚櫎 continue; @@ -1248,11 +1317,11 @@ foreach (var sceneUI in listSceneUI) { //绉婚櫎缂撳瓨 - roomTemp.SceneUIFilePathList.Remove(sceneUI.FileName); + roomTemp.ListSceneId.Remove(sceneUI.Id); //鍏朵粬鍦烘櫙杩樺祵濂楃潃杩欎釜鍦烘櫙,鎵�浠ヤ笉鍒犻櫎杩欎釜鍦烘櫙鐨勬牴婧愭枃浠�,鍙槸鎶婃埧闂寸殑鍦烘櫙鍒楄〃璺緞绉婚櫎 //浣嗘槸瀹冪粦瀹氱殑璁惧鐩爣瑕佸垹闄� - if (listHadShard.Contains(sceneUI.FileName) == true) + if (listHadShardKeys.Contains(sceneUI.Id.ToString()) == true) { continue; } @@ -1276,26 +1345,31 @@ } //鎵ц鍒犻櫎宓屽鐨勮澶� - var listTemp = new HashSet<string>(); - var dicBindScene = new Dictionary<string, SceneUI>(); - this.GetSceneBindFileName(sceneUI, ref listTemp, ref dicBindScene); - foreach (var fileName in listTemp) + var dicDeviceKeys = new Dictionary<string, string>(); + var listBindScene = new List<SceneUI>(); + this.GetSceneBindListKeys(sceneUI, ref dicDeviceKeys, ref listBindScene); + //璁惧鐨� + foreach (var myKeys in dicDeviceKeys.Keys) { - if (listHadShard.Contains(fileName) == true) + if (listHadShardKeys.Contains(myKeys) == true) { continue; } //鑾峰彇瑕佸垹闄ょ殑鍒嗕韩涓婚敭 + string fileName = dicDeviceKeys[myKeys]; if (memberShardInfo.dicAllShardKeys.ContainsKey(fileName) == true) { listMark.Add(memberShardInfo.dicAllShardKeys[fileName]); } listDeleteFile.Add(fileName); - - if (dicBindScene.ContainsKey(fileName) == true && dicBindScene[fileName].IconPathType != 0) + } + //鍦烘櫙鐨� + foreach (var seceUi in listBindScene) + { + if (seceUi.IconPathType != 0) { //鍒犻櫎鑷畾涔夊満鏅浘鐗�,瀹冨瓨鍦ㄤ簬鏈湴,浣嗘槸瀹冩槸鍏ㄨ矾寰� - string[] Arry = dicBindScene[fileName].IconPath.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries); + string[] Arry = seceUi.IconPath.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries); string sceneFile = Arry[Arry.Length - 1]; listDeleteFile.Add(sceneFile); if (memberShardInfo.dicAllShardKeys.ContainsKey(sceneFile) == true) @@ -1307,7 +1381,7 @@ } //濡傛灉杩欎釜鎴块棿鐨勫垎浜澶囧拰鍦烘櫙鍏ㄩ儴鍒犻櫎鐨勮瘽,鎶婂垎浜埧闂存枃浠朵篃涓�璧峰垹闄� - if (roomTemp.DeviceUIFilePathList.Count == 0 && roomTemp.SceneUIFilePathList.Count == 0) + if (roomTemp.ListDevice.Count == 0 && roomTemp.ListSceneId.Count == 0) { //鎴块棿鍒犻櫎 if (memberShardInfo.dicAllShardKeys.ContainsKey(nowRoom.FileName) == true) @@ -1343,7 +1417,11 @@ int floorCount = 0; foreach (var myRoom in memberShardInfo.dicShardRoom.Values) { - if (myRoom.FloorId == roomTemp.FloorId) { floorCount++; } + //2020.03.24杩藉姞:涓嶈兘鏄嚜韬埧闂� + if (myRoom.FloorId == roomTemp.FloorId && myRoom.Id != roomTemp.Id) + { + floorCount++; + } } if (floorCount == 0) { @@ -1352,17 +1430,16 @@ //鎵ц涓婁紶瀵硅薄 result = await this.DoUploadFloorObject(memberShardInfo); } - } if (result == false) { //鎭㈠ - roomTemp.DeviceUIFilePathList.Clear(); - roomTemp.DeviceUIFilePathList.AddRange(listBackDevice); + roomTemp.ListDevice.Clear(); + roomTemp.ListDevice.AddRange(listBackDevice); - roomTemp.SceneUIFilePathList.Clear(); - roomTemp.SceneUIFilePathList.AddRange(listBackScene); + roomTemp.ListSceneId.Clear(); + roomTemp.ListSceneId.AddRange(listBackScene); } return result; } @@ -1410,7 +1487,6 @@ } //鍏抽棴杩涘害鏉� ProgressBar.Close(); - ; for (int i = 0; i < listDeleteFile.Count; i++) { string fileName = listDeleteFile[i]; @@ -1536,122 +1612,144 @@ #region 鈻� 绉婚櫎鍏变韩鐨勪竴鑸柟娉昣________________ /// <summary> - /// 浠庣紦瀛樺瓧鍏镐腑鑾峰彇宸茬粡鍒嗕韩浜嗙殑鍏ㄩ儴璁惧鏂囦欢鍜屽満鏅殑鏂囦欢鍚嶅瓧 + /// 浠庣紦瀛樺瓧鍏镐腑鑾峰彇宸茬粡鍒嗕韩浜嗙殑鍏ㄩ儴璁惧涓婚敭鍜屽満鏅殑ID /// </summary> /// <param name="memberShardInfo">鎴愬憳鐨勫垎浜俊鎭�</param> /// <param name="nowRoom">褰撳墠鎴块棿</param> /// <param name="listDeleteDevice">瑕佸垹闄ょ殑璁惧鍒楄〃</param> /// <param name="listDeleteScene">瑕佸垹闄ょ殑鍦烘櫙鍒楄〃</param> /// <returns></returns> - private HashSet<string> GetAllShardedFileNameFromDictionary(MemberShardInfoData memberShardInfo, Common.Room nowRoom, + private HashSet<string> GetAllShardedKeysFromDictionary(MemberShardInfoData memberShardInfo, Common.Room nowRoom, List<CommonDevice> listDeleteDevice, List<Common.SceneUI> listDeleteScene) { //鑾峰彇鍏ㄩ儴瑕佸垹闄ょ殑鏂囦欢鍚嶅瓧 - var listDeleteFile = new HashSet<string>(); + var dicDeleteDeviceFile = new Dictionary<string, string>(); foreach (var device in listDeleteDevice) { - listDeleteFile.Add(device.FilePath); + dicDeleteDeviceFile[LocalDevice.Current.GetDeviceMainKeys(device)] = device.FilePath; } + var dicDeleteSceneFile = new Dictionary<int, string>(); foreach (var scene in listDeleteScene) { - listDeleteFile.Add(scene.FileName); + dicDeleteSceneFile[scene.Id] = scene.FileName; } - var listShardFile = new HashSet<string>(); - //鑾峰彇杩樺浜庡垎浜姸鎬佺殑鏂囦欢 + var listShardKeys = new HashSet<string>(); + //鑾峰彇杩樺浜庡垎浜姸鎬佺殑涓婚敭 foreach (var roomTemp in memberShardInfo.dicShardRoom.Values) { //璁惧 - foreach (var deviceUi in roomTemp.DeviceUIFilePathList) + foreach (var deviceKeys in roomTemp.ListDevice) { - string deviceFile = deviceUi.Replace("DeviceUI_", string.Empty); - if (listDeleteFile.Contains(deviceFile) == true) + if (dicDeleteDeviceFile.ContainsKey(deviceKeys) == true) { //鍥犱负涓�涓洖璺彧鑳藉垎閰嶄竴涓尯鍩�,鎵�浠ュ彲浠ョ洿鎺ュ垽鏂� continue; } - if (listShardFile.Contains(deviceFile) == false) + if (listShardKeys.Contains(deviceKeys) == false) { //杩欎釜鏂囦欢杩樺垎浜潃 - listShardFile.Add(deviceFile); + listShardKeys.Add(deviceKeys); } } //鍦烘櫙 - foreach (var scene in roomTemp.SceneUIList) + foreach (var sceneId in roomTemp.ListSceneId) { - if (roomTemp.SceneUIFilePathList.Contains(scene.FileName) == false) - { - //杩欎釜鍦烘櫙宸茬粡琚垹闄� - continue; - } if (roomTemp.FileName == nowRoom.FileName) { //濡傛灉寰幆鍒颁簡褰撳墠鎴块棿 - if (listDeleteFile.Contains(scene.FileName) == true) + if (dicDeleteSceneFile.ContainsKey(sceneId) == true) { //濡傛灉鏄垹闄ょ洰鏍囷紝鍒欎笉娣诲姞 continue; } } - //鑾峰彇鍦烘櫙閲岄潰鐨勫叏閮ㄧ洰鏍� - var listTemp = new HashSet<string>(); - var dicTemp = new Dictionary<string, SceneUI>(); - this.GetSceneBindFileName(scene, ref listTemp, ref dicTemp); - - if (listShardFile.Contains(scene.FileName) == false) + var byteData = this.GetShardFileContent($"Scene_{sceneId}.json"); + if (byteData == null) { - //鍦烘櫙鑷韩鐨勬枃浠� - listShardFile.Add(scene.FileName); + continue; } - foreach (string file in listTemp) + string valueData = System.Text.Encoding.UTF8.GetString(byteData); + var sceneTemp = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.SceneUI>(valueData); + + //鑾峰彇鍦烘櫙閲岄潰鐨勫叏閮ㄧ洰鏍� + var listTempKeys = new HashSet<string>(); + //浠庡満鏅璞¢噷闈㈣幏鍙栧叏閮ㄧ殑缁戝畾鐩爣鐨勪富閿�(杩欓噷闈㈢殑涓滆タ蹇呴』浠庡垎浜暟鎹腑鑾峰彇) + this.GetSceneBindListKeys(sceneTemp, ref listTempKeys); + + if (listShardKeys.Contains(sceneId.ToString()) == false) { - if (listShardFile.Contains(file) == false) + //鍦烘櫙鑷韩 + listShardKeys.Add(sceneId.ToString()); + } + foreach (string myKeys2 in listTempKeys) + { + if (listShardKeys.Contains(myKeys2) == false) { - listShardFile.Add(file); + listShardKeys.Add(myKeys2); } } } } - return listShardFile; + return listShardKeys; } /// <summary> - /// 浠庡満鏅璞¢噷闈㈣幏鍙栧叏閮ㄧ殑缁戝畾鐩爣鐨勬枃浠跺悕瀛� + /// 浠庡満鏅璞¢噷闈㈣幏鍙栧叏閮ㄧ殑缁戝畾鐩爣鐨勪富閿�(杩欓噷闈㈢殑涓滆タ蹇呴』浠庡垎浜暟鎹腑鑾峰彇) /// </summary> /// <param name="scene">鍦烘櫙</param> - /// <param name="listFile">鏂囦欢鍒楄〃(閲岄潰瀛樼殑鏄澶嘦I鏂囦欢鍜岃澶囨枃浠跺拰鍦烘櫙鏂囦欢)</param> - /// <param name="dicBindScene">缁戝畾鐨勫満鏅璞�</param> - private void GetSceneBindFileName(Common.SceneUI scene, ref HashSet<string> listFile,ref Dictionary<string, SceneUI> dicBindScene) + /// <param name="dicDeviceKeys">璁惧涓婚敭鍒楄〃(閲岄潰娌℃湁鍦烘櫙),keys:涓婚敭,value:鏂囦欢鍚�</param> + /// <param name="listBindScene">缁戝畾鐨勫満鏅璞�</param> + private void GetSceneBindListKeys(Common.SceneUI scene, ref Dictionary<string, string> dicDeviceKeys, ref List<SceneUI> listBindScene) { - foreach (var data in scene.AddSceneMemberDataList) + foreach (var data in scene.AdjustTargetList) { //璁惧 if (data.Type == 0) { - var device = Common.LocalDevice.Current.GetDevice(data.DeviceAddr, data.Epoint); - if (device != null && listFile.Contains(device.FilePath) == false) + string mainkey = LocalDevice.Current.GetDeviceMainKeys(data.DeviceAddr, data.Epoint); + if (dicShardDeviceFile.ContainsKey(mainkey) == true && dicDeviceKeys.ContainsKey(mainkey) == false) { - listFile.Add(device.FilePath); + dicDeviceKeys[mainkey] = dicShardDeviceFile[mainkey]; } } if (data.Type == 1) { - var temp = new SceneUI(); - temp.Id = data.ElseScenesId; - var byteData = this.GetShardFileContent(temp.FileName); + var byteData = this.GetShardFileContent($"Scene_{data.ElseScenesId}.json"); if (byteData != null) { string valueData = System.Text.Encoding.UTF8.GetString(byteData); - var roomTemp = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.SceneUI>(valueData); - if (roomTemp != null) - { - dicBindScene[roomTemp.FileName] = roomTemp; - if (listFile.Contains(roomTemp.FileName) == false) - { - listFile.Add(roomTemp.FileName); - } - } + var sceneTemp = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.SceneUI>(valueData); + listBindScene.Add(sceneTemp); + } + } + } + } + + /// <summary> + /// 浠庡満鏅璞¢噷闈㈣幏鍙栧叏閮ㄧ殑缁戝畾鐩爣鐨勪富閿�(杩欓噷闈㈢殑涓滆タ蹇呴』浠庡垎浜暟鎹腑鑾峰彇) + /// </summary> + /// <param name="scene">鍦烘櫙</param> + /// <param name="listKeys">涓婚敭鍒楄〃(璁惧鍜屽満鏅�)</param> + private void GetSceneBindListKeys(Common.SceneUI scene, ref HashSet<string> listKeys) + { + foreach (var data in scene.AdjustTargetList) + { + //璁惧 + if (data.Type == 0) + { + string mainkey = LocalDevice.Current.GetDeviceMainKeys(data.DeviceAddr, data.Epoint); + if (listKeys.Contains(mainkey) == false) + { + listKeys.Add(mainkey); + } + } + if (data.Type == 1) + { + if (listKeys.Contains(data.ElseScenesId.ToString()) == false) + { + listKeys.Add(data.ElseScenesId.ToString()); } } } -- Gitblit v1.8.0