From 9f326f4000847e6167d8166fa2f6a66f53cb3734 Mon Sep 17 00:00:00 2001
From: 黄学彪 <hxb@hdlchina.com.cn>
Date: 星期四, 17 十二月 2020 09:07:13 +0800
Subject: [PATCH] 新云端Ver1.3

---
 ZigbeeApp/Shared/Phone/Common/Logic/HdlShardLogic.cs | 2561 +++++++++++++++++++++++++++++++----------------------------
 1 files changed, 1,347 insertions(+), 1,214 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/Common/Logic/HdlShardLogic.cs b/ZigbeeApp/Shared/Phone/Common/Logic/HdlShardLogic.cs
index e8b39fe..0689ba2 100644
--- a/ZigbeeApp/Shared/Phone/Common/Logic/HdlShardLogic.cs
+++ b/ZigbeeApp/Shared/Phone/Common/Logic/HdlShardLogic.cs
@@ -39,193 +39,29 @@
             }
         }
         /// <summary>
-        /// 鍒嗕韩鐨勮澶囨枃浠�(key:璁惧涓婚敭,value:璁惧鏂囦欢)
+        /// 鍒嗕韩鍘嬬缉鏂囦欢鐨勫悕瀛�
         /// </summary>
-        private Dictionary<string, string> dicShardDeviceFile = new Dictionary<string, string>();
-
-        #endregion
-
-        #region 鈻� 鑾峰彇鍒嗕韩鏂囦欢_______________________
-
+        private const string SHARED_BIN_FILE = "SharedData.bin";
         /// <summary>
-        /// 灏嗗垎浜殑鏁版嵁瀛樺叆鏈湴,杩斿洖鐨勬槸鏂囦欢鍚嶅瓧(寮傚父鏃惰繑鍥瀗ull),璋冪敤 GetShardFileContent 鍙互鑾峰彇鏂囦欢鍐呯殑鍐呭
+        /// 鍒嗕韩鐨勮澶囧璞�
         /// </summary>
-        /// <param name="dicFileKeys">key:鏂囦欢鐨勪富閿� value:鏂囦欢鍚嶇О</param>
-        /// <returns></returns>
-        private List<string> SetShardFileToLocation(Dictionary<string, string> dicFileKeys)
-        {
-            if (dicFileKeys.Count == 0)
-            {
-                return new List<string>();
-            }
-            int listMarkCount = dicFileKeys.Count;
-
-            List<string> listFile = new List<string>();
-            //鏂囦欢澶�
-            string strDir = HdlFileNameResourse.DownLoadShardDirectory;
-
-            //涓嶅厑璁告寜绯荤粺鐨勮繑鍥為敭
-            Config.Instance.BackKeyCanClick = false;
-            HdlUserCenterResourse.AccountOption.AppCanSignout = false;
-
-            //璁℃暟
-            int nowCount = 0;
-            foreach (var fileKey in dicFileKeys.Keys)
-            {
-                nowCount++;
-                var pra = new { homeId = Config.Instance.Home.Id, homeShareId = fileKey };
-                var result = HdlHttpLogic.Current.RequestByteFromZigbeeHttps("home-wisdom/home/share/downOne", RestSharp.Method.POST, pra, null, null, CheckMode.A璐﹀彿鏉冮檺, true, 10);
-                //妫�娴嬬姸鎬佺爜
-                if (result == null)
-                {
-                    //鍏佽鎸夌郴缁熺殑杩斿洖閿�
-                    Config.Instance.BackKeyCanClick = true;
-                    HdlUserCenterResourse.AccountOption.AppCanSignout = true;
-                    return null;
-                }
-                //瀵瑰簲鏃х増鏈殑璁惧鏂囦欢 Device_OnoffOutput_abcdfrtgg_01
-                string shareName = dicFileKeys[fileKey];
-                if (shareName.StartsWith("Device_") == true)
-                {
-                    var strArry = shareName.Split(new string[] { "_" }, StringSplitOptions.None);
-                    if (strArry.Length == 4)
-                    {
-                        shareName = strArry[0] + "_" + strArry[2] + "_" + strArry[3];
-                    }
-                }
-                //鏂囦欢鍚嶅瓧
-                listFile.Add(shareName);
-                //淇濆瓨鍒版寚瀹氭枃浠跺す涓�
-                HdlFileLogic.Current.SaveByteToFile(System.IO.Path.Combine(strDir, shareName), result);
-                //璁剧疆杩涘害鍊�
-                ProgressFormBar.Current.SetValue(nowCount, listMarkCount);
-            }
-
-            //鍏佽鎸夌郴缁熺殑杩斿洖閿�
-            Config.Instance.BackKeyCanClick = true;
-            HdlUserCenterResourse.AccountOption.AppCanSignout = true;
-
-            return listFile;
-        }
-
+        private Dictionary<string, CommonDevice> DicDevices = null;
         /// <summary>
-        /// 鑾峰彇鍒嗕韩鏂囦欢鐨勫唴瀹�
+        /// 鍒嗕韩鐨勫満鏅璞�
         /// </summary>
-        /// <param name="fileName">鏂囦欢鍚嶇О(涓嶆槸鍏ㄨ矾寰�)</param>
-        /// <returns></returns>
-        public byte[] GetShardFileContent(string fileName)
-        {
-            string fullName = System.IO.Path.Combine(HdlFileNameResourse.DownLoadShardDirectory, fileName);
-            if (System.IO.File.Exists(fullName) == false)
-            {
-                return null;
-            }
-            string path = System.IO.Path.Combine(HdlFileNameResourse.DownLoadShardDirectory, fileName);
-            var varByte = HdlFileLogic.Current.ReadFileByteContent(path);
-            return varByte;
-        }
-
+        private Dictionary<int, SceneUI> DicScenes = new Dictionary<int, SceneUI>();
         /// <summary>
-        /// 鑾峰彇鏈湴鍏ㄩ儴鐨勫叡浜枃浠�
+        /// 鍒嗕韩鐨勬埧闂翠俊鎭�
         /// </summary>
-        /// <returns></returns>
-        public List<string> GetLocalAllShardFile()
-        {
-            return HdlFileLogic.Current.GetFileFromDirectory(HdlFileNameResourse.DownLoadShardDirectory);
-        }
-
+        private Dictionary<string, Room> DicRooms = new Dictionary<string, Room>();
         /// <summary>
-        /// 鏂囦欢鏄惁瀛樺湪
+        /// 鍒嗕韩鐨勬ゼ灞備俊鎭�
         /// </summary>
-        /// <param name="fileName"></param>
-        /// <returns></returns>
-        public bool IsFileExists(string fileName)
-        {
-            string fullName = System.IO.Path.Combine(HdlFileNameResourse.DownLoadShardDirectory, fileName);
-            if (System.IO.File.Exists(fullName) == false)
-            {
-                return false;
-            }
-            return true;
-        }
-
-        #endregion
-
-        #region 鈻� 娣诲姞鍒嗕韩鏂囦欢_______________________
-
+        private Dictionary<string, string> DicFloor = new Dictionary<string, string>();
         /// <summary>
-        /// 娣诲姞鍒嗕韩鏂囦欢鍒扮紦瀛�
+        /// 鍒嗕韩鐨勬枃浠剁殑涓婚敭(key:鏂囦欢鍚�,value:涓婚敭)
         /// </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(HdlFileNameResourse.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(HdlFileNameResourse.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(HdlFileNameResourse.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(HdlFileNameResourse.DownLoadShardDirectory, HdlFileNameResourse.ShardFloorFile);
-            //鍐欏叆鍐呭
-            HdlFileLogic.Current.SaveFileContent(fullName, dic);
-        }
-
-        #endregion
-
-        #region 鈻� 鍒犻櫎鍒嗕韩鏂囦欢_______________________
-
-        /// <summary>
-        /// 娣诲姞鍒嗕韩鏂囦欢鍒扮紦瀛�
-        /// </summary>
-        /// <param name="fileName">鎸囧畾鏂囦欢鍚嶅瓧</param>
-        public void DeleteShardFile(string fileName)
-        {
-            fileName = System.IO.Path.Combine(HdlFileNameResourse.DownLoadShardDirectory, fileName);
-            HdlFileLogic.Current.DeleteFile(fileName);
-        }
-
-        /// <summary>
-        /// 娓呯┖鍏变韩鏂囦欢澶�
-        /// </summary>
-        public void ClearShardDirectory()
-        {
-            this.dicShardDeviceFile.Clear();
-            //鍒涘缓鏂囦欢澶�
-            HdlFileLogic.Current.CreateDirectory(HdlFileNameResourse.DownLoadShardDirectory, true);
-        }
+        private Dictionary<string, string> DicShardKeys = new Dictionary<string, string>();
 
         #endregion
 
@@ -259,6 +95,19 @@
             //鍏堢湅鐪嬭繖鍒嗕韩鏁版嵁閲岄潰鏈変粈涔堥
             foreach (var info in listShardInfo)
             {
+                //濡傛灉鏄帇缂╂枃浠�,闇�瑕佺壒娈婂鐞�
+                if (info.FileName == SHARED_BIN_FILE)
+                {
+                    //鍒ゆ柇Bin鏂囦欢鐨勬洿鏂版棩鏈�
+                    if (dicUpdateTime.ContainsKey(info.FileName) == false
+                       || info.CreateTime.CompareTo(dicUpdateTime[info.FileName]) > 0)
+                    {
+                        dicAddMark[info.Id] = info.FileName;
+                        //鏇存柊鏃ユ洿鏂�
+                        dicUpdateTime[info.FileName] = info.CreateTime;
+                    }
+                    continue;
+                }
                 dicShardFile[info.FileName] = info.Id;
 
                 //濡傛灉鏈湴娌℃湁,鎴栬�呮洿鏂版棩鏈熷ぇ浜庡墠鍥炴洿鏂版棩鏈熺殑鏃跺��
@@ -272,6 +121,8 @@
                 }
             }
 
+            //涓嶈蹇樿鍒濆鍖栬繖涓笢瑗�
+            this.DicDevices = new Dictionary<string, CommonDevice>();
             //浠庝簯绔幏鍙栦笅鏉ユ枃浠�
             if (dicAddMark.Count > 0)
             {
@@ -280,7 +131,6 @@
                 ProgressFormBar.Current.SetMsg(Language.StringByID(R.MyInternationalizationString.uShardDataIsSynchronizing));
 
                 //灏嗗垎浜殑鏁版嵁瀛樺叆鏈湴(鑾峰彇鐨勬槸鏈湴娌℃湁鐨�)
-                this.ClearShardDirectory();
                 var listDbFile = this.SetShardFileToLocation(dicAddMark);
                 if (listDbFile == null)
                 {
@@ -289,125 +139,125 @@
                     return false;
                 }
 
-                //鐢熸垚鏂囦欢
+                //杞Щ鏂囦欢
                 foreach (string fileName in listDbFile)
                 {
-                    var oldPath = System.IO.Path.Combine(HdlFileNameResourse.DownLoadShardDirectory, fileName);
-                    var newPath = System.IO.Path.Combine(Config.Instance.FullPath, fileName);
-                    HdlFileLogic.Current.CopyFile(oldPath, newPath);
+                    //涓嶆槸bin鏂囦欢,鍒欑Щ鍔ㄦ枃浠跺埌鏈湴
+                    if (fileName != SHARED_BIN_FILE)
+                    {
+                        var oldPath = Path.Combine(HdlFileNameResourse.DownLoadShardDirectory, fileName);
+                        var newPath = Path.Combine(Config.Instance.FullPath, fileName);
+                        HdlFileLogic.Current.CopyFile(oldPath, newPath);
+                    }
+                    else
+                    {
+                        //璇诲彇bin鏂囦欢鐨勫唴瀹�
+                        var dataContent = this.GetShardFileContent(fileName);
+                        if (dataContent != null)
+                        {
+                            //瑙f瀽bin鏂囦欢
+                            this.AdjustBinFileContent(Encoding.UTF8.GetString(dataContent));
+                        }
+                    }
                 }
-                //娓呯┖鍏变韩鏂囦欢澶�
-                this.ClearShardDirectory();
             }
 
             //鍚屾鏈嶅姟鍣ㄧ殑鍙栨秷浜嗙殑鍒嗕韩鍐呭
-            return this.SynchronizeDeleteSharedContent(dicShardFile, dicUpdateTime);
+            return this.SynchronizeSharedCancelContent(dicShardFile, dicUpdateTime);
         }
 
         /// <summary>
         /// 鍚屾鏈嶅姟鍣ㄧ殑鍙栨秷浜嗙殑鍒嗕韩鍐呭
         /// </summary>
-        /// <param name="dicShardFile">浜戠涓婇潰鍒嗕韩鐨勬枃浠�,涓篘ull鏃朵粠鏂拌幏鍙� key:鏂囦欢鍚� value:涓婚敭</param>
-        /// <param name="dicUpdateTime">鍒嗕韩鏂囦欢鐨勬洿鏂版椂闂�,涓篘ull鏃朵粠鏂拌幏鍙�</param>
+        /// <param name="dicShardFile">浜戠涓婇潰鍒嗕韩鐨勬枃浠�,key:鏂囦欢鍚� value:涓婚敭</param>
+        /// <param name="dicUpdateTime">鍒嗕韩鏂囦欢鐨勬洿鏂版椂闂�,key:鏂囦欢鍚� value:鏃堕棿</param>
         /// <returns></returns>
-        public bool SynchronizeDeleteSharedContent(Dictionary<string, string> dicShardFile = null, Dictionary<string, string> dicUpdateTime = null)
+        private bool SynchronizeSharedCancelContent(Dictionary<string, string> dicShardFile, Dictionary<string, string> dicUpdateTime)
         {
-            if (HdlUserCenterResourse.ResidenceOption.AuthorityNo != 3)
-            {
-                //鍙湁鎴愬憳鎵嶆湁杩欎釜姒傚康
-                return true;
-            }
             //寮�鍚繘搴︽潯  鍏变韩鏁版嵁鍚屾涓�
             ProgressFormBar.Current.Start();
             ProgressFormBar.Current.SetMsg(Language.StringByID(R.MyInternationalizationString.uShardDataIsSynchronizing));
 
-            if (dicUpdateTime == null)
+            //閲嶆柊璁剧疆妤煎眰
+            Config.Instance.Home.FloorDics.Clear();
+            foreach (var key in this.DicFloor.Keys)
             {
-                //鑾峰彇鍓嶅洖鍏变韩鏂囦欢鐨勬洿鏂版棩鏈�(keys: 鏂囦欢鍚嶅瓧, value: 鏇存柊鏃ユ湡)
-                dicUpdateTime = this.GetAllShardFileAgoUpdateTime();
+                Config.Instance.Home.FloorDics[key] = this.DicFloor[key];
             }
-
-            //閲嶆柊鑾峰彇
-            if (dicShardFile == null)
+            //鑾峰彇鍒嗕韩鐨勮澶囩殑鏂囦欢鍚�
+            var listShardDeviceFile = new HashSet<string>();
+            foreach (var device in this.DicDevices.Values)
             {
-                dicShardFile = new Dictionary<string, string>();
-                //鑾峰彇涓讳汉鍒嗕韩缁欐垚鍛樼殑鏂囦欢鍒楄〃
-                var listShardData = this.GetShardFileListFromDb(Config.Instance.Guid);
-                if (listShardData == null)
-                {
-                    //鍏抽棴
-                    ProgressFormBar.Current.Close();
-                    return false;
-                }
-                //鍏堢湅鐪嬭繖鍒嗕韩鏁版嵁閲岄潰鏈変粈涔堥
-                foreach (var info in listShardData)
-                {
-                    dicShardFile[info.FileName] = info.Id;
-                }
+                listShardDeviceFile.Add(device.FilePath);
             }
+            //浣忓畢鐨勬牴鐩綍
+            var localPath = Config.Instance.FullPath;
 
-            //娓呯┖妤煎眰鏁版嵁
-            Common.Config.Instance.Home.FloorDics.Clear();
             //鐒跺悗妫�娴嬫湰鍦扮殑鏂囦欢
             var listLocalFile = HdlFileLogic.Current.GetRootPathListFile();
             foreach (string fileName in listLocalFile)
             {
-                if (fileName == HdlFileNameResourse.ShardFloorFile)
+                try
                 {
-                    //妤煎眰鏂囦欢
-                    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 (dicShardFile.ContainsKey(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)
+                    if (dicShardFile.ContainsKey(fileName) == true)
                     {
-                        //杩欎釜鎴块棿鏄粬鑷繁鍒涘缓鐨�
+                        //鏈湴鐨勮繖涓枃浠惰繕鍒嗕韩鐫�,娌℃湁闂,鎴栬搴旇鍙湁鍒嗕韩鍥剧墖
                         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)
+                    //妫�娴嬫湰鍦拌澶囨枃浠�,鏄惁瀛樺湪宸茬粡鍙栨秷浜嗗叡浜簡鐨�
+                    if (fileName.StartsWith("Device_") == true)
                     {
-                        //杩欎釜鍦烘櫙鏄粬鑷繁鍒涘缓鐨�
-                        continue;
+                        //鍒ゆ柇鏄惁杩樺湪鍒嗕韩鐨刡in鏂囦欢閲岄潰
+                        if (listShardDeviceFile.Contains(fileName) == false)
+                        {
+                            //鍒犻櫎鎺夎繖涓澶囨枃浠�
+                            HdlFileLogic.Current.DeleteFile(Path.Combine(localPath, fileName));
+                            dicUpdateTime.Remove(fileName);
+                        }
                     }
-                    //鍒犻櫎鎺夎繖涓満鏅枃浠�
-                    Global.DeleteFilebyHomeId(fileName);
-                    dicUpdateTime.Remove(fileName);
+                    //妫�娴嬫湰鍦版埧闂存枃浠�,鏄惁瀛樺湪宸茬粡鍙栨秷浜嗗叡浜簡鐨�
+                    else if (fileName.StartsWith("Room_") == true)
+                    {
+                        var fullFile = Path.Combine(localPath, fileName);
+                        var roomData = HdlFileLogic.Current.ReadFileTextContent(fullFile);
+                        if (roomData != null)
+                        {
+                            var nowRoom = Newtonsoft.Json.JsonConvert.DeserializeObject<Room>(roomData);
+                            if (nowRoom.IsSharedRoom == false || this.DicRooms.ContainsKey(nowRoom.Id) == true)
+                            {
+                                //杩欎釜鎴块棿鏄粬鑷繁鍒涘缓鐨�,鎴栬�呰繕鍦ㄥ垎浜潃
+                                continue;
+                            }
+                            //鍒犻櫎鎺夎繖涓埧闂存枃浠�
+                            HdlFileLogic.Current.DeleteFile(fullFile);
+                            dicUpdateTime.Remove(fileName);
+                        }
+                    }
+                    //妫�娴嬫湰鍦板満鏅枃浠�,鏄惁瀛樺湪宸茬粡鍙栨秷浜嗗叡浜簡鐨�
+                    else if (fileName.StartsWith("Scene_") == true)
+                    {
+                        var fullFile = Path.Combine(localPath, fileName);
+                        var sceneData = HdlFileLogic.Current.ReadFileTextContent(fullFile);
+                        var nowScene = Newtonsoft.Json.JsonConvert.DeserializeObject<SceneUI>(sceneData);
+                        if (nowScene != null)
+                        {
+                            if (nowScene.IsSharedScene == false || this.DicScenes.ContainsKey(nowScene.Id) == true)
+                            {
+                                //杩欎釜鍦烘櫙鏄粬鑷繁鍒涘缓鐨�,鎴栬�呰繕鍦ㄥ垎浜潃
+                                continue;
+                            }
+                            //鍒犻櫎鎺夎繖涓満鏅枃浠�
+                            HdlFileLogic.Current.DeleteFile(fullFile);
+                            dicUpdateTime.Remove(fileName);
+                        }
+                    }
                 }
+                catch { }
             }
 
             //淇濆瓨妤煎眰鏁版嵁
-            Common.Config.Instance.Home.Save(false);
+            Config.Instance.Home.Save(false);
 
             //缃戝叧鏂囦欢闈炲悎娉曟�ф槸鍒锋柊璁惧鍒楄〃鐨勫嚱鏁伴噷闈㈠疄鐜�
 
@@ -416,27 +266,10 @@
             //鍏抽棴
             ProgressFormBar.Current.Close();
 
+            //閲婃斁缂撳瓨
+            this.Dispone();
+
             return true;
-        }
-
-        /// <summary>
-        /// 浠庝簯绔幏鍙栧垎浜殑鏂囦欢鍒楄〃
-        /// </summary>
-        /// <param name="i_childAccountId">璐﹀彿鐨刬d,鎴愬憳鐧婚檰鐨勮瘽,鐩存帴浼犺处鍙峰瘑鐮佺櫥闄嗕箣鍚�,浜戠杩斿洖鐨勯偅涓猧d</param>
-        /// <returns></returns>
-        private List<ReceiveShardInfoResult> GetShardFileListFromDb(string i_childAccountId)
-        {
-            //鑾峰彇涓讳汉鍒嗕韩缁欐垚鍛樼殑鏂囦欢鍒楄〃
-            var pra = new { homeId = Config.Instance.HomeId, childAccountId = i_childAccountId };
-            var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("home-wisdom/home/share/findAll", RestSharp.Method.POST, pra, null, null, CheckMode.A璐﹀彿鏉冮檺);
-            //妫�娴嬬姸鎬佺爜
-            if (HdlCheckLogic.Current.CheckNetCode(result, ShowNetCodeMode.YES) == false)
-            {
-                return null;
-            }
-            var listShardInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<List<ReceiveShardInfoResult>>(result.Data.ToString());
-
-            return listShardInfo;
         }
 
         #endregion
@@ -471,501 +304,562 @@
 
         #endregion
 
-        //----------------------------------鍒嗗壊绾�(鏁版嵁棰勫)-------------------------------------------------
-
-        #region 鈻� 鏁版嵁棰勫___________________________
+        #region 鈻� 鑾峰彇鍒嗕韩鏁版嵁鍒楄〃___________________
 
         /// <summary>
-        /// 鑾峰彇鎴愬憳鍏变韩鍒楄〃鐒跺悗淇濆瓨鍒版湰鍦�(鐢ㄥ畬涔嬪悗鏈�濂借皟鐢ㄦ竻绌� ClearShardDirectory鍑芥暟娓呯┖)
+        /// 浠庝簯绔幏鍙栧垎浜殑鏂囦欢鍒楄〃
         /// </summary>
-        /// <param name="memberShardInfo">
-        /// <para>鎴愬憳鐨勫垎浜暟鎹�</para>
-        /// <para>濡傛灉涓嶇煡閬撹繖鏄粈涔堜笢瑗�,灏盢ew涓�涓�,鐒跺悗缂撳瓨璧锋潵,璋冪敤鍏朵粬鍑芥暟閮介渶瑕佽繖涓笢瑗�</para>
-        /// <para>New鐨勬椂鍊欒寰楀SubAccountDistributedMark璧嬪��,瀹冩槸鎴愬憳鍒楄〃鎺ュ彛杩斿洖鐨凷ubAccountDistributedMark</para>
-        /// </param>
+        /// <param name="i_childAccountId">璐﹀彿鐨刬d,鎴愬憳鐧婚檰鐨勮瘽,鐩存帴浼犺处鍙峰瘑鐮佺櫥闄嗕箣鍚�,浜戠杩斿洖鐨勯偅涓猧d</param>
         /// <returns></returns>
-        public bool GetMemberShardContentListAndSetToLocation(MemberShardInfoData memberShardInfo)
+        private List<ReceiveShardInfoResult> GetShardFileListFromDb(string i_childAccountId)
         {
-            if (memberShardInfo.Refresh == false)
+            //鑾峰彇涓讳汉鍒嗕韩缁欐垚鍛樼殑鏂囦欢鍒楄〃
+            var pra = new { homeId = Config.Instance.HomeId, childAccountId = i_childAccountId };
+            var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("home-wisdom/app/home/share/findAll", RestSharp.Method.POST, pra, null, null, CheckMode.A璐﹀彿鏉冮檺);
+            //妫�娴嬬姸鎬佺爜
+            if (HdlCheckLogic.Current.CheckNetCode(result, ShowNetCodeMode.YES) == false)
             {
-                //浠庢湰鍦拌幏鍙栨垚鍛樼殑鍒嗕韩鍒楄〃
-                this.GetMemberShardContentListFromLocal(memberShardInfo);
-                return true;
+                return null;
             }
-            memberShardInfo.Refresh = false;
+            var listShardInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<List<ReceiveShardInfoResult>>(result.Data.ToString());
 
-            //姝e湪鑾峰彇鍒嗕韩鏁版嵁
-            ProgressFormBar.Current.Start();
-            ProgressFormBar.Current.SetMsg(Language.StringByID(R.MyInternationalizationString.uShardContentGetting));
-
-            //浠庝簯绔幏鍙栧垎浜殑鏂囦欢鍒楄〃
-            var listData = this.GetShardFileListFromDb(memberShardInfo.ChildAccountId);
-            if (listData == null)
-            {
-                //鍏抽棴杩涘害鏉�
-                ProgressFormBar.Current.Close();
-                return false;
-            }
-            //鍏堟竻绌哄叡浜枃浠跺す
-            this.ClearShardDirectory();
-
-            var dicFileKey = new Dictionary<string, string>();
-            foreach (var data in listData)
-            {
-                //鎬ц兘浼樺寲锛氬鏋滄湰鍦版嫢鏈夎繖涓枃浠剁殑璇�,鐩存帴浣跨敤閭d釜鏂囦欢
-                string fileName = data.FileName;
-                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.Id;
-
-                if (fileName.StartsWith("Room_") == true || fileName.StartsWith("Scene_") == true)
-                {
-                    //鎴块棿鏂囦欢鍜屽満鏅枃浠堕渶瑕侀噸鏂板弽搴忓垪鍖�
-                    dicFileKey[data.Id] = data.FileName;
-                    continue;
-                }
-                if (Shared.Common.Global.IsExistsByHomeId(fileName) == true)
-                {
-                    //鍏朵粬鏂囦欢鐨勮瘽锛屽鏋滄湰鍦板瓨鍦紝鍒欎互鏈湴鏂囦欢涓哄噯
-                    this.AddShardFile(fileName);
-                    continue;
-                }
-                dicFileKey[data.Id] = data.FileName;
-            }
-
-            //灏嗗垎浜殑鏁版嵁瀛樺叆鏈湴,杩斿洖鐨勬槸鏂囦欢鍚嶅瓧(寮傚父鏃惰繑鍥瀗ull)
-            var listFile = this.SetShardFileToLocation(dicFileKey);
-            if (listFile == null)
-            {
-                //鍏抽棴杩涘害鏉�
-                ProgressFormBar.Current.Close();
-                return false;
-            }
-
-            //浠庢湰鍦拌幏鍙栨垚鍛樼殑鍒嗕韩鍒楄〃
-            this.GetMemberShardContentListFromLocal(memberShardInfo);
-
-            //鍏抽棴杩涘害鏉�
-            ProgressFormBar.Current.Close();
-
-            return true;
+            return listShardInfo;
         }
 
         /// <summary>
-        /// 浠庢湰鍦拌幏鍙栨垚鍛樼殑鍒嗕韩鍒楄〃
+        /// 灏嗗垎浜殑鏁版嵁瀛樺叆鏈湴,杩斿洖鐨勬槸鏂囦欢鍚嶅瓧(寮傚父鏃惰繑鍥瀗ull)
         /// </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 == HdlFileNameResourse.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 = HdlDeviceCommonLogic.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 = HdlDeviceCommonLogic.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 = HdlDeviceCommonLogic.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>
+        /// <param name="dicFileKeys">key:鏂囦欢鐨勪富閿� value:鏂囦欢鍚嶇О</param>
         /// <returns></returns>
-        public string GetShardDeviceFileName(string deviceKeys)
+        private List<string> SetShardFileToLocation(Dictionary<string, string> dicFileKeys)
         {
-            if (this.dicShardDeviceFile.ContainsKey(deviceKeys) == true)
+            if (dicFileKeys.Count == 0)
             {
-                return this.dicShardDeviceFile[deviceKeys];
+                return new List<string>();
             }
-            return string.Empty;
-        }
+            //鍒涘缓鏂囦欢澶�
+            string strDir = HdlFileNameResourse.DownLoadShardDirectory;
+            HdlFileLogic.Current.CreateDirectory(strDir, true);
 
-        #endregion
+            int listMarkCount = dicFileKeys.Count;
 
-        //----------------------------------鍒嗗壊绾�(涓婁紶鏂扮殑鍒嗕韩)---------------------------------------------
-
-        #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);
+            List<string> listFile = new List<string>();
 
             //涓嶅厑璁告寜绯荤粺鐨勮繑鍥為敭
             Config.Instance.BackKeyCanClick = false;
             HdlUserCenterResourse.AccountOption.AppCanSignout = false;
 
-            if (BarMaxValue == -1)
+            //璁℃暟
+            int nowCount = 0;
+            foreach (var fileKey in dicFileKeys.Keys)
             {
-                //鎵撳紑杩涘害鏉�
-                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();
+                nowCount++;
+                var pra = new { homeId = Config.Instance.Home.Id, homeShareId = fileKey };
+                var result = HdlHttpLogic.Current.RequestByteFromZigbeeHttps("home-wisdom/app/home/share/downOne", RestSharp.Method.POST, pra, null, null, CheckMode.A璐﹀彿鏉冮檺, true, 10);
+                //妫�娴嬬姸鎬佺爜
+                if (result == null)
+                {
+                    //鍏佽鎸夌郴缁熺殑杩斿洖閿�
+                    Config.Instance.BackKeyCanClick = true;
+                    HdlUserCenterResourse.AccountOption.AppCanSignout = true;
+                    return null;
+                }
+                string shareName = dicFileKeys[fileKey];
+                //鏂囦欢鍚嶅瓧
+                listFile.Add(shareName);
+                //淇濆瓨鍒版寚瀹氭枃浠跺す涓�
+                HdlFileLogic.Current.SaveByteToFile(System.IO.Path.Combine(strDir, shareName), result);
+                //璁剧疆杩涘害鍊�
+                ProgressFormBar.Current.SetValue(nowCount, listMarkCount);
             }
 
             //鍏佽鎸夌郴缁熺殑杩斿洖閿�
             Config.Instance.BackKeyCanClick = true;
             HdlUserCenterResourse.AccountOption.AppCanSignout = true;
 
-            if (result == false)
+            return listFile;
+        }
+
+        #endregion
+
+
+        #region 鈻� 鍒濆鍖栨垚鍛樺垎浜暟鎹甠________________
+
+        /// <summary>
+        /// 鍒濆鍖栨垚鍛樺叡浜垪琛ㄧ劧鍚庝繚瀛樺埌鏈湴
+        /// </summary>
+        /// <param name="i_ChildAccountId">鎴愬憳ID</param>
+        /// <returns></returns>
+        public bool InitMemberShardContentListAndSetToLocation(string i_ChildAccountId)
+        {
+            if (DicDevices != null)
             {
-                //鎭㈠鍘熸暟鎹�
-                if (memberShardInfo.TempRoom == null)
-                {
-                    memberShardInfo.dicShardRoom[nowRoom.FileName].BackgroundImageType = BackgroundImageType;
-                    memberShardInfo.dicShardRoom[nowRoom.FileName].BackgroundImage = BackgroundImage;
-                }
-                this.RecoverRoomDevicelistTemporary(memberShardInfo, dicBackDevice, dicBackScene, listFile);
+                //宸茬粡鑾峰彇浜�,鍒欎笉鍐嶈幏鍙�
+                return true;
             }
-            else
+
+            //姝e湪鑾峰彇鍒嗕韩鏁版嵁
+            ProgressFormBar.Current.Start();
+            ProgressFormBar.Current.SetMsg(Language.StringByID(R.MyInternationalizationString.uShardContentGetting));
+
+            //浠庝簯绔幏鍙栧垎浜殑鏂囦欢鍒楄〃
+            var listData = this.GetShardFileListFromDb(i_ChildAccountId);
+            if (listData == null)
             {
-                //瑕嗙洊鏁版嵁
-                if (memberShardInfo.TempRoom != null)
-                {
-                    memberShardInfo.dicShardRoom[nowRoom.FileName] = memberShardInfo.TempRoom;
-                }
+                //鍏抽棴杩涘害鏉�
+                ProgressFormBar.Current.Close();
+                return false;
             }
-            memberShardInfo.TempRoom = null;
+
+            //鍒嗕韩鐨勫帇缂╂枃浠剁殑涓婚敭
+            string shardBinKey = string.Empty;
+            foreach (var data in listData)
+            {
+                //濡傛灉鏄繖涓帇缂╂枃浠�
+                if (data.FileName == SHARED_BIN_FILE)
+                {
+                    shardBinKey = data.Id;
+                }
+                //璁板綍璧峰畠浠殑涓婚敭
+                this.DicShardKeys[data.FileName] = data.Id;
+            }
+
+            //涓嬭浇鍘嬬缉鐨刡in鏂囦欢,鐒跺悗杩涜瑙f瀽,鍏朵粬鏂囦欢涓嶇敤鐞嗕細
+            bool result = this.DownloadBinFileAndAdjust(shardBinKey);
+            //鍏抽棴杩涘害鏉�
+            ProgressFormBar.Current.Close();
 
             return result;
         }
 
         /// <summary>
-        /// 鑾峰彇涓婁紶鐨勬枃浠跺悕
+        /// 涓嬭浇鍘嬬缉鐨刡in鏂囦欢,鐒跺悗杩涜瑙f瀽
         /// </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>
+        /// <param name="i_binFileId">鍘嬬缉鏂囦欢鐨勪富閿�</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)
+        private bool DownloadBinFileAndAdjust(string i_binFileId)
         {
-            var listFile = new List<string>();
-
-            Common.Room roomTemp = null;
-            if (memberShardInfo.dicShardRoom.ContainsKey(nowRoom.FileName) == false)
+            if (i_binFileId == string.Empty)
             {
-                //鍏嬮殕涓�涓璞�
-                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);
-                }
+                //涓嶈蹇樿瑕佸垵濮嬪寲杩欎釜涓滆タ
+                this.DicDevices = new Dictionary<string, CommonDevice>();
+                return true;
             }
-            else
+            var pra = new { homeId = Config.Instance.Home.Id, homeShareId = i_binFileId };
+            var result = HdlHttpLogic.Current.RequestByteFromZigbeeHttps("home-wisdom/app/home/share/downOne", RestSharp.Method.POST, pra, null, null, CheckMode.A璐﹀彿鏉冮檺, true, 10);
+            //妫�娴嬬姸鎬佺爜
+            if (result == null)
             {
-                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;
-                }
+                return false;
             }
+            //涓嶈蹇樿瑕佸垵濮嬪寲杩欎釜涓滆タ
+            this.DicDevices = new Dictionary<string, CommonDevice>();
 
-            foreach (var device in listDevice)
-            {
-                //璁惧
-                listFile.Add(device.FilePath);
-                this.AddShardFile(device.FilePath);
+            //鐩存帴椋欏埌100%
+            ProgressFormBar.Current.SetValue(1);
 
-                //鍔犵偣缂撳瓨
-                string mainKeys = HdlDeviceCommonLogic.Current.GetDeviceMainKeys(device);
-                this.dicShardDeviceFile[mainKeys] = device.FilePath;
+            var fileContent = Encoding.UTF8.GetString(result);
+            //瑙f瀽鍘嬬缉鐨刡in鏂囦欢
+            this.AdjustBinFileContent(fileContent);
 
-                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[HdlDeviceCommonLogic.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(HdlFileNameResourse.ShardFloorFile);
-
-            return listFile;
+            return true;
         }
 
         /// <summary>
-        /// 鑾峰彇鍦烘櫙鐨勭洰鏍囪澶囧垪琛�(杩欎釜涓嶈兘浠庡垎浜暟鎹腑鑾峰彇)
+        /// 瑙f瀽鍘嬬缉鐨刡in鏂囦欢
+        /// </summary>
+        /// <param name="i_content"></param>
+        private void AdjustBinFileContent(string i_content)
+        {
+            var deviceType = string.Empty;
+
+            //鏍规嵁鎹㈣绗﹀垏鍒嗘暟鎹枃鏈�
+            string[] arryData = i_content.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
+            string strContentData = string.Empty;
+            foreach (string strData in arryData)
+            {
+                if (strData == "#START#")
+                {
+                    //鏃犻檮鍔犳暟鎹殑銆愭暟鎹爣棰樸��
+                    continue;
+                }
+                if (strData.StartsWith("#DeviceInfo START#") == true)
+                {
+                    //闄勫姞鏁版嵁:璁惧瀵硅薄绫诲瀷
+                    deviceType = strData.Substring(18);
+                    continue;
+                }
+                //鎵ц鏁版嵁澶勭悊
+                try
+                {
+                    //鍦烘櫙瀵硅薄
+                    if (strData == "#Scene END#")
+                    {
+                        var scene = Newtonsoft.Json.JsonConvert.DeserializeObject<SceneUI>(strContentData);
+                        this.DicScenes[scene.Id] = scene;
+
+                        strContentData = string.Empty;
+                        continue;
+                    }
+                    //妤煎眰瀵硅薄
+                    else if (strData == "#FloorInfo END#")
+                    {
+                        this.DicFloor = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(strContentData);
+
+                        strContentData = string.Empty;
+                        continue;
+                    }
+                    //鎴块棿瀵硅薄
+                    else if (strData == "#RoomInfo END#")
+                    {
+                        var room = Newtonsoft.Json.JsonConvert.DeserializeObject<Room>(strContentData);
+                        this.DicRooms[room.Id] = room;
+
+                        strContentData = string.Empty;
+                        continue;
+                    }
+                    //璁惧瀵硅薄
+                    else if (strData == "#DeviceInfo END#")
+                    {
+                        //鍙嶅簭鍒楀寲璁惧
+                        CommonDevice device = null;
+                        if (HdlCheckLogic.Current.CheckIsNumber(deviceType) == true)
+                        {
+                            //鏁板�煎瀷涓烘柊鏁版嵁,鐩存帴杞崲
+                            device = CommonDevice.CommonDeviceByByteString(Convert.ToInt32(deviceType), strContentData);
+                        }
+                        else
+                        {
+                            //瀛楃涓插瀷涓烘棫鏁版嵁,闇�瑕佺壒娈婂鐞�
+                            var myType = (DeviceType)Enum.Parse(typeof(DeviceType), deviceType);
+                            device = CommonDevice.CommonDeviceByByteString((int)myType, strContentData);
+                        }
+                        if (device != null)
+                        {
+                            this.DicDevices[HdlDeviceCommonLogic.Current.GetDeviceMainKeys(device)] = device;
+                        }
+                        strContentData = string.Empty;
+                        continue;
+                    }
+                    else
+                    {
+                        strContentData += strData;
+                    }
+                }
+                catch (Exception ex)
+                {
+                    HdlLogLogic.Current.WriteLog(ex, "鍒嗕韩bin鏂囦欢鍑洪棶棰榎r\n" + strContentData);
+                    strContentData = string.Empty;
+                }
+            }
+        }
+
+        #endregion
+
+
+        #region 鈻� 涓婁紶鍒嗕韩鍐呭_______________________
+
+        /// <summary>
+        /// 鎵ц涓婁紶鏂扮殑鍒嗕韩(璁惧鍜屽満鏅粎闄愬悓涓�涓埧闂�)
+        /// </summary>
+        /// <param name="i_ChildAccountId">鎴愬憳鐨処D</param>
+        /// <param name="i_nowRoom">鎸囧畾鐨勬埧闂�</param>
+        /// <param name="i_listDevice">閫夋嫨涓婁紶鐨勮澶�(浠呴檺涓�涓埧闂�)</param>
+        /// <param name="i_listScene">閫夋嫨涓婁紶鐨勫満鏅�(浠呴檺涓�涓埧闂�,涓嶈鑾峰彇瀹冮噷闈㈢殑缁戝畾鍒楄〃)</param>
+        public bool UploadSharedContent(string i_ChildAccountId, Room i_nowRoom, List<CommonDevice> i_listDevice, List<SceneUI> i_listScene)
+        {
+            if (i_listDevice.Count == 0 && i_listScene.Count == 0)
+            {
+                return true;
+            }
+            //鎵撳紑杩涘害鏉�
+            ProgressBar.Show();
+
+            var listCheck = new HashSet<string>();
+
+            //鑾峰彇鍦烘櫙閲岄潰宓屽鐨勫瓙璁惧鍜屽瓙鍦烘櫙(杩欏嚑涓笢瑗夸笉鍔犲埌鎴块棿)
+            var listChirdDevice = new List<CommonDevice>();
+            var listChirdScene = new List<SceneUI>();
+            foreach (var SceneTemp in i_listScene)
+            {
+                //浠庣紦瀛樿幏鍙栧満鏅殑鎵ц鐩爣
+                this.GetSceneAdjustTargetListFromLocal(SceneTemp, listCheck, listChirdScene, listChirdDevice);
+            }
+            //鍏嬮殕涓�涓埧闂村嚭鏉�
+            var cloneRoom = HdlRoomLogic.Current.CloneRoomClass(i_nowRoom);
+            if (this.DicRooms.ContainsKey(cloneRoom.Id) == true)
+            {
+                //鎶婂師鏉ョ殑鐨勪笢瑗夸篃澶嶅埗杩囨潵
+                cloneRoom.ListDevice.AddRange(this.DicRooms[cloneRoom.Id].ListDevice);
+                cloneRoom.ListDeviceMac.AddRange(this.DicRooms[cloneRoom.Id].ListDeviceMac);
+                cloneRoom.ListSceneId.AddRange(this.DicRooms[cloneRoom.Id].ListSceneId);
+            }
+            else
+            {
+                //杩欓噷鏈夌偣鐗规畩,濡傛灉涓嶅瓨鍦ㄧ殑璇�,鎶婄湡瀹炶澶囩殑鍖哄煙涓㈣繃鍘�,鍥犱负鍙槸涓婚敭鑰屽凡
+                cloneRoom.ListDeviceMac.AddRange(i_nowRoom.ListDeviceMac);
+            }
+            //鐒跺悗鎶婂満鏅拰璁惧涓㈠埌杩欎釜鍏嬮殕鐨勫璞¢噷闈㈠幓
+            foreach (var device in i_listDevice)
+            {
+                string mainKey = HdlDeviceCommonLogic.Current.GetDeviceMainKeys(device);
+                if (cloneRoom.ListDevice.Contains(mainKey) == false)
+                {
+                    //涓㈣澶囪繃鍘�
+                    cloneRoom.ListDevice.Add(mainKey);
+                }
+            }
+            foreach (var secne in i_listScene)
+            {
+                if (cloneRoom.ListSceneId.Contains(secne.Id) == false)
+                {
+                    //涓㈠満鏅繃鍘�
+                    cloneRoom.ListSceneId.Add(secne.Id);
+                }
+            }
+            //鑾峰彇闇�瑕佷笂浼犵殑鍥剧墖
+            var listUploadPic = this.GetUploadPictrueFile(new List<Room> { cloneRoom }, i_listScene, listChirdScene);
+            //鐢熸垚鍒嗕韩Bin鏂囦欢鍐呭
+            var binfFileContent = this.CreatShardBinContentOnAdd(new List<Room> { cloneRoom }, i_listDevice, i_listScene, listChirdDevice, listChirdScene);
+
+            //璁剧疆鏈�澶у��
+            ProgressBar.SetMaxValue(listUploadPic.Count + 1);
+
+            //涓婁紶bin鏂囦欢
+            var fileKey = this.DoUploadShardContent(i_ChildAccountId, SHARED_BIN_FILE, Encoding.UTF8.GetBytes(binfFileContent));
+            if (fileKey == null)
+            {
+                ProgressBar.Close();
+                return false;
+            }
+            ProgressBar.SetValue(1);
+
+            //璁板綍涓婚敭
+            this.DicShardKeys[SHARED_BIN_FILE] = fileKey;
+            binfFileContent = null;
+
+            //涓婁紶鍥剧墖
+            foreach (var fileName in listUploadPic)
+            {
+                var byteData = HdlFileLogic.Current.ReadFileByteContent(Path.Combine(Config.Instance.FullPath, fileName));
+                if (byteData != null)
+                {
+                    fileKey = this.DoUploadShardContent(i_ChildAccountId, fileName, byteData);
+                    if (fileKey == null)
+                    {
+                        ProgressBar.Close();
+                        return false;
+                    }
+                    //璁板綍涓婚敭
+                    this.DicShardKeys[SHARED_BIN_FILE] = fileKey;
+                }
+                ProgressBar.SetValue(1);
+            }
+            //濡傛灉鍏ㄩ儴鎴愬姛浜嗙殑璇�,瑕嗙洊缂撳瓨
+            this.DicDevices.Clear();
+            this.DicScenes.Clear();
+            this.DicRooms.Clear();
+            this.DicFloor.Clear();
+            this.AdjustBinFileContent(binfFileContent);
+
+            //鍒犻櫎宸茬粡涓嶅啀鍒嗕韩鐨勫浘鐗�
+            this.DeleteNotShardPictrue();
+
+            ProgressBar.Close();
+
+            return true;
+        }
+
+        /// <summary>
+        /// 鎵ц涓婁紶鏂扮殑鍒嗕韩鎴块棿(鏁翠釜鎴块棿鍒嗕韩)
+        /// </summary>
+        /// <param name="i_ChildAccountId">鎴愬憳鐨処D</param>
+        /// <param name="i_listRoom">闇�瑕佸垎浜殑鎴块棿</param>
+        public bool UploadSharedRoom(string i_ChildAccountId, List<Room> i_listRoom)
+        {
+            //鎵撳紑杩涘害鏉�
+            ProgressBar.Show();
+
+            //璁╄澶囧拰鍦烘櫙涓嶉噸澶嶇殑涓滆タ
+            var listCheck = new HashSet<string>();
+            //鍏嬮殕鎴块棿
+            var listCloneRoom = new List<Room>();
+            //娣诲姞鐨勮澶�
+            var listDevice = new List<CommonDevice>();
+            //娣诲姞鐨勫満鏅�
+            var listScene = new List<SceneUI>();
+
+            foreach (var room in i_listRoom)
+            {
+                //鍏嬮殕涓�涓埧闂村嚭鏉�
+                var cloneRoom = HdlRoomLogic.Current.CloneRoomClass(room);
+                if (this.DicRooms.ContainsKey(cloneRoom.Id) == true)
+                {
+                    //鎶婂師鏉ョ殑鐨勪笢瑗夸篃澶嶅埗杩囨潵
+                    cloneRoom.ListDevice.AddRange(this.DicRooms[cloneRoom.Id].ListDevice);
+                    cloneRoom.ListDeviceMac.AddRange(this.DicRooms[cloneRoom.Id].ListDeviceMac);
+                    cloneRoom.ListSceneId.AddRange(this.DicRooms[cloneRoom.Id].ListSceneId);
+                }
+                else
+                {
+                    //杩欓噷鏈夌偣鐗规畩,濡傛灉涓嶅瓨鍦ㄧ殑璇�,鎶婄湡瀹炶澶囩殑鍖哄煙涓㈣繃鍘�,鍥犱负鍙槸涓婚敭鑰屽凡
+                    cloneRoom.ListDeviceMac.AddRange(room.ListDeviceMac);
+                }
+                listCloneRoom.Add(cloneRoom);
+
+                //鑾峰彇璁惧瀵硅薄
+                foreach (var mainkey in cloneRoom.ListDevice)
+                {
+                    var device = HdlDeviceCommonLogic.Current.GetDevice(mainkey);
+                    if (device != null)
+                    {
+                        listDevice.Add(device);
+                    }
+                    listCheck.Add(mainkey);
+                }
+                //鑾峰彇鍦烘櫙瀵硅薄
+                foreach (var sceneId in cloneRoom.ListSceneId)
+                {
+                    var scene = HdlSceneLogic.Current.GetSceneUIBySceneId(sceneId);
+                    if (scene != null)
+                    {
+                        listScene.Add(scene);
+                    }
+                    listCheck.Add(sceneId.ToString());
+                    //浠庣紦瀛樿幏鍙栧満鏅殑鎵ц鐩爣
+                    this.GetSceneAdjustTargetListFromLocal(scene, listCheck, listScene, listDevice);
+                }
+            }
+
+            //鑾峰彇闇�瑕佷笂浼犵殑鍥剧墖
+            var listUploadPic = this.GetUploadPictrueFile(listCloneRoom, listScene, new List<SceneUI>());
+            //鐢熸垚鍒嗕韩Bin鏂囦欢鍐呭
+            var binfFileContent = this.CreatShardBinContentOnAdd(listCloneRoom, listDevice, listScene, new List<CommonDevice>(), new List<SceneUI>());
+
+            //璁剧疆鏈�澶у��
+            ProgressBar.SetMaxValue(listUploadPic.Count + 1);
+
+            //涓婁紶bin鏂囦欢
+            var fileKey = this.DoUploadShardContent(i_ChildAccountId, SHARED_BIN_FILE, Encoding.UTF8.GetBytes(binfFileContent));
+            if (fileKey == null)
+            {
+                ProgressBar.Close();
+                return false;
+            }
+            ProgressBar.SetValue(1);
+
+            //璁板綍涓婚敭
+            this.DicShardKeys[SHARED_BIN_FILE] = fileKey;
+            binfFileContent = null;
+
+            //涓婁紶鍥剧墖
+            foreach (var fileName in listUploadPic)
+            {
+                var byteData = HdlFileLogic.Current.ReadFileByteContent(Path.Combine(Config.Instance.FullPath, fileName));
+                if (byteData != null)
+                {
+                    fileKey = this.DoUploadShardContent(i_ChildAccountId, fileName, byteData);
+                    if (fileKey == null)
+                    {
+                        ProgressBar.Close();
+                        return false;
+                    }
+                    //璁板綍涓婚敭
+                    this.DicShardKeys[SHARED_BIN_FILE] = fileKey;
+                }
+                ProgressBar.SetValue(1);
+            }
+            //濡傛灉鍏ㄩ儴鎴愬姛浜嗙殑璇�,瑕嗙洊缂撳瓨
+            this.DicDevices.Clear();
+            this.DicScenes.Clear();
+            this.DicRooms.Clear();
+            this.DicFloor.Clear();
+            this.AdjustBinFileContent(binfFileContent);
+
+            //鍒犻櫎宸茬粡涓嶅啀鍒嗕韩鐨勫浘鐗�
+            this.DeleteNotShardPictrue();
+
+            ProgressBar.Close();
+
+            return true;
+        }
+
+        /// <summary>
+        /// 鍒犻櫎宸茬粡涓嶅啀鍒嗕韩鐨勫浘鐗�(涓嶇敤绠¤繑鍥炲��,鍗充娇澶辫触涔熸病浜�)
+        /// </summary>
+        private void DeleteNotShardPictrue()
+        {
+            var listPictrue = new List<string>();
+            foreach (var room in this.DicRooms.Values)
+            {
+                if (room.BackgroundImageType != 0)
+                {
+                    //鎴块棿鍥剧墖
+                    listPictrue.Add(room.BackgroundImage);
+                }
+            }
+            foreach (var scene in this.DicScenes.Values)
+            {
+                if (scene.IconPathType != 0)
+                {
+                    //鍦烘櫙鍥剧墖
+                    listPictrue.Add(scene.IconPath);
+                }
+            }
+            var listDeleteFile = new List<string>();
+            foreach (var fileName in this.DicShardKeys.Keys)
+            {
+                //濡傛灉鏄埧闂存垨鑰呭満鏅殑鍥剧墖
+                if (fileName.StartsWith("RoomIcon_") == true || fileName.StartsWith("SceneIcon_") == true)
+                {
+                    if (listPictrue.Contains(fileName) == false)
+                    {
+                        //杩欎釜鍥剧墖鍙樻洿浜�,闇�瑕佸垹闄ゆ帀
+                        listDeleteFile.Add(fileName);
+                    }
+                }
+            }
+            //鍒犻櫎鍥剧墖
+            this.DoDeleteSharedContent(listDeleteFile, ShowNetCodeMode.No);
+        }
+
+        /// <summary>
+        /// 涓婁紶鍒嗕韩鍐呭(杩斿洖涓婚敭)
+        /// </summary>
+        /// <param name="i_childAccountId">瀛愯处鍙风殑涓婚敭</param>
+        /// <param name="i_fileName">鏂囦欢鍚嶅瓧</param>
+        /// <param name="i_content">鏂囦欢鍐呭</param>
+        /// <returns></returns>
+        private string DoUploadShardContent(string i_childAccountId, string i_fileName, byte[] i_content)
+        {
+            var dicQuery = new Dictionary<string, object>();
+            dicQuery["homeId"] = Config.Instance.Home.Id;
+            dicQuery["childAccountId"] = i_childAccountId;
+            dicQuery["fileName"] = i_fileName;
+
+            var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("home-wisdom/app/home/share/add", RestSharp.Method.POST, i_content, dicQuery, null, CheckMode.A璐﹀彿鏉冮檺, true, 10);
+            //妫�娴嬬姸鎬佺爜
+            if (HdlCheckLogic.Current.CheckNetCode(result, ShowNetCodeMode.YES) == false)
+            {
+                return null;
+            }
+            var info = Newtonsoft.Json.JsonConvert.DeserializeObject<ReceiveShardInfoResult>(result.Data.ToString());
+            return info.Id;
+        }
+
+        #endregion
+
+        #region 鈻� 涓婁紶鍒嗕韩鍐呭杈呭姪鏂规硶_______________
+
+        /// <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)
+        private void GetSceneAdjustTargetListFromLocal(SceneUI scene, HashSet<string> listCheck, List<SceneUI> listSceneUI, List<CommonDevice> listDevice)
         {
             foreach (var data in scene.AdjustTargetList)
             {
@@ -1002,383 +896,209 @@
                     if (sceneUi != null)
                     {
                         listSceneUI.Add(sceneUi);
+                        //閫掑綊鑾峰彇鎵ц鐩爣
+                        this.GetSceneAdjustTargetListFromLocal(sceneUi, listCheck, listSceneUI, listDevice);
                     }
                 }
             }
+        }
+
+        /// <summary>
+        /// 鑾峰彇闇�瑕佷笂浼犵殑鍥剧墖鍚嶅瓧
+        /// </summary>
+        /// <param name="i_listRoom">鎴块棿瀵硅薄</param>
+        /// <param name="i_listScene">鍦烘櫙瀵硅薄</param>
+        /// <param name="i_listChirdScene">鍦烘櫙瀵硅薄</param>
+        /// <returns></returns>
+        private List<string> GetUploadPictrueFile(List<Room> i_listRoom, List<SceneUI> i_listScene, List<SceneUI> i_listChirdScene)
+        {
+            var listPic = new List<string>();
+            foreach (var room in i_listRoom)
+            {
+                if (room.BackgroundImageType != 0 && this.DicShardKeys.ContainsKey(room.BackgroundImage) == false)
+                {
+                    //鑷畾涔夊浘鐗�
+                    listPic.Add(room.BackgroundImage);
+                }
+            }
+            foreach (var scene in i_listScene)
+            {
+                if (scene.IconPathType != 0 && this.DicShardKeys.ContainsKey(scene.IconPath) == false)
+                {
+                    //鑷畾涔夊浘鐗�
+                    listPic.Add(scene.IconPath);
+                }
+            }
+            foreach (var scene in i_listChirdScene)
+            {
+                if (scene.IconPathType != 0 && this.DicShardKeys.ContainsKey(scene.IconPath) == false)
+                {
+                    //鑷畾涔夊浘鐗�
+                    listPic.Add(scene.IconPath);
+                }
+            }
+            return listPic;
         }
 
         #endregion
 
-        #region 鈻� 涓婁紶鏂扮殑鍒嗕韩_______________________
+
+        #region 鈻� 鍒犻櫎鍒嗕韩鍐呭_______________________
 
         /// <summary>
-        /// 涓婁紶鍒嗕韩(杩斿洖浜戠鍒嗕韩鏂囦欢鐨勪富閿�:DistributedMark)
+        /// 绉婚櫎鎸囧畾鍒嗕韩鍐呭(璁惧鍜屽満鏅粎闄愬悓涓�涓埧闂�)
         /// </summary>
-        /// <param name="memberShardInfo">鎴愬憳鐨勫垎浜暟鎹�</param>
-        /// <param name="listFile">涓婁紶鐨勬枃浠跺悕</param>
-        /// <param name="listCheckFile">閲嶅鏂囦欢涓婁紶妫�娴�</param>
+        /// <param name="i_ChildAccountId">鎴愬憳ID</param>
+        /// <param name="i_nowRoom">鎸囧畾鐨勬埧闂�</param>
+        /// <param name="i_listDevice">閫夋嫨涓婁紶鐨勮澶�(浠呴檺涓�涓埧闂�)</param>
+        /// <param name="i_listScene">閫夋嫨涓婁紶鐨勫満鏅�(浠呴檺涓�涓埧闂�,涓嶈鑾峰彇瀹冮噷闈㈢殑缁戝畾鍒楄〃)</param>
         /// <returns></returns>
-        private bool DoUploadShardContent(MemberShardInfoData memberShardInfo, List<string> listFile, HashSet<string> listCheckFile)
+        public bool DeleteSharedContent(string i_ChildAccountId, Room i_nowRoom,
+            List<CommonDevice> i_listDevice, List<SceneUI> i_listScene)
         {
-            var dicKeys = new Dictionary<string, string>();
-            for (int i = 0; i < listFile.Count; i++)
+            //鍏嬮殕涓�涓埧闂村嚭鏉�
+            var cloneRoom = HdlRoomLogic.Current.CloneRoomClass(i_nowRoom);
+            if (this.DicRooms.ContainsKey(cloneRoom.Id) == true)
             {
-                string fileName = listFile[i];
-                if (listCheckFile != null)
-                {
-                    if (listCheckFile.Contains(fileName) == true)
-                    {
-                        //閲嶅鏂囦欢涓嶅啀涓婁紶
-                        continue;
-                    }
-                    listCheckFile.Add(fileName);
-                }
-                var shareByte = this.GetShardFileContent(fileName);
-                //涓婁紶鏂囦欢
-                var shardId = this.DoUploadShardContent(memberShardInfo.ChildAccountId, fileName, shareByte);
-                if (shardId == null)
-                {
-                    return false;
-                }
-                //鏀堕泦涓婚敭
-                dicKeys[fileName] = shardId;
-                //璁剧疆杩涘害鍊�
-                ProgressBar.SetValue(1);
-            }
-            //濡傛灉娌℃湁閿欒,鍒欐坊鍔犱复鏃剁紦瀛�
-            foreach (var keys in dicKeys.Keys)
-            {
-                memberShardInfo.dicAllShardKeys[keys] = dicKeys[keys];
+                //鎶婂師鏉ョ殑鐨勪笢瑗夸篃澶嶅埗杩囨潵
+                cloneRoom.ListDevice.AddRange(this.DicRooms[cloneRoom.Id].ListDevice);
+                cloneRoom.ListDeviceMac.AddRange(this.DicRooms[cloneRoom.Id].ListDeviceMac);
+                cloneRoom.ListSceneId.AddRange(this.DicRooms[cloneRoom.Id].ListSceneId);
             }
 
-            return true;
-        }
-
-        /// <summary>
-        /// 涓婁紶鍒嗕韩鍐呭(杩斿洖涓婚敭)
-        /// </summary>
-        /// <param name="i_childAccountId">瀛愯处鍙风殑涓婚敭</param>
-        /// <param name="i_fileName">鏂囦欢鍚嶅瓧</param>
-        /// <param name="i_content">鏂囦欢鍐呭</param>
-        /// <returns></returns>
-        private string DoUploadShardContent(string i_childAccountId, string i_fileName, byte[] i_content)
-        {
-            var dicQuery = new Dictionary<string, object>();
-            dicQuery["homeId"] = Config.Instance.Home.Id;
-            dicQuery["childAccountId"] = i_childAccountId;
-            dicQuery["fileName"] = i_fileName;
-
-            var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("home-wisdom/home/share/add", RestSharp.Method.POST, i_content, dicQuery, null, CheckMode.A璐﹀彿鏉冮檺, true, 10);
-            //妫�娴嬬姸鎬佺爜
-            if (HdlCheckLogic.Current.CheckNetCode(result, ShowNetCodeMode.YES) == false)
-            {
-                return null;
-            }
-            var info = Newtonsoft.Json.JsonConvert.DeserializeObject<ReceiveShardInfoResult>(result.Data.ToString());
-            return info.Id;
-        }
-
-        #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 = HdlDeviceCommonLogic.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, 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="listMark">瑕佺Щ闄ょ殑涓婚敭</param>
-        /// <param name="listDeleteFile">瑕佸垹闄ょ殑鏂囦欢(鎴块棿鏂囦欢闇�瑕佸垹闄ょ殑璇�,蹇呴』鏀惧湪鏈�鍚�)</param>
-        /// <returns></returns>
-        private bool DoDeleteSharedContent(MemberShardInfoData memberShardInfo, List<string> listMark, List<string> listDeleteFile)
-        {
-            if (listMark.Count == 0)
-            {
-                //鏈夊彲鑳藉彧鍒犻櫎涓�涓洖璺紝鑰岃繖涓洖璺槸鍒嗛厤鍒板涓埧闂寸殑
-                return true;
-            }
-
-            //寮�鍚繘搴︽潯
-            ProgressBar.Show();
+            //璁╄澶囧拰鍦烘櫙涓嶉噸澶嶆坊鍔犵殑涓滆タ
             var listCheck = new HashSet<string>();
-            foreach (var markKeys in listMark)
-            {
-                //閲岄潰浼间箮鏈夊彲鑳戒細鍑虹幇閲嶅
-                if (listCheck.Contains(markKeys) == true) { continue; }
-                listCheck.Add(markKeys);
 
-                var pra = new { homeId = Config.Instance.Home.Id, homeShareId = markKeys };
-                //鎵ц鍒犻櫎
-                var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("home-wisdom/home/share/delete", RestSharp.Method.POST, pra, null, null, CheckMode.A璐﹀彿鏉冮檺);
-                //妫�娴嬬姸鎬佺爜
-                if (HdlCheckLogic.Current.CheckNetCode(result, ShowNetCodeMode.YES) == false)
-                {
-                    //鍏抽棴杩涘害鏉�
-                    ProgressBar.Close();
-                    return false;
-                }
+            //鐒跺悗鎶婂満鏅拰璁惧浠庤繖涓厠闅嗙殑瀵硅薄閲岄潰绉婚櫎鎺�(鐪熷疄鐗╃悊璁惧鐨勬埧闂翠笉鐢ㄧ悊)
+            foreach (var device in i_listDevice)
+            {
+                string mainKey = HdlDeviceCommonLogic.Current.GetDeviceMainKeys(device);
+                cloneRoom.ListDevice.Remove(mainKey);
+
+                listCheck.Add(mainKey);
             }
-            //鍏抽棴杩涘害鏉�
+            foreach (var secne in i_listScene)
+            {
+                cloneRoom.ListSceneId.Remove(secne.Id);
+
+                listCheck.Add(secne.Id.ToString());
+            }
+            //濡傛灉閮界Щ闄ゅ畬鐨勮瘽,鍒欑洿鎺ヨ蛋鍒犻櫎鍒嗕韩鎴块棿鐨勬柟娉�
+            if (cloneRoom.ListDevice.Count == 0 && cloneRoom.ListSceneId.Count == 0)
+            {
+                //鎵ц鏁翠釜鎴块棿鍒犻櫎鐨勬柟娉�
+                return this.DeleteSharedRoom(i_ChildAccountId, new List<Room> { i_nowRoom });
+            }
+            //鑾峰彇鍦烘櫙閲岄潰宓屽鐨勫瓙璁惧鍜屽瓙鍦烘櫙
+            foreach (var sceneTemp in i_listScene)
+            {
+                //浠庣紦瀛樿幏鍙栧満鏅殑鎵ц鐩爣
+                this.GetSceneAdjustTargetListFromShard(sceneTemp, listCheck, i_listScene, i_listDevice);
+            }
+            //鍦ㄥ垹闄や竴涓埧闂翠腑鐨勪竴浜涜澶囩殑妯″紡涓�,妫�娴嬭澶囧拰鍦烘櫙鏄惁鑳藉鍒犻櫎(鏈夊彲鑳藉畠杩樺湪鍒殑鎴块棿鎴栬�呭満鏅綋涓�)
+            var listDelDevice = new List<CommonDevice>();
+            var listDelScene = new List<SceneUI>();
+            this.CheckDeviceAndSceneCanDeleteOnDeleteSome(i_listDevice, i_listScene, ref listDelDevice, ref listDelScene, cloneRoom);
+
+            //鐢熸垚鍒嗕韩Bin鏂囦欢鍐呭(杩欓噷涓嶇敤鍒犻櫎鎴块棿)
+            var binfFileContent = this.CreatShardBinContentOnDelete(new List<Room>(), listDelDevice, listDelScene);
+
+            //涓婁紶bin鏂囦欢
+            var fileKey = this.DoUploadShardContent(i_ChildAccountId, SHARED_BIN_FILE, Encoding.UTF8.GetBytes(binfFileContent));
+            if (fileKey == null)
+            {
+                ProgressBar.Close();
+                return false;
+            }
+            ProgressBar.SetValue(1);
+
+            //璁板綍涓婚敭
+            this.DicShardKeys[SHARED_BIN_FILE] = fileKey;
+            binfFileContent = null;
+
+            //濡傛灉鍏ㄩ儴鎴愬姛浜嗙殑璇�,瑕嗙洊缂撳瓨
+            this.DicDevices.Clear();
+            this.DicScenes.Clear();
+            this.DicRooms.Clear();
+            this.DicFloor.Clear();
+            this.AdjustBinFileContent(binfFileContent);
+
+            //鍒犻櫎宸茬粡涓嶅啀鍒嗕韩鐨勫浘鐗�
+            this.DeleteNotShardPictrue();
+
             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="i_ChildAccountId">鎴愬憳ID</param>
+        /// <param name="i_listRoom">闇�瑕佹暣涓垹闄ょ殑鎴块棿</param>
+        /// <returns></returns>
+        public bool DeleteSharedRoom(string i_ChildAccountId, List<Room> i_listRoom)
+        {
+            //鎵撳紑杩涘害鏉�
+            ProgressBar.Show();
+            //璁剧疆鏈�澶у��
+            ProgressBar.SetMaxValue(1);
+
+            //鑾峰彇鍒犻櫎鎴块棿鐨勫叏閮ㄥ叏閮ㄨ澶囧拰鍦烘櫙
+            var listDevice = new List<CommonDevice>();
+            var listScene = new List<SceneUI>();
+            this.GetDeleteRoomAllDeviceAndScene(i_listRoom, ref listDevice, ref listScene);
+
+            //鍒犻櫎鐨勬埧闂碔D
+            var listDeleteRoom = new List<string>();
+            foreach (var room in i_listRoom)
+            {
+                //鍒ゆ柇鍦烘櫙鍜岃澶囨槸鍚﹁兘鍒犻櫎鏃朵娇鐢�
+                listDeleteRoom.Add(room.Id);
             }
+            //鍦ㄥ垹闄ゆ暣涓埧闂寸殑妯″紡涓�,妫�娴嬭澶囧拰鍦烘櫙鏄惁鑳藉鍒犻櫎(鏈夊彲鑳藉畠杩樺湪鍒殑鎴块棿鎴栬�呭満鏅綋涓�)
+            var listDelDevice = new List<CommonDevice>();
+            var listDelScene = new List<SceneUI>();
+            this.CheckDeviceAndSceneCanDeleteOnDeleteRoom(listDevice, listScene, ref listDelDevice, ref listDelScene, listDeleteRoom);
+
+            //鐢熸垚鍒嗕韩Bin鏂囦欢鍐呭
+            var binfFileContent = this.CreatShardBinContentOnDelete(i_listRoom, listDelDevice, listDelScene);
+
+            //涓婁紶bin鏂囦欢
+            var fileKey = this.DoUploadShardContent(i_ChildAccountId, SHARED_BIN_FILE, Encoding.UTF8.GetBytes(binfFileContent));
+            if (fileKey == null)
+            {
+                ProgressBar.Close();
+                return false;
+            }
+            ProgressBar.SetValue(1);
+
+            //璁板綍涓婚敭
+            this.DicShardKeys[SHARED_BIN_FILE] = fileKey;
+            binfFileContent = null;
+
+            //濡傛灉鍏ㄩ儴鎴愬姛浜嗙殑璇�,瑕嗙洊缂撳瓨
+            this.DicDevices.Clear();
+            this.DicScenes.Clear();
+            this.DicRooms.Clear();
+            this.DicFloor.Clear();
+            this.AdjustBinFileContent(binfFileContent);
+
+            //鍒犻櫎宸茬粡涓嶅啀鍒嗕韩鐨勫浘鐗�
+            this.DeleteNotShardPictrue();
+
+            ProgressBar.Close();
+
             return true;
         }
 
         /// <summary>
         /// 鎵ц绉婚櫎鍒嗕韩鏁版嵁
         /// </summary>
-        /// <param name="memberShardInfo">鎴愬憳鐨勫垎浜唴瀹�</param>
         /// <param name="listDelFile">鍒犻櫎鐨勬枃浠�</param>
+        /// <param name="mode">澶辫触鏃舵槸鍚︽樉绀簍ip娑堟伅</param>
         /// <returns></returns>
-        private bool DoDeleteSharedContent(MemberShardInfoData memberShardInfo, List<string> listDelFile)
+        private bool DoDeleteSharedContent(List<string> listDelFile, ShowNetCodeMode mode = ShowNetCodeMode.YES)
         {
             if (listDelFile.Count == 0)
             {
@@ -1386,232 +1106,645 @@
             }
             foreach (var fileName in listDelFile)
             {
-                if (memberShardInfo.dicAllShardKeys.ContainsKey(fileName) == false)
+                if (this.DicShardKeys.ContainsKey(fileName) == false)
                 {
                     //鎴戜篃涓嶇煡閬撲负浠�涔堜細鎵句笉鍒颁富閿�
                     continue;
                 }
-                var pra = new { homeId = Config.Instance.Home.Id, homeShareId = memberShardInfo.dicAllShardKeys[fileName] };
+                var pra = new { homeId = Config.Instance.Home.Id, homeShareId = this.DicShardKeys[fileName] };
                 //鎵ц鍒犻櫎
-                var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("home-wisdom/home/share/delete", RestSharp.Method.POST, pra, null, null, CheckMode.A璐﹀彿鏉冮檺);
+                var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("home-wisdom/app/home/share/delete", RestSharp.Method.POST, pra, null, null, CheckMode.A璐﹀彿鏉冮檺);
                 //妫�娴嬬姸鎬佺爜
-                if (HdlCheckLogic.Current.CheckNetCode(result, ShowNetCodeMode.YES) == false)
+                if (HdlCheckLogic.Current.CheckNetCode(result, mode) == false)
                 {
                     return false;
                 }
-            }
-            for (int i = 0; i < listDelFile.Count; i++)
-            {
-                string fileName = listDelFile[i];
-                memberShardInfo.dicAllShardKeys.Remove(fileName);
-
-                this.DeleteShardFile(fileName);
+                //绉婚櫎缂撳瓨
+                this.DicShardKeys.Remove(fileName);
             }
             return true;
         }
 
         #endregion
 
-        #region 鈻� 涓婁紶鎴块棿瀵硅薄_______________________
+        #region 鈻� 鍒犻櫎鍒嗕韩鍐呭杈呭姪鏂规硶_______________
 
         /// <summary>
-        /// 涓婁紶鎴块棿瀵硅薄
+        /// 鑾峰彇鍒犻櫎鎴块棿鐨勫叏閮ㄥ叏閮ㄨ澶囧拰鍦烘櫙
         /// </summary>
-        /// <param name="memberShardInfo">鎴愬憳鐨勫叡浜唴瀹�</param>
-        /// <param name="upDateRoom">闇�瑕佷笂浼犲埌浜戠鐨勬埧闂村璞�</param>
-        /// <returns></returns>
-        private bool DoUploadRoomObject(MemberShardInfoData memberShardInfo, Common.Room upDateRoom)
+        /// <param name="i_listRoom">鍒犻櫎鐨勬埧闂�</param>
+        /// <param name="listDevice">鍏ㄩ儴璁惧(杩斿洖鍊�)</param>
+        /// <param name="listScene">鍏ㄩ儴鍦烘櫙(杩斿洖鍊�)</param>
+        private void GetDeleteRoomAllDeviceAndScene(List<Room> i_listRoom, ref List<CommonDevice> listDevice, ref List<SceneUI> listScene)
         {
-            if (upDateRoom.Id == "Other")
+            var listCheck = new HashSet<string>();
+            foreach (var room in i_listRoom)
             {
-                return true;
-            }
-            var data = Newtonsoft.Json.JsonConvert.SerializeObject(upDateRoom);
-            var byteData = System.Text.Encoding.UTF8.GetBytes(data);
-            //涓婁紶鍐呭
-            var shardId = this.DoUploadShardContent(memberShardInfo.ChildAccountId, upDateRoom.FileName, byteData);
-            if (shardId == null)
-            {
-                return false;
-            }
-            //灏嗘埧闂村璞″簭鍒楀寲鍒扮紦瀛�
-            this.AddShardFile(upDateRoom);
+                //鑾峰彇璁惧
+                foreach (var mainkey in room.ListDevice)
+                {
+                    if (listCheck.Contains(mainkey) == true) { continue; }
+                    listCheck.Add(mainkey);
 
-            return true;
+                    //鍒嗕韩鏁版嵁閲岄潰鏈夋墠娣诲姞
+                    if (this.DicDevices.ContainsKey(mainkey) == true)
+                    {
+                        listDevice.Add(this.DicDevices[mainkey]);
+                    }
+                }
+                //鐒跺悗鍐嶈幏鍙栧満鏅�
+                foreach (var sceneId in room.ListSceneId)
+                {
+                    if (listCheck.Contains(sceneId.ToString()) == true) { continue; }
+                    listCheck.Add(sceneId.ToString());
+
+                    //鍒嗕韩鏁版嵁閲岄潰鏈夋墠娣诲姞
+                    if (this.DicScenes.ContainsKey(sceneId) == true)
+                    {
+                        var sceneTemp = this.DicScenes[sceneId];
+                        listScene.Add(sceneTemp);
+
+                        //鑾峰彇鍦烘櫙閲岄潰宓屽鐨勫瓙璁惧鍜屽瓙鍦烘櫙
+                        this.GetSceneAdjustTargetListFromShard(sceneTemp, listCheck, listScene, listDevice);
+                    }
+                }
+            }
         }
 
-        #endregion
-
-        #region 鈻� 涓婁紶妤煎眰瀵硅薄_______________________
-
         /// <summary>
-        /// 涓婁紶妤煎眰瀵硅薄
+        /// 鍦ㄥ垹闄ゆ暣涓埧闂寸殑妯″紡涓�,妫�娴嬭澶囧拰鍦烘櫙鏄惁鑳藉鍒犻櫎(鏈夊彲鑳藉畠杩樺湪鍒殑鎴块棿鎴栬�呭満鏅綋涓�)
         /// </summary>
-        /// <param name="memberShardInfo">鎴愬憳鐨勫叡浜唴瀹�</param>
-        /// <returns></returns>
-        private bool DoUploadFloorObject(MemberShardInfoData memberShardInfo)
+        /// <param name="i_listDevice">鐞嗚涓婅鍒犻櫎鐨勮澶�</param>
+        /// <param name="i_listScene">鐞嗚涓婅鍒犻櫎鐨勫満鏅�</param>
+        /// <param name="listDeleteDevice">鐪熷疄鑳藉鍒犻櫎鐨勮澶�(杩斿洖鍊�)</param>
+        /// <param name="listDeleteScene">鐪熷疄鑳藉鍒犻櫎鐨勫満鏅�(杩斿洖鍊�)</param>
+        /// <param name="i_listDelleteRoom">鍒犻櫎鐨勬埧闂�</param>
+        private void CheckDeviceAndSceneCanDeleteOnDeleteRoom(List<CommonDevice> i_listDevice, List<SceneUI> i_listScene,
+            ref List<CommonDevice> listDeleteDevice, ref List<SceneUI> listDeleteScene, List<string> i_listNotCheckRoom)
         {
-            var data = Newtonsoft.Json.JsonConvert.SerializeObject(memberShardInfo.dicShardFloor);
-            var byteData = System.Text.Encoding.UTF8.GetBytes(data);
-            //涓婁紶鍐呭
-            var shardId = this.DoUploadShardContent(memberShardInfo.ChildAccountId, HdlFileNameResourse.ShardFloorFile, byteData);
-            if (shardId == null)
+            //娉ㄦ剰锛氳繖涓嚱鏁板拰涓嬮潰鐨凜heckDeviceAndSceneCanDeleteOnDeleteSome鏈夋湰璐ㄥ尯鍒�
+            //杩欎釜鍙槸瀹屽叏鍒犻櫎涓�涓埧闂村唴鐨勮澶囨垨鑰呭満鏅�,鍥犳鍙渶瑕佸幓鍒ゆ柇鍒犻櫎浠ュ鐨勫氨鍙互浜�
+
+            //鑾峰彇鐞嗚涓婇渶瑕佸垹闄ょ殑鍦烘櫙ID
+            var listSceneId = new List<int>();
+            foreach (var scene in i_listScene)
             {
-                return false;
+                listSceneId.Add(scene.Id);
+            }
+            var listShardDevice = new HashSet<string>();
+            var listShardScene = new HashSet<int>();
+            //鑾峰彇闄や簡鐞嗚涓婇渶瑕佸垹闄ょ殑鍦烘櫙涔嬪锛岀洰鍓嶈繕鍒嗕韩鐨勫満鏅殑鎵ц鐩爣閲岄潰鐨勮澶�
+            foreach (var scene in this.DicScenes.Values)
+            {
+                //杩欎釜鏄鍒犻櫎鐨勫満鏅�
+                if (listSceneId.Contains(scene.Id) == true) { continue; }
+
+                foreach (var data in scene.AdjustTargetList)
+                {
+                    //璁惧
+                    if (data.Type == 0)
+                    {
+                        var mainkey = HdlDeviceCommonLogic.Current.GetDeviceMainKeys(data.DeviceAddr, data.Epoint);
+                        if (listShardDevice.Contains(mainkey) == false)
+                        {
+                            listShardDevice.Add(mainkey);
+                        }
+                    }
+                    //瀛愬満鏅�
+                    else if (data.Type == 1)
+                    {
+                        if (listShardScene.Contains(data.ElseScenesId) == false)
+                        {
+                            listShardScene.Add(data.ElseScenesId);
+                        }
+                    }
+                }
+            }
+            //鑾峰彇闄や簡鐞嗚涓婇渶瑕佸垹闄ょ殑鎴块棿涔嬪锛岀洰鍓嶈繕鍒嗕韩鐨勮澶�
+            foreach (var room in this.DicRooms.Values)
+            {
+                //杩欎釜鏄鍒犻櫎鐨勬埧闂�
+                if (i_listNotCheckRoom.Contains(room.Id) == true) { continue; }
+
+                foreach (var mainkey in room.ListDevice)
+                {
+                    if (listShardDevice.Contains(mainkey) == false)
+                    {
+                        listShardDevice.Add(mainkey);
+                    }
+                }
+                foreach (var sceneId in room.ListSceneId)
+                {
+                    if (listShardScene.Contains(sceneId) == false)
+                    {
+                        listShardScene.Add(sceneId);
+                    }
+                }
             }
 
-            //灏嗘埧闂村璞″簭鍒楀寲鍒扮紦瀛�
-            this.AddShardFile(memberShardInfo.dicShardFloor);
-
-            return true;
+            //鍒ゆ柇瀹為檯鑳藉鍒犻櫎鐨勮澶�
+            foreach (var device in i_listDevice)
+            {
+                var mainkey = HdlDeviceCommonLogic.Current.GetDeviceMainKeys(device);
+                if (listShardDevice.Contains(mainkey) == false)
+                {
+                    //杩欎釜璁惧宸茬粡涓嶅湪鍒嗕韩
+                    listDeleteDevice.Add(device);
+                }
+            }
+            //鍒ゆ柇瀹為檯鑳藉鍒犻櫎鐨勫満鏅�
+            foreach (var scene in i_listScene)
+            {
+                if (listShardScene.Contains(scene.Id) == false)
+                {
+                    //杩欎釜鍦烘櫙宸茬粡涓嶅湪鍒嗕韩
+                    listDeleteScene.Add(scene);
+                }
+            }
         }
 
-        #endregion
+        /// <summary>
+        /// 鍦ㄥ垹闄や竴涓埧闂翠腑鐨勪竴浜涜澶囩殑妯″紡涓�,妫�娴嬭澶囧拰鍦烘櫙鏄惁鑳藉鍒犻櫎(鏈夊彲鑳藉畠杩樺湪鍒殑鎴块棿鎴栬�呭満鏅綋涓�)
+        /// </summary>
+        /// <param name="i_listDevice">鐞嗚涓婅鍒犻櫎鐨勮澶�</param>
+        /// <param name="i_listScene">鐞嗚涓婅鍒犻櫎鐨勫満鏅�</param>
+        /// <param name="listDeleteDevice">鐪熷疄鑳藉鍒犻櫎鐨勮澶�(杩斿洖鍊�)</param>
+        /// <param name="listDeleteScene">鐪熷疄鑳藉鍒犻櫎鐨勫満鏅�(杩斿洖鍊�)</param>
+        /// <param name="i_nowCloneRoom">褰撳墠鎴块棿(鍏嬮殕)</param>
+        private void CheckDeviceAndSceneCanDeleteOnDeleteSome(List<CommonDevice> i_listDevice, List<SceneUI> i_listScene,
+            ref List<CommonDevice> listDeleteDevice, ref List<SceneUI> listDeleteScene, Room i_nowCloneRoom)
+        {
+            //娉ㄦ剰锛氳繖涓嚱鏁板拰涓婇潰鐨凜heckDeviceAndSceneCanDeleteOnDeleteRoom鏈夋湰璐ㄥ尯鍒�
+            //杩欎釜鍙槸鍒犻櫎涓�涓埧闂村唴鐨勯儴鍒嗚澶囨垨鑰呭満鏅�,鍥犳瀹冩湁鍙兘鑷韩灏卞祵濂楃潃瑕佸垹闄ょ殑璁惧鎴栬�呭満鏅�
 
-        #region 鈻� 绉婚櫎鍏变韩鐨勪竴鑸柟娉昣________________
+            //鍏堣幏鍙栫洰鍓嶈繕鍦ㄥ垎浜殑璁惧鍜屽満鏅�
+            var listShardDevice = new HashSet<string>();
+            var listShardScene = new HashSet<int>();
+
+            foreach (var roomId in this.DicRooms.Keys)
+            {
+                //濡傛灉鏄綋鍓嶅厠闅嗙殑鎴块棿,鍒欑敤鍏嬮殕鐨勬埧闂存潵澶勭悊,鍏嬮殕鐨勬埧闂村凡缁忔妸鐞嗚涓婅鍒犻櫎鐨勮澶囧拰鍦烘櫙閮藉垹闄や簡
+                var room = i_nowCloneRoom.Id != roomId ? this.DicRooms[roomId] : i_nowCloneRoom;
+                //杩樺湪鍒嗕韩鐨勮澶�
+                foreach (var mainkey in room.ListDevice)
+                {
+                    if (listShardDevice.Contains(mainkey) == false)
+                    {
+                        listShardDevice.Add(mainkey);
+                    }
+                }
+                //杩樺湪鍒嗕韩鐨勫満鏅�
+                foreach (var sceneId in room.ListSceneId)
+                {
+                    if (listShardScene.Contains(sceneId) == false)
+                    {
+                        listShardScene.Add(sceneId);
+                    }
+                    //浠庡満鏅殑鎵ц鐩爣褰撳墠鑾峰彇
+                    if (this.DicScenes.ContainsKey(sceneId) == true)
+                    {
+                        foreach (var data in this.DicScenes[sceneId].AdjustTargetList)
+                        {
+                            //瀛愯澶�
+                            if (data.Type == 0)
+                            {
+                                var mainkey = HdlDeviceCommonLogic.Current.GetDeviceMainKeys(data.DeviceAddr, data.Epoint);
+                                if (listShardDevice.Contains(mainkey) == false)
+                                {
+                                    listShardDevice.Add(mainkey);
+                                }
+                            }
+                            //瀛愬満鏅�
+                            else if (data.Type == 1)
+                            {
+                                if (listShardScene.Contains(data.ElseScenesId) == false)
+                                {
+                                    listShardScene.Add(data.ElseScenesId);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            //鍒ゆ柇瀹為檯鑳藉鍒犻櫎鐨勮澶�
+            foreach (var device in i_listDevice)
+            {
+                var mainkey = HdlDeviceCommonLogic.Current.GetDeviceMainKeys(device);
+                if (listShardDevice.Contains(mainkey) == false)
+                {
+                    //杩欎釜璁惧宸茬粡涓嶅湪鍒嗕韩
+                    listDeleteDevice.Add(device);
+                }
+            }
+            //鍒ゆ柇瀹為檯鑳藉鍒犻櫎鐨勫満鏅�
+            foreach (var scene in i_listScene)
+            {
+                if (listShardScene.Contains(scene.Id) == false)
+                {
+                    //杩欎釜鍦烘櫙宸茬粡涓嶅湪鍒嗕韩
+                    listDeleteScene.Add(scene);
+                }
+            }
+        }
 
         /// <summary>
-        /// 浠庣紦瀛樺瓧鍏镐腑鑾峰彇宸茬粡鍒嗕韩浜嗙殑鍏ㄩ儴璁惧涓婚敭鍜屽満鏅殑ID
+        /// 浠庡垎浜暟鎹噷闈㈣幏鍙栧満鏅噷闈㈢殑鎵ц鐩爣鍒楄〃
         /// </summary>
-        /// <param name="memberShardInfo">鎴愬憳鐨勫垎浜俊鎭�</param>
-        /// <param name="nowRoom">褰撳墠鎴块棿</param>
-        /// <param name="listDeleteDevice">瑕佸垹闄ょ殑璁惧鍒楄〃</param>
-        /// <param name="listDeleteScene">瑕佸垹闄ょ殑鍦烘櫙鍒楄〃</param>
+        /// <param name="scene">鍦烘櫙</param>
+        /// <param name="listCheck">閲嶅妫�娴嬬敤</param>
+        /// <param name="listSceneUI">娣诲姞鍒嗕韩鐨勫満鏅垪琛�</param>
+        /// <param name="listDevice">娣诲姞鍒嗕韩鐨勮澶囧垪琛�</param>
         /// <returns></returns>
-        private HashSet<string> GetAllShardedKeysFromDictionary(MemberShardInfoData memberShardInfo, Common.Room nowRoom,
-            List<CommonDevice> listDeleteDevice, List<Common.SceneUI> listDeleteScene)
+        private void GetSceneAdjustTargetListFromShard(SceneUI scene, HashSet<string> listCheck, List<SceneUI> listSceneUI, List<CommonDevice> listDevice)
         {
-            //鑾峰彇鍏ㄩ儴瑕佸垹闄ょ殑鏂囦欢鍚嶅瓧
-            var dicDeleteDeviceFile = new Dictionary<string, string>();
-            foreach (var device in listDeleteDevice)
-            {
-                dicDeleteDeviceFile[HdlDeviceCommonLogic.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 data in scene.AdjustTargetList)
             {
                 //璁惧
-                foreach (var deviceKeys in roomTemp.ListDevice)
+                if (data.Type == 0)
                 {
-                    if (dicDeleteDeviceFile.ContainsKey(deviceKeys) == true)
+                    string mainKeys = HdlDeviceCommonLogic.Current.GetDeviceMainKeys(data.DeviceAddr, data.Epoint);
+                    if (listCheck.Contains(mainKeys) == true)
                     {
-                        //鍥犱负涓�涓洖璺彧鑳藉垎閰嶄竴涓尯鍩�,鎵�浠ュ彲浠ョ洿鎺ュ垽鏂�
+                        //涓嶉噸澶嶆坊鍔�
                         continue;
                     }
-                    if (listShardKeys.Contains(deviceKeys) == false)
+                    listCheck.Add(mainKeys);
+                    if (this.DicDevices.ContainsKey(mainKeys) == true)
                     {
-                        //杩欎釜鏂囦欢杩樺垎浜潃
-                        listShardKeys.Add(deviceKeys);
+                        listDevice.Add(this.DicDevices[mainKeys]);
                     }
-
                 }
                 //鍦烘櫙
-                foreach (var sceneId in roomTemp.ListSceneId)
+                else if (data.Type == 1)
                 {
-                    if (roomTemp.FileName == nowRoom.FileName)
+                    string mainKeys = data.ElseScenesId.ToString();
+                    if (listCheck.Contains(mainKeys) == true)
                     {
-                        //濡傛灉寰幆鍒颁簡褰撳墠鎴块棿
-                        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);
+                    listCheck.Add(mainKeys);
 
-                    //鑾峰彇鍦烘櫙閲岄潰鐨勫叏閮ㄧ洰鏍�
-                    var listTempKeys = new HashSet<string>();
-                    //浠庡満鏅璞¢噷闈㈣幏鍙栧叏閮ㄧ殑缁戝畾鐩爣鐨勪富閿�(杩欓噷闈㈢殑涓滆タ蹇呴』浠庡垎浜暟鎹腑鑾峰彇)
-                    this.GetSceneBindListKeys(sceneTemp, ref listTempKeys);
+                    //鑾峰彇鍦烘櫙瀵硅薄
+                    if (this.DicScenes.ContainsKey(data.ElseScenesId) == true)
+                    {
+                        var sceneUi = this.DicScenes[data.ElseScenesId];
+                        listSceneUI.Add(sceneUi);
 
-                    if (listShardKeys.Contains(sceneId.ToString()) == false)
-                    {
-                        //鍦烘櫙鑷韩
-                        listShardKeys.Add(sceneId.ToString());
-                    }
-                    foreach (string myKeys2 in listTempKeys)
-                    {
-                        if (listShardKeys.Contains(myKeys2) == false)
-                        {
-                            listShardKeys.Add(myKeys2);
-                        }
+                        //閫掑綊鑾峰彇鎵ц鐩爣
+                        this.GetSceneAdjustTargetListFromShard(sceneUi, listCheck, listSceneUI, listDevice);
                     }
                 }
             }
-            return listShardKeys;
+        }
+
+
+        #endregion
+
+
+        #region 鈻� 鐢熸垚鍒嗕韩Bin鏂囦欢鍐呭________________
+
+        /// <summary>
+        /// 鐢熸垚鍒嗕韩Bin鏂囦欢鍐呭(鏂板妯″紡)
+        /// </summary>
+        /// <param name="i_listNewRoom">鏂扮殑鎴块棿瀵硅薄闆嗗悎(涔熷氨鏄彉鏇翠簡鐨勬埧闂�)</param>
+        /// <param name="i_listDevice">杩欎釜鏄渶瑕佽拷鍔犵殑鍒嗕韩璁惧</param>
+        /// <param name="i_listScene">杩欎釜鏄渶瑕佽拷鍔犵殑鍒嗕韩鍦烘櫙</param>
+        /// <param name="i_listChirdDevice">杩欎釜鏄敱鍦烘櫙鐨勬墽琛岀洰鏍囨潵鐨�</param>
+        /// <param name="i_listChirdScene">杩欎釜鏄敱鍦烘櫙鐨勬墽琛岀洰鏍囨潵鐨�</param>
+        /// <returns></returns>
+        private string CreatShardBinContentOnAdd(List<Room> i_listNewRoom, List<CommonDevice> i_listDevice, List<SceneUI> i_listScene,
+            List<CommonDevice> i_listChirdDevice, List<SceneUI> i_listChirdScene)
+        {
+            string writeText = string.Empty;
+            //鐢熸垚鍐欏叆鏂囦欢鐨勩�愯澶囧璞℃暟鎹��
+            this.CreatWriteCommonDeviceData(i_listDevice, i_listChirdDevice, false, ref writeText);
+
+            //鐢熸垚鍐欏叆鏂囦欢鐨勩�愬満鏅暟鎹��
+            this.CreatWriteSceneData(i_listScene, i_listChirdScene, false, ref writeText);
+
+            //鐢熸垚鍐欏叆鏂囦欢鐨勩�愬満鏅暟鎹��
+            this.CrearWriteRoomData(i_listNewRoom, false, ref writeText);
+
+            return writeText;
         }
 
         /// <summary>
-        /// 浠庡満鏅璞¢噷闈㈣幏鍙栧叏閮ㄧ殑缁戝畾鐩爣鐨勪富閿�(杩欓噷闈㈢殑涓滆タ蹇呴』浠庡垎浜暟鎹腑鑾峰彇)
+        /// 鐢熸垚鍒嗕韩Bin鏂囦欢鍐呭(鍒犻櫎妯″紡)
         /// </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)
+        /// <param name="i_listDelRoom">瑕佸垹闄ょ殑鎴块棿</param>
+        /// <param name="i_listDevice">杩欎釜鏄渶瑕佸垹闄ょ殑鍒嗕韩璁惧</param>
+        /// <param name="i_listScene">杩欎釜鏄渶瑕佸垹闄ょ殑鍒嗕韩鍦烘櫙</param>
+        /// <returns></returns>
+        private string CreatShardBinContentOnDelete(List<Room> i_listDelRoom, List<CommonDevice> i_listDevice, List<SceneUI> i_listScene)
         {
-            foreach (var data in scene.AdjustTargetList)
+            string writeText = string.Empty;
+            //鐢熸垚鍐欏叆鏂囦欢鐨勩�愯澶囧璞℃暟鎹��
+            this.CreatWriteCommonDeviceData(i_listDevice, new List<CommonDevice>(), true, ref writeText);
+
+            //鐢熸垚鍐欏叆鏂囦欢鐨勩�愬満鏅暟鎹��
+            this.CreatWriteSceneData(i_listScene, new List<SceneUI>(), true, ref writeText);
+
+            //鐢熸垚鍐欏叆鏂囦欢鐨勩�愬満鏅暟鎹��
+            this.CrearWriteRoomData(i_listDelRoom, true, ref writeText);
+
+            return writeText;
+        }
+
+        /// <summary>
+        /// 鐢熸垚鍐欏叆鏂囦欢鐨勩�愯澶囧璞℃暟鎹��
+        /// </summary>
+        /// <param name="writeText"></param>
+        private void CreatWriteCommonDeviceData(List<CommonDevice> i_listDevice, List<CommonDevice> i_listChirdDevice, bool i_isDel, ref string writeText)
+        {
+            //鍚堝苟璁惧鍒颁竴涓柊鐨勫璞″綋涓�
+            var dicNewDevice = this.MergeNewShardDevices(i_listDevice, i_listChirdDevice, i_isDel);
+            var listCheck = new HashSet<string>();
+            foreach (var device in dicNewDevice.Values)
             {
-                //璁惧
-                if (data.Type == 0)
+                //璁惧绔偣
+                writeText += "#DeviceInfo START#" + (int)device.Type + "\r\n";
+                string dataInfo = Newtonsoft.Json.JsonConvert.SerializeObject(device);
+                writeText += dataInfo + "\r\n";
+                writeText += "#DeviceInfo END#\r\n\r\n";
+
+                //娣诲姞Ota璁惧瀵硅薄鐨勭紦瀛�
+                if (listCheck.Contains(device.DeviceAddr) == false)
                 {
-                    string mainkey = HdlDeviceCommonLogic.Current.GetDeviceMainKeys(data.DeviceAddr, data.Epoint);
-                    if (dicShardDeviceFile.ContainsKey(mainkey) == true && dicDeviceKeys.ContainsKey(mainkey) == false)
+                    listCheck.Add(device.DeviceAddr);
+                    var otaDevice = HdlDeviceCommonLogic.Current.GetOTADevice(device.DeviceAddr);
+                    if (otaDevice != null)
                     {
-                        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);
+                        writeText += "#DeviceInfo START#" + (int)otaDevice.Type + "\r\n";
+                        string dataInfo2 = Newtonsoft.Json.JsonConvert.SerializeObject(otaDevice);
+                        writeText += dataInfo2 + "\r\n";
+                        writeText += "#DeviceInfo END#\r\n\r\n";
                     }
                 }
             }
         }
 
         /// <summary>
-        /// 浠庡満鏅璞¢噷闈㈣幏鍙栧叏閮ㄧ殑缁戝畾鐩爣鐨勪富閿�(杩欓噷闈㈢殑涓滆タ蹇呴』浠庡垎浜暟鎹腑鑾峰彇)
+        /// 鐢熸垚鍐欏叆鏂囦欢鐨勩�愬満鏅暟鎹��
         /// </summary>
-        /// <param name="scene">鍦烘櫙</param>
-        /// <param name="listKeys">涓婚敭鍒楄〃(璁惧鍜屽満鏅�)</param>
-        private void GetSceneBindListKeys(Common.SceneUI scene, ref HashSet<string> listKeys)
+        /// <param name="i_listScene">杩欎釜鏄渶瑕佽拷鍔犵殑鍒嗕韩鍦烘櫙</param>
+        /// <param name="i_listChirdScene">杩欎釜鏄敱鍦烘櫙鐨勬墽琛岀洰鏍囨潵鐨�</param>
+        /// <param name="writeText"></param>
+        private void CreatWriteSceneData(List<SceneUI> i_listScene, List<SceneUI> i_listChirdScene, bool i_isDel, ref string writeText)
         {
-            foreach (var data in scene.AdjustTargetList)
+            //鍚堝苟鍦烘櫙鍒颁竴涓柊鐨勫璞″綋涓�
+            var dicNewScene = this.MergeNewShardScenes(i_listScene, i_listChirdScene, i_isDel);
+
+            foreach (var scene in dicNewScene.Values)
             {
-                //璁惧
-                if (data.Type == 0)
+                writeText += "#START#\r\n";
+                string dataInfo = Newtonsoft.Json.JsonConvert.SerializeObject(scene);
+                writeText += dataInfo + "\r\n";
+                writeText += "#SceneTemplate END#\r\n\r\n";
+            }
+        }
+
+        /// <summary>
+        /// 鐢熸垚鍐欏叆鏂囦欢鐨勩�愭埧闂存ā鏉挎暟鎹��
+        /// </summary>
+        /// <param name="i_listNewRoom">鏂扮殑鎴块棿瀵硅薄闆嗗悎(涔熷氨鏄彉鏇翠簡鐨勬埧闂�)</param>
+        /// <param name="writeText"></param>
+        private void CrearWriteRoomData(List<Room> i_listNewRoom, bool i_isDel, ref string writeText)
+        {
+            var dicNewFloor = new Dictionary<string, string>();
+            //鍚堝苟鍒嗕韩鐨勬埧闂村埌涓�涓柊鐨勫璞′腑
+            var dicNewRoom = this.MergeNewShardRooms(i_listNewRoom, i_isDel);
+            foreach (var room in dicNewRoom.Values)
+            {
+                writeText += "#START#\r\n";
+                string dataInfo2 = Newtonsoft.Json.JsonConvert.SerializeObject(room);
+                writeText += dataInfo2 + "\r\n";
+                writeText += "#RoomInfo END#\r\n\r\n";
+
+                if (room.FloorId != string.Empty)
                 {
-                    string mainkey = HdlDeviceCommonLogic.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());
-                    }
+                    dicNewFloor[room.FloorId] = HdlResidenceLogic.Current.GetFloorNameById(room.FloorId);
                 }
             }
+            //妤煎眰鏁版嵁
+            writeText += "#START#\r\n";
+            string dataInfo1 = Newtonsoft.Json.JsonConvert.SerializeObject(dicNewFloor);
+            writeText += dataInfo1 + "\r\n";
+            writeText += "#FloorInfo END#\r\n\r\n";
+        }
+
+        #endregion
+
+        #region 鈻� 鐢熸垚鍒嗕韩Bin鏂囦欢鍐呭杈呭姪鏂规硶________
+
+        /// <summary>
+        /// 鍚堝苟鍒嗕韩鐨勮澶囧埌涓�涓柊鐨勫璞′腑
+        /// </summary>
+        /// <param name="i_listDevice">杩欎釜鏄渶瑕佽拷鍔犵殑鍒嗕韩璁惧</param>
+        /// <param name="i_listChirdDevice">杩欎釜鏄敱鍦烘櫙鐨勬墽琛岀洰鏍囨潵鐨�</param>
+        /// <param name="i_isDel">鏄惁鏄垹闄ゅ垎浜ā寮�</param>
+        /// <returns></returns>
+        private Dictionary<string, CommonDevice> MergeNewShardDevices(List<CommonDevice> i_listDevice, List<CommonDevice> i_listChirdDevice, bool i_isDel)
+        {
+            var dicNewDevice = new Dictionary<string, CommonDevice>();
+            //鍏堝悎骞跺師鏉ョ殑
+            foreach (var key in this.DicDevices.Keys)
+            {
+                dicNewDevice[key] = this.DicDevices[key];
+            }
+            //鍐嶅悎骞舵柊娣诲姞鐨�
+            foreach (var device in i_listDevice)
+            {
+                string mainkey = HdlDeviceCommonLogic.Current.GetDeviceMainKeys(device);
+                if (i_isDel == false)
+                {
+                    //鐩存帴瑕嗙洊,娌¢棶棰�
+                    dicNewDevice[mainkey] = device;
+                }
+                else
+                {
+                    //鍒犻櫎妯″紡
+                    dicNewDevice.Remove(mainkey);
+                }
+            }
+            foreach (var device in i_listChirdDevice)
+            {
+                string mainkey = HdlDeviceCommonLogic.Current.GetDeviceMainKeys(device);
+                //鐩存帴瑕嗙洊,娌¢棶棰�
+                dicNewDevice[mainkey] = device;
+            }
+            return dicNewDevice;
+        }
+
+        /// <summary>
+        /// 鍚堝苟鍒嗕韩鐨勫満鏅埌涓�涓柊鐨勫璞′腑
+        /// </summary>
+        /// <param name="i_listScene">杩欎釜鏄渶瑕佽拷鍔犵殑鍒嗕韩鍦烘櫙</param>
+        /// <param name="i_listChirdScene">杩欎釜鏄敱鍦烘櫙鐨勬墽琛岀洰鏍囨潵鐨�</param>
+        /// <param name="i_isDel">鏄惁鏄垹闄ゅ垎浜ā寮�</param>
+        /// <returns></returns>
+        private Dictionary<int, SceneUI> MergeNewShardScenes(List<SceneUI> i_listScene, List<SceneUI> i_listChirdScene, bool i_isDel)
+        {
+            var dicNewScene = new Dictionary<int, SceneUI>();
+            //鍏堝悎骞跺師鏉ョ殑
+            foreach (var key in this.DicScenes.Keys)
+            {
+                dicNewScene[key] = this.DicScenes[key];
+            }
+            //鍐嶅悎骞舵柊娣诲姞鐨�
+            foreach (var scene in i_listScene)
+            {
+                if (i_isDel == false)
+                {
+                    //鐩存帴瑕嗙洊,娌¢棶棰�
+                    dicNewScene[scene.Id] = scene;
+                }
+                else
+                {
+                    //鍒犻櫎妯″紡
+                    dicNewScene.Remove(scene.Id);
+                }
+            }
+            foreach (var scene in i_listChirdScene)
+            {
+                //鐩存帴瑕嗙洊,娌¢棶棰�
+                dicNewScene[scene.Id] = scene;
+            }
+            return dicNewScene;
+        }
+
+        /// <summary>
+        /// 鍚堝苟鍒嗕韩鐨勬埧闂村埌涓�涓柊鐨勫璞′腑
+        /// </summary>
+        /// <param name="i_listNewRoom">鏂扮殑鎴块棿瀵硅薄闆嗗悎(涔熷氨鏄彉鏇翠簡鐨勬埧闂�)</param>
+        /// <param name="i_isDel">鏄惁鏄垹闄ゅ垎浜ā寮�</param>
+        /// <returns></returns>
+        private Dictionary<string, Room> MergeNewShardRooms(List<Room> i_listNewRoom, bool i_isDel)
+        {
+            var dicNewRoom = new Dictionary<string, Room>();
+            //鍏堝悎骞跺師鏉ョ殑
+            foreach (var key in this.DicRooms.Keys)
+            {
+                dicNewRoom[key] = this.DicRooms[key];
+            }
+            //鍐嶅悎骞舵柊娣诲姞鐨�
+            foreach (var room in i_listNewRoom)
+            {
+                if (i_isDel == false)
+                {
+                    //鐩存帴瑕嗙洊,娌¢棶棰�
+                    dicNewRoom[room.Id] = room;
+                }
+                else
+                {
+                    //鍒犻櫎妯″紡
+                    dicNewRoom.Remove(room.Id);
+                }
+            }
+            return dicNewRoom;
+        }
+
+        #endregion
+
+
+        #region 鈻� 鑾峰彇鍒嗕韩缂撳瓨鏂规硶___________________
+
+        /// <summary>
+        /// 浠庣紦瀛樺綋涓幏鍙栧垎浜殑璁惧
+        /// </summary>
+        /// <param name="i_deviceKey">璁惧鐨勪富閿�</param>
+        /// <returns></returns>
+        public CommonDevice GetShardDeviceFromMemory(string i_deviceKey)
+        {
+            if (this.DicDevices.ContainsKey(i_deviceKey) == true)
+            {
+                return this.DicDevices[i_deviceKey];
+            }
+            return null;
+        }
+
+        /// <summary>
+        /// 浠庣紦瀛樺綋涓幏鍙栧垎浜殑鍦烘櫙
+        /// </summary>
+        /// <param name="i_sceneId">鍦烘櫙ID</param>
+        /// <returns></returns>
+        public SceneUI GetShardSceneFromMemory(int i_sceneId)
+        {
+            if (this.DicScenes.ContainsKey(i_sceneId) == true)
+            {
+                return this.DicScenes[i_sceneId];
+            }
+            return null;
+        }
+
+        /// <summary>
+        /// 浠庣紦瀛樺綋涓幏鍙栧垎浜殑鎴块棿
+        /// </summary>
+        /// <returns></returns>
+        public Dictionary<string, Room> GetShardRoomFromMemory()
+        {
+            return this.DicRooms;
+        }
+
+        /// <summary>
+        /// 浠庣紦瀛樺綋涓幏鍙栧垎浜殑鎴块棿
+        /// </summary>
+        /// <param name="i_roomId">鎴块棿ID</param>
+        /// <returns></returns>
+        public Room GetShardRoomFromMemory(string i_roomId)
+        {
+            if (this.DicRooms.ContainsKey(i_roomId) == true)
+            {
+                return this.DicRooms[i_roomId];
+            }
+            return null;
+        }
+
+        /// <summary>
+        /// 浠庣紦瀛樺綋涓幏鍙栧垎浜殑妤煎眰
+        /// </summary>
+        /// <returns></returns>
+        public Dictionary<string, string> GetShardFloorFormMemory()
+        {
+            return this.DicFloor;
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 鑾峰彇鍒嗕韩鏂囦欢鐨勫唴瀹�
+        /// </summary>
+        /// <param name="fileName">鏂囦欢鍚嶇О(涓嶆槸鍏ㄨ矾寰�)</param>
+        /// <returns></returns>
+        private byte[] GetShardFileContent(string fileName)
+        {
+            string fullName = System.IO.Path.Combine(HdlFileNameResourse.DownLoadShardDirectory, fileName);
+            if (System.IO.File.Exists(fullName) == false)
+            {
+                return null;
+            }
+            var varByte = HdlFileLogic.Current.ReadFileByteContent(fullName);
+            return varByte;
+        }
+
+        /// <summary>
+        /// 娓呯┖鍏变韩缂撳瓨
+        /// </summary>
+        public void Dispone()
+        {
+            this.DicDevices = null;
+            this.DicScenes.Clear();
+            this.DicRooms.Clear();
+            this.DicShardKeys.Clear();
+            this.DicFloor.Clear();
+
+            //娓呯┖鏂囦欢澶�
+            string strDir = HdlFileNameResourse.DownLoadShardDirectory;
+            HdlFileLogic.Current.CreateDirectory(strDir, true);
+
+            m_Current = null;
         }
 
         #endregion

--
Gitblit v1.8.0