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/HdlShardLogic.cs | 3638 ++++++++++++++++++++++++++++++----------------------------- 1 files changed, 1,844 insertions(+), 1,794 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlShardLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlShardLogic.cs old mode 100755 new mode 100644 index 4c1952b..8bd809a --- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlShardLogic.cs +++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlShardLogic.cs @@ -1,1796 +1,1846 @@ -锘縰sing Shared.Common; -using System; -using System.Collections.Generic; -using System.Collections.Specialized; -using System.IO; -using System.Net; -using System.Text; -using System.Threading.Tasks; -using ZigBee.Device; - -namespace Shared.Phone.UserCenter -{ - /// <summary> - /// 鍒嗕韩鐨勯�昏緫 - /// </summary> - public class HdlShardLogic - { - #region 鈻� 鍙橀噺澹版槑___________________________ - - /// <summary> - /// 鍒嗕韩鐨勯�昏緫 +锘縰sing Shared.Common; +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.IO; +using System.Net; +using System.Text; +using ZigBee.Device; + +namespace Shared.Phone.UserCenter +{ + /// <summary> + /// 鍒嗕韩鐨勯�昏緫 + /// </summary> + public class HdlShardLogic + { + #region 鈻� 鍙橀噺澹版槑___________________________ + + /// <summary> + /// 鍒嗕韩鐨勯�昏緫 /// </summary> - private static HdlShardLogic m_Current = null; - /// <summary> - /// 鍒嗕韩鐨勯�昏緫 + private static HdlShardLogic m_Current = null; + /// <summary> + /// 鍒嗕韩鐨勯�昏緫 /// </summary> - public static HdlShardLogic Current - { - get - { - if (m_Current == null) - { - m_Current = new HdlShardLogic(); - } - return m_Current; - } - set - { - m_Current = value; - } - } - /// <summary> - /// 鍒嗕韩鐨勮澶囨枃浠�(key:璁惧涓婚敭,value:璁惧鏂囦欢) - /// </summary> - private Dictionary<string, string> dicShardDeviceFile = new Dictionary<string, string>(); - - #endregion - - #region 鈻� 鑾峰彇鍒嗕韩鏂囦欢_______________________ - - /// <summary> - /// 灏嗗垎浜殑鏁版嵁瀛樺叆鏈湴,杩斿洖鐨勬槸鏂囦欢鍚嶅瓧(寮傚父鏃惰繑鍥瀗ull),璋冪敤 GetShardFileContent 鍙互鑾峰彇鏂囦欢鍐呯殑鍐呭 - /// </summary> - /// <param name="listDistributedMark"></param> - /// <returns></returns> - private async Task<List<string>> SetShardFileToLocation(List<string> listDistributedMark) - { - if (listDistributedMark.Count == 0) - { - return new List<string>(); - } - int listMarkCount = listDistributedMark.Count; - - List<string> listFile = new List<string>(); - //鏂囦欢澶� - string strDir = System.IO.Path.Combine(DirNameResourse.LocalMemoryDirectory, DirNameResourse.DownLoadShardDirectory); - - //涓嶅厑璁告寜绯荤粺鐨勮繑鍥為敭 - Shared.Common.CommonPage.BackKeyCanClick = false; - UserCenterResourse.Option.AppCanSignout = false; - - for (int i = 0; i < listDistributedMark.Count; i++) - { - string keys = listDistributedMark[i]; - var dataPra = new { DistributedMark = keys, HouseDistributedMark = Common.Config.Instance.Home.Id, IsOtherAccountControl = Common.Config.Instance.isAdministrator }; - var result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeDataShare/GetOneShareData", false, dataPra); - if (result == null) - { - //鍏佽鎸夌郴缁熺殑杩斿洖閿� - Shared.Common.CommonPage.BackKeyCanClick = true; - UserCenterResourse.Option.AppCanSignout = true; - return null; - } - var dataResult = Newtonsoft.Json.JsonConvert.DeserializeObject<GetShardInfoResult>(result); - //鏂囦欢鍚嶅瓧 - listFile.Add(dataResult.ShareName); - //淇濆瓨鍒版寚瀹氭枃浠跺す涓� - Global.WriteFileToDirectoryByBytes(strDir, dataResult.ShareName, dataResult.ShareDataBytes); - //璁剧疆杩涘害鍊� - ProgressFormBar.Current.SetValue(i + 1, listMarkCount); - } - - //鍏佽鎸夌郴缁熺殑杩斿洖閿� - Shared.Common.CommonPage.BackKeyCanClick = true; - UserCenterResourse.Option.AppCanSignout = true; - - return listFile; - } - - /// <summary> - /// 鑾峰彇鍒嗕韩鏂囦欢鐨勫唴瀹� - /// </summary> - /// <param name="fileName">鏂囦欢鍚嶇О(涓嶆槸鍏ㄨ矾寰�)</param> - /// <returns></returns> - public byte[] GetShardFileContent(string fileName) - { - string fullName = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.DownLoadShardDirectory, fileName); - if (System.IO.File.Exists(fullName) == false) - { - return null; - } - string path = System.IO.Path.Combine(DirNameResourse.LocalMemoryDirectory, DirNameResourse.DownLoadShardDirectory); - var varByte = Global.ReadFileByDirectory(path, fileName); - return varByte; - } - - /// <summary> - /// 鑾峰彇鏈湴鍏ㄩ儴鐨勫叡浜枃浠� - /// </summary> - /// <returns></returns> - public List<string> GetLocalAllShardFile() - { - string path = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.DownLoadShardDirectory); - var listFile = HdlAutoBackupLogic.GetFileFromDirectory(path); - - return listFile; - } - - /// <summary> - /// 鏂囦欢鏄惁瀛樺湪 - /// </summary> - /// <param name="fileName"></param> - /// <returns></returns> - public bool IsFileExists(string fileName) - { - string fullName = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.DownLoadShardDirectory, fileName); - if (System.IO.File.Exists(fullName) == false) - { - return false; - } - return true; - } - - #endregion - - #region 鈻� 娣诲姞鍒嗕韩鏂囦欢_______________________ - - /// <summary> - /// 娣诲姞鍒嗕韩鏂囦欢鍒扮紦瀛� - /// </summary> - /// <param name="fileName">鍘熸牴鐩綍涓嬬殑鏂囦欢鍚�</param> - public void AddShardFile(string fileName) - { - if (Global.IsExistsByHomeId(fileName) == false) - { - return; - } - string oldName = UserCenterLogic.CombinePath(fileName); - string newName = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.DownLoadShardDirectory, fileName); - System.IO.File.Copy(oldName, newName, true); - } - - /// <summary> - /// 娣诲姞鎴块棿瀵硅薄鍒扮紦瀛� - /// </summary> - /// <param name="room">鎴块棿瀵硅薄</param> - public void AddShardFile(Common.Room room) - { - room.IsSharedRoom = true; - var data = Newtonsoft.Json.JsonConvert.SerializeObject(room); - var byteData = System.Text.Encoding.UTF8.GetBytes(data); - - string fullName = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.DownLoadShardDirectory, room.FileName); - //鍐欏叆鍐呭 - Shared.IO.FileUtils.WriteFileByBytes(fullName, byteData); - } - - /// <summary> - /// 娣诲姞鍦烘櫙瀵硅薄鍒扮紦瀛� - /// </summary> - /// <param name="scene">鍦烘櫙</param> - public void AddShardFile(Common.SceneUI scene) - { - scene.IsSharedScene = true; - var data = Newtonsoft.Json.JsonConvert.SerializeObject(scene); - var byteData = System.Text.Encoding.UTF8.GetBytes(data); - - string fullName = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.DownLoadShardDirectory, scene.FileName); - //鍐欏叆鍐呭 - Shared.IO.FileUtils.WriteFileByBytes(fullName, byteData); - } - - /// <summary> - /// 娣诲姞妤煎眰瀵硅薄鍒扮紦瀛� - /// </summary> - /// <param name="dic">妤煎眰</param> - public void AddShardFile(Dictionary<string, string> dic) - { - var data = Newtonsoft.Json.JsonConvert.SerializeObject(dic); - var byteData = System.Text.Encoding.UTF8.GetBytes(data); - - string fullName = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.DownLoadShardDirectory, DirNameResourse.ShardFloorFile); - //鍐欏叆鍐呭 - Shared.IO.FileUtils.WriteFileByBytes(fullName, byteData); - } - - #endregion - - #region 鈻� 鍒犻櫎鍒嗕韩鏂囦欢_______________________ - - /// <summary> - /// 娣诲姞鍒嗕韩鏂囦欢鍒扮紦瀛� - /// </summary> - /// <param name="fileName">鎸囧畾鏂囦欢鍚嶅瓧</param> - public void DeleteShardFile(string fileName) - { - fileName = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.DownLoadShardDirectory, fileName); - if (System.IO.File.Exists(fileName) == true) - { - System.IO.File.Delete(fileName); - } - } - - /// <summary> - /// 娓呯┖鍏变韩鏂囦欢澶� - /// </summary> - public void ClearShardDirectory() - { - this.dicShardDeviceFile.Clear(); - //鍒涘缓鏂囦欢澶� - string strDir = System.IO.Path.Combine(DirNameResourse.LocalMemoryDirectory, DirNameResourse.DownLoadShardDirectory); - Global.CreateEmptyDirectory(strDir, true); - } - - #endregion - - #region 鈻� 鍚屾鏈嶅姟鍣ㄧ殑鍒嗕韩鍐呭_______________ - - /// <summary> - /// 鍚屾鏈嶅姟鍣ㄧ殑鍒嗕韩鍐呭(閲岄潰鍙礋璐f妸涓滆タ瀛樺叆鏈湴) - /// </summary> - public async Task<bool> SynchronizeDbSharedContent() - { - if (UserCenterResourse.UserInfo.AuthorityNo != 3) - { - //鍙湁鎴愬憳鎵嶆湁杩欎釜姒傚康 - return true; - } - - //鑾峰彇涓讳汉鍒嗕韩缁欐垚鍛樼殑鏂囦欢鍒楄〃 - var infoPra = new { DistributedMark = Config.Instance.Guid, HouseDistributedMark = Common.Config.Instance.Home.Id, IsOtherAccountControl = Common.Config.Instance.isAdministrator }; - var listNotShow = new List<string>() { "NotSetAgain" }; - var result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeDataShare/GetShareDataBySubAccount", false, infoPra, listNotShow); - if (string.IsNullOrEmpty(result) == true) - { - return false; - } - var listShardInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<List<GetShardInfoResult>>(result); - - //涓婚敭 - var listAddMark = new List<string>(); - //妫�娴嬪彇娑堜簡鍏变韩鐨勬搷浣滀娇鐢� - var listShardFile = new HashSet<string>(); - //鑾峰彇鍓嶅洖鍏变韩鏂囦欢鐨勬洿鏂版棩鏈�(keys:鏂囦欢鍚嶅瓧,value:鏇存柊鏃ユ湡) - var dicUpdateTime = this.GetAllShardFileAgoUpdateTime(); - - //鍏堢湅鐪嬭繖鍒嗕韩鏁版嵁閲岄潰鏈変粈涔堥 - foreach (var info in listShardInfo) - { - string updateTime = info.TimeSpan; - string fileName = info.ShareName; - listShardFile.Add(fileName); - - //濡傛灉鏈湴娌℃湁,鎴栬�呮洿鏂版棩鏈熷ぇ浜庡墠鍥炴洿鏂版棩鏈熺殑鏃跺�� - if (Global.IsExistsByHomeId(fileName) == false - || dicUpdateTime.ContainsKey(fileName) == false - || updateTime.CompareTo(dicUpdateTime[fileName]) > 0) - { - listAddMark.Add(info.DistributedMark); - //鏇存柊鏃ユ洿鏂� - dicUpdateTime[fileName] = updateTime; - } - } - - //浠庝簯绔幏鍙栦笅鏉ユ枃浠� - if (listAddMark.Count > 0) - { - //寮�鍚繘搴︽潯 鍏变韩鏁版嵁鍚屾涓� - ProgressFormBar.Current.Start(); - ProgressFormBar.Current.SetMsg(Language.StringByID(R.MyInternationalizationString.uShardDataIsSynchronizing)); - - //灏嗗垎浜殑鏁版嵁瀛樺叆鏈湴(鑾峰彇鐨勬槸鏈湴娌℃湁鐨�) - this.ClearShardDirectory(); - var listDbFile = await this.SetShardFileToLocation(listAddMark); - if (listDbFile == null) - { - //鍏抽棴 - ProgressFormBar.Current.Close(); - return false; - } - - //鐢熸垚鏂囦欢 - foreach (string fileName in listDbFile) - { - 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); - } - } - //娓呯┖鍏变韩鏂囦欢澶� - this.ClearShardDirectory(); - } - - //鍚屾鏈嶅姟鍣ㄧ殑鍙栨秷浜嗙殑鍒嗕韩鍐呭 - return await this.SynchronizeDeleteSharedContent(listShardFile, dicUpdateTime); - } - - /// <summary> - /// 鍚屾鏈嶅姟鍣ㄧ殑鍙栨秷浜嗙殑鍒嗕韩鍐呭 - /// </summary> - /// <param name="listShardFile">浜戠涓婇潰鍒嗕韩鐨勬枃浠�,涓篘ull鏃朵粠鏂拌幏鍙�</param> - /// <param name="dicUpdateTime">鍒嗕韩鏂囦欢鐨勬洿鏂版椂闂�,涓篘ull鏃朵粠鏂拌幏鍙�</param> - /// <returns></returns> - public async Task<bool> SynchronizeDeleteSharedContent(HashSet<string> listShardFile = null, Dictionary<string, string> dicUpdateTime = null) - { - if (UserCenterResourse.UserInfo.AuthorityNo != 3) - { - //鍙湁鎴愬憳鎵嶆湁杩欎釜姒傚康 - return true; - } - //寮�鍚繘搴︽潯 鍏变韩鏁版嵁鍚屾涓� - ProgressFormBar.Current.Start(); - ProgressFormBar.Current.SetMsg(Language.StringByID(R.MyInternationalizationString.uShardDataIsSynchronizing)); - - if (dicUpdateTime == null) - { - //鑾峰彇鍓嶅洖鍏变韩鏂囦欢鐨勬洿鏂版棩鏈�(keys: 鏂囦欢鍚嶅瓧, value: 鏇存柊鏃ユ湡) - dicUpdateTime = this.GetAllShardFileAgoUpdateTime(); - } - - //閲嶆柊鑾峰彇 - if (listShardFile == null) - { - listShardFile = new HashSet<string>(); - //鑾峰彇涓讳汉鍒嗕韩缁欐垚鍛樼殑鏂囦欢鍒楄〃 - var infoPra = new { DistributedMark = Config.Instance.Guid, HouseDistributedMark = Common.Config.Instance.Home.Id, IsOtherAccountControl = Common.Config.Instance.isAdministrator }; - var listNotShow = new List<string>() { "NotSetAgain" }; - var result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeDataShare/GetShareDataBySubAccount", false, infoPra, listNotShow); - if (string.IsNullOrEmpty(result) == true) - { - //鍏抽棴 - ProgressFormBar.Current.Close(); - return false; - } - var listShardData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<GetShardInfoResult>>(result); - //鍏堢湅鐪嬭繖鍒嗕韩鏁版嵁閲岄潰鏈変粈涔堥 - foreach (var info in listShardData) - { - listShardFile.Add(info.ShareName); - } - } - - //鐒跺悗妫�娴嬫湰鍦扮殑鏂囦欢 - 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; - Common.Config.Instance.Home.Save(false); - - Global.DeleteFilebyHomeId(fileName); - } - - if (listShardFile.Contains(fileName) == true) - { - //鏈湴鐨勮繖涓枃浠惰繕鍒嗕韩鐫�,娌℃湁闂 - continue; - } - - //妫�娴嬫湰鍦拌澶囨枃浠�,鏄惁瀛樺湪宸茬粡鍙栨秷浜嗗叡浜簡鐨� - if (fileName.StartsWith("Device_") == true) - { - //鍒犻櫎鎺夎繖涓澶囨枃浠� - Global.DeleteFilebyHomeId(fileName); - dicUpdateTime.Remove(fileName); - } - //妫�娴嬫湰鍦版埧闂存枃浠�,鏄惁瀛樺湪宸茬粡鍙栨秷浜嗗叡浜簡鐨� - else if (fileName.StartsWith("Room_") == true) - { - var roomData = Global.ReadFileByHomeId(fileName); - var nowRoom = Newtonsoft.Json.JsonConvert.DeserializeObject<Room>(Encoding.UTF8.GetString(roomData)); - if (nowRoom.IsSharedRoom == false) - { - //杩欎釜鎴块棿鏄粬鑷繁鍒涘缓鐨� - continue; - } - - //鍒犻櫎鎺夎繖涓埧闂存枃浠� - Global.DeleteFilebyHomeId(fileName); - dicUpdateTime.Remove(fileName); - if (Config.Instance.Home.RoomFilePathList.Contains(fileName) == true) - { - Config.Instance.Home.RemoveRoomListFilePath(fileName); - } - } - //妫�娴嬫湰鍦板満鏅枃浠�,鏄惁瀛樺湪宸茬粡鍙栨秷浜嗗叡浜簡鐨� - else if (fileName.StartsWith("Scene_") == true) - { - var sceneData = Global.ReadFileByHomeId(fileName); - var nowScene = Newtonsoft.Json.JsonConvert.DeserializeObject<SceneUI>(Encoding.UTF8.GetString(sceneData)); - if (nowScene.IsSharedScene == false) - { - //杩欎釜鍦烘櫙鏄粬鑷繁鍒涘缓鐨� - continue; - } - //鍒犻櫎鎺夎繖涓満鏅枃浠� - Global.DeleteFilebyHomeId(fileName); - dicUpdateTime.Remove(fileName); - } - } - //缃戝叧鏂囦欢闈炲悎娉曟�ф槸鍒锋柊璁惧鍒楄〃鐨勫嚱鏁伴噷闈㈠疄鐜� - - //淇濆瓨鍏ㄩ儴鍒嗕韩鏂囦欢鐨勬洿鏂版棩鏈� - this.SaveAllShardFileAgoUpdateTime(dicUpdateTime); - //鍏抽棴 - ProgressFormBar.Current.Close(); - - return true; - } - - #endregion - - #region 鈻� 鍚屾鍐呭鏇存柊鏃堕棿___________________ - - /// <summary> - /// 鑾峰彇鍏ㄩ儴鍒嗕韩鏂囦欢鐨勫墠鍥炴洿鏂版棩鏈� - /// </summary> - /// <returns></returns> - private Dictionary<string, string> GetAllShardFileAgoUpdateTime() - { - var dicTime = new Dictionary<string, string>(); - var data = Global.ReadFileByDirectory(DirNameResourse.LocalMemoryDirectory, DirNameResourse.ShardFileUpdateFile); - if (data == null) - { - //鐩爣鏂囦欢涓嶅瓨鍦� - return dicTime; - } - dicTime = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(System.Text.Encoding.UTF8.GetString(data)); - return dicTime; - } - - /// <summary> - /// 淇濆瓨鍏ㄩ儴鍒嗕韩鏂囦欢鐨勬洿鏂版棩鏈� - /// </summary> - /// <param name="dicTime"></param> - private void SaveAllShardFileAgoUpdateTime(Dictionary<string, string> dicTime) - { - var data = Newtonsoft.Json.JsonConvert.SerializeObject(dicTime); - var byteData = System.Text.Encoding.UTF8.GetBytes(data); - Global.WriteFileToDirectoryByBytes(DirNameResourse.LocalMemoryDirectory, DirNameResourse.ShardFileUpdateFile, byteData); - } - - #endregion - - //----------------------------------鍒嗗壊绾�(鏁版嵁棰勫)------------------------------------------------- - - #region 鈻� 鏁版嵁棰勫___________________________ - - /// <summary> - /// 鑾峰彇鎴愬憳鍏变韩鍒楄〃鐒跺悗淇濆瓨鍒版湰鍦�(鐢ㄥ畬涔嬪悗鏈�濂借皟鐢ㄦ竻绌� ClearShardDirectory鍑芥暟娓呯┖) - /// </summary> - /// <param name="memberShardInfo"> - /// <para>鎴愬憳鐨勫垎浜暟鎹�</para> - /// <para>濡傛灉涓嶇煡閬撹繖鏄粈涔堜笢瑗�,灏盢ew涓�涓�,鐒跺悗缂撳瓨璧锋潵,璋冪敤鍏朵粬鍑芥暟閮介渶瑕佽繖涓笢瑗�</para> - /// <para>New鐨勬椂鍊欒寰楀SubAccountDistributedMark璧嬪��,瀹冩槸鎴愬憳鍒楄〃鎺ュ彛杩斿洖鐨凷ubAccountDistributedMark</para> - /// </param> - /// <returns></returns> - public async Task<bool> GetMemberShardContentListAndSetToLocation(MemberShardInfoData memberShardInfo) - { - if (memberShardInfo.Refresh == false) - { - //浠庢湰鍦拌幏鍙栨垚鍛樼殑鍒嗕韩鍒楄〃 - this.GetMemberShardContentListFromLocal(memberShardInfo); - return true; - } - memberShardInfo.Refresh = false; - - //姝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 - }; - var result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeDataShare/GetShareDataBySubAccount", false, infoPra); - if (result == null) - { - //鍏抽棴杩涘害鏉� - ProgressFormBar.Current.Close(); - return false; - } - var listData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<ReceiveShardInfoResult>>(result); - //鍏堟竻绌哄叡浜枃浠跺す - this.ClearShardDirectory(); - - var listMark = new List<string>(); - foreach (var data in listData) - { - //鎬ц兘浼樺寲锛氬鏋滄湰鍦版嫢鏈夎繖涓枃浠剁殑璇�,鐩存帴浣跨敤閭d釜鏂囦欢 - string fileName = data.ShareName; - //璁板綍璧峰畠鐨勪富閿� - memberShardInfo.dicAllShardKeys[fileName] = data.DistributedMark; - - if (fileName.StartsWith("Room_") == true || fileName.StartsWith("Scene_") == true) - { - //鎴块棿鏂囦欢鍜屽満鏅枃浠堕渶瑕侀噸鏂板弽搴忓垪鍖� - listMark.Add(data.DistributedMark); - continue; - } - if (Shared.Common.Global.IsExistsByHomeId(fileName) == true) - { - //鍏朵粬鏂囦欢鐨勮瘽锛屽鏋滄湰鍦板瓨鍦紝鍒欎互鏈湴鏂囦欢涓哄噯 - this.AddShardFile(fileName); - continue; - } - listMark.Add(data.DistributedMark); - } - - //灏嗗垎浜殑鏁版嵁瀛樺叆鏈湴,杩斿洖鐨勬槸鏂囦欢鍚嶅瓧(寮傚父鏃惰繑鍥瀗ull) - var listFile = await this.SetShardFileToLocation(listMark); - if (listFile == null) - { - //鍏抽棴杩涘害鏉� - ProgressFormBar.Current.Close(); - return false; - } - - //浠庢湰鍦拌幏鍙栨垚鍛樼殑鍒嗕韩鍒楄〃 - this.GetMemberShardContentListFromLocal(memberShardInfo); - - //鍏抽棴杩涘害鏉� - 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(); - - var listDeviceFile = new HashSet<string>(); - var listSceneFile = new HashSet<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; - - //璁惧鏂囦欢 - listDeviceFile.Add(fileName); - } - else if (fileName.StartsWith("Scene_") == true) - { - //鍦烘櫙鏂囦欢 - listSceneFile.Add(fileName); - } - } - catch (Exception ex) { HdlLogLogic.Current.WriteLog(ex); } - } - - //璁剧疆鎴块棿閲岄潰璁惧鐨刄I瀵硅薄(鍥犱负杩欎釜涓滆タ鏄弽搴忓垪鍖栧嚭鏉ョ殑,璁惧UI瀵硅薄鏄笉搴忓垪鍖栧璞�) - foreach (var tempRoom in memberShardInfo.dicShardRoom.Values) - { - //杩樺師璁惧瀵硅薄 - tempRoom.DeviceUIList.Clear(); - for (int i = 0; i < tempRoom.DeviceUIFilePathList.Count; i++) - { - string deviceFile = tempRoom.DeviceUIFilePathList[i]; - //杩欎釜璁惧鏂囦欢鍖归厤寰楀埌鎴块棿 - listDeviceFile.Remove(deviceFile); - if (this.IsFileExists(deviceFile) == false) - { - //绉婚櫎鎺夎繖涓笉瀵瑰姴鐨勮矾寰� - tempRoom.DeviceUIFilePathList.RemoveAt(i); - i--; - continue; - } - tempRoom.DeviceUIList.Add(Common.LocalDevice.Current.GetDeviceUI(deviceFile)); - } - //杩樺師鍦烘櫙瀵硅薄 - tempRoom.SceneUIList.Clear(); - for (int i = 0; i < tempRoom.SceneUIFilePathList.Count; i++) - { - string uiPath = tempRoom.SceneUIFilePathList[i]; - //杩欎釜鍦烘櫙鏂囦欢鍖归厤寰楀埌鎴块棿 - listSceneFile.Remove(uiPath); - var byteData = this.GetShardFileContent(uiPath); - if (byteData == null) - { - //绉婚櫎鎺夎繖涓笉瀵瑰姴鐨勮矾寰� - tempRoom.SceneUIFilePathList.RemoveAt(i); - i--; - continue; - } - string valueData = System.Text.Encoding.UTF8.GetString(byteData); - var tempUi = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.SceneUI>(valueData); - tempRoom.SceneUIList.Add(tempUi); - - //鑾峰彇鍦烘櫙閲岄潰鐨勫叏閮ㄧ洰鏍�(2019.11.05杩藉姞鎿嶄綔,鏈夊彲鑳介偅涓澶囨槸鐢卞満鏅祵濂楁潵鐨�,鎵�浠ュ畠鏈夊彲鑳戒笉灞炰簬浠讳綍鎴块棿) - foreach (var data in tempUi.AddSceneMemberDataList) - { - //璁惧 - if (data.Type == 0) - { - string mainkey = LocalDevice.Current.GetDeviceMainKeys(data.DeviceAddr, data.Epoint); - if (dicShardDeviceFile.ContainsKey(mainkey) == true ) - { - //杩欎釜璁惧鏂囦欢鍖归厤寰楀埌 - listDeviceFile.Remove(dicShardDeviceFile[mainkey]); - } - } - if (data.Type == 1) - { - var temp = new SceneUI(); - temp.Id = data.ElseScenesId; - //杩欎釜鍦烘櫙鏂囦欢鍖归厤寰楀埌 - listSceneFile.Remove(temp.FileName); - } - } - } - } - //濡傛灉瀛樺湪鍖归厤涓嶄笂鐨勬枃浠� - 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.uUnallocated); - //杩樺師璁惧瀵硅薄 - foreach (string deviceFile in listDeviceFile) - { - roomTemp.DeviceUIFilePathList.Add(deviceFile); - 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 - - //----------------------------------鍒嗗壊绾�(涓婁紶鏂扮殑鍒嗕韩)--------------------------------------------- - - #region 鈻� 鎵ц涓婁紶鏂扮殑鍒嗕韩___________________ - - /// <summary> - /// 鎵ц涓婁紶鏂扮殑鍒嗕韩 - /// </summary> - /// <param name="memberShardInfo">鎴愬憳鐨勫垎浜暟鎹�</param> - /// <param name="nowRoom">褰撳墠鐨勬埧闂村璞�</param> - /// <param name="listDevice">閫夋嫨涓婁紶鐨勮澶�</param> - /// <param name="listScene">閫夋嫨涓婁紶鐨勫満鏅�(涓嶈鑾峰彇瀹冮噷闈㈢殑缁戝畾鍒楄〃)</param> - /// <param name="BarMaxValue">杩涘害鏉$殑鏈�澶у��,濡傛灉涓嶄负-1,鍒欏唴閮ㄤ笉浼氳嚜鍔ㄥ脊鍑鸿繘搴︽潯</param> - /// <param name="listCheckFile">鏂囦欢閲嶅涓婁紶妫�娴�</param> - public async Task<bool> DoUploadSharedContent(MemberShardInfoData memberShardInfo, Common.Room nowRoom, - List<CommonDevice> listDevice, List<Common.SceneUI> listScene, int BarMaxValue = -1, HashSet<string> listCheckFile = null) - { - if (listDevice.Count == 0 && listScene.Count == 0) - { - return true; - } - var listCheck = new HashSet<string>(); - - //鑾峰彇鍦烘櫙閲岄潰宓屽鐨勫瓙璁惧鍜屽瓙鍦烘櫙 - var listChirdDevice = new List<CommonDevice>(); - var listChirdScene = new List<Common.SceneUI>(); - foreach (var SceneTemp in listScene) - { - //浠庣紦瀛樿幏鍙栧満鏅殑鎵ц鐩爣 - this.GetSceneDeviceList(SceneTemp, listCheck, listChirdScene, listChirdDevice); - } - - //杩欎釜涔熸槸澶囦唤 - int BackgroundImageType = 0; - string BackgroundImage = string.Empty; - if (memberShardInfo.dicShardRoom.ContainsKey(nowRoom.FileName) == true) - { - BackgroundImageType = memberShardInfo.dicShardRoom[nowRoom.FileName].BackgroundImageType; - BackgroundImage = memberShardInfo.dicShardRoom[nowRoom.FileName].BackgroundImage; - } - //闃叉鍑虹幇閿欒,鏆傛椂淇濆瓨涓や釜鍒楄〃(铏界劧娌¢偅涔堥夯鐑︼紝涓嶈繃鏃㈢劧宸茬粡杩欐牱鍐欎簡灏辫繖鏍蜂簡) - var dicBackDevice = new Dictionary<string, List<string>>(); - var dicBackScene = new Dictionary<string, List<string>>(); - //涓存椂澶囦唤鎴块棿璁惧鍒楄〃 - this.BackupRoomDevicelistTemporary(memberShardInfo, dicBackDevice, dicBackScene); - - //鑾峰彇涓婁紶鐨勬枃浠�,鐒跺悗灏嗘枃浠跺鍒跺埌鎸囧畾鏂囦欢澶� - var listDelPic = new List<string>(); - var listFile = this.GetUploadListFile(memberShardInfo, nowRoom, listDevice, listScene, listChirdDevice, listChirdScene, listDelPic); - - //涓嶅厑璁告寜绯荤粺鐨勮繑鍥為敭 - Shared.Common.CommonPage.BackKeyCanClick = false; - UserCenterResourse.Option.AppCanSignout = false; - - if (BarMaxValue == -1) - { - //鎵撳紑杩涘害鏉� - ProgressBar.Show(); - //璁剧疆鏈�澶у�� - ProgressBar.SetMaxValue(listFile.Count); - } - else - { - //璁剧疆鏈�澶у�� - ProgressBar.SetMaxValue(BarMaxValue); - } - - //涓婁紶鍒嗕韩 - var result = await this.DoUploadShardContent(memberShardInfo, listFile, listCheckFile); - if (result == true) - { - //鍒犻櫎鎸囧畾鑷畾涔夊浘鐗� - result = await this.DoDeleteSharedContent(memberShardInfo, listDelPic); - } - if (BarMaxValue == -1) - { - //鍏抽棴杩涘害鏉� - ProgressBar.Close(); - } - - //鍏佽鎸夌郴缁熺殑杩斿洖閿� - Shared.Common.CommonPage.BackKeyCanClick = true; - UserCenterResourse.Option.AppCanSignout = true; - - if (result == false) - { - //鎭㈠鍘熸暟鎹� - if (memberShardInfo.TempRoom == null) - { - memberShardInfo.dicShardRoom[nowRoom.FileName].BackgroundImageType = BackgroundImageType; - memberShardInfo.dicShardRoom[nowRoom.FileName].BackgroundImage = BackgroundImage; - } - this.RecoverRoomDevicelistTemporary(memberShardInfo, dicBackDevice, dicBackScene, listFile); - } - else - { - //瑕嗙洊鏁版嵁 - if (memberShardInfo.TempRoom != null) - { - memberShardInfo.dicShardRoom[nowRoom.FileName] = memberShardInfo.TempRoom; - } - } - memberShardInfo.TempRoom = null; - - return result; - } - - /// <summary> - /// 鑾峰彇涓婁紶鐨勬枃浠跺悕 - /// </summary> - /// <param name="memberShardInfo">鎴愬憳鐨勫垎浜暟鎹�</param> - /// <param name="nowRoom">闇�瑕佷笂浼犲埌浜戠鐨勬埧闂村璞�(娉ㄦ剰,杩欎釜鎴块棿鏄富浜虹殑鎴块棿瀵硅薄,鑰屼笉鏄櫄鎷熺殑)</param> - /// <param name="listDevice">鍒嗕韩鐨勮澶囧垪琛�(娉ㄦ剰,杩欎釜涓滆タ鏄富浜虹殑)</param> - /// <param name="listScene">鍒嗕韩鐨勫満鏅垪琛�(娉ㄦ剰,杩欎釜涓滆タ鏄富浜虹殑)</param> - /// <param name="listChirdDevice">鍦烘櫙閲岄潰閫掑綊鑾峰彇鐨勮澶�</param> - /// <param name="listChirdScene">鍦烘櫙閲岄潰閫掑綊鑾峰彇鐨勫満鏅�</param> - /// <param name="listDelPic">闇�瑕佸垹闄ょ殑鍥剧墖</param> - /// <returns></returns> - private List<string> GetUploadListFile(MemberShardInfoData memberShardInfo, Common.Room nowRoom, List<CommonDevice> listDevice, List<Common.SceneUI> listScene, - List<CommonDevice> listChirdDevice, List<Common.SceneUI> listChirdScene, List<string> listDelPic) - { - var listFile = new List<string>(); - - Common.Room roomTemp = null; - if (memberShardInfo.dicShardRoom.ContainsKey(nowRoom.FileName) == false) - { - //鍏嬮殕涓�涓璞� - roomTemp = nowRoom.CloneRoomClass(); - memberShardInfo.TempRoom = roomTemp; - //鏂板垎浜殑鎴块棿,濡傛灉鍥剧墖鏄嚜瀹氫箟鐨�,鍒欎笂浼犲浘鐗� - if (roomTemp.BackgroundImageType != 0) - { - //鑷畾涔夌殑鍥剧墖,瀹冨瓨鍦ㄤ簬鏈湴,浣嗘槸瀹冩槸鍏ㄨ矾寰� - listFile.Add(roomTemp.BackgroundImage); - this.AddShardFile(roomTemp.BackgroundImage); - } - } - else - { - roomTemp = memberShardInfo.dicShardRoom[nowRoom.FileName]; - //濡傛灉浜戠鍒嗕韩鐨勬埧闂寸殑鍥剧墖鍜屼富浜虹殑涓嶄竴鏍风殑鏃跺�� - if (roomTemp.BackgroundImage != nowRoom.BackgroundImage) - { - if (roomTemp.BackgroundImageType != 0) - { - //鍒犻櫎鑷畾涔夊浘鐗� - listDelPic.Add(roomTemp.BackgroundImage); - } - if (nowRoom.BackgroundImageType != 0) - { - //鑷畾涔夌殑鍥剧墖,瀹冨瓨鍦ㄤ簬鏈湴,浣嗘槸瀹冩槸鍏ㄨ矾寰� - listFile.Add(nowRoom.BackgroundImage); - this.AddShardFile(nowRoom.BackgroundImage); - } - //鍙樻洿鍥剧墖璁剧疆 - roomTemp.BackgroundImageType = nowRoom.BackgroundImageType; - roomTemp.BackgroundImage = nowRoom.BackgroundImage; - } - } - - foreach (var device in listDevice) - { - //璁惧 - listFile.Add(device.FilePath); - this.AddShardFile(device.FilePath); - - //鍔犵偣缂撳瓨 - this.dicShardDeviceFile[LocalDevice.Current.GetDeviceMainKeys(device)] = device.FilePath; - - //璁惧鐨刄I - var deviceUi = device.FilePath; - if (roomTemp.DeviceUIFilePathList.Contains(deviceUi) == false) - { - roomTemp.DeviceUIFilePathList.Add(deviceUi); - } - } - //閫掑綊鑾峰彇鐨勮澶囦笉闇�瑕佸姞鍏ュ埌鎴块棿 - foreach (var device in listChirdDevice) - { - //璁惧 - 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) - { - //鑷畾涔夌殑鍥剧墖,瀹冨瓨鍦ㄤ簬鏈湴 - listFile.Add(secene.IconPath); - this.AddShardFile(secene.IconPath); - } - - listFile.Add(secene.FileName); - this.AddShardFile(secene); - - if (roomTemp.SceneUIFilePathList.Contains(secene.FileName) == false) - { - roomTemp.SceneUIFilePathList.Add(secene.FileName); - } - } - //閫掑綊鑾峰彇鐨勫満鏅笉闇�瑕佸姞鍏ュ埌鎴块棿 - foreach (var secene in listChirdScene) - { - listFile.Add(secene.FileName); - this.AddShardFile(secene); - } - //鎴块棿鏂囦欢涔熺粰杩囧幓 - listFile.Add(roomTemp.FileName); - this.AddShardFile(roomTemp); - - //鍙嶆妤煎眰鏂囦欢寰堝皬,涓�璧风粰杩囧幓鍚� - if (roomTemp.FloorId != string.Empty) - { - memberShardInfo.dicShardFloor[roomTemp.FloorId] = roomTemp.FloorName; ; - } - this.AddShardFile(memberShardInfo.dicShardFloor); - listFile.Add(DirNameResourse.ShardFloorFile); - - return listFile; - } - - /// <summary> - /// 鑾峰彇鍦烘櫙鐨勭洰鏍囪澶囧垪琛�(杩欎釜涓嶈兘浠庡垎浜暟鎹腑鑾峰彇) - /// </summary> - /// <param name="scene">鍦烘櫙</param> - /// <param name="listCheck">閲嶅妫�娴嬬敤</param> - /// <param name="listSceneUI">娣诲姞鍒嗕韩鐨勫満鏅垪琛�</param> - /// <param name="listDevice">娣诲姞鍒嗕韩鐨勮澶囧垪琛�</param> - /// <returns></returns> - public void GetSceneDeviceList(Common.SceneUI scene, HashSet<string> listCheck, List<Common.SceneUI> listSceneUI, List<CommonDevice> listDevice) - { - foreach (var data in scene.AddSceneMemberDataList) - { - //璁惧 - if (data.Type == 0) - { - string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(data.DeviceAddr, data.Epoint); - if (listCheck.Contains(mainKeys) == true) - { - //涓嶉噸澶嶆坊鍔� - continue; - } - listCheck.Add(mainKeys); - - var device = Common.LocalDevice.Current.GetDevice(data.DeviceAddr, data.Epoint); - if (device != null) - { - listDevice.Add(device); - } - } - //鍦烘櫙 - else if (data.Type == 1) - { - string mainKeys = data.ElseScenesId.ToString(); - if (listCheck.Contains(mainKeys) == true) - { - //涓嶉噸澶嶆坊鍔� - continue; - } - listCheck.Add(mainKeys); - - //鑾峰彇鍦烘櫙瀵硅薄 - var sceneUi = Room.CurrentRoom.GetSceneUIBySceneId(data.ElseScenesId); - if (sceneUi != null) - { - listSceneUI.Add(sceneUi); - } - } - } - } - - #endregion - - #region 鈻� 涓婁紶鏂扮殑鍒嗕韩_______________________ - - /// <summary> - /// 涓婁紶鍒嗕韩(杩斿洖浜戠鍒嗕韩鏂囦欢鐨勪富閿�:DistributedMark) - /// </summary> - /// <param name="memberShardInfo">鎴愬憳鐨勫垎浜暟鎹�</param> - /// <param name="listFile">涓婁紶鐨勬枃浠跺悕</param> - /// <param name="listCheckFile">閲嶅鏂囦欢涓婁紶妫�娴�</param> - /// <returns></returns> - private async Task<bool> DoUploadShardContent(MemberShardInfoData memberShardInfo, List<string> listFile, HashSet<string> listCheckFile) - { - var dicKeys = new Dictionary<string, string>(); - for (int i = 0; i < listFile.Count; i++) - { - string fileName = listFile[i]; - if (listCheckFile != null) - { - if (listCheckFile.Contains(fileName) == true) - { - //閲嶅鏂囦欢涓嶅啀涓婁紶 - continue; - } - listCheckFile.Add(fileName); - } - if (fileName.EndsWith(".png") == true) - { - //涓婁紶鍥剧墖 - var result = this.UpLoadBigBackupFileToDB(memberShardInfo, fileName); - if (result == null) - { - return false; - } - dicKeys[fileName] = result; - } - else - { - var info = new UploadShardContent(); - info.SubAccountDistributedMark = memberShardInfo.SubAccountDistributedMark; - info.ShareName = fileName; - info.ShareDataBytes = HdlShardLogic.Current.GetShardFileContent(fileName); - - //杩藉姞鍏变韩 - if (memberShardInfo.dicAllShardKeys.ContainsKey(fileName) == false) - { - var result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeDataShare/AddShareData", false, info); - if (result == null) - { - return false; - } - //杩欓噷鏈夌偣鐗规畩锛屾帴鍙f槸鐩存帴杩斿洖涓婚敭鍥炴潵鐨勶紝鑰屼笉鏄疛soin - dicKeys[fileName] = result; - } - else - { - info.DistributedMark = memberShardInfo.dicAllShardKeys[fileName]; - var result = await UserCenterLogic.GetResultStatuByRequestHttps("ZigbeeDataShare/EditShareData", false, info); - if (result == false) - { - return false; - } - dicKeys[fileName] = info.DistributedMark; - } - } - //璁剧疆杩涘害鍊� - ProgressBar.SetValue(1); - } - //濡傛灉娌℃湁閿欒,鍒欐坊鍔犱复鏃剁紦瀛� - foreach (var keys in dicKeys.Keys) - { - memberShardInfo.dicAllShardKeys[keys] = dicKeys[keys]; - } - - return true; - } - - /// <summary> - /// 涓婁紶鍥剧墖鏂囦欢鍒颁簯绔� - /// </summary> - /// <param name="fullDir">鏂囦欢澶圭殑鍏ㄨ矾寰�</param> - /// <param name="listPicFile">鍥剧墖鏂囦欢鍒楄〃</param> - /// <returns></returns> - private string UpLoadBigBackupFileToDB(MemberShardInfoData memberShardInfo, string fileName) - { - string fullName = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.DownLoadShardDirectory, fileName); - if (System.IO.File.Exists(fullName) == false) - { - return null; - } - var nvc = new NameValueCollection(); - nvc.Add("ShareName", fileName); - nvc.Add("HouseDistributedMark", Common.Config.Instance.Home.Id); - nvc.Add("SubAccountDistributedMark", memberShardInfo.SubAccountDistributedMark); - nvc.Add("ShareDataBytes", Convert.ToBase64String(this.GetShardFileContent(fileName))); - - //杩藉姞鍏变韩 - if (memberShardInfo.dicAllShardKeys.ContainsKey(fileName) == false) - { - //杩欓噷鏈夌偣鐗规畩锛屾帴鍙f槸鐩存帴杩斿洖涓婚敭鍥炴潵鐨勶紝鑰屼笉鏄疛soin - var result = this.DoUpLoadBigBackupFileToDB("ZigbeeDataShare/AddShareData", fullName, nvc); - return result; - } - else - { - nvc.Add("DistributedMark", memberShardInfo.dicAllShardKeys[fileName]); - var result = this.DoUpLoadBigBackupFileToDB("ZigbeeDataShare/EditShareData", fullName, nvc); - if (result == null) - { - return null; - } - return memberShardInfo.dicAllShardKeys[fileName]; - } - } - - /// <summary> - /// 鎵ц涓婁紶澶ф枃浠� - /// </summary> - /// <param name="RequestName">璇锋眰鎺ュ彛</param> - /// <param name="fullFileName">鏂囦欢鍚嶅瓧(鍚矾寰�)</param> - /// <param name="nvc"></param> - /// <returns></returns> - private string DoUpLoadBigBackupFileToDB(string RequestName, string fullFileName, NameValueCollection nvc) - { - string paramName = "file"; - string contentType = "application/octet-stream"; - string requestUrl = $"{CommonPage.RequestHttpsHost}/{RequestName}"; - - string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x"); - byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); - - var wr = (HttpWebRequest)WebRequest.Create(requestUrl); - wr.ContentType = "multipart/form-data; boundary=" + boundary; - wr.Method = "POST"; - wr.KeepAlive = true; - wr.Credentials = System.Net.CredentialCache.DefaultCredentials; - - wr.Headers.Add(HttpRequestHeader.Authorization, Config.Instance.Token); - - var rs = wr.GetRequestStream(); - - string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}"; - foreach (string key in nvc.Keys) - { - rs.Write(boundarybytes, 0, boundarybytes.Length); - string formitem = string.Format(formdataTemplate, key, nvc[key]); - byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem); - rs.Write(formitembytes, 0, formitembytes.Length); - } - rs.Write(boundarybytes, 0, boundarybytes.Length); - - string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n"; - string header = string.Format(headerTemplate, paramName, fullFileName, contentType); - byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header); - rs.Write(headerbytes, 0, headerbytes.Length); - - var fileStream = new FileStream(fullFileName, FileMode.Open, FileAccess.Read); - byte[] buffer = new byte[4096]; - int bytesRead = 0; - while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) - { - rs.Write(buffer, 0, bytesRead); - } - fileStream.Close(); - - byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n"); - rs.Write(trailer, 0, trailer.Length); - rs.Close(); - - WebResponse wresp = null; - try - { - wresp = wr.GetResponse(); - Stream stream2 = wresp.GetResponseStream(); - StreamReader reader2 = new StreamReader(stream2); - - string result = reader2.ReadToEnd(); - - var data = Newtonsoft.Json.JsonConvert.DeserializeObject<Shared.Common.ResponseEntity.ResponsePack>(result); - - bool flage = UserCenterLogic.CheckNotEorrorMsg(data, requestUrl); - if (flage == true) - { - //缂栬緫鐨勬椂鍊欙紝杩欎釜涓滆タ浼氭槸null - return data.ResponseData == null ? "1" : data.ResponseData.ToString(); - } - - //Log鍑哄姏 - IMessageCommon.Current.GetMsgByRequestName(RequestName, data, nvc); - - return null; - } - catch - { - return null; - } - finally - { - if (wresp != null) - { - wresp.Close(); - wresp = null; - } - wr = null; - } - } - - - #endregion - - #region 鈻� 涓存椂澶囦唤鎴块棿璁惧鍒楄〃_______________ - - /// <summary> - /// 涓存椂澶囦唤鎴块棿璁惧鍒楄〃 - /// </summary> - /// <param name="memberShardInfo">鎴愬憳鐨勫垎浜暟鎹�</param> - /// <param name="dicBackDevice">绌虹殑璁惧澶囦唤鍒楄〃</param> - /// <param name="dicBackScene">绌虹殑鍦烘櫙澶囦唤鍒楄〃</param> - private void BackupRoomDevicelistTemporary(MemberShardInfoData memberShardInfo, Dictionary<string, List<string>> dicBackDevice, - Dictionary<string, List<string>> dicBackScene) - { - foreach (var roomKeys in memberShardInfo.dicShardRoom.Keys) - { - dicBackDevice[roomKeys] = new List<string>(); - dicBackScene[roomKeys] = new List<string>(); - - dicBackDevice[roomKeys].AddRange(memberShardInfo.dicShardRoom[roomKeys].DeviceUIFilePathList); - dicBackScene[roomKeys].AddRange(memberShardInfo.dicShardRoom[roomKeys].SceneUIFilePathList); - } - } - - /// <summary> - /// 杩樺師涓存椂澶囦唤鐨勬埧闂磋澶囧垪琛� - /// </summary> - /// <param name="memberShardInfo">鎴愬憳鐨勫垎浜暟鎹�</param> - /// <param name="dicBackDevice">涓存椂澶囦唤鐨勮澶囧浠藉垪琛�</param> - /// <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) - { - foreach (string fileName in listFile) - { - //鐢熸垚鐨勬枃浠跺叏閮ㄥ垹闄�,鎴块棿鏂囦欢鐨勮瘽,涓嬮潰浼氶噸鏂扮敓鎴� - this.DeleteShardFile(fileName); - } - - foreach (var roomKeys in memberShardInfo.dicShardRoom.Keys) - { - if (dicBackDevice.ContainsKey(roomKeys) == false) - { - continue; - } - memberShardInfo.dicShardRoom[roomKeys].DeviceUIFilePathList.Clear(); - memberShardInfo.dicShardRoom[roomKeys].DeviceUIFilePathList.AddRange(dicBackDevice[roomKeys]); - - memberShardInfo.dicShardRoom[roomKeys].SceneUIFilePathList.Clear(); - memberShardInfo.dicShardRoom[roomKeys].SceneUIFilePathList.AddRange(dicBackScene[roomKeys]); - - //瑕嗙洊鎴块棿鏂囦欢 - this.AddShardFile(memberShardInfo.dicShardRoom[roomKeys]); - } - } - - #endregion - - //----------------------------------鍒嗗壊绾�(鍒犻櫎鎸囧畾鍒嗕韩)--------------------------------------------- - - #region 鈻� 绉婚櫎鎸囧畾鍒嗕韩鍐呭___________________ - - /// <summary> - /// 绉婚櫎鎸囧畾鍒嗕韩鍐呭 - /// </summary> - /// <param name="memberShardInfo">鎴愬憳鐨勫垎浜俊鎭�</param> - /// <param name="nowRoom">褰撳墠鎴块棿</param> - /// <param name="listDevice">瑕佸彇娑堢殑璁惧</param> - /// <param name="listSceneUI">瑕佸彇娑堢殑鍦烘櫙</param> - /// <returns></returns> - public async Task<bool> DoDeleteSharedContent(MemberShardInfoData memberShardInfo, Common.Room nowRoom, - List<CommonDevice> listDevice, List<SceneUI> listSceneUI) - { - var roomTemp = memberShardInfo.dicShardRoom[nowRoom.FileName]; - //闃叉鍑洪敊,鍏堝浠藉垪琛� - var listBackDevice = new List<string>(); - listBackDevice.AddRange(roomTemp.DeviceUIFilePathList); - var listBackScene = new List<string>(); - listBackScene.AddRange(roomTemp.SceneUIFilePathList); - - var listMark = new List<string>(); - //瑕佸垹闄ょ殑鏂囦欢鍚嶅瓧 - var listDeleteFile = new List<string>(); - - //闄や簡瑕佸垹闄ょ殑鐩爣澶栵紝杩樺垎浜殑鏁版嵁 - var listHadShard = this.GetAllShardedFileNameFromDictionary(memberShardInfo, nowRoom, listDevice, listSceneUI); - - //鍏堝紕璁惧 - foreach (var device in listDevice) - { - string deviceFileName = device.FilePath; - - //绉婚櫎璺緞鍒楄〃 - roomTemp.DeviceUIFilePathList.Remove(device.FilePath); - if (listHadShard.Contains(deviceFileName) == true) - { - //鍏朵粬鍦烘櫙鍒嗕韩鏈夎繖涓澶�,鎵�浠ヤ笉鍒犻櫎杩欎釜璁惧鐨勬牴婧愭枃浠�,鍙槸鎶婃埧闂寸殑璁惧鍒楄〃璺緞绉婚櫎 - continue; - } - - //璁惧涓婚敭 - if (memberShardInfo.dicAllShardKeys.ContainsKey(deviceFileName) == true) - { - listMark.Add(memberShardInfo.dicAllShardKeys[deviceFileName]); - } - listDeleteFile.Add(device.FilePath); - } - - //鍐嶅紕鍦烘櫙 - foreach (var sceneUI in listSceneUI) - { - //绉婚櫎缂撳瓨 - roomTemp.SceneUIFilePathList.Remove(sceneUI.FileName); - - //鍏朵粬鍦烘櫙杩樺祵濂楃潃杩欎釜鍦烘櫙,鎵�浠ヤ笉鍒犻櫎杩欎釜鍦烘櫙鐨勬牴婧愭枃浠�,鍙槸鎶婃埧闂寸殑鍦烘櫙鍒楄〃璺緞绉婚櫎 - //浣嗘槸瀹冪粦瀹氱殑璁惧鐩爣瑕佸垹闄� - if (listHadShard.Contains(sceneUI.FileName) == true) - { - continue; - } - //鑾峰彇瑕佸垹闄ょ殑鍒嗕韩涓婚敭 - if (memberShardInfo.dicAllShardKeys.ContainsKey(sceneUI.FileName) == true) - { - listMark.Add(memberShardInfo.dicAllShardKeys[sceneUI.FileName]); - } - listDeleteFile.Add(sceneUI.FileName); - - //鍒犻櫎鑷畾涔夊浘鐗�,瀹冨瓨鍦ㄤ簬鏈湴,浣嗘槸瀹冩槸鍏ㄨ矾寰� - if (sceneUI.IconPathType != 0) - { - string[] Arry = sceneUI.IconPath.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries); - string sceneFile = Arry[Arry.Length - 1]; - listDeleteFile.Add(sceneFile); - if (memberShardInfo.dicAllShardKeys.ContainsKey(sceneFile) == true) - { - listMark.Add(memberShardInfo.dicAllShardKeys[sceneFile]); - } - } - - //鎵ц鍒犻櫎宓屽鐨勮澶� - var listTemp = new HashSet<string>(); - var dicBindScene = new Dictionary<string, SceneUI>(); - this.GetSceneBindFileName(sceneUI, ref listTemp, ref dicBindScene); - foreach (var fileName in listTemp) - { - if (listHadShard.Contains(fileName) == true) - { - continue; - } - //鑾峰彇瑕佸垹闄ょ殑鍒嗕韩涓婚敭 - if (memberShardInfo.dicAllShardKeys.ContainsKey(fileName) == true) - { - listMark.Add(memberShardInfo.dicAllShardKeys[fileName]); - } - listDeleteFile.Add(fileName); - - if (dicBindScene.ContainsKey(fileName) == true && dicBindScene[fileName].IconPathType != 0) - { - //鍒犻櫎鑷畾涔夊満鏅浘鐗�,瀹冨瓨鍦ㄤ簬鏈湴,浣嗘槸瀹冩槸鍏ㄨ矾寰� - string[] Arry = dicBindScene[fileName].IconPath.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries); - string sceneFile = Arry[Arry.Length - 1]; - listDeleteFile.Add(sceneFile); - if (memberShardInfo.dicAllShardKeys.ContainsKey(sceneFile) == true) - { - listMark.Add(memberShardInfo.dicAllShardKeys[sceneFile]); - } - } - } - } - - //濡傛灉杩欎釜鎴块棿鐨勫垎浜澶囧拰鍦烘櫙鍏ㄩ儴鍒犻櫎鐨勮瘽,鎶婂垎浜埧闂存枃浠朵篃涓�璧峰垹闄� - if (roomTemp.DeviceUIFilePathList.Count == 0 && roomTemp.SceneUIFilePathList.Count == 0) - { - //鎴块棿鍒犻櫎 - if (memberShardInfo.dicAllShardKeys.ContainsKey(nowRoom.FileName) == true) - { - listMark.Add(memberShardInfo.dicAllShardKeys[nowRoom.FileName]); - } - listDeleteFile.Add(nowRoom.FileName); - - if (nowRoom.BackgroundImageType != 0) - { - //鍒犻櫎鑷畾涔夋埧闂村浘鐗�,瀹冨瓨鍦ㄤ簬鏈湴,浣嗘槸瀹冩槸鍏ㄨ矾寰� - string[] Arry = nowRoom.BackgroundImage.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries); - string roomFile = Arry[Arry.Length - 1]; - listDeleteFile.Add(roomFile); - if (memberShardInfo.dicAllShardKeys.ContainsKey(roomFile) == true) - { - listMark.Add(memberShardInfo.dicAllShardKeys[roomFile]); - } - } - } - - //鎵ц绉婚櫎鍒嗕韩鏁版嵁 - var result = await this.DoDeleteSharedContent(memberShardInfo, nowRoom, listMark, listDeleteFile); - //鍚屾鎴块棿鏂囦欢 - if (result == true && listDeleteFile.Contains(roomTemp.FileName) == false) - { - //鎵ц涓婁紶鎴块棿瀵硅薄 - result = await this.DoUploadRoomObject(memberShardInfo, roomTemp); - } - //鍚屾妤煎眰鏁版嵁 - if (result == true && listDeleteFile.Contains(roomTemp.FileName) == true) - { - int floorCount = 0; - foreach (var myRoom in memberShardInfo.dicShardRoom.Values) - { - if (myRoom.FloorId == roomTemp.FloorId) { floorCount++; } - } - if (floorCount == 0) - { - //濡傛灉璇ユゼ灞傚凡缁忓垹瀹屾埧闂翠簡,鍒欐洿鏂版ゼ灞� - memberShardInfo.dicShardFloor.Remove(roomTemp.FloorId); - //鎵ц涓婁紶瀵硅薄 - result = await this.DoUploadFloorObject(memberShardInfo); - } - - } - - if (result == false) - { - //鎭㈠ - roomTemp.DeviceUIFilePathList.Clear(); - roomTemp.DeviceUIFilePathList.AddRange(listBackDevice); - - roomTemp.SceneUIFilePathList.Clear(); - roomTemp.SceneUIFilePathList.AddRange(listBackScene); - } - return result; - } - - #endregion - - #region 鈻� 鎵ц绉婚櫎鍒嗕韩鏁版嵁___________________ - - /// <summary> - /// 鎵ц绉婚櫎鍒嗕韩鏁版嵁 - /// </summary> - /// <param name="memberShardInfo">鎴愬憳鐨勫垎浜唴瀹�</param> - /// <param name="nowRoom">褰撳墠鎴块棿</param> - /// <param name="listMark">瑕佺Щ闄ょ殑涓婚敭</param> - /// <param name="listDeleteFile">瑕佸垹闄ょ殑鏂囦欢(鎴块棿鏂囦欢闇�瑕佸垹闄ょ殑璇�,蹇呴』鏀惧湪鏈�鍚�)</param> - /// <returns></returns> - private async Task<bool> DoDeleteSharedContent(MemberShardInfoData memberShardInfo, Common.Room nowRoom, - List<string> listMark, List<string> listDeleteFile) - { - if (listMark.Count == 0) - { - //鏈夊彲鑳藉彧鍒犻櫎涓�涓洖璺紝鑰岃繖涓洖璺槸鍒嗛厤鍒板涓埧闂寸殑 - return true; - } - - var info = new DeleteShardInfo(); - //寮�鍚繘搴︽潯 - ProgressBar.Show(); - var listCheck = new HashSet<string>(); - foreach (var markKeys in listMark) - { - //閲岄潰浼间箮鏈夊彲鑳戒細鍑虹幇閲嶅 - if (listCheck.Contains(markKeys) == true) { continue; } - listCheck.Add(markKeys); - - info.DistributedMark = markKeys; - //鎵ц鍒犻櫎 - var result = await UserCenterLogic.GetResultStatuByRequestHttps("ZigbeeDataShare/DeleteShareData", false, info); - if (result == false) - { - //鍏抽棴杩涘害鏉� - ProgressBar.Close(); - return false; - } - } - //鍏抽棴杩涘害鏉� - ProgressBar.Close(); - for (int i = 0; i < listDeleteFile.Count; i++) - { - string fileName = listDeleteFile[i]; - if (i == listDeleteFile.Count - 1 && fileName.StartsWith("Room_") == true) - { - //鏈�鍚庝竴涓浐瀹氬彲鑳芥槸鎴块棿鏂囦欢,鐩存帴绉婚櫎鏁翠釜瀵硅薄 - memberShardInfo.dicShardRoom.Remove(fileName); - } - memberShardInfo.dicAllShardKeys.Remove(fileName); - - this.DeleteShardFile(fileName); - } - return true; - } - - /// <summary> - /// 鎵ц绉婚櫎鍒嗕韩鏁版嵁 - /// </summary> - /// <param name="memberShardInfo">鎴愬憳鐨勫垎浜唴瀹�</param> - /// <param name="listDelFile">鍒犻櫎鐨勬枃浠�</param> - /// <returns></returns> - private async Task<bool> DoDeleteSharedContent(MemberShardInfoData memberShardInfo, List<string> listDelFile) - { - if (listDelFile.Count == 0) - { - return true; - } - - var info = new DeleteShardInfo(); - foreach (var fileName in listDelFile) - { - if (memberShardInfo.dicAllShardKeys.ContainsKey(fileName) == false) - { - //鎴戜篃涓嶇煡閬撲负浠�涔堜細鎵句笉鍒颁富閿� - continue; - } - - info.DistributedMark = memberShardInfo.dicAllShardKeys[fileName]; - //鎵ц鍒犻櫎 - var result = await UserCenterLogic.GetResultStatuByRequestHttps("ZigbeeDataShare/DeleteShareData", false, info); - if (result == false) - { - return false; - } - } - for (int i = 0; i < listDelFile.Count; i++) - { - string fileName = listDelFile[i]; - memberShardInfo.dicAllShardKeys.Remove(fileName); - - this.DeleteShardFile(fileName); - } - return true; - } - - #endregion - - #region 鈻� 涓婁紶鎴块棿瀵硅薄_______________________ - - /// <summary> - /// 涓婁紶鎴块棿瀵硅薄 - /// </summary> - /// <param name="memberShardInfo">鎴愬憳鐨勫叡浜唴瀹�</param> - /// <param name="upDateRoom">闇�瑕佷笂浼犲埌浜戠鐨勬埧闂村璞�</param> - /// <returns></returns> - private async Task<bool> DoUploadRoomObject(MemberShardInfoData memberShardInfo, Common.Room upDateRoom) - { - if (upDateRoom.Id == "Other") - { - return true; - } - var info = new EditorShardContent(); - info.DistributedMark = memberShardInfo.dicAllShardKeys[upDateRoom.FileName]; - info.ShareName = upDateRoom.FileName; - info.SubAccountDistributedMark = memberShardInfo.SubAccountDistributedMark; - - var data = Newtonsoft.Json.JsonConvert.SerializeObject(upDateRoom); - var byteData = System.Text.Encoding.UTF8.GetBytes(data); - info.ShareDataBytes = byteData; - var result = await UserCenterLogic.GetResultStatuByRequestHttps("ZigbeeDataShare/EditShareData", false, info); - if (result == false) - { - return false; - } - //灏嗘埧闂村璞″簭鍒楀寲鍒扮紦瀛� - this.AddShardFile(upDateRoom); - - return true; - } - - #endregion - - #region 鈻� 涓婁紶妤煎眰瀵硅薄_______________________ - - /// <summary> - /// 涓婁紶妤煎眰瀵硅薄 - /// </summary> - /// <param name="memberShardInfo">鎴愬憳鐨勫叡浜唴瀹�</param> - /// <returns></returns> - private async Task<bool> DoUploadFloorObject(MemberShardInfoData memberShardInfo) - { - var info = new EditorShardContent(); - info.DistributedMark = memberShardInfo.dicAllShardKeys[DirNameResourse.ShardFloorFile]; - info.ShareName = DirNameResourse.ShardFloorFile; - info.SubAccountDistributedMark = memberShardInfo.SubAccountDistributedMark; - - var data = Newtonsoft.Json.JsonConvert.SerializeObject(memberShardInfo.dicShardFloor); - var byteData = System.Text.Encoding.UTF8.GetBytes(data); - info.ShareDataBytes = byteData; - var result = await UserCenterLogic.GetResultStatuByRequestHttps("ZigbeeDataShare/EditShareData", false, info); - if (result == false) - { - return false; - } - //灏嗘埧闂村璞″簭鍒楀寲鍒扮紦瀛� - this.AddShardFile(memberShardInfo.dicShardFloor); - - return true; - } - - #endregion - - #region 鈻� 绉婚櫎鍏变韩鐨勪竴鑸柟娉昣________________ - - /// <summary> - /// 浠庣紦瀛樺瓧鍏镐腑鑾峰彇宸茬粡鍒嗕韩浜嗙殑鍏ㄩ儴璁惧鏂囦欢鍜屽満鏅殑鏂囦欢鍚嶅瓧 - /// </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, - List<CommonDevice> listDeleteDevice, List<Common.SceneUI> listDeleteScene) - { - //鑾峰彇鍏ㄩ儴瑕佸垹闄ょ殑鏂囦欢鍚嶅瓧 - var listDeleteFile = new HashSet<string>(); - foreach (var device in listDeleteDevice) - { - listDeleteFile.Add(device.FilePath); - } - foreach (var scene in listDeleteScene) - { - listDeleteFile.Add(scene.FileName); - } - - var listShardFile = new HashSet<string>(); - //鑾峰彇杩樺浜庡垎浜姸鎬佺殑鏂囦欢 - foreach (var roomTemp in memberShardInfo.dicShardRoom.Values) - { - //璁惧 - foreach (var deviceUi in roomTemp.DeviceUIFilePathList) - { - string deviceFile = deviceUi; - if (listDeleteFile.Contains(deviceFile) == true) - { - //鍥犱负涓�涓洖璺彧鑳藉垎閰嶄竴涓尯鍩�,鎵�浠ュ彲浠ョ洿鎺ュ垽鏂� - continue; - } - if (listShardFile.Contains(deviceFile) == false) - { - //杩欎釜鏂囦欢杩樺垎浜潃 - listShardFile.Add(deviceFile); - } - - } - //鍦烘櫙 - foreach (var scene in roomTemp.SceneUIList) - { - if (roomTemp.SceneUIFilePathList.Contains(scene.FileName) == false) - { - //杩欎釜鍦烘櫙宸茬粡琚垹闄� - continue; - } - if (roomTemp.FileName == nowRoom.FileName) - { - //濡傛灉寰幆鍒颁簡褰撳墠鎴块棿 - if (listDeleteFile.Contains(scene.FileName) == 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) - { - //鍦烘櫙鑷韩鐨勬枃浠� - listShardFile.Add(scene.FileName); - } - foreach (string file in listTemp) - { - if (listShardFile.Contains(file) == false) - { - listShardFile.Add(file); - } - } - } - } - return listShardFile; - } - - /// <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) - { - foreach (var data in scene.AddSceneMemberDataList) - { - //璁惧 - if (data.Type == 0) - { - string mainkey = LocalDevice.Current.GetDeviceMainKeys(data.DeviceAddr, data.Epoint); - if (dicShardDeviceFile.ContainsKey(mainkey) == true && listFile.Contains(dicShardDeviceFile[mainkey]) == false) - { - listFile.Add(dicShardDeviceFile[mainkey]); - } - } - if (data.Type == 1) - { - var temp = new SceneUI(); - temp.Id = data.ElseScenesId; - var byteData = this.GetShardFileContent(temp.FileName); - if (byteData != null) - { - string valueData = System.Text.Encoding.UTF8.GetString(byteData); - var roomTemp = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.SceneUI>(valueData); - dicBindScene[roomTemp.FileName] = roomTemp; - if (listFile.Contains(roomTemp.FileName) == false) - { - listFile.Add(roomTemp.FileName); - } - } - } - } - } - - #endregion - - #region 鈻� 缁撴瀯浣撶被___________________________ - - /// <summary> - /// 涓婁紶鍒嗕韩鐨勫唴瀹� - /// </summary> - private class UploadShardContent : IfacePraCommon - { - /// <summary> - /// 鍒嗕韩鏁版嵁鐨勪富閿� - /// </summary> - public string DistributedMark = string.Empty; - /// <summary> - /// 鍒嗕韩鍚嶅瓧 - /// </summary> - public string ShareName = string.Empty; - /// <summary> - /// 浣忓畢ID - /// </summary> - public string HouseDistributedMark = Common.Config.Instance.Home.Id; - /// <summary> - /// 瀛愯处鍙风殑guid - /// </summary> - public string SubAccountDistributedMark = string.Empty; - /// <summary> - /// 鍒嗕韩鍐呭 - /// </summary> - public byte[] ShareDataBytes = null; - } - - /// <summary> - /// 鍒犻櫎鍏变韩鐨勫唴瀹� - /// </summary> - private class DeleteShardInfo : IfacePraCommon - { - /// <summary> - /// 鍏变韩鏁版嵁鐨勫敮涓�鏍囪瘑 - /// </summary> - public string DistributedMark = null; - /// <summary> - /// 浣忓畢ID - /// </summary> - public string HouseDistributedMark = Common.Config.Instance.Home.Id; - } - - /// <summary> - /// 缂栬緫鍏变韩鍐呭 - /// </summary> - private class EditorShardContent : IfacePraCommon - { - /// <summary> - /// 涓婚敭 - /// </summary> - public string DistributedMark = string.Empty; - /// <summary> - /// 鍒嗕韩鍚嶅瓧 - /// </summary> - public string ShareName = string.Empty; - /// <summary> - /// 浣忓畢ID - /// </summary> - public string HouseDistributedMark = Common.Config.Instance.Home.Id; - /// <summary> - /// 鍒嗕韩鍐呭 - /// </summary> - public byte[] ShareDataBytes = null; - /// <summary> - /// 瀛愯处鍙风殑Guid - /// </summary> - public string SubAccountDistributedMark = string.Empty; - } - - /// <summary> - /// 鎺ユ敹鍒嗕韩鏁版嵁 - /// </summary> - private class ReceiveShardInfoResult - { - /// <summary> - /// 鏂囦欢鍚嶅瓧 - /// </summary> - public string ShareName = string.Empty; - /// <summary> - /// 涓婚敭 - /// </summary> - public string DistributedMark = string.Empty; - } - - #endregion - } -} + public static HdlShardLogic Current + { + get + { + if (m_Current == null) + { + m_Current = new HdlShardLogic(); + } + return m_Current; + } + set + { + m_Current = value; + } + } + /// <summary> + /// 鍒嗕韩鐨勮澶囨枃浠�(key:璁惧涓婚敭,value:璁惧鏂囦欢) + /// </summary> + private Dictionary<string, string> dicShardDeviceFile = new Dictionary<string, string>(); + + #endregion + + #region 鈻� 鑾峰彇鍒嗕韩鏂囦欢_______________________ + + /// <summary> + /// 灏嗗垎浜殑鏁版嵁瀛樺叆鏈湴,杩斿洖鐨勬槸鏂囦欢鍚嶅瓧(寮傚父鏃惰繑鍥瀗ull),璋冪敤 GetShardFileContent 鍙互鑾峰彇鏂囦欢鍐呯殑鍐呭 + /// </summary> + /// <param name="listDistributedMark"></param> + /// <returns></returns> + private List<string> SetShardFileToLocation(List<string> listDistributedMark) + { + if (listDistributedMark.Count == 0) + { + return new List<string>(); + } + int listMarkCount = listDistributedMark.Count; + + List<string> listFile = new List<string>(); + //鏂囦欢澶� + string strDir = DirNameResourse.DownLoadShardDirectory; + + //涓嶅厑璁告寜绯荤粺鐨勮繑鍥為敭 + Shared.Common.CommonPage.BackKeyCanClick = false; + UserCenterResourse.AccountOption.AppCanSignout = false; + + for (int i = 0; i < listDistributedMark.Count; i++) + { + string keys = listDistributedMark[i]; + var dataPra = new { DistributedMark = keys, HouseDistributedMark = Common.Config.Instance.Home.Id, IsOtherAccountControl = Common.Config.Instance.Home.IsOthreShare }; + var result = UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeDataShare/GetOneShareData", false, dataPra, null, true); + if (string.IsNullOrEmpty(result) == true) + { + //鍏佽鎸夌郴缁熺殑杩斿洖閿� + Shared.Common.CommonPage.BackKeyCanClick = true; + UserCenterResourse.AccountOption.AppCanSignout = true; + return null; + } + var dataResult = Newtonsoft.Json.JsonConvert.DeserializeObject<GetShardInfoResult>(result); + //瀵瑰簲鏃х増鏈殑璁惧鏂囦欢 Device_OnoffOutput_abcdfrtgg_01 + if (dataResult.ShareName.StartsWith("Device_") == true) + { + var strArry = dataResult.ShareName.Split(new string[] { "_" }, StringSplitOptions.None); + if (strArry.Length == 4) + { + dataResult.ShareName = strArry[0] + "_" + strArry[2] + "_" + strArry[3]; + } + } + //鏂囦欢鍚嶅瓧 + listFile.Add(dataResult.ShareName); + //淇濆瓨鍒版寚瀹氭枃浠跺す涓� + HdlFileLogic.Current.SaveByteToFile(System.IO.Path.Combine(strDir, dataResult.ShareName), dataResult.ShareDataBytes); + //璁剧疆杩涘害鍊� + ProgressFormBar.Current.SetValue(i + 1, listMarkCount); + } + + //鍏佽鎸夌郴缁熺殑杩斿洖閿� + Shared.Common.CommonPage.BackKeyCanClick = true; + UserCenterResourse.AccountOption.AppCanSignout = true; + + return listFile; + } + + /// <summary> + /// 鑾峰彇鍒嗕韩鏂囦欢鐨勫唴瀹� + /// </summary> + /// <param name="fileName">鏂囦欢鍚嶇О(涓嶆槸鍏ㄨ矾寰�)</param> + /// <returns></returns> + public byte[] GetShardFileContent(string fileName) + { + string fullName = System.IO.Path.Combine(DirNameResourse.DownLoadShardDirectory, fileName); + if (System.IO.File.Exists(fullName) == false) + { + return null; + } + string path = System.IO.Path.Combine(DirNameResourse.DownLoadShardDirectory, fileName); + var varByte = HdlFileLogic.Current.ReadFileByteContent(path); + return varByte; + } + + /// <summary> + /// 鑾峰彇鏈湴鍏ㄩ儴鐨勫叡浜枃浠� + /// </summary> + /// <returns></returns> + public List<string> GetLocalAllShardFile() + { + return HdlFileLogic.Current.GetFileFromDirectory(DirNameResourse.DownLoadShardDirectory); + } + + /// <summary> + /// 鏂囦欢鏄惁瀛樺湪 + /// </summary> + /// <param name="fileName"></param> + /// <returns></returns> + public bool IsFileExists(string fileName) + { + string fullName = System.IO.Path.Combine(DirNameResourse.DownLoadShardDirectory, fileName); + if (System.IO.File.Exists(fullName) == false) + { + return false; + } + return true; + } + + #endregion + + #region 鈻� 娣诲姞鍒嗕韩鏂囦欢_______________________ + + /// <summary> + /// 娣诲姞鍒嗕韩鏂囦欢鍒扮紦瀛� + /// </summary> + /// <param name="fileName">鍘熸牴鐩綍涓嬬殑鏂囦欢鍚�</param> + public void AddShardFile(string fileName) + { + if (Global.IsExistsByHomeId(fileName) == false) + { + return; + } + string oldName = System.IO.Path.Combine(Config.Instance.FullPath, fileName); + string newName = System.IO.Path.Combine(DirNameResourse.DownLoadShardDirectory, fileName); + HdlFileLogic.Current.CopyFile(oldName, newName); + } + + /// <summary> + /// 娣诲姞鎴块棿瀵硅薄鍒扮紦瀛� + /// </summary> + /// <param name="room">鎴块棿瀵硅薄</param> + public void AddShardFile(Common.Room room) + { + room.IsSharedRoom = true; + string fullName = System.IO.Path.Combine(DirNameResourse.DownLoadShardDirectory, room.FileName); + //鍐欏叆鍐呭 + HdlFileLogic.Current.SaveFileContent(fullName, room); + } + + /// <summary> + /// 娣诲姞鍦烘櫙瀵硅薄鍒扮紦瀛� + /// </summary> + /// <param name="scene">鍦烘櫙</param> + public void AddShardFile(Common.SceneUI scene) + { + scene.IsSharedScene = true; + string fullName = System.IO.Path.Combine(DirNameResourse.DownLoadShardDirectory, scene.FileName); + //鍐欏叆鍐呭 + HdlFileLogic.Current.SaveFileContent(fullName, scene); + } + + /// <summary> + /// 娣诲姞妤煎眰瀵硅薄鍒扮紦瀛� + /// </summary> + /// <param name="dic">妤煎眰</param> + public void AddShardFile(Dictionary<string, string> dic) + { + string fullName = System.IO.Path.Combine(DirNameResourse.DownLoadShardDirectory, DirNameResourse.ShardFloorFile); + //鍐欏叆鍐呭 + HdlFileLogic.Current.SaveFileContent(fullName, dic); + } + + #endregion + + #region 鈻� 鍒犻櫎鍒嗕韩鏂囦欢_______________________ + + /// <summary> + /// 娣诲姞鍒嗕韩鏂囦欢鍒扮紦瀛� + /// </summary> + /// <param name="fileName">鎸囧畾鏂囦欢鍚嶅瓧</param> + public void DeleteShardFile(string fileName) + { + fileName = System.IO.Path.Combine(DirNameResourse.DownLoadShardDirectory, fileName); + HdlFileLogic.Current.DeleteFile(fileName); + } + + /// <summary> + /// 娓呯┖鍏变韩鏂囦欢澶� + /// </summary> + public void ClearShardDirectory() + { + this.dicShardDeviceFile.Clear(); + //鍒涘缓鏂囦欢澶� + HdlFileLogic.Current.CreateDirectory(DirNameResourse.DownLoadShardDirectory, true); + } + + #endregion + + #region 鈻� 鍚屾鏈嶅姟鍣ㄧ殑鍒嗕韩鍐呭_______________ + + /// <summary> + /// 鍚屾鏈嶅姟鍣ㄧ殑鍒嗕韩鍐呭(閲岄潰鍙礋璐f妸涓滆タ瀛樺叆鏈湴) + /// </summary> + public bool SynchronizeDbSharedContent() + { + if (UserCenterResourse.UserInfo.AuthorityNo != 3) + { + //鍙湁鎴愬憳鎵嶆湁杩欎釜姒傚康 + return true; + } + + //鑾峰彇涓讳汉鍒嗕韩缁欐垚鍛樼殑鏂囦欢鍒楄〃 + var infoPra = new { DistributedMark = Config.Instance.Guid, HouseDistributedMark = Common.Config.Instance.Home.Id, IsOtherAccountControl = Common.Config.Instance.Home.IsOthreShare }; + var result = UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeDataShare/GetShareDataBySubAccount", false, infoPra); + if (string.IsNullOrEmpty(result) == true) + { + return false; + } + var listShardInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<List<GetShardInfoResult>>(result); + + //涓婚敭 + var listAddMark = new List<string>(); + //妫�娴嬪彇娑堜簡鍏变韩鐨勬搷浣滀娇鐢� + var listShardFile = new HashSet<string>(); + //鑾峰彇鍓嶅洖鍏变韩鏂囦欢鐨勬洿鏂版棩鏈�(keys:鏂囦欢鍚嶅瓧,value:鏇存柊鏃ユ湡) + var dicUpdateTime = this.GetAllShardFileAgoUpdateTime(); + + //鍏堢湅鐪嬭繖鍒嗕韩鏁版嵁閲岄潰鏈変粈涔堥 + foreach (var info in listShardInfo) + { + string updateTime = info.TimeSpan; + string fileName = info.ShareName; + listShardFile.Add(fileName); + + //濡傛灉鏈湴娌℃湁,鎴栬�呮洿鏂版棩鏈熷ぇ浜庡墠鍥炴洿鏂版棩鏈熺殑鏃跺�� + if (Global.IsExistsByHomeId(fileName) == false + || dicUpdateTime.ContainsKey(fileName) == false + || updateTime.CompareTo(dicUpdateTime[fileName]) > 0) + { + listAddMark.Add(info.DistributedMark); + //鏇存柊鏃ユ洿鏂� + dicUpdateTime[fileName] = updateTime; + } + } + + //浠庝簯绔幏鍙栦笅鏉ユ枃浠� + if (listAddMark.Count > 0) + { + //寮�鍚繘搴︽潯 鍏变韩鏁版嵁鍚屾涓� + ProgressFormBar.Current.Start(); + ProgressFormBar.Current.SetMsg(Language.StringByID(R.MyInternationalizationString.uShardDataIsSynchronizing)); + + //灏嗗垎浜殑鏁版嵁瀛樺叆鏈湴(鑾峰彇鐨勬槸鏈湴娌℃湁鐨�) + this.ClearShardDirectory(); + var listDbFile = this.SetShardFileToLocation(listAddMark); + if (listDbFile == null) + { + //鍏抽棴 + ProgressFormBar.Current.Close(); + return false; + } + + //鐢熸垚鏂囦欢 + foreach (string fileName in listDbFile) + { + var oldPath = System.IO.Path.Combine(DirNameResourse.DownLoadShardDirectory, fileName); + var newPath = System.IO.Path.Combine(Config.Instance.FullPath, fileName); + HdlFileLogic.Current.CopyFile(oldPath, newPath); + } + //娓呯┖鍏变韩鏂囦欢澶� + this.ClearShardDirectory(); + } + + //鍚屾鏈嶅姟鍣ㄧ殑鍙栨秷浜嗙殑鍒嗕韩鍐呭 + return this.SynchronizeDeleteSharedContent(listShardFile, dicUpdateTime); + } + + /// <summary> + /// 鍚屾鏈嶅姟鍣ㄧ殑鍙栨秷浜嗙殑鍒嗕韩鍐呭 + /// </summary> + /// <param name="listShardFile">浜戠涓婇潰鍒嗕韩鐨勬枃浠�,涓篘ull鏃朵粠鏂拌幏鍙�</param> + /// <param name="dicUpdateTime">鍒嗕韩鏂囦欢鐨勬洿鏂版椂闂�,涓篘ull鏃朵粠鏂拌幏鍙�</param> + /// <returns></returns> + public bool SynchronizeDeleteSharedContent(HashSet<string> listShardFile = null, Dictionary<string, string> dicUpdateTime = null) + { + if (UserCenterResourse.UserInfo.AuthorityNo != 3) + { + //鍙湁鎴愬憳鎵嶆湁杩欎釜姒傚康 + return true; + } + //寮�鍚繘搴︽潯 鍏变韩鏁版嵁鍚屾涓� + ProgressFormBar.Current.Start(); + ProgressFormBar.Current.SetMsg(Language.StringByID(R.MyInternationalizationString.uShardDataIsSynchronizing)); + + if (dicUpdateTime == null) + { + //鑾峰彇鍓嶅洖鍏变韩鏂囦欢鐨勬洿鏂版棩鏈�(keys: 鏂囦欢鍚嶅瓧, value: 鏇存柊鏃ユ湡) + dicUpdateTime = this.GetAllShardFileAgoUpdateTime(); + } + + //閲嶆柊鑾峰彇 + if (listShardFile == null) + { + listShardFile = new HashSet<string>(); + //鑾峰彇涓讳汉鍒嗕韩缁欐垚鍛樼殑鏂囦欢鍒楄〃 + var infoPra = new { DistributedMark = Config.Instance.Guid, HouseDistributedMark = Common.Config.Instance.Home.Id, IsOtherAccountControl = Common.Config.Instance.Home.IsOthreShare }; + var result = UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeDataShare/GetShareDataBySubAccount", false, infoPra); + if (string.IsNullOrEmpty(result) == true) + { + //鍏抽棴 + ProgressFormBar.Current.Close(); + return false; + } + var listShardData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<GetShardInfoResult>>(result); + //鍏堢湅鐪嬭繖鍒嗕韩鏁版嵁閲岄潰鏈変粈涔堥 + foreach (var info in listShardData) + { + listShardFile.Add(info.ShareName); + } + } + + //娓呯┖妤煎眰鏁版嵁 + Common.Config.Instance.Home.FloorDics.Clear(); + //鐒跺悗妫�娴嬫湰鍦扮殑鏂囦欢 + var listLocalFile = HdlFileLogic.Current.GetRootPathListFile(); + 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("Device_") == true) + { + //鍒犻櫎鎺夎繖涓澶囨枃浠� + Global.DeleteFilebyHomeId(fileName); + dicUpdateTime.Remove(fileName); + } + //妫�娴嬫湰鍦版埧闂存枃浠�,鏄惁瀛樺湪宸茬粡鍙栨秷浜嗗叡浜簡鐨� + else if (fileName.StartsWith("Room_") == true) + { + var roomData = Global.ReadFileByHomeId(fileName); + var nowRoom = Newtonsoft.Json.JsonConvert.DeserializeObject<Room>(Encoding.UTF8.GetString(roomData)); + if (nowRoom.IsSharedRoom == false) + { + //杩欎釜鎴块棿鏄粬鑷繁鍒涘缓鐨� + continue; + } + + //鍒犻櫎鎺夎繖涓埧闂存枃浠� + Global.DeleteFilebyHomeId(fileName); + dicUpdateTime.Remove(fileName); + } + //妫�娴嬫湰鍦板満鏅枃浠�,鏄惁瀛樺湪宸茬粡鍙栨秷浜嗗叡浜簡鐨� + else if (fileName.StartsWith("Scene_") == true) + { + var sceneData = Global.ReadFileByHomeId(fileName); + var nowScene = Newtonsoft.Json.JsonConvert.DeserializeObject<SceneUI>(Encoding.UTF8.GetString(sceneData)); + if (nowScene.IsSharedScene == false) + { + //杩欎釜鍦烘櫙鏄粬鑷繁鍒涘缓鐨� + continue; + } + //鍒犻櫎鎺夎繖涓満鏅枃浠� + Global.DeleteFilebyHomeId(fileName); + dicUpdateTime.Remove(fileName); + } + } + + //淇濆瓨妤煎眰鏁版嵁 + Common.Config.Instance.Home.Save(false); + + //缃戝叧鏂囦欢闈炲悎娉曟�ф槸鍒锋柊璁惧鍒楄〃鐨勫嚱鏁伴噷闈㈠疄鐜� + + //淇濆瓨鍏ㄩ儴鍒嗕韩鏂囦欢鐨勬洿鏂版棩鏈� + this.SaveAllShardFileAgoUpdateTime(dicUpdateTime); + //鍏抽棴 + ProgressFormBar.Current.Close(); + + return true; + } + + #endregion + + #region 鈻� 鍚屾鍐呭鏇存柊鏃堕棿___________________ + + /// <summary> + /// 鑾峰彇鍏ㄩ儴鍒嗕韩鏂囦欢鐨勫墠鍥炴洿鏂版棩鏈� + /// </summary> + /// <returns></returns> + private Dictionary<string, string> GetAllShardFileAgoUpdateTime() + { + var dicTime = new Dictionary<string, string>(); + var data = HdlFileLogic.Current.ReadFileByteContent(DirNameResourse.ShardFileUpdateTimeFile); + if (data == null) + { + //鐩爣鏂囦欢涓嶅瓨鍦� + return dicTime; + } + dicTime = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(System.Text.Encoding.UTF8.GetString(data)); + return dicTime; + } + + /// <summary> + /// 淇濆瓨鍏ㄩ儴鍒嗕韩鏂囦欢鐨勬洿鏂版棩鏈� + /// </summary> + /// <param name="dicTime"></param> + private void SaveAllShardFileAgoUpdateTime(Dictionary<string, string> dicTime) + { + HdlFileLogic.Current.SaveFileContent(DirNameResourse.ShardFileUpdateTimeFile, dicTime); + } + + #endregion + + //----------------------------------鍒嗗壊绾�(鏁版嵁棰勫)------------------------------------------------- + + #region 鈻� 鏁版嵁棰勫___________________________ + + /// <summary> + /// 鑾峰彇鎴愬憳鍏变韩鍒楄〃鐒跺悗淇濆瓨鍒版湰鍦�(鐢ㄥ畬涔嬪悗鏈�濂借皟鐢ㄦ竻绌� ClearShardDirectory鍑芥暟娓呯┖) + /// </summary> + /// <param name="memberShardInfo"> + /// <para>鎴愬憳鐨勫垎浜暟鎹�</para> + /// <para>濡傛灉涓嶇煡閬撹繖鏄粈涔堜笢瑗�,灏盢ew涓�涓�,鐒跺悗缂撳瓨璧锋潵,璋冪敤鍏朵粬鍑芥暟閮介渶瑕佽繖涓笢瑗�</para> + /// <para>New鐨勬椂鍊欒寰楀SubAccountDistributedMark璧嬪��,瀹冩槸鎴愬憳鍒楄〃鎺ュ彛杩斿洖鐨凷ubAccountDistributedMark</para> + /// </param> + /// <returns></returns> + public bool GetMemberShardContentListAndSetToLocation(MemberShardInfoData memberShardInfo) + { + if (memberShardInfo.Refresh == false) + { + //浠庢湰鍦拌幏鍙栨垚鍛樼殑鍒嗕韩鍒楄〃 + this.GetMemberShardContentListFromLocal(memberShardInfo); + return true; + } + memberShardInfo.Refresh = false; + + //姝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.Home.IsOthreShare + }; + var result = UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeDataShare/GetShareDataBySubAccount", false, infoPra); + if (string.IsNullOrEmpty(result) == true) + { + //鍏抽棴杩涘害鏉� + ProgressFormBar.Current.Close(); + return false; + } + var listData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<ReceiveShardInfoResult>>(result); + //鍏堟竻绌哄叡浜枃浠跺す + this.ClearShardDirectory(); + + var listMark = new List<string>(); + foreach (var data in listData) + { + //鎬ц兘浼樺寲锛氬鏋滄湰鍦版嫢鏈夎繖涓枃浠剁殑璇�,鐩存帴浣跨敤閭d釜鏂囦欢 + string fileName = data.ShareName; + if (fileName.StartsWith("Device_") == true) + { + string[] Arry = fileName.Split(new string[] { "_" }, StringSplitOptions.RemoveEmptyEntries); + if (Arry.Length == 4) + { + //瀵瑰簲鏃ф暟鎹細Device_OnOffOutput_abcjdffdfj_01 + fileName = Arry[0] + "_" + Arry[2] + "_" + Arry[3]; + } + } + //璁板綍璧峰畠鐨勪富閿� + memberShardInfo.dicAllShardKeys[fileName] = data.DistributedMark; + + if (fileName.StartsWith("Room_") == true || fileName.StartsWith("Scene_") == true) + { + //鎴块棿鏂囦欢鍜屽満鏅枃浠堕渶瑕侀噸鏂板弽搴忓垪鍖� + listMark.Add(data.DistributedMark); + continue; + } + if (Shared.Common.Global.IsExistsByHomeId(fileName) == true) + { + //鍏朵粬鏂囦欢鐨勮瘽锛屽鏋滄湰鍦板瓨鍦紝鍒欎互鏈湴鏂囦欢涓哄噯 + this.AddShardFile(fileName); + continue; + } + listMark.Add(data.DistributedMark); + } + + //灏嗗垎浜殑鏁版嵁瀛樺叆鏈湴,杩斿洖鐨勬槸鏂囦欢鍚嶅瓧(寮傚父鏃惰繑鍥瀗ull) + var listFile = this.SetShardFileToLocation(listMark); + if (listFile == null) + { + //鍏抽棴杩涘害鏉� + ProgressFormBar.Current.Close(); + return false; + } + + //浠庢湰鍦拌幏鍙栨垚鍛樼殑鍒嗕韩鍒楄〃 + this.GetMemberShardContentListFromLocal(memberShardInfo); + + //鍏抽棴杩涘害鏉� + 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); + if (Arry.Length == 4) + { + //瀵瑰簲鏃ф暟鎹細Device_OnOffOutput_abcjdffdfj_01 + string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(Arry[2], Convert.ToInt32(Arry[3])); + this.dicShardDeviceFile[mainKeys] = Arry[0] + "_" + Arry[2] + "_" + Arry[3]; + //璁惧鏂囦欢 + dicDeviceFile[mainKeys] = this.dicShardDeviceFile[mainKeys]; + } + else + { + string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(Arry[1], Convert.ToInt32(Arry[2])); + 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 + + //----------------------------------鍒嗗壊绾�(涓婁紶鏂扮殑鍒嗕韩)--------------------------------------------- + + #region 鈻� 鎵ц涓婁紶鏂扮殑鍒嗕韩___________________ + + /// <summary> + /// 鎵ц涓婁紶鏂扮殑鍒嗕韩 + /// </summary> + /// <param name="memberShardInfo">鎴愬憳鐨勫垎浜暟鎹�</param> + /// <param name="nowRoom">褰撳墠鐨勬埧闂村璞�</param> + /// <param name="listDevice">閫夋嫨涓婁紶鐨勮澶�</param> + /// <param name="listScene">閫夋嫨涓婁紶鐨勫満鏅�(涓嶈鑾峰彇瀹冮噷闈㈢殑缁戝畾鍒楄〃)</param> + /// <param name="BarMaxValue">杩涘害鏉$殑鏈�澶у��,濡傛灉涓嶄负-1,鍒欏唴閮ㄤ笉浼氳嚜鍔ㄥ脊鍑鸿繘搴︽潯</param> + /// <param name="listCheckFile">鏂囦欢閲嶅涓婁紶妫�娴�</param> + public bool DoUploadSharedContent(MemberShardInfoData memberShardInfo, Common.Room nowRoom, + List<CommonDevice> listDevice, List<Common.SceneUI> listScene, int BarMaxValue = -1, HashSet<string> listCheckFile = null) + { + if (listDevice.Count == 0 && listScene.Count == 0) + { + return true; + } + var listCheck = new HashSet<string>(); + + //鑾峰彇鍦烘櫙閲岄潰宓屽鐨勫瓙璁惧鍜屽瓙鍦烘櫙 + var listChirdDevice = new List<CommonDevice>(); + var listChirdScene = new List<Common.SceneUI>(); + foreach (var SceneTemp in listScene) + { + //浠庣紦瀛樿幏鍙栧満鏅殑鎵ц鐩爣 + this.GetSceneDeviceList(SceneTemp, listCheck, listChirdScene, listChirdDevice); + } + + //杩欎釜涔熸槸澶囦唤 + int BackgroundImageType = 0; + string BackgroundImage = string.Empty; + if (memberShardInfo.dicShardRoom.ContainsKey(nowRoom.FileName) == true) + { + BackgroundImageType = memberShardInfo.dicShardRoom[nowRoom.FileName].BackgroundImageType; + BackgroundImage = memberShardInfo.dicShardRoom[nowRoom.FileName].BackgroundImage; + } + //闃叉鍑虹幇閿欒,鏆傛椂淇濆瓨涓や釜鍒楄〃(铏界劧娌¢偅涔堥夯鐑︼紝涓嶈繃鏃㈢劧宸茬粡杩欐牱鍐欎簡灏辫繖鏍蜂簡) + var dicBackDevice = new Dictionary<string, List<string>>(); + var dicBackScene = new Dictionary<string, List<int>>(); + //涓存椂澶囦唤鎴块棿璁惧鍒楄〃 + this.BackupRoomDevicelistTemporary(memberShardInfo, dicBackDevice, dicBackScene); + + //鑾峰彇涓婁紶鐨勬枃浠�,鐒跺悗灏嗘枃浠跺鍒跺埌鎸囧畾鏂囦欢澶� + var listDelPic = new List<string>(); + var listFile = this.GetUploadListFile(memberShardInfo, nowRoom, listDevice, listScene, listChirdDevice, listChirdScene, listDelPic); + + //涓嶅厑璁告寜绯荤粺鐨勮繑鍥為敭 + Shared.Common.CommonPage.BackKeyCanClick = false; + UserCenterResourse.AccountOption.AppCanSignout = false; + + if (BarMaxValue == -1) + { + //鎵撳紑杩涘害鏉� + ProgressBar.Show(); + //璁剧疆鏈�澶у�� + ProgressBar.SetMaxValue(listFile.Count); + } + else + { + //璁剧疆鏈�澶у�� + ProgressBar.SetMaxValue(BarMaxValue); + } + + //涓婁紶鍒嗕韩 + var result = this.DoUploadShardContent(memberShardInfo, listFile, listCheckFile); + if (result == true) + { + //鍒犻櫎鎸囧畾鑷畾涔夊浘鐗� + result = this.DoDeleteSharedContent(memberShardInfo, listDelPic); + } + if (BarMaxValue == -1) + { + //鍏抽棴杩涘害鏉� + ProgressBar.Close(); + } + + //鍏佽鎸夌郴缁熺殑杩斿洖閿� + Shared.Common.CommonPage.BackKeyCanClick = true; + UserCenterResourse.AccountOption.AppCanSignout = true; + + if (result == false) + { + //鎭㈠鍘熸暟鎹� + if (memberShardInfo.TempRoom == null) + { + memberShardInfo.dicShardRoom[nowRoom.FileName].BackgroundImageType = BackgroundImageType; + memberShardInfo.dicShardRoom[nowRoom.FileName].BackgroundImage = BackgroundImage; + } + this.RecoverRoomDevicelistTemporary(memberShardInfo, dicBackDevice, dicBackScene, listFile); + } + else + { + //瑕嗙洊鏁版嵁 + if (memberShardInfo.TempRoom != null) + { + memberShardInfo.dicShardRoom[nowRoom.FileName] = memberShardInfo.TempRoom; + } + } + memberShardInfo.TempRoom = null; + + return result; + } + + /// <summary> + /// 鑾峰彇涓婁紶鐨勬枃浠跺悕 + /// </summary> + /// <param name="memberShardInfo">鎴愬憳鐨勫垎浜暟鎹�</param> + /// <param name="nowRoom">闇�瑕佷笂浼犲埌浜戠鐨勬埧闂村璞�(娉ㄦ剰,杩欎釜鎴块棿鏄富浜虹殑鎴块棿瀵硅薄,鑰屼笉鏄櫄鎷熺殑)</param> + /// <param name="listDevice">鍒嗕韩鐨勮澶囧垪琛�(娉ㄦ剰,杩欎釜涓滆タ鏄富浜虹殑)</param> + /// <param name="listScene">鍒嗕韩鐨勫満鏅垪琛�(娉ㄦ剰,杩欎釜涓滆タ鏄富浜虹殑)</param> + /// <param name="listChirdDevice">鍦烘櫙閲岄潰閫掑綊鑾峰彇鐨勮澶�</param> + /// <param name="listChirdScene">鍦烘櫙閲岄潰閫掑綊鑾峰彇鐨勫満鏅�</param> + /// <param name="listDelPic">闇�瑕佸垹闄ょ殑鍥剧墖</param> + /// <returns></returns> + private List<string> GetUploadListFile(MemberShardInfoData memberShardInfo, Common.Room nowRoom, List<CommonDevice> listDevice, List<Common.SceneUI> listScene, + List<CommonDevice> listChirdDevice, List<Common.SceneUI> listChirdScene, List<string> listDelPic) + { + var listFile = new List<string>(); + + Common.Room roomTemp = null; + if (memberShardInfo.dicShardRoom.ContainsKey(nowRoom.FileName) == false) + { + //鍏嬮殕涓�涓璞� + roomTemp = HdlRoomLogic.Current.CloneRoomClass(nowRoom); + memberShardInfo.TempRoom = roomTemp; + //鏂板垎浜殑鎴块棿,濡傛灉鍥剧墖鏄嚜瀹氫箟鐨�,骞朵笖杩欎釜鍥剧墖鏄瓨鍦ㄧ殑,鍒欎笂浼犲浘鐗� + if (roomTemp.BackgroundImageType != 0 && Common.Global.IsExistsByHomeId(roomTemp.BackgroundImage) == true) + { + //鑷畾涔夌殑鍥剧墖,瀹冨瓨鍦ㄤ簬鏈湴,浣嗘槸瀹冩槸鍏ㄨ矾寰� + listFile.Add(roomTemp.BackgroundImage); + this.AddShardFile(roomTemp.BackgroundImage); + } + } + else + { + roomTemp = memberShardInfo.dicShardRoom[nowRoom.FileName]; + //濡傛灉浜戠鍒嗕韩鐨勬埧闂寸殑鍥剧墖鍜屼富浜虹殑涓嶄竴鏍风殑鏃跺�� + if (roomTemp.BackgroundImage != nowRoom.BackgroundImage) + { + if (roomTemp.BackgroundImageType != 0) + { + //鍒犻櫎鑷畾涔夊浘鐗� + listDelPic.Add(roomTemp.BackgroundImage); + } + if (nowRoom.BackgroundImageType != 0 && Common.Global.IsExistsByHomeId(nowRoom.BackgroundImage) == true) + { + //鑷畾涔夌殑鍥剧墖,瀹冨瓨鍦ㄤ簬鏈湴,浣嗘槸瀹冩槸鍏ㄨ矾寰� + listFile.Add(nowRoom.BackgroundImage); + this.AddShardFile(nowRoom.BackgroundImage); + } + //鍙樻洿鍥剧墖璁剧疆 + roomTemp.BackgroundImageType = nowRoom.BackgroundImageType; + roomTemp.BackgroundImage = nowRoom.BackgroundImage; + } + } + + foreach (var device in listDevice) + { + //璁惧 + listFile.Add(device.FilePath); + this.AddShardFile(device.FilePath); + + //鍔犵偣缂撳瓨 + string mainKeys = LocalDevice.Current.GetDeviceMainKeys(device); + this.dicShardDeviceFile[mainKeys] = device.FilePath; + + if (roomTemp.ListDevice.Contains(mainKeys) == false) + { + roomTemp.ListDevice.Add(mainKeys); + } + } + //閫掑綊鑾峰彇鐨勮澶囦笉闇�瑕佸姞鍏ュ埌鎴块棿 + foreach (var device in listChirdDevice) + { + //璁惧 + 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 && Common.Global.IsExistsByHomeId(secene.IconPath) == true) + { + //鑷畾涔夌殑鍥剧墖,瀹冨瓨鍦ㄤ簬鏈湴 + listFile.Add(secene.IconPath); + this.AddShardFile(secene.IconPath); + } + + listFile.Add(secene.FileName); + this.AddShardFile(secene); + + if (roomTemp.ListSceneId.Contains(secene.Id) == false) + { + roomTemp.ListSceneId.Add(secene.Id); + } + } + //閫掑綊鑾峰彇鐨勫満鏅笉闇�瑕佸姞鍏ュ埌鎴块棿 + foreach (var secene in listChirdScene) + { + listFile.Add(secene.FileName); + this.AddShardFile(secene); + } + //鎴块棿鏂囦欢涔熺粰杩囧幓 + listFile.Add(roomTemp.FileName); + this.AddShardFile(roomTemp); + + //鍙嶆妤煎眰鏂囦欢寰堝皬,涓�璧风粰杩囧幓鍚� + if (roomTemp.FloorId != string.Empty) + { + memberShardInfo.dicShardFloor[roomTemp.FloorId] = HdlResidenceLogic.Current.GetFloorNameById(roomTemp.FloorId); + } + this.AddShardFile(memberShardInfo.dicShardFloor); + listFile.Add(DirNameResourse.ShardFloorFile); + + return listFile; + } + + /// <summary> + /// 鑾峰彇鍦烘櫙鐨勭洰鏍囪澶囧垪琛�(杩欎釜涓嶈兘浠庡垎浜暟鎹腑鑾峰彇) + /// </summary> + /// <param name="scene">鍦烘櫙</param> + /// <param name="listCheck">閲嶅妫�娴嬬敤</param> + /// <param name="listSceneUI">娣诲姞鍒嗕韩鐨勫満鏅垪琛�</param> + /// <param name="listDevice">娣诲姞鍒嗕韩鐨勮澶囧垪琛�</param> + /// <returns></returns> + public void GetSceneDeviceList(Common.SceneUI scene, HashSet<string> listCheck, List<Common.SceneUI> listSceneUI, List<CommonDevice> listDevice) + { + foreach (var data in scene.AdjustTargetList) + { + //璁惧 + if (data.Type == 0) + { + string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(data.DeviceAddr, data.Epoint); + if (listCheck.Contains(mainKeys) == true) + { + //涓嶉噸澶嶆坊鍔� + continue; + } + listCheck.Add(mainKeys); + + var device = Common.LocalDevice.Current.GetDevice(data.DeviceAddr, data.Epoint); + if (device != null) + { + listDevice.Add(device); + } + } + //鍦烘櫙 + else if (data.Type == 1) + { + string mainKeys = data.ElseScenesId.ToString(); + if (listCheck.Contains(mainKeys) == true) + { + //涓嶉噸澶嶆坊鍔� + continue; + } + listCheck.Add(mainKeys); + + //鑾峰彇鍦烘櫙瀵硅薄 + var sceneUi = HdlSceneLogic.Current.GetSceneUIBySceneId(data.ElseScenesId); + if (sceneUi != null) + { + listSceneUI.Add(sceneUi); + } + } + } + } + + #endregion + + #region 鈻� 涓婁紶鏂扮殑鍒嗕韩_______________________ + + /// <summary> + /// 涓婁紶鍒嗕韩(杩斿洖浜戠鍒嗕韩鏂囦欢鐨勪富閿�:DistributedMark) + /// </summary> + /// <param name="memberShardInfo">鎴愬憳鐨勫垎浜暟鎹�</param> + /// <param name="listFile">涓婁紶鐨勬枃浠跺悕</param> + /// <param name="listCheckFile">閲嶅鏂囦欢涓婁紶妫�娴�</param> + /// <returns></returns> + private bool DoUploadShardContent(MemberShardInfoData memberShardInfo, List<string> listFile, HashSet<string> listCheckFile) + { + var dicKeys = new Dictionary<string, string>(); + for (int i = 0; i < listFile.Count; i++) + { + string fileName = listFile[i]; + if (listCheckFile != null) + { + if (listCheckFile.Contains(fileName) == true) + { + //閲嶅鏂囦欢涓嶅啀涓婁紶 + continue; + } + listCheckFile.Add(fileName); + } + if (fileName.EndsWith(".png") == true) + { + //涓婁紶鍥剧墖 + var result = this.UpLoadBigBackupFileToDB(memberShardInfo, fileName); + if (result == null) + { + return false; + } + dicKeys[fileName] = result; + } + else + { + var info = new UploadShardContent(); + info.SubAccountDistributedMark = memberShardInfo.SubAccountDistributedMark; + info.ShareName = fileName; + info.ShareDataBytes = HdlShardLogic.Current.GetShardFileContent(fileName); + + //杩藉姞鍏变韩 + if (memberShardInfo.dicAllShardKeys.ContainsKey(fileName) == false) + { + var result = UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeDataShare/AddShareData", false, info, null, true); + if (string.IsNullOrEmpty(result) == true) + { + return false; + } + //杩欓噷鏈夌偣鐗规畩锛屾帴鍙f槸鐩存帴杩斿洖涓婚敭鍥炴潵鐨勶紝鑰屼笉鏄疛soin + dicKeys[fileName] = result; + } + else + { + info.DistributedMark = memberShardInfo.dicAllShardKeys[fileName]; + var result = UserCenterLogic.GetResultStatuByRequestHttps("ZigbeeDataShare/EditShareData", false, info, null, true); + if (result == false) + { + return false; + } + dicKeys[fileName] = info.DistributedMark; + } + } + //璁剧疆杩涘害鍊� + ProgressBar.SetValue(1); + } + //濡傛灉娌℃湁閿欒,鍒欐坊鍔犱复鏃剁紦瀛� + foreach (var keys in dicKeys.Keys) + { + memberShardInfo.dicAllShardKeys[keys] = dicKeys[keys]; + } + + return true; + } + + /// <summary> + /// 涓婁紶鍥剧墖鏂囦欢鍒颁簯绔� + /// </summary> + /// <param name="fullDir">鏂囦欢澶圭殑鍏ㄨ矾寰�</param> + /// <param name="listPicFile">鍥剧墖鏂囦欢鍒楄〃</param> + /// <returns></returns> + private string UpLoadBigBackupFileToDB(MemberShardInfoData memberShardInfo, string fileName) + { + string fullName = System.IO.Path.Combine(DirNameResourse.DownLoadShardDirectory, fileName); + if (System.IO.File.Exists(fullName) == false) + { + return null; + } + var nvc = new NameValueCollection(); + nvc.Add("ShareName", fileName); + nvc.Add("HouseDistributedMark", Common.Config.Instance.Home.Id); + nvc.Add("SubAccountDistributedMark", memberShardInfo.SubAccountDistributedMark); + nvc.Add("ShareDataBytes", Convert.ToBase64String(this.GetShardFileContent(fileName))); + + //杩藉姞鍏变韩 + if (memberShardInfo.dicAllShardKeys.ContainsKey(fileName) == false) + { + //杩欓噷鏈夌偣鐗规畩锛屾帴鍙f槸鐩存帴杩斿洖涓婚敭鍥炴潵鐨勶紝鑰屼笉鏄疛soin + var result = this.DoUpLoadBigBackupFileToDB("ZigbeeDataShare/AddShareData", fullName, nvc); + return result; + } + else + { + nvc.Add("DistributedMark", memberShardInfo.dicAllShardKeys[fileName]); + var result = this.DoUpLoadBigBackupFileToDB("ZigbeeDataShare/EditShareData", fullName, nvc); + if (result == null) + { + return null; + } + return memberShardInfo.dicAllShardKeys[fileName]; + } + } + + /// <summary> + /// 鎵ц涓婁紶澶ф枃浠� + /// </summary> + /// <param name="RequestName">璇锋眰鎺ュ彛</param> + /// <param name="fullFileName">鏂囦欢鍚嶅瓧(鍚矾寰�)</param> + /// <param name="nvc"></param> + /// <returns></returns> + private string DoUpLoadBigBackupFileToDB(string RequestName, string fullFileName, NameValueCollection nvc) + { + string paramName = "file"; + string contentType = "application/octet-stream"; + string requestUrl = $"{CommonPage.RequestHttpsHost}/{RequestName}"; + + string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x"); + byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); + + var wr = (HttpWebRequest)WebRequest.Create(requestUrl); + wr.ContentType = "multipart/form-data; boundary=" + boundary; + wr.Method = "POST"; + wr.KeepAlive = true; + wr.Credentials = System.Net.CredentialCache.DefaultCredentials; + + wr.Headers.Add(HttpRequestHeader.Authorization, Config.Instance.Token); + + var rs = wr.GetRequestStream(); + + string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}"; + foreach (string key in nvc.Keys) + { + rs.Write(boundarybytes, 0, boundarybytes.Length); + string formitem = string.Format(formdataTemplate, key, nvc[key]); + byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem); + rs.Write(formitembytes, 0, formitembytes.Length); + } + rs.Write(boundarybytes, 0, boundarybytes.Length); + + string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n"; + string header = string.Format(headerTemplate, paramName, fullFileName, contentType); + byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header); + rs.Write(headerbytes, 0, headerbytes.Length); + + var fileStream = new FileStream(fullFileName, FileMode.Open, FileAccess.Read); + byte[] buffer = new byte[4096]; + int bytesRead = 0; + while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) + { + rs.Write(buffer, 0, bytesRead); + } + fileStream.Close(); + + byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n"); + rs.Write(trailer, 0, trailer.Length); + rs.Close(); + + WebResponse wresp = null; + try + { + wresp = wr.GetResponse(); + Stream stream2 = wresp.GetResponseStream(); + StreamReader reader2 = new StreamReader(stream2); + + string result = reader2.ReadToEnd(); + + var data = Newtonsoft.Json.JsonConvert.DeserializeObject<Shared.Common.ResponseEntity.ResponsePack>(result); + + bool flage = UserCenterLogic.CheckNotEorrorMsg(data, requestUrl); + if (flage == true) + { + //缂栬緫鐨勬椂鍊欙紝杩欎釜涓滆タ浼氭槸null + return data.ResponseData == null ? "1" : data.ResponseData.ToString(); + } + + //Log鍑哄姏 + IMessageCommon.Current.GetMsgByRequestName(RequestName, data, nvc); + + return null; + } + catch + { + return null; + } + finally + { + if (wresp != null) + { + wresp.Close(); + wresp = null; + } + wr = null; + } + } + + + #endregion + + #region 鈻� 涓存椂澶囦唤鎴块棿璁惧鍒楄〃_______________ + + /// <summary> + /// 涓存椂澶囦唤鎴块棿璁惧鍒楄〃 + /// </summary> + /// <param name="memberShardInfo">鎴愬憳鐨勫垎浜暟鎹�</param> + /// <param name="dicBackDevice">绌虹殑璁惧澶囦唤鍒楄〃</param> + /// <param name="dicBackScene">绌虹殑鍦烘櫙澶囦唤鍒楄〃</param> + private void BackupRoomDevicelistTemporary(MemberShardInfoData memberShardInfo, Dictionary<string, List<string>> dicBackDevice, + Dictionary<string, List<int>> dicBackScene) + { + foreach (var roomKeys in memberShardInfo.dicShardRoom.Keys) + { + dicBackDevice[roomKeys] = new List<string>(); + dicBackScene[roomKeys] = new List<int>(); + + dicBackDevice[roomKeys].AddRange(memberShardInfo.dicShardRoom[roomKeys].ListDevice); + dicBackScene[roomKeys].AddRange(memberShardInfo.dicShardRoom[roomKeys].ListSceneId); + } + } + + /// <summary> + /// 杩樺師涓存椂澶囦唤鐨勬埧闂磋澶囧垪琛� + /// </summary> + /// <param name="memberShardInfo">鎴愬憳鐨勫垎浜暟鎹�</param> + /// <param name="dicBackDevice">涓存椂澶囦唤鐨勮澶囧浠藉垪琛�</param> + /// <param name="dicBackScene">涓存椂澶囦唤鐨勫満鏅浠藉垪琛�</param> + /// <param name="listFile">涓婁紶鐨勬枃浠跺悕</param> + private void RecoverRoomDevicelistTemporary(MemberShardInfoData memberShardInfo, Dictionary<string, List<string>> dicBackDevice, + Dictionary<string, List<int>> dicBackScene, List<string> listFile) + { + foreach (string fileName in listFile) + { + //鐢熸垚鐨勬枃浠跺叏閮ㄥ垹闄�,鎴块棿鏂囦欢鐨勮瘽,涓嬮潰浼氶噸鏂扮敓鎴� + this.DeleteShardFile(fileName); + } + + foreach (var roomKeys in memberShardInfo.dicShardRoom.Keys) + { + if (dicBackDevice.ContainsKey(roomKeys) == false) + { + continue; + } + memberShardInfo.dicShardRoom[roomKeys].ListDevice.Clear(); + memberShardInfo.dicShardRoom[roomKeys].ListDevice.AddRange(dicBackDevice[roomKeys]); + + memberShardInfo.dicShardRoom[roomKeys].ListSceneId.Clear(); + memberShardInfo.dicShardRoom[roomKeys].ListSceneId.AddRange(dicBackScene[roomKeys]); + + //瑕嗙洊鎴块棿鏂囦欢 + this.AddShardFile(memberShardInfo.dicShardRoom[roomKeys]); + } + } + + #endregion + + //----------------------------------鍒嗗壊绾�(鍒犻櫎鎸囧畾鍒嗕韩)--------------------------------------------- + + #region 鈻� 绉婚櫎鎸囧畾鍒嗕韩鍐呭___________________ + + /// <summary> + /// 绉婚櫎鎸囧畾鍒嗕韩鍐呭 + /// </summary> + /// <param name="memberShardInfo">鎴愬憳鐨勫垎浜俊鎭�</param> + /// <param name="nowRoom">褰撳墠鎴块棿</param> + /// <param name="listDevice">瑕佸彇娑堢殑璁惧</param> + /// <param name="listSceneUI">瑕佸彇娑堢殑鍦烘櫙</param> + /// <returns></returns> + public bool DoDeleteSharedContent(MemberShardInfoData memberShardInfo, Common.Room nowRoom, + List<CommonDevice> listDevice, List<SceneUI> listSceneUI) + { + var roomTemp = memberShardInfo.dicShardRoom[nowRoom.FileName]; + //闃叉鍑洪敊,鍏堝浠藉垪琛� + var listBackDevice = new List<string>(); + listBackDevice.AddRange(roomTemp.ListDevice); + var listBackScene = new List<int>(); + listBackScene.AddRange(roomTemp.ListSceneId); + + var listMark = new List<string>(); + //瑕佸垹闄ょ殑鏂囦欢鍚嶅瓧 + var listDeleteFile = new List<string>(); + + //闄や簡瑕佸垹闄ょ殑鐩爣澶栵紝杩樺垎浜殑鏁版嵁 + var listHadShardKeys = this.GetAllShardedKeysFromDictionary(memberShardInfo, nowRoom, listDevice, listSceneUI); + + //鍏堝紕璁惧 + foreach (var device in listDevice) + { + string deviceFileName = device.FilePath; + string mainKeys = LocalDevice.Current.GetDeviceMainKeys(device); + //绉婚櫎璺緞鍒楄〃 + roomTemp.ListDevice.Remove(mainKeys); + if (listHadShardKeys.Contains(mainKeys) == true) + { + //鍏朵粬鍦烘櫙鍒嗕韩鏈夎繖涓澶�,鎵�浠ヤ笉鍒犻櫎杩欎釜璁惧鐨勬牴婧愭枃浠�,鍙槸鎶婃埧闂寸殑璁惧鍒楄〃璺緞绉婚櫎 + continue; + } + + //璁惧涓婚敭 + if (memberShardInfo.dicAllShardKeys.ContainsKey(deviceFileName) == true) + { + listMark.Add(memberShardInfo.dicAllShardKeys[deviceFileName]); + } + listDeleteFile.Add(device.FilePath); + } + //鍐嶅紕鍦烘櫙 + foreach (var sceneUI in listSceneUI) + { + //绉婚櫎缂撳瓨 + roomTemp.ListSceneId.Remove(sceneUI.Id); + + //鍏朵粬鍦烘櫙杩樺祵濂楃潃杩欎釜鍦烘櫙,鎵�浠ヤ笉鍒犻櫎杩欎釜鍦烘櫙鐨勬牴婧愭枃浠�,鍙槸鎶婃埧闂寸殑鍦烘櫙鍒楄〃璺緞绉婚櫎 + //浣嗘槸瀹冪粦瀹氱殑璁惧鐩爣瑕佸垹闄� + if (listHadShardKeys.Contains(sceneUI.Id.ToString()) == true) + { + continue; + } + //鑾峰彇瑕佸垹闄ょ殑鍒嗕韩涓婚敭 + if (memberShardInfo.dicAllShardKeys.ContainsKey(sceneUI.FileName) == true) + { + listMark.Add(memberShardInfo.dicAllShardKeys[sceneUI.FileName]); + } + listDeleteFile.Add(sceneUI.FileName); + + //鍒犻櫎鑷畾涔夊浘鐗�,瀹冨瓨鍦ㄤ簬鏈湴,浣嗘槸瀹冩槸鍏ㄨ矾寰� + if (sceneUI.IconPathType != 0) + { + string[] Arry = sceneUI.IconPath.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries); + string sceneFile = Arry[Arry.Length - 1]; + listDeleteFile.Add(sceneFile); + if (memberShardInfo.dicAllShardKeys.ContainsKey(sceneFile) == true) + { + listMark.Add(memberShardInfo.dicAllShardKeys[sceneFile]); + } + } + + //鎵ц鍒犻櫎宓屽鐨勮澶� + 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 (listHadShardKeys.Contains(myKeys) == true) + { + continue; + } + //鑾峰彇瑕佸垹闄ょ殑鍒嗕韩涓婚敭 + string fileName = dicDeviceKeys[myKeys]; + if (memberShardInfo.dicAllShardKeys.ContainsKey(fileName) == true) + { + listMark.Add(memberShardInfo.dicAllShardKeys[fileName]); + } + listDeleteFile.Add(fileName); + } + //鍦烘櫙鐨� + foreach (var seceUi in listBindScene) + { + if (seceUi.IconPathType != 0) + { + //鍒犻櫎鑷畾涔夊満鏅浘鐗�,瀹冨瓨鍦ㄤ簬鏈湴,浣嗘槸瀹冩槸鍏ㄨ矾寰� + string[] Arry = seceUi.IconPath.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries); + string sceneFile = Arry[Arry.Length - 1]; + listDeleteFile.Add(sceneFile); + if (memberShardInfo.dicAllShardKeys.ContainsKey(sceneFile) == true) + { + listMark.Add(memberShardInfo.dicAllShardKeys[sceneFile]); + } + } + } + } + + //濡傛灉杩欎釜鎴块棿鐨勫垎浜澶囧拰鍦烘櫙鍏ㄩ儴鍒犻櫎鐨勮瘽,鎶婂垎浜埧闂存枃浠朵篃涓�璧峰垹闄� + if (roomTemp.ListDevice.Count == 0 && roomTemp.ListSceneId.Count == 0) + { + //鎴块棿鍒犻櫎 + if (memberShardInfo.dicAllShardKeys.ContainsKey(nowRoom.FileName) == true) + { + listMark.Add(memberShardInfo.dicAllShardKeys[nowRoom.FileName]); + } + listDeleteFile.Add(nowRoom.FileName); + + if (nowRoom.BackgroundImageType != 0) + { + //鍒犻櫎鑷畾涔夋埧闂村浘鐗�,瀹冨瓨鍦ㄤ簬鏈湴,浣嗘槸瀹冩槸鍏ㄨ矾寰� + string[] Arry = nowRoom.BackgroundImage.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries); + string roomFile = Arry[Arry.Length - 1]; + listDeleteFile.Add(roomFile); + if (memberShardInfo.dicAllShardKeys.ContainsKey(roomFile) == true) + { + listMark.Add(memberShardInfo.dicAllShardKeys[roomFile]); + } + } + } + + //鎵ц绉婚櫎鍒嗕韩鏁版嵁 + var result = this.DoDeleteSharedContent(memberShardInfo, nowRoom, listMark, listDeleteFile); + //鍚屾鎴块棿鏂囦欢 + if (result == true && listDeleteFile.Contains(roomTemp.FileName) == false) + { + //鎵ц涓婁紶鎴块棿瀵硅薄 + result = this.DoUploadRoomObject(memberShardInfo, roomTemp); + } + //鍚屾妤煎眰鏁版嵁 + if (result == true && listDeleteFile.Contains(roomTemp.FileName) == true) + { + int floorCount = 0; + foreach (var myRoom in memberShardInfo.dicShardRoom.Values) + { + //2020.03.24杩藉姞:涓嶈兘鏄嚜韬埧闂� + if (myRoom.FloorId == roomTemp.FloorId && myRoom.Id != roomTemp.Id) + { + floorCount++; + } + } + if (floorCount == 0) + { + //濡傛灉璇ユゼ灞傚凡缁忓垹瀹屾埧闂翠簡,鍒欐洿鏂版ゼ灞� + memberShardInfo.dicShardFloor.Remove(roomTemp.FloorId); + //鎵ц涓婁紶瀵硅薄 + result = this.DoUploadFloorObject(memberShardInfo); + } + } + + if (result == false) + { + //鎭㈠ + roomTemp.ListDevice.Clear(); + roomTemp.ListDevice.AddRange(listBackDevice); + + roomTemp.ListSceneId.Clear(); + roomTemp.ListSceneId.AddRange(listBackScene); + } + return result; + } + + #endregion + + #region 鈻� 鎵ц绉婚櫎鍒嗕韩鏁版嵁___________________ + + /// <summary> + /// 鎵ц绉婚櫎鍒嗕韩鏁版嵁 + /// </summary> + /// <param name="memberShardInfo">鎴愬憳鐨勫垎浜唴瀹�</param> + /// <param name="nowRoom">褰撳墠鎴块棿</param> + /// <param name="listMark">瑕佺Щ闄ょ殑涓婚敭</param> + /// <param name="listDeleteFile">瑕佸垹闄ょ殑鏂囦欢(鎴块棿鏂囦欢闇�瑕佸垹闄ょ殑璇�,蹇呴』鏀惧湪鏈�鍚�)</param> + /// <returns></returns> + private bool DoDeleteSharedContent(MemberShardInfoData memberShardInfo, Common.Room nowRoom, + List<string> listMark, List<string> listDeleteFile) + { + if (listMark.Count == 0) + { + //鏈夊彲鑳藉彧鍒犻櫎涓�涓洖璺紝鑰岃繖涓洖璺槸鍒嗛厤鍒板涓埧闂寸殑 + return true; + } + + var info = new DeleteShardInfo(); + //寮�鍚繘搴︽潯 + ProgressBar.Show(); + var listCheck = new HashSet<string>(); + foreach (var markKeys in listMark) + { + //閲岄潰浼间箮鏈夊彲鑳戒細鍑虹幇閲嶅 + if (listCheck.Contains(markKeys) == true) { continue; } + listCheck.Add(markKeys); + + info.DistributedMark = markKeys; + //鎵ц鍒犻櫎 + var result = UserCenterLogic.GetResultStatuByRequestHttps("ZigbeeDataShare/DeleteShareData", false, info, null, true); + if (result == false) + { + //鍏抽棴杩涘害鏉� + ProgressBar.Close(); + return false; + } + } + //鍏抽棴杩涘害鏉� + ProgressBar.Close(); + for (int i = 0; i < listDeleteFile.Count; i++) + { + string fileName = listDeleteFile[i]; + if (i == listDeleteFile.Count - 1 && fileName.StartsWith("Room_") == true) + { + //鏈�鍚庝竴涓浐瀹氬彲鑳芥槸鎴块棿鏂囦欢,鐩存帴绉婚櫎鏁翠釜瀵硅薄 + memberShardInfo.dicShardRoom.Remove(fileName); + } + memberShardInfo.dicAllShardKeys.Remove(fileName); + + this.DeleteShardFile(fileName); + } + return true; + } + + /// <summary> + /// 鎵ц绉婚櫎鍒嗕韩鏁版嵁 + /// </summary> + /// <param name="memberShardInfo">鎴愬憳鐨勫垎浜唴瀹�</param> + /// <param name="listDelFile">鍒犻櫎鐨勬枃浠�</param> + /// <returns></returns> + private bool DoDeleteSharedContent(MemberShardInfoData memberShardInfo, List<string> listDelFile) + { + if (listDelFile.Count == 0) + { + return true; + } + + var info = new DeleteShardInfo(); + foreach (var fileName in listDelFile) + { + if (memberShardInfo.dicAllShardKeys.ContainsKey(fileName) == false) + { + //鎴戜篃涓嶇煡閬撲负浠�涔堜細鎵句笉鍒颁富閿� + continue; + } + + info.DistributedMark = memberShardInfo.dicAllShardKeys[fileName]; + //鎵ц鍒犻櫎 + var result = UserCenterLogic.GetResultStatuByRequestHttps("ZigbeeDataShare/DeleteShareData", false, info, null, true); + if (result == false) + { + return false; + } + } + for (int i = 0; i < listDelFile.Count; i++) + { + string fileName = listDelFile[i]; + memberShardInfo.dicAllShardKeys.Remove(fileName); + + this.DeleteShardFile(fileName); + } + return true; + } + + #endregion + + #region 鈻� 涓婁紶鎴块棿瀵硅薄_______________________ + + /// <summary> + /// 涓婁紶鎴块棿瀵硅薄 + /// </summary> + /// <param name="memberShardInfo">鎴愬憳鐨勫叡浜唴瀹�</param> + /// <param name="upDateRoom">闇�瑕佷笂浼犲埌浜戠鐨勬埧闂村璞�</param> + /// <returns></returns> + private bool DoUploadRoomObject(MemberShardInfoData memberShardInfo, Common.Room upDateRoom) + { + if (upDateRoom.Id == "Other") + { + return true; + } + var info = new EditorShardContent(); + info.DistributedMark = memberShardInfo.dicAllShardKeys[upDateRoom.FileName]; + info.ShareName = upDateRoom.FileName; + info.SubAccountDistributedMark = memberShardInfo.SubAccountDistributedMark; + + var data = Newtonsoft.Json.JsonConvert.SerializeObject(upDateRoom); + var byteData = System.Text.Encoding.UTF8.GetBytes(data); + info.ShareDataBytes = byteData; + var result = UserCenterLogic.GetResultStatuByRequestHttps("ZigbeeDataShare/EditShareData", false, info, null, true); + if (result == false) + { + return false; + } + //灏嗘埧闂村璞″簭鍒楀寲鍒扮紦瀛� + this.AddShardFile(upDateRoom); + + return true; + } + + #endregion + + #region 鈻� 涓婁紶妤煎眰瀵硅薄_______________________ + + /// <summary> + /// 涓婁紶妤煎眰瀵硅薄 + /// </summary> + /// <param name="memberShardInfo">鎴愬憳鐨勫叡浜唴瀹�</param> + /// <returns></returns> + private bool DoUploadFloorObject(MemberShardInfoData memberShardInfo) + { + var info = new EditorShardContent(); + info.DistributedMark = memberShardInfo.dicAllShardKeys[DirNameResourse.ShardFloorFile]; + info.ShareName = DirNameResourse.ShardFloorFile; + info.SubAccountDistributedMark = memberShardInfo.SubAccountDistributedMark; + + var data = Newtonsoft.Json.JsonConvert.SerializeObject(memberShardInfo.dicShardFloor); + var byteData = System.Text.Encoding.UTF8.GetBytes(data); + info.ShareDataBytes = byteData; + var result = UserCenterLogic.GetResultStatuByRequestHttps("ZigbeeDataShare/EditShareData", false, info, null, true); + if (result == false) + { + return false; + } + //灏嗘埧闂村璞″簭鍒楀寲鍒扮紦瀛� + this.AddShardFile(memberShardInfo.dicShardFloor); + + return true; + } + + #endregion + + #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> GetAllShardedKeysFromDictionary(MemberShardInfoData memberShardInfo, Common.Room nowRoom, + List<CommonDevice> listDeleteDevice, List<Common.SceneUI> listDeleteScene) + { + //鑾峰彇鍏ㄩ儴瑕佸垹闄ょ殑鏂囦欢鍚嶅瓧 + var dicDeleteDeviceFile = new Dictionary<string, string>(); + foreach (var device in listDeleteDevice) + { + dicDeleteDeviceFile[LocalDevice.Current.GetDeviceMainKeys(device)] = device.FilePath; + } + var dicDeleteSceneFile = new Dictionary<int, string>(); + foreach (var scene in listDeleteScene) + { + dicDeleteSceneFile[scene.Id] = scene.FileName; + } + + var listShardKeys = new HashSet<string>(); + //鑾峰彇杩樺浜庡垎浜姸鎬佺殑涓婚敭 + foreach (var roomTemp in memberShardInfo.dicShardRoom.Values) + { + //璁惧 + foreach (var deviceKeys in roomTemp.ListDevice) + { + if (dicDeleteDeviceFile.ContainsKey(deviceKeys) == true) + { + //鍥犱负涓�涓洖璺彧鑳藉垎閰嶄竴涓尯鍩�,鎵�浠ュ彲浠ョ洿鎺ュ垽鏂� + continue; + } + if (listShardKeys.Contains(deviceKeys) == false) + { + //杩欎釜鏂囦欢杩樺垎浜潃 + listShardKeys.Add(deviceKeys); + } + + } + //鍦烘櫙 + foreach (var sceneId in roomTemp.ListSceneId) + { + if (roomTemp.FileName == nowRoom.FileName) + { + //濡傛灉寰幆鍒颁簡褰撳墠鎴块棿 + if (dicDeleteSceneFile.ContainsKey(sceneId) == true) + { + //濡傛灉鏄垹闄ょ洰鏍囷紝鍒欎笉娣诲姞 + continue; + } + } + var byteData = this.GetShardFileContent($"Scene_{sceneId}.json"); + if (byteData == null) + { + continue; + } + 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) + { + //鍦烘櫙鑷韩 + listShardKeys.Add(sceneId.ToString()); + } + foreach (string myKeys2 in listTempKeys) + { + if (listShardKeys.Contains(myKeys2) == false) + { + listShardKeys.Add(myKeys2); + } + } + } + } + return listShardKeys; + } + + /// <summary> + /// 浠庡満鏅璞¢噷闈㈣幏鍙栧叏閮ㄧ殑缁戝畾鐩爣鐨勪富閿�(杩欓噷闈㈢殑涓滆タ蹇呴』浠庡垎浜暟鎹腑鑾峰彇) + /// </summary> + /// <param name="scene">鍦烘櫙</param> + /// <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.AdjustTargetList) + { + //璁惧 + if (data.Type == 0) + { + string mainkey = LocalDevice.Current.GetDeviceMainKeys(data.DeviceAddr, data.Epoint); + if (dicShardDeviceFile.ContainsKey(mainkey) == true && dicDeviceKeys.ContainsKey(mainkey) == false) + { + dicDeviceKeys[mainkey] = dicShardDeviceFile[mainkey]; + } + } + if (data.Type == 1) + { + var byteData = this.GetShardFileContent($"Scene_{data.ElseScenesId}.json"); + if (byteData != null) + { + string valueData = System.Text.Encoding.UTF8.GetString(byteData); + 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()); + } + } + } + } + + #endregion + + #region 鈻� 缁撴瀯浣撶被___________________________ + + /// <summary> + /// 涓婁紶鍒嗕韩鐨勫唴瀹� + /// </summary> + private class UploadShardContent : IfacePraCommon + { + /// <summary> + /// 鍒嗕韩鏁版嵁鐨勪富閿� + /// </summary> + public string DistributedMark = string.Empty; + /// <summary> + /// 鍒嗕韩鍚嶅瓧 + /// </summary> + public string ShareName = string.Empty; + /// <summary> + /// 浣忓畢ID + /// </summary> + public string HouseDistributedMark = Common.Config.Instance.Home.Id; + /// <summary> + /// 瀛愯处鍙风殑guid + /// </summary> + public string SubAccountDistributedMark = string.Empty; + /// <summary> + /// 鍒嗕韩鍐呭 + /// </summary> + public byte[] ShareDataBytes = null; + } + + /// <summary> + /// 鍒犻櫎鍏变韩鐨勫唴瀹� + /// </summary> + private class DeleteShardInfo : IfacePraCommon + { + /// <summary> + /// 鍏变韩鏁版嵁鐨勫敮涓�鏍囪瘑 + /// </summary> + public string DistributedMark = null; + /// <summary> + /// 浣忓畢ID + /// </summary> + public string HouseDistributedMark = Common.Config.Instance.Home.Id; + } + + /// <summary> + /// 缂栬緫鍏变韩鍐呭 + /// </summary> + private class EditorShardContent : IfacePraCommon + { + /// <summary> + /// 涓婚敭 + /// </summary> + public string DistributedMark = string.Empty; + /// <summary> + /// 鍒嗕韩鍚嶅瓧 + /// </summary> + public string ShareName = string.Empty; + /// <summary> + /// 浣忓畢ID + /// </summary> + public string HouseDistributedMark = Common.Config.Instance.Home.Id; + /// <summary> + /// 鍒嗕韩鍐呭 + /// </summary> + public byte[] ShareDataBytes = null; + /// <summary> + /// 瀛愯处鍙风殑Guid + /// </summary> + public string SubAccountDistributedMark = string.Empty; + } + + /// <summary> + /// 鎺ユ敹鍒嗕韩鏁版嵁 + /// </summary> + private class ReceiveShardInfoResult + { + /// <summary> + /// 鏂囦欢鍚嶅瓧 + /// </summary> + public string ShareName = string.Empty; + /// <summary> + /// 涓婚敭 + /// </summary> + public string DistributedMark = string.Empty; + } + + #endregion + } +} -- Gitblit v1.8.0