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 | 1846 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 1,846 insertions(+), 0 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlShardLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlShardLogic.cs
new file mode 100644
index 0000000..8bd809a
--- /dev/null
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlShardLogic.cs
@@ -0,0 +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 ZigBee.Device;
+
+namespace Shared.Phone.UserCenter
+{
+    /// <summary>
+    /// 鍒嗕韩鐨勯�昏緫
+    /// </summary>
+    public class HdlShardLogic
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 鍒嗕韩鐨勯�昏緫
+        /// </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 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