From 48ba446936b51fffafa7c3600c0dadc6ac0e8c20 Mon Sep 17 00:00:00 2001
From: 陈嘉乐 <cjl@hdlchina.com.cn>
Date: 星期五, 10 七月 2020 10:52:13 +0800
Subject: [PATCH] 2020-07-10-01

---
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlShardLogic.cs |  483 +++++++++++++++++++++++++++++------------------------
 1 files changed, 262 insertions(+), 221 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlShardLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlShardLogic.cs
index b9e473b..4244dad 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlShardLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlShardLogic.cs
@@ -67,18 +67,18 @@
 
             //涓嶅厑璁告寜绯荤粺鐨勮繑鍥為敭
             Shared.Common.CommonPage.BackKeyCanClick = false;
-            UserCenterResourse.Option.AppCanSignout = false;
+            UserCenterResourse.AccountOption.AppCanSignout = false;
 
             for (int i = 0; i < listDistributedMark.Count; i++)
             {
                 string keys = listDistributedMark[i];
-                var dataPra = new { DistributedMark = keys, HouseDistributedMark = Common.Config.Instance.Home.Id, IsOtherAccountControl = Common.Config.Instance.isAdministrator };
+                var dataPra = new { DistributedMark = keys, HouseDistributedMark = Common.Config.Instance.Home.Id, IsOtherAccountControl = Common.Config.Instance.Home.IsOthreShare };
                 var result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeDataShare/GetOneShareData", false, dataPra);
                 if (result == null)
                 {
                     //鍏佽鎸夌郴缁熺殑杩斿洖閿�
                     Shared.Common.CommonPage.BackKeyCanClick = true;
-                    UserCenterResourse.Option.AppCanSignout = true;
+                    UserCenterResourse.AccountOption.AppCanSignout = true;
                     return null;
                 }
                 var dataResult = Newtonsoft.Json.JsonConvert.DeserializeObject<GetShardInfoResult>(result);
@@ -92,7 +92,7 @@
 
             //鍏佽鎸夌郴缁熺殑杩斿洖閿�
             Shared.Common.CommonPage.BackKeyCanClick = true;
-            UserCenterResourse.Option.AppCanSignout = true;
+            UserCenterResourse.AccountOption.AppCanSignout = true;
 
             return listFile;
         }
@@ -248,7 +248,7 @@
             }
 
             //鑾峰彇涓讳汉鍒嗕韩缁欐垚鍛樼殑鏂囦欢鍒楄〃
-            var infoPra = new { DistributedMark = Config.Instance.Guid, HouseDistributedMark = Common.Config.Instance.Home.Id, IsOtherAccountControl = Common.Config.Instance.isAdministrator };
+            var infoPra = new { DistributedMark = Config.Instance.Guid, HouseDistributedMark = Common.Config.Instance.Home.Id, IsOtherAccountControl = Common.Config.Instance.Home.IsOthreShare };
             var listNotShow = new List<string>() { "NotSetAgain" };
             var result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeDataShare/GetShareDataBySubAccount", false, infoPra, listNotShow);
             if (string.IsNullOrEmpty(result) == true)
@@ -309,7 +309,7 @@
                     if (fileName.StartsWith("Room_") == true)
                     {
                         //鎴块棿鏂囦欢鐗规畩澶勭悊
-                        Config.Instance.Home.AddRoomListFilePath(fileName);
+                        Config.Instance.Home.AddRoomId(fileName.Replace("Room_", string.Empty).Replace(".json", string.Empty));
                     }
                 }
                 //娓呯┖鍏变韩鏂囦欢澶�
@@ -348,7 +348,7 @@
             {
                 listShardFile = new HashSet<string>();
                 //鑾峰彇涓讳汉鍒嗕韩缁欐垚鍛樼殑鏂囦欢鍒楄〃
-                var infoPra = new { DistributedMark = Config.Instance.Guid, HouseDistributedMark = Common.Config.Instance.Home.Id, IsOtherAccountControl = Common.Config.Instance.isAdministrator };
+                var infoPra = new { DistributedMark = Config.Instance.Guid, HouseDistributedMark = Common.Config.Instance.Home.Id, IsOtherAccountControl = Common.Config.Instance.Home.IsOthreShare };
                 var listNotShow = new List<string>() { "NotSetAgain" };
                 var result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeDataShare/GetShareDataBySubAccount", false, infoPra, listNotShow);
                 if (string.IsNullOrEmpty(result) == true)
@@ -365,6 +365,8 @@
                 }
             }
 
+            //娓呯┖妤煎眰鏁版嵁
+            Common.Config.Instance.Home.FloorDics.Clear();
             //鐒跺悗妫�娴嬫湰鍦扮殑鏂囦欢
             var listLocalFile = Global.FileListByHomeId();
             foreach (string fileName in listLocalFile)
@@ -375,8 +377,7 @@
                     var varData = Global.ReadFileByHomeId(fileName);
                     var dicFloor = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(Encoding.UTF8.GetString(varData));
                     Common.Config.Instance.Home.FloorDics = dicFloor;
-                    Common.Config.Instance.Home.Save(false);
-
+                    //鏆傛椂涓嶄繚瀛�,鐣欏湪鏈�鍚庨潰鎵嶄繚瀛�
                     Global.DeleteFilebyHomeId(fileName);
                 }
 
@@ -407,10 +408,8 @@
                     //鍒犻櫎鎺夎繖涓埧闂存枃浠�
                     Global.DeleteFilebyHomeId(fileName);
                     dicUpdateTime.Remove(fileName);
-                    if (Config.Instance.Home.RoomFilePathList.Contains(fileName) == true)
-                    {
-                        Config.Instance.Home.RemoveRoomListFilePath(fileName);
-                    }
+
+                    Config.Instance.Home.RemoveRoomId(nowRoom.Id);
                 }
                 //妫�娴嬫湰鍦板満鏅枃浠�,鏄惁瀛樺湪宸茬粡鍙栨秷浜嗗叡浜簡鐨�
                 else if (fileName.StartsWith("Scene_") == true)
@@ -427,6 +426,10 @@
                     dicUpdateTime.Remove(fileName);
                 }
             }
+
+            //淇濆瓨妤煎眰鏁版嵁
+            Common.Config.Instance.Home.Save(false);
+
             //缃戝叧鏂囦欢闈炲悎娉曟�ф槸鍒锋柊璁惧鍒楄〃鐨勫嚱鏁伴噷闈㈠疄鐜�
 
             //淇濆瓨鍏ㄩ儴鍒嗕韩鏂囦欢鐨勬洿鏂版棩鏈�
@@ -448,7 +451,7 @@
         private Dictionary<string, string> GetAllShardFileAgoUpdateTime()
         {
             var dicTime = new Dictionary<string, string>();
-            var data = Global.ReadFileByDirectory(DirNameResourse.LocalMemoryDirectory, DirNameResourse.ShardFileUpdateFile);
+            var data = Global.ReadFileByDirectory(DirNameResourse.LocalMemoryDirectory, DirNameResourse.ShardFileUpdateTimeFile);
             if (data == null)
             {
                 //鐩爣鏂囦欢涓嶅瓨鍦�
@@ -466,7 +469,7 @@
         {
             var data = Newtonsoft.Json.JsonConvert.SerializeObject(dicTime);
             var byteData = System.Text.Encoding.UTF8.GetBytes(data);
-            Global.WriteFileToDirectoryByBytes(DirNameResourse.LocalMemoryDirectory, DirNameResourse.ShardFileUpdateFile, byteData);
+            Global.WriteFileToDirectoryByBytes(DirNameResourse.LocalMemoryDirectory, DirNameResourse.ShardFileUpdateTimeFile, byteData);
         }
 
         #endregion
@@ -478,7 +481,6 @@
         /// <summary>
         /// 鑾峰彇鎴愬憳鍏变韩鍒楄〃鐒跺悗淇濆瓨鍒版湰鍦�(鐢ㄥ畬涔嬪悗鏈�濂借皟鐢ㄦ竻绌� ClearShardDirectory鍑芥暟娓呯┖)
         /// </summary>
-        /// <param name="SubAccountDistributedMark">鎴愬憳鍒楄〃鎺ュ彛杩斿洖鐨凷ubAccountDistributedMark</param>
         /// <param name="memberShardInfo">
         /// <para>鎴愬憳鐨勫垎浜暟鎹�</para>
         /// <para>濡傛灉涓嶇煡閬撹繖鏄粈涔堜笢瑗�,灏盢ew涓�涓�,鐒跺悗缂撳瓨璧锋潵,璋冪敤鍏朵粬鍑芥暟閮介渶瑕佽繖涓笢瑗�</para>
@@ -495,20 +497,21 @@
             }
             memberShardInfo.Refresh = false;
 
-            //鎵撳紑杩涘害鏉�
-            ProgressBar.Show();
+            //姝e湪鑾峰彇鍒嗕韩鏁版嵁
+            ProgressFormBar.Current.Start();
+            ProgressFormBar.Current.SetMsg(Language.StringByID(R.MyInternationalizationString.uShardContentGetting));
 
             var infoPra = new
             {
                 DistributedMark = memberShardInfo.SubAccountDistributedMark,
                 HouseDistributedMark = Shared.Common.Config.Instance.HomeId,
-                IsOtherAccountControl = Common.Config.Instance.isAdministrator
+                IsOtherAccountControl = Common.Config.Instance.Home.IsOthreShare
             };
             var result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeDataShare/GetShareDataBySubAccount", false, infoPra);
             if (result == null)
             {
                 //鍏抽棴杩涘害鏉�
-                ProgressBar.Close();
+                ProgressFormBar.Current.Close();
                 return false;
             }
             var listData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<ReceiveShardInfoResult>>(result);
@@ -543,7 +546,7 @@
             if (listFile == null)
             {
                 //鍏抽棴杩涘害鏉�
-                ProgressBar.Close();
+                ProgressFormBar.Current.Close();
                 return false;
             }
 
@@ -551,7 +554,7 @@
             this.GetMemberShardContentListFromLocal(memberShardInfo);
 
             //鍏抽棴杩涘害鏉�
-            ProgressBar.Close();
+            ProgressFormBar.Current.Close();
 
             return true;
         }
@@ -565,90 +568,99 @@
             memberShardInfo.dicShardRoom = new Dictionary<string, Common.Room>();
             this.dicShardDeviceFile.Clear();
 
-            var listDeviceFile = new HashSet<string>();
-            var listSceneFile = new HashSet<string>();
+            //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)
             {
-                if (fileName.StartsWith("Room_") == true)
+                try
                 {
-                    //鎴块棿鏂囦欢
-                    var byteData = this.GetShardFileContent(fileName);
-                    if (byteData != null)
+                    if (fileName.StartsWith("Room_") == true)
                     {
-                        string valueData = System.Text.Encoding.UTF8.GetString(byteData);
-                        var roomTemp = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.Room>(valueData);
-                        memberShardInfo.dicShardRoom[fileName] = roomTemp;
+                        //鎴块棿鏂囦欢
+                        var byteData = this.GetShardFileContent(fileName);
+                        if (byteData != null)
+                        {
+                            string valueData = System.Text.Encoding.UTF8.GetString(byteData);
+                            var roomTemp = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.Room>(valueData);
+                            memberShardInfo.dicShardRoom[fileName] = roomTemp;
+                        }
                     }
-                }
-                else if (fileName == DirNameResourse.ShardFloorFile)
-                {
-                    //妤煎眰鏂囦欢
-                    var byteData = this.GetShardFileContent(fileName);
-                    if (byteData != null)
+                    else if (fileName == DirNameResourse.ShardFloorFile)
                     {
-                        string valueData = System.Text.Encoding.UTF8.GetString(byteData);
-                        memberShardInfo.dicShardFloor = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(valueData);
+                        //妤煎眰鏂囦欢
+                        var byteData = this.GetShardFileContent(fileName);
+                        if (byteData != null)
+                        {
+                            string valueData = System.Text.Encoding.UTF8.GetString(byteData);
+                            memberShardInfo.dicShardFloor = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(valueData);
+                        }
                     }
-                }
-                else if (fileName.StartsWith("Device_") == true)
-                {
-                    string[] Arry = fileName.Split(new string[] { "_" }, StringSplitOptions.RemoveEmptyEntries);
-                    string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(Arry[2], Convert.ToInt32(Arry[3]));
-                    this.dicShardDeviceFile[mainKeys] = fileName;
+                    else if (fileName.StartsWith("Device_") == true)
+                    {
+                        string[] Arry = fileName.Split(new string[] { "_" }, StringSplitOptions.RemoveEmptyEntries);
+                        string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(Arry[2], Convert.ToInt32(Arry[3]));
+                        this.dicShardDeviceFile[mainKeys] = fileName;
 
-                    //璁惧鏂囦欢
-                    listDeviceFile.Add(fileName);
+                        //璁惧鏂囦欢
+                        dicDeviceFile[mainKeys] = fileName;
+                    }
+                    else if (fileName.StartsWith("Scene_") == true)
+                    {
+                        //鍦烘櫙鏂囦欢
+                        dicSceneFile[(Convert.ToInt32(fileName.Replace("Scene_", string.Empty).Replace(".json", string.Empty)))] = fileName;
+                    }
                 }
-                else if (fileName.StartsWith("Scene_") == true)
-                {
-                    //鍦烘櫙鏂囦欢
-                    listSceneFile.Add(fileName);
-                }
+                catch (Exception ex) { HdlLogLogic.Current.WriteLog(ex); }
             }
 
-            //璁剧疆鎴块棿閲岄潰璁惧鐨刄I瀵硅薄(鍥犱负杩欎釜涓滆タ鏄弽搴忓垪鍖栧嚭鏉ョ殑,璁惧UI瀵硅薄鏄笉搴忓垪鍖栧璞�)
+            //妫�鏌ヨ澶囩殑鍖归厤鎯呭喌
             foreach (var tempRoom in memberShardInfo.dicShardRoom.Values)
             {
-                //杩樺師璁惧瀵硅薄
-                tempRoom.DeviceUIList.Clear();
-                for (int i = 0; i < tempRoom.DeviceUIFilePathList.Count; i++)
+                //妫�鏌ヨ澶�
+                for (int i = 0; i < tempRoom.ListDevice.Count; i++)
                 {
-                    string deviceFile = tempRoom.DeviceUIFilePathList[i];
-                    //杩欎釜璁惧鏂囦欢鍖归厤寰楀埌鎴块棿
-                    listDeviceFile.Remove(deviceFile);
-                    if (this.IsFileExists(deviceFile) == false)
+                    string deviceKeys = tempRoom.ListDevice[i];
+                    if (dicDeviceFile.ContainsKey(deviceKeys) == false)
                     {
                         //绉婚櫎鎺夎繖涓笉瀵瑰姴鐨勮矾寰�
-                        tempRoom.DeviceUIFilePathList.RemoveAt(i);
+                        tempRoom.ListDevice.RemoveAt(i);
                         i--;
                         continue;
                     }
-                    tempRoom.DeviceUIList.Add(Common.LocalDevice.Current.GetDeviceUI(deviceFile));
+                    //杩欎釜璁惧鏂囦欢鍖归厤寰楀埌鎴块棿
+                    dicDeviceFile.Remove(deviceKeys);
                 }
-                //杩樺師鍦烘櫙瀵硅薄
-                tempRoom.SceneUIList.Clear();
-                for (int i = 0; i < tempRoom.SceneUIFilePathList.Count; i++)
+                //妫�鏌ュ満鏅�
+                for (int i = 0; i < tempRoom.ListSceneId.Count; i++)
                 {
-                    string uiPath = tempRoom.SceneUIFilePathList[i];
+                    int intId = tempRoom.ListSceneId[i];
+                    if (dicSceneFile.ContainsKey(intId) == false)
+                    {
+                        //绉婚櫎鎺夎繖涓笉瀵瑰姴鐨勮矾寰�
+                        tempRoom.ListSceneId.RemoveAt(i);
+                        i--;
+                        continue;
+                    }
+                    var byteData = this.GetShardFileContent(dicSceneFile[intId]);
                     //杩欎釜鍦烘櫙鏂囦欢鍖归厤寰楀埌鎴块棿
-                    listSceneFile.Remove(uiPath);
-                    var byteData = this.GetShardFileContent(uiPath);
+                    dicSceneFile.Remove(intId);
                     if (byteData == null)
                     {
                         //绉婚櫎鎺夎繖涓笉瀵瑰姴鐨勮矾寰�
-                        tempRoom.SceneUIFilePathList.RemoveAt(i);
+                        tempRoom.ListSceneId.RemoveAt(i);
                         i--;
                         continue;
                     }
                     string valueData = System.Text.Encoding.UTF8.GetString(byteData);
                     var tempUi = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.SceneUI>(valueData);
-                    tempRoom.SceneUIList.Add(tempUi);
 
                     //鑾峰彇鍦烘櫙閲岄潰鐨勫叏閮ㄧ洰鏍�(2019.11.05杩藉姞鎿嶄綔,鏈夊彲鑳介偅涓澶囨槸鐢卞満鏅祵濂楁潵鐨�,鎵�浠ュ畠鏈夊彲鑳戒笉灞炰簬浠讳綍鎴块棿)
-                    foreach (var data in tempUi.AddSceneMemberDataList)
+                    foreach (var data in tempUi.AdjustTargetList)
                     {
                         //璁惧
                         if (data.Type == 0)
@@ -657,21 +669,19 @@
                             if (dicShardDeviceFile.ContainsKey(mainkey) == true )
                             {
                                 //杩欎釜璁惧鏂囦欢鍖归厤寰楀埌
-                                listDeviceFile.Remove(dicShardDeviceFile[mainkey]);
+                                dicDeviceFile.Remove(mainkey);
                             }
                         }
                         if (data.Type == 1)
                         {
-                            var temp = new SceneUI();
-                            temp.Id = data.ElseScenesId;
                             //杩欎釜鍦烘櫙鏂囦欢鍖归厤寰楀埌
-                            listSceneFile.Remove(temp.FileName);
+                            dicSceneFile.Remove(data.ElseScenesId);
                         }
                     }
                 }
             }
             //濡傛灉瀛樺湪鍖归厤涓嶄笂鐨勬枃浠�
-            if (listDeviceFile.Count != 0 || listSceneFile.Count != 0)
+            if (dicDeviceFile.Count != 0 || dicSceneFile.Count != 0)
             {
                 //鍒涘缓涓�涓复鏃舵埧闂存潵瀛樺偍
                 var roomTemp = new Room();
@@ -680,22 +690,36 @@
                 memberShardInfo.dicShardRoom[roomTemp.FileName] = roomTemp;
                 roomTemp.Name = Language.StringByID(R.MyInternationalizationString.uUnallocated);
                 //杩樺師璁惧瀵硅薄
-                foreach (string deviceFile in listDeviceFile)
+                foreach (string deviceKeys in dicDeviceFile.Keys)
                 {
-                    roomTemp.DeviceUIFilePathList.Add(deviceFile);
-                    roomTemp.DeviceUIList.Add(Common.LocalDevice.Current.GetDeviceUI(deviceFile));
+                    roomTemp.ListDevice.Add(deviceKeys);
                 }
                 //杩樺師鍦烘櫙瀵硅薄
-                foreach (string uiPath in listSceneFile)
+                foreach (int intId in dicSceneFile.Keys)
                 {
-                    var byteData = this.GetShardFileContent(uiPath);
-                    string valueData = System.Text.Encoding.UTF8.GetString(byteData);
-                    var tempUi = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.SceneUI>(valueData);
-                    roomTemp.SceneUIList.Add(tempUi);
+                    roomTemp.ListSceneId.Add(intId);
                 }
             }
         }
 
+
+        #endregion
+
+        #region 鈻� 鑾峰彇璁惧鏂囦欢鍚峗____________________
+
+        /// <summary>
+        /// 鑾峰彇璁惧鏂囦欢鍚�,涓嶅瓨鍦ㄦ椂,杩斿洖绌哄瓧绗︿覆(浠呴檺鍒嗕韩浜嗙殑璁惧)
+        /// </summary>
+        /// <param name="deviceKeys">璁惧涓婚敭</param>
+        /// <returns></returns>
+        public string GetShardDeviceFileName(string deviceKeys)
+        {
+            if (this.dicShardDeviceFile.ContainsKey(deviceKeys) == true)
+            {
+                return this.dicShardDeviceFile[deviceKeys];
+            }
+            return string.Empty;
+        }
 
         #endregion
 
@@ -740,7 +764,7 @@
             }
             //闃叉鍑虹幇閿欒,鏆傛椂淇濆瓨涓や釜鍒楄〃(铏界劧娌¢偅涔堥夯鐑︼紝涓嶈繃鏃㈢劧宸茬粡杩欐牱鍐欎簡灏辫繖鏍蜂簡)
             var dicBackDevice = new Dictionary<string, List<string>>();
-            var dicBackScene = new Dictionary<string, List<string>>();
+            var dicBackScene = new Dictionary<string, List<int>>();
             //涓存椂澶囦唤鎴块棿璁惧鍒楄〃
             this.BackupRoomDevicelistTemporary(memberShardInfo, dicBackDevice, dicBackScene);
 
@@ -750,7 +774,7 @@
 
             //涓嶅厑璁告寜绯荤粺鐨勮繑鍥為敭
             Shared.Common.CommonPage.BackKeyCanClick = false;
-            UserCenterResourse.Option.AppCanSignout = false;
+            UserCenterResourse.AccountOption.AppCanSignout = false;
 
             if (BarMaxValue == -1)
             {
@@ -780,7 +804,7 @@
 
             //鍏佽鎸夌郴缁熺殑杩斿洖閿�
             Shared.Common.CommonPage.BackKeyCanClick = true;
-            UserCenterResourse.Option.AppCanSignout = true;
+            UserCenterResourse.AccountOption.AppCanSignout = true;
 
             if (result == false)
             {
@@ -825,15 +849,14 @@
             if (memberShardInfo.dicShardRoom.ContainsKey(nowRoom.FileName) == false)
             {
                 //鍏嬮殕涓�涓璞�
-                roomTemp = nowRoom.CloneRoomClass();
+                roomTemp = HdlRoomLogic.Current.CloneRoomClass(nowRoom);
                 memberShardInfo.TempRoom = roomTemp;
-                //鏂板垎浜殑鎴块棿,濡傛灉鍥剧墖鏄嚜瀹氫箟鐨�,鍒欎笂浼犲浘鐗�
-                if (roomTemp.BackgroundImageType != 0)
+                //鏂板垎浜殑鎴块棿,濡傛灉鍥剧墖鏄嚜瀹氫箟鐨�,骞朵笖杩欎釜鍥剧墖鏄瓨鍦ㄧ殑,鍒欎笂浼犲浘鐗�
+                if (roomTemp.BackgroundImageType != 0 && Common.Global.IsExistsByHomeId(roomTemp.BackgroundImage) == true)
                 {
                     //鑷畾涔夌殑鍥剧墖,瀹冨瓨鍦ㄤ簬鏈湴,浣嗘槸瀹冩槸鍏ㄨ矾寰�
-                    string[] Arry = roomTemp.BackgroundImage.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
-                    listFile.Add(Arry[Arry.Length - 1]);
-                    this.AddShardFile(Arry[Arry.Length - 1]);
+                    listFile.Add(roomTemp.BackgroundImage);
+                    this.AddShardFile(roomTemp.BackgroundImage);
                 }
             }
             else
@@ -845,15 +868,13 @@
                     if (roomTemp.BackgroundImageType != 0)
                     {
                         //鍒犻櫎鑷畾涔夊浘鐗�
-                        string[] Arry = roomTemp.BackgroundImage.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
-                        listDelPic.Add(Arry[Arry.Length - 1]);
+                        listDelPic.Add(roomTemp.BackgroundImage);
                     }
-                    if (nowRoom.BackgroundImageType != 0)
+                    if (nowRoom.BackgroundImageType != 0 && Common.Global.IsExistsByHomeId(nowRoom.BackgroundImage) == true)
                     {
                         //鑷畾涔夌殑鍥剧墖,瀹冨瓨鍦ㄤ簬鏈湴,浣嗘槸瀹冩槸鍏ㄨ矾寰�
-                        string[] Arry = nowRoom.BackgroundImage.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
-                        listFile.Add(Arry[Arry.Length - 1]);
-                        this.AddShardFile(Arry[Arry.Length - 1]);
+                        listFile.Add(nowRoom.BackgroundImage);
+                        this.AddShardFile(nowRoom.BackgroundImage);
                     }
                     //鍙樻洿鍥剧墖璁剧疆
                     roomTemp.BackgroundImageType = nowRoom.BackgroundImageType;
@@ -868,13 +889,12 @@
                 this.AddShardFile(device.FilePath);
 
                 //鍔犵偣缂撳瓨
-                this.dicShardDeviceFile[LocalDevice.Current.GetDeviceMainKeys(device)] = device.FilePath;
+                string mainKeys = LocalDevice.Current.GetDeviceMainKeys(device);
+                this.dicShardDeviceFile[mainKeys] = device.FilePath;
 
-                //璁惧鐨刄I
-                var deviceUi = device.FilePath;
-                if (roomTemp.DeviceUIFilePathList.Contains(deviceUi) == false)
+                if (roomTemp.ListDevice.Contains(mainKeys) == false)
                 {
-                    roomTemp.DeviceUIFilePathList.Add(deviceUi);
+                    roomTemp.ListDevice.Add(mainKeys);
                 }
             }
             //閫掑綊鑾峰彇鐨勮澶囦笉闇�瑕佸姞鍏ュ埌鎴块棿
@@ -891,20 +911,19 @@
             //鍦烘櫙
             foreach (var secene in listScene)
             {
-                if (secene.IconPathType != 0)
+                if (secene.IconPathType != 0 && Common.Global.IsExistsByHomeId(secene.IconPath) == true)
                 {
-                    //鑷畾涔夌殑鍥剧墖,瀹冨瓨鍦ㄤ簬鏈湴,浣嗘槸瀹冩槸鍏ㄨ矾寰�
-                    string[] Arry = secene.IconPath.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
-                    listFile.Add(Arry[Arry.Length - 1]);
-                    this.AddShardFile(Arry[Arry.Length - 1]);
+                    //鑷畾涔夌殑鍥剧墖,瀹冨瓨鍦ㄤ簬鏈湴
+                    listFile.Add(secene.IconPath);
+                    this.AddShardFile(secene.IconPath);
                 }
 
                 listFile.Add(secene.FileName);
                 this.AddShardFile(secene);
 
-                if (roomTemp.SceneUIFilePathList.Contains(secene.FileName) == false)
+                if (roomTemp.ListSceneId.Contains(secene.Id) == false)
                 {
-                    roomTemp.SceneUIFilePathList.Add(secene.FileName);
+                    roomTemp.ListSceneId.Add(secene.Id);
                 }
             }
             //閫掑綊鑾峰彇鐨勫満鏅笉闇�瑕佸姞鍏ュ埌鎴块棿
@@ -920,7 +939,7 @@
             //鍙嶆妤煎眰鏂囦欢寰堝皬,涓�璧风粰杩囧幓鍚�
             if (roomTemp.FloorId != string.Empty)
             {
-                memberShardInfo.dicShardFloor[roomTemp.FloorId] = roomTemp.FloorName; ;
+                memberShardInfo.dicShardFloor[roomTemp.FloorId] = HdlResidenceLogic.Current.GetFloorNameById(roomTemp.FloorId);
             }
             this.AddShardFile(memberShardInfo.dicShardFloor);
             listFile.Add(DirNameResourse.ShardFloorFile);
@@ -938,7 +957,7 @@
         /// <returns></returns>
         public void GetSceneDeviceList(Common.SceneUI scene, HashSet<string> listCheck, List<Common.SceneUI> listSceneUI, List<CommonDevice> listDevice)
         {
-            foreach (var data in scene.AddSceneMemberDataList)
+            foreach (var data in scene.AdjustTargetList)
             {
                 //璁惧
                 if (data.Type == 0)
@@ -969,7 +988,7 @@
                     listCheck.Add(mainKeys);
 
                     //鑾峰彇鍦烘櫙瀵硅薄
-                    var sceneUi = Room.CurrentRoom.GetSceneUIBySceneId(data.ElseScenesId);
+                    var sceneUi = HdlSceneLogic.Current.GetSceneUIBySceneId(data.ElseScenesId);
                     if (sceneUi != null)
                     {
                         listSceneUI.Add(sceneUi);
@@ -1025,7 +1044,7 @@
                     if (memberShardInfo.dicAllShardKeys.ContainsKey(fileName) == false)
                     {
                         var result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeDataShare/AddShareData", false, info);
-                        if (string.IsNullOrEmpty(result) == true)
+                        if (result == null)
                         {
                             return false;
                         }
@@ -1073,24 +1092,19 @@
             nvc.Add("HouseDistributedMark", Common.Config.Instance.Home.Id);
             nvc.Add("SubAccountDistributedMark", memberShardInfo.SubAccountDistributedMark);
             nvc.Add("ShareDataBytes", Convert.ToBase64String(this.GetShardFileContent(fileName)));
-            nvc.Add("IsOtherAccountCtrl", Common.Config.Instance.isAdministrator.ToString());
 
             //杩藉姞鍏变韩
             if (memberShardInfo.dicAllShardKeys.ContainsKey(fileName) == false)
             {
-                var result = this.UpLoadBigBackupFileToDB("ZigbeeDataShare/AddShareData", fullName, nvc);
-                if (string.IsNullOrEmpty(result) == true)
-                {
-                    return null;
-                }
                 //杩欓噷鏈夌偣鐗规畩锛屾帴鍙f槸鐩存帴杩斿洖涓婚敭鍥炴潵鐨勶紝鑰屼笉鏄疛soin
+                var result = this.DoUpLoadBigBackupFileToDB("ZigbeeDataShare/AddShareData", fullName, nvc);
                 return result;
             }
             else
             {
                 nvc.Add("DistributedMark", memberShardInfo.dicAllShardKeys[fileName]);
-                var result = this.UpLoadBigBackupFileToDB("ZigbeeDataShare/EditShareData", fullName, nvc);
-                if (result != "1")
+                var result = this.DoUpLoadBigBackupFileToDB("ZigbeeDataShare/EditShareData", fullName, nvc);
+                if (result == null)
                 {
                     return null;
                 }
@@ -1099,26 +1113,17 @@
         }
 
         /// <summary>
-        /// 涓婁紶澶ф枃浠�
+        /// 鎵ц涓婁紶澶ф枃浠�
         /// </summary>
         /// <param name="RequestName">璇锋眰鎺ュ彛</param>
         /// <param name="fullFileName">鏂囦欢鍚嶅瓧(鍚矾寰�)</param>
         /// <param name="nvc"></param>
         /// <returns></returns>
-        private string UpLoadBigBackupFileToDB(string RequestName, string fullFileName, NameValueCollection nvc)
+        private string DoUpLoadBigBackupFileToDB(string RequestName, string fullFileName, NameValueCollection nvc)
         {
             string paramName = "file";
             string contentType = "application/octet-stream";
             string requestUrl = $"{CommonPage.RequestHttpsHost}/{RequestName}";
-            //鍚敤绠$悊鍛樻潈闄�
-            //if (Config.Instance.isAdministrator == true)
-            //{
-            //    requestUrl = $"{Config.Instance.AdminRequestBaseUrl}/{RequestName}";
-            //}
-            //else
-            //{
-            //    requestUrl = $"{CommonPage.RequestHttpsHost}/{RequestName}";
-            //}
 
             string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
             byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
@@ -1128,6 +1133,8 @@
             wr.Method = "POST";
             wr.KeepAlive = true;
             wr.Credentials = System.Net.CredentialCache.DefaultCredentials;
+
+            wr.Headers.Add(HttpRequestHeader.Authorization, Config.Instance.Token);
 
             var rs = wr.GetRequestStream();
 
@@ -1167,23 +1174,24 @@
                 StreamReader reader2 = new StreamReader(stream2);
 
                 string result = reader2.ReadToEnd();
-                if (RequestName == "ZigbeeDataShare/AddShareData")
-                {
-                    return result;
-                }
 
                 var data = Newtonsoft.Json.JsonConvert.DeserializeObject<Shared.Common.ResponseEntity.ResponsePack>(result);
 
                 bool flage = UserCenterLogic.CheckNotEorrorMsg(data, requestUrl);
                 if (flage == true)
                 {
-                    return "1";
+                    //缂栬緫鐨勬椂鍊欙紝杩欎釜涓滆タ浼氭槸null
+                    return data.ResponseData == null ? "1" : data.ResponseData.ToString();
                 }
-                return "0";
+
+                //Log鍑哄姏
+                IMessageCommon.Current.GetMsgByRequestName(RequestName, data, nvc);
+
+                return null;
             }
             catch
             {
-                return "-1";
+                return null;
             }
             finally
             {
@@ -1208,15 +1216,15 @@
         /// <param name="dicBackDevice">绌虹殑璁惧澶囦唤鍒楄〃</param>
         /// <param name="dicBackScene">绌虹殑鍦烘櫙澶囦唤鍒楄〃</param>
         private void BackupRoomDevicelistTemporary(MemberShardInfoData memberShardInfo, Dictionary<string, List<string>> dicBackDevice,
-            Dictionary<string, List<string>> dicBackScene)
+            Dictionary<string, List<int>> dicBackScene)
         {
             foreach (var roomKeys in memberShardInfo.dicShardRoom.Keys)
             {
                 dicBackDevice[roomKeys] = new List<string>();
-                dicBackScene[roomKeys] = new List<string>();
+                dicBackScene[roomKeys] = new List<int>();
 
-                dicBackDevice[roomKeys].AddRange(memberShardInfo.dicShardRoom[roomKeys].DeviceUIFilePathList);
-                dicBackScene[roomKeys].AddRange(memberShardInfo.dicShardRoom[roomKeys].SceneUIFilePathList);
+                dicBackDevice[roomKeys].AddRange(memberShardInfo.dicShardRoom[roomKeys].ListDevice);
+                dicBackScene[roomKeys].AddRange(memberShardInfo.dicShardRoom[roomKeys].ListSceneId);
             }
         }
 
@@ -1228,7 +1236,7 @@
         /// <param name="dicBackScene">涓存椂澶囦唤鐨勫満鏅浠藉垪琛�</param>
         /// <param name="listFile">涓婁紶鐨勬枃浠跺悕</param>
         private void RecoverRoomDevicelistTemporary(MemberShardInfoData memberShardInfo, Dictionary<string, List<string>> dicBackDevice,
-            Dictionary<string, List<string>> dicBackScene, List<string> listFile)
+            Dictionary<string, List<int>> dicBackScene, List<string> listFile)
         {
             foreach (string fileName in listFile)
             {
@@ -1242,11 +1250,11 @@
                 {
                     continue;
                 }
-                memberShardInfo.dicShardRoom[roomKeys].DeviceUIFilePathList.Clear();
-                memberShardInfo.dicShardRoom[roomKeys].DeviceUIFilePathList.AddRange(dicBackDevice[roomKeys]);
+                memberShardInfo.dicShardRoom[roomKeys].ListDevice.Clear();
+                memberShardInfo.dicShardRoom[roomKeys].ListDevice.AddRange(dicBackDevice[roomKeys]);
 
-                memberShardInfo.dicShardRoom[roomKeys].SceneUIFilePathList.Clear();
-                memberShardInfo.dicShardRoom[roomKeys].SceneUIFilePathList.AddRange(dicBackScene[roomKeys]);
+                memberShardInfo.dicShardRoom[roomKeys].ListSceneId.Clear();
+                memberShardInfo.dicShardRoom[roomKeys].ListSceneId.AddRange(dicBackScene[roomKeys]);
 
                 //瑕嗙洊鎴块棿鏂囦欢
                 this.AddShardFile(memberShardInfo.dicShardRoom[roomKeys]);
@@ -1273,25 +1281,25 @@
             var roomTemp = memberShardInfo.dicShardRoom[nowRoom.FileName];
             //闃叉鍑洪敊,鍏堝浠藉垪琛�
             var listBackDevice = new List<string>();
-            listBackDevice.AddRange(roomTemp.DeviceUIFilePathList);
-            var listBackScene = new List<string>();
-            listBackScene.AddRange(roomTemp.SceneUIFilePathList);
+            listBackDevice.AddRange(roomTemp.ListDevice);
+            var listBackScene = new List<int>();
+            listBackScene.AddRange(roomTemp.ListSceneId);
 
             var listMark = new List<string>();
             //瑕佸垹闄ょ殑鏂囦欢鍚嶅瓧
             var listDeleteFile = new List<string>();
 
             //闄や簡瑕佸垹闄ょ殑鐩爣澶栵紝杩樺垎浜殑鏁版嵁
-            var listHadShard = this.GetAllShardedFileNameFromDictionary(memberShardInfo, nowRoom, listDevice, listSceneUI);
+            var listHadShardKeys = this.GetAllShardedKeysFromDictionary(memberShardInfo, nowRoom, listDevice, listSceneUI);
 
             //鍏堝紕璁惧
             foreach (var device in listDevice)
             {
                 string deviceFileName = device.FilePath;
-
+                string mainKeys = LocalDevice.Current.GetDeviceMainKeys(device);
                 //绉婚櫎璺緞鍒楄〃
-                roomTemp.DeviceUIFilePathList.Remove(device.FilePath);
-                if (listHadShard.Contains(deviceFileName) == true)
+                roomTemp.ListDevice.Remove(mainKeys);
+                if (listHadShardKeys.Contains(mainKeys) == true)
                 {
                     //鍏朵粬鍦烘櫙鍒嗕韩鏈夎繖涓澶�,鎵�浠ヤ笉鍒犻櫎杩欎釜璁惧鐨勬牴婧愭枃浠�,鍙槸鎶婃埧闂寸殑璁惧鍒楄〃璺緞绉婚櫎
                     continue;
@@ -1309,11 +1317,11 @@
             foreach (var sceneUI in listSceneUI)
             {
                 //绉婚櫎缂撳瓨
-                roomTemp.SceneUIFilePathList.Remove(sceneUI.FileName);
+                roomTemp.ListSceneId.Remove(sceneUI.Id);
 
                 //鍏朵粬鍦烘櫙杩樺祵濂楃潃杩欎釜鍦烘櫙,鎵�浠ヤ笉鍒犻櫎杩欎釜鍦烘櫙鐨勬牴婧愭枃浠�,鍙槸鎶婃埧闂寸殑鍦烘櫙鍒楄〃璺緞绉婚櫎
                 //浣嗘槸瀹冪粦瀹氱殑璁惧鐩爣瑕佸垹闄�
-                if (listHadShard.Contains(sceneUI.FileName) == true)
+                if (listHadShardKeys.Contains(sceneUI.Id.ToString()) == true)
                 {
                     continue;
                 }
@@ -1337,26 +1345,31 @@
                 }
 
                 //鎵ц鍒犻櫎宓屽鐨勮澶�
-                var listTemp = new HashSet<string>();
-                var dicBindScene = new Dictionary<string, SceneUI>();
-                this.GetSceneBindFileName(sceneUI, ref listTemp, ref dicBindScene);
-                foreach (var fileName in listTemp)
+                var dicDeviceKeys = new Dictionary<string, string>();
+                var listBindScene = new List<SceneUI>();
+                this.GetSceneBindListKeys(sceneUI, ref dicDeviceKeys, ref listBindScene);
+                //璁惧鐨�
+                foreach (var myKeys in dicDeviceKeys.Keys)
                 {
-                    if (listHadShard.Contains(fileName) == true)
+                    if (listHadShardKeys.Contains(myKeys) == true)
                     {
                         continue;
                     }
                     //鑾峰彇瑕佸垹闄ょ殑鍒嗕韩涓婚敭
+                    string fileName = dicDeviceKeys[myKeys];
                     if (memberShardInfo.dicAllShardKeys.ContainsKey(fileName) == true)
                     {
                         listMark.Add(memberShardInfo.dicAllShardKeys[fileName]);
                     }
                     listDeleteFile.Add(fileName);
-
-                    if (dicBindScene.ContainsKey(fileName) == true && dicBindScene[fileName].IconPathType != 0)
+                }
+                //鍦烘櫙鐨�
+                foreach (var seceUi in listBindScene)
+                {
+                    if (seceUi.IconPathType != 0)
                     {
                         //鍒犻櫎鑷畾涔夊満鏅浘鐗�,瀹冨瓨鍦ㄤ簬鏈湴,浣嗘槸瀹冩槸鍏ㄨ矾寰�
-                        string[] Arry = dicBindScene[fileName].IconPath.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
+                        string[] Arry = seceUi.IconPath.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
                         string sceneFile = Arry[Arry.Length - 1];
                         listDeleteFile.Add(sceneFile);
                         if (memberShardInfo.dicAllShardKeys.ContainsKey(sceneFile) == true)
@@ -1368,7 +1381,7 @@
             }
 
             //濡傛灉杩欎釜鎴块棿鐨勫垎浜澶囧拰鍦烘櫙鍏ㄩ儴鍒犻櫎鐨勮瘽,鎶婂垎浜埧闂存枃浠朵篃涓�璧峰垹闄�
-            if (roomTemp.DeviceUIFilePathList.Count == 0 && roomTemp.SceneUIFilePathList.Count == 0)
+            if (roomTemp.ListDevice.Count == 0 && roomTemp.ListSceneId.Count == 0)
             {
                 //鎴块棿鍒犻櫎
                 if (memberShardInfo.dicAllShardKeys.ContainsKey(nowRoom.FileName) == true)
@@ -1404,7 +1417,11 @@
                 int floorCount = 0;
                 foreach (var myRoom in memberShardInfo.dicShardRoom.Values)
                 {
-                    if (myRoom.FloorId == roomTemp.FloorId) { floorCount++; }
+                    //2020.03.24杩藉姞:涓嶈兘鏄嚜韬埧闂�
+                    if (myRoom.FloorId == roomTemp.FloorId && myRoom.Id != roomTemp.Id)
+                    {
+                        floorCount++;
+                    }
                 }
                 if (floorCount == 0)
                 {
@@ -1413,17 +1430,16 @@
                     //鎵ц涓婁紶瀵硅薄
                     result = await this.DoUploadFloorObject(memberShardInfo);
                 }
-
             }
 
             if (result == false)
             {
                 //鎭㈠
-                roomTemp.DeviceUIFilePathList.Clear();
-                roomTemp.DeviceUIFilePathList.AddRange(listBackDevice);
+                roomTemp.ListDevice.Clear();
+                roomTemp.ListDevice.AddRange(listBackDevice);
 
-                roomTemp.SceneUIFilePathList.Clear();
-                roomTemp.SceneUIFilePathList.AddRange(listBackScene);
+                roomTemp.ListSceneId.Clear();
+                roomTemp.ListSceneId.AddRange(listBackScene);
             }
             return result;
         }
@@ -1596,119 +1612,144 @@
         #region 鈻� 绉婚櫎鍏变韩鐨勪竴鑸柟娉昣________________
 
         /// <summary>
-        /// 浠庣紦瀛樺瓧鍏镐腑鑾峰彇宸茬粡鍒嗕韩浜嗙殑鍏ㄩ儴璁惧鏂囦欢鍜屽満鏅殑鏂囦欢鍚嶅瓧
+        /// 浠庣紦瀛樺瓧鍏镐腑鑾峰彇宸茬粡鍒嗕韩浜嗙殑鍏ㄩ儴璁惧涓婚敭鍜屽満鏅殑ID
         /// </summary>
         /// <param name="memberShardInfo">鎴愬憳鐨勫垎浜俊鎭�</param>
         /// <param name="nowRoom">褰撳墠鎴块棿</param>
         /// <param name="listDeleteDevice">瑕佸垹闄ょ殑璁惧鍒楄〃</param>
         /// <param name="listDeleteScene">瑕佸垹闄ょ殑鍦烘櫙鍒楄〃</param>
         /// <returns></returns>
-        private HashSet<string> GetAllShardedFileNameFromDictionary(MemberShardInfoData memberShardInfo, Common.Room nowRoom,
+        private HashSet<string> GetAllShardedKeysFromDictionary(MemberShardInfoData memberShardInfo, Common.Room nowRoom,
             List<CommonDevice> listDeleteDevice, List<Common.SceneUI> listDeleteScene)
         {
             //鑾峰彇鍏ㄩ儴瑕佸垹闄ょ殑鏂囦欢鍚嶅瓧
-            var listDeleteFile = new HashSet<string>();
+            var dicDeleteDeviceFile = new Dictionary<string, string>();
             foreach (var device in listDeleteDevice)
             {
-                listDeleteFile.Add(device.FilePath);
+                dicDeleteDeviceFile[LocalDevice.Current.GetDeviceMainKeys(device)] = device.FilePath;
             }
+            var dicDeleteSceneFile = new Dictionary<int, string>();
             foreach (var scene in listDeleteScene)
             {
-                listDeleteFile.Add(scene.FileName);
+                dicDeleteSceneFile[scene.Id] = scene.FileName;
             }
 
-            var listShardFile = new HashSet<string>();
-            //鑾峰彇杩樺浜庡垎浜姸鎬佺殑鏂囦欢
+            var listShardKeys = new HashSet<string>();
+            //鑾峰彇杩樺浜庡垎浜姸鎬佺殑涓婚敭
             foreach (var roomTemp in memberShardInfo.dicShardRoom.Values)
             {
                 //璁惧
-                foreach (var deviceUi in roomTemp.DeviceUIFilePathList)
+                foreach (var deviceKeys in roomTemp.ListDevice)
                 {
-                    string deviceFile = deviceUi;
-                    if (listDeleteFile.Contains(deviceFile) == true)
+                    if (dicDeleteDeviceFile.ContainsKey(deviceKeys) == true)
                     {
                         //鍥犱负涓�涓洖璺彧鑳藉垎閰嶄竴涓尯鍩�,鎵�浠ュ彲浠ョ洿鎺ュ垽鏂�
                         continue;
                     }
-                    if (listShardFile.Contains(deviceFile) == false)
+                    if (listShardKeys.Contains(deviceKeys) == false)
                     {
                         //杩欎釜鏂囦欢杩樺垎浜潃
-                        listShardFile.Add(deviceFile);
+                        listShardKeys.Add(deviceKeys);
                     }
 
                 }
                 //鍦烘櫙
-                foreach (var scene in roomTemp.SceneUIList)
+                foreach (var sceneId in roomTemp.ListSceneId)
                 {
-                    if (roomTemp.SceneUIFilePathList.Contains(scene.FileName) == false)
-                    {
-                        //杩欎釜鍦烘櫙宸茬粡琚垹闄�
-                        continue;
-                    }
                     if (roomTemp.FileName == nowRoom.FileName)
                     {
                         //濡傛灉寰幆鍒颁簡褰撳墠鎴块棿
-                        if (listDeleteFile.Contains(scene.FileName) == true)
+                        if (dicDeleteSceneFile.ContainsKey(sceneId) == true)
                         {
                             //濡傛灉鏄垹闄ょ洰鏍囷紝鍒欎笉娣诲姞
                             continue;
                         }
                     }
-                    //鑾峰彇鍦烘櫙閲岄潰鐨勫叏閮ㄧ洰鏍�
-                    var listTemp = new HashSet<string>();
-                    var dicTemp = new Dictionary<string, SceneUI>();
-                    this.GetSceneBindFileName(scene, ref listTemp, ref dicTemp);
-
-                    if (listShardFile.Contains(scene.FileName) == false)
+                    var byteData = this.GetShardFileContent($"Scene_{sceneId}.json");
+                    if (byteData == null)
                     {
-                        //鍦烘櫙鑷韩鐨勬枃浠�
-                        listShardFile.Add(scene.FileName);
+                        continue;
                     }
-                    foreach (string file in listTemp)
+                    string valueData = System.Text.Encoding.UTF8.GetString(byteData);
+                    var sceneTemp = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.SceneUI>(valueData);
+
+                    //鑾峰彇鍦烘櫙閲岄潰鐨勫叏閮ㄧ洰鏍�
+                    var listTempKeys = new HashSet<string>();
+                    //浠庡満鏅璞¢噷闈㈣幏鍙栧叏閮ㄧ殑缁戝畾鐩爣鐨勪富閿�(杩欓噷闈㈢殑涓滆タ蹇呴』浠庡垎浜暟鎹腑鑾峰彇)
+                    this.GetSceneBindListKeys(sceneTemp, ref listTempKeys);
+
+                    if (listShardKeys.Contains(sceneId.ToString()) == false)
                     {
-                        if (listShardFile.Contains(file) == false)
+                        //鍦烘櫙鑷韩
+                        listShardKeys.Add(sceneId.ToString());
+                    }
+                    foreach (string myKeys2 in listTempKeys)
+                    {
+                        if (listShardKeys.Contains(myKeys2) == false)
                         {
-                            listShardFile.Add(file);
+                            listShardKeys.Add(myKeys2);
                         }
                     }
                 }
             }
-            return listShardFile;
+            return listShardKeys;
         }
 
         /// <summary>
-        /// 浠庡満鏅璞¢噷闈㈣幏鍙栧叏閮ㄧ殑缁戝畾鐩爣鐨勬枃浠跺悕瀛�(杩欓噷闈㈢殑涓滆タ蹇呴』浠庡垎浜暟鎹腑鑾峰彇)
+        /// 浠庡満鏅璞¢噷闈㈣幏鍙栧叏閮ㄧ殑缁戝畾鐩爣鐨勪富閿�(杩欓噷闈㈢殑涓滆タ蹇呴』浠庡垎浜暟鎹腑鑾峰彇)
         /// </summary>
         /// <param name="scene">鍦烘櫙</param>
-        /// <param name="listFile">鏂囦欢鍒楄〃(閲岄潰瀛樼殑鏄澶嘦I鏂囦欢鍜岃澶囨枃浠跺拰鍦烘櫙鏂囦欢)</param>
-        /// <param name="dicBindScene">缁戝畾鐨勫満鏅璞�</param>
-        private void GetSceneBindFileName(Common.SceneUI scene, ref HashSet<string> listFile,ref Dictionary<string, SceneUI> dicBindScene)
+        /// <param name="dicDeviceKeys">璁惧涓婚敭鍒楄〃(閲岄潰娌℃湁鍦烘櫙),keys:涓婚敭,value:鏂囦欢鍚�</param>
+        /// <param name="listBindScene">缁戝畾鐨勫満鏅璞�</param>
+        private void GetSceneBindListKeys(Common.SceneUI scene, ref Dictionary<string, string> dicDeviceKeys, ref List<SceneUI> listBindScene)
         {
-            foreach (var data in scene.AddSceneMemberDataList)
+            foreach (var data in scene.AdjustTargetList)
             {
                 //璁惧
                 if (data.Type == 0)
                 {
                     string mainkey = LocalDevice.Current.GetDeviceMainKeys(data.DeviceAddr, data.Epoint);
-                    if (dicShardDeviceFile.ContainsKey(mainkey) == true && listFile.Contains(dicShardDeviceFile[mainkey]) == false)
+                    if (dicShardDeviceFile.ContainsKey(mainkey) == true && dicDeviceKeys.ContainsKey(mainkey) == false)
                     {
-                        listFile.Add(dicShardDeviceFile[mainkey]);
+                        dicDeviceKeys[mainkey] = dicShardDeviceFile[mainkey];
                     }
                 }
                 if (data.Type == 1)
                 {
-                    var temp = new SceneUI();
-                    temp.Id = data.ElseScenesId;
-                    var byteData = this.GetShardFileContent(temp.FileName);
+                    var byteData = this.GetShardFileContent($"Scene_{data.ElseScenesId}.json");
                     if (byteData != null)
                     {
                         string valueData = System.Text.Encoding.UTF8.GetString(byteData);
-                        var roomTemp = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.SceneUI>(valueData);
-                        dicBindScene[roomTemp.FileName] = roomTemp;
-                        if (listFile.Contains(roomTemp.FileName) == false)
-                        {
-                            listFile.Add(roomTemp.FileName);
-                        }
+                        var sceneTemp = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.SceneUI>(valueData);
+                        listBindScene.Add(sceneTemp);
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// 浠庡満鏅璞¢噷闈㈣幏鍙栧叏閮ㄧ殑缁戝畾鐩爣鐨勪富閿�(杩欓噷闈㈢殑涓滆タ蹇呴』浠庡垎浜暟鎹腑鑾峰彇)
+        /// </summary>
+        /// <param name="scene">鍦烘櫙</param>
+        /// <param name="listKeys">涓婚敭鍒楄〃(璁惧鍜屽満鏅�)</param>
+        private void GetSceneBindListKeys(Common.SceneUI scene, ref HashSet<string> listKeys)
+        {
+            foreach (var data in scene.AdjustTargetList)
+            {
+                //璁惧
+                if (data.Type == 0)
+                {
+                    string mainkey = LocalDevice.Current.GetDeviceMainKeys(data.DeviceAddr, data.Epoint);
+                    if (listKeys.Contains(mainkey) == false)
+                    {
+                        listKeys.Add(mainkey);
+                    }
+                }
+                if (data.Type == 1)
+                {
+                    if (listKeys.Contains(data.ElseScenesId.ToString()) == false)
+                    {
+                        listKeys.Add(data.ElseScenesId.ToString());
                     }
                 }
             }

--
Gitblit v1.8.0