From d95196ffdf89ecde072ca11e1c491921743673f6 Mon Sep 17 00:00:00 2001
From: wxr <464027401@qq.com>
Date: 星期三, 01 二月 2023 11:11:25 +0800
Subject: [PATCH] 多备份迁移

---
 Crabtree/SmartHome/UI/SimpleControl/Phone/Register/MigrationServer.cs |  151 +++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 131 insertions(+), 20 deletions(-)

diff --git a/Crabtree/SmartHome/UI/SimpleControl/Phone/Register/MigrationServer.cs b/Crabtree/SmartHome/UI/SimpleControl/Phone/Register/MigrationServer.cs
index 90e9c7c..e92f561 100644
--- a/Crabtree/SmartHome/UI/SimpleControl/Phone/Register/MigrationServer.cs
+++ b/Crabtree/SmartHome/UI/SimpleControl/Phone/Register/MigrationServer.cs
@@ -34,6 +34,7 @@
         EditText etPwd;
         string pwd;
         string newUserId;
+        string newHomeId;
 
         Button btnSave;
         Button btnClose;
@@ -372,32 +373,36 @@
         /// </summary>
         /// <param name="newHomeId"></param>
         /// <returns></returns>
-        private string moveFolder2New (string newHomeId)
+        private string moveFolder2New (string newHomeId,string folderName = "")
         {
-            Dictionary<string, object> dic = new Dictionary<string, object> ();
-            dic.Add ("backupDataType", "HDL_ON");
-            dic.Add ("homeId",newHomeId);
-            dic.Add ("userId",newUserId);
-            dic.Add ("backupClassify", "USER_DEFINED_BACKUP");
-            dic.Add ("folderName", "MigrateBackup" + DateTime.Now.ToString ());
-            dic.Add ("tenantId", "202106");
-            var requestJson = HttpUtil.GetSignRequestJson (dic);
-            var revertObj = MainPage.RequestHttps ("/home-wisdom/data/move/folder/save", requestJson, false, false, SeverAddr);
-            if(revertObj!= null) {
-                if(revertObj.code == "0") {
-                    var resultObj = Newtonsoft.Json.JsonConvert.DeserializeObject<FolderObj> (revertObj.data.ToString ());
-                    
-                    return resultObj.id;
+            try {
+                Dictionary<string, object> dic = new Dictionary<string, object> ();
+                dic.Add ("backupDataType", "HDL_ON");
+                dic.Add ("homeId", newHomeId);
+                dic.Add ("userId", newUserId);
+                dic.Add ("backupClassify", "USER_DEFINED_BACKUP");
+                dic.Add ("folderName", folderName == "" ? "MigrateBackup" + DateTime.Now.ToString () : folderName);
+                dic.Add ("tenantId", "202106");
+                var requestJson = HttpUtil.GetSignRequestJson (dic);
+                var revertObj = MainPage.RequestHttps ("/home-wisdom/data/move/folder/save", requestJson, false, false, SeverAddr);
+                if (revertObj != null) {
+                    if (revertObj.code == "0") {
+                        var resultObj = Newtonsoft.Json.JsonConvert.DeserializeObject<FolderObj> (revertObj.data.ToString ());
+
+                        return resultObj.id;
+                    }
                 }
+                return "";
+            } catch {
+                return "";
             }
-            return "";
         }
 
 
-        private string MoveFile2New(string newHomeId,string backupId)
+        private string MoveFile2New(string backupId)
         {
             Dictionary<string, object> dic = new Dictionary<string, object> ();
-            dic.Add ("backupId", backupId);//1534728347497418754//1534728860322385922
+            dic.Add ("backupId", backupId);
             dic.Add ("homeId", newHomeId);
             dic.Add ("userId", newUserId);
             dic.Add ("backupClassify", "USER_DEFINED_BACKUP");
@@ -446,6 +451,107 @@
             }
             return "";
         }
+
+        /// <summary>
+        /// 杩佺Щ鏃т簯绔浠藉垪琛ㄥ埌鏂颁簯绔�
+        /// </summary>
+        /// <returns></returns>
+        private void MoveOldBackupList ()
+        {
+            try {
+                GetUserFolderObj requestObj = new GetUserFolderObj () { LevelID = UserConfig.Instance.CurrentRegion.RegionID };
+                var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj);
+                var revertObj = MainPage.RequestHttps ("GetUserFolder", requestJson, true, false);//鑾峰彇鏃ф湇鍔″櫒澶囦唤鍒楄〃
+                if (revertObj.StateCode == "SUCCESS") {
+                    var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject<List<FolderRes>> (revertObj.ResponseData.ToString ());
+                    int index = 1;
+                    foreach (var folder in responseDataObj) {
+                        Application.RunOnMainThread (() => {
+                            try {
+                                btnTipMsg.Text = $"Migrating server backup {index} / {responseDataObj.Count + 1}.";
+                                btnTipMsg.TextColor = SkinStyle.Current.TextColor;
+                            } catch { }
+                        });
+                        try {
+                            var requestObj2 = new UserBackupListObj () { LevelID = folder.FolderID };
+                            var requestJson2 = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj2);
+                            var revertObj2 = MainPage.RequestHttps ("UserBackupList", requestJson2);//涓嬭浇鏃ф湇鍔″櫒鐨勫浠芥枃浠跺垪琛�
+                            if (revertObj2.StateCode == "SUCCESS") {
+                                var newFolderId = moveFolder2New (newHomeId, folder.FolderName);//鍦ㄦ柊鏈嶅姟鍣ㄥ垱寤烘柊鐨勫浠�,鑾峰彇澶囦唤ID
+                                if (string.IsNullOrEmpty (newFolderId)) {//濡傛灉鏂版湇鍔″櫒澶囦唤ID涓虹┖锛屽彲鑳芥姤閿欎簡锛屾柊鏈嶅姟鍣ㄥ彲鑳藉凡缁忓瓨鍦ㄨ繖涓浠�
+                                    var backupInfoRes = Newtonsoft.Json.JsonConvert.DeserializeObject<List<BackupInfoRes>> (revertObj2.ResponseData.ToString ());
+                                    MoveOldBackupFile2New (newFolderId, backupInfoRes);
+                                }
+                            }
+                        } catch { }
+                    }
+                }
+            } catch {
+            }
+        }
+
+        /// <summary>
+        /// 杩佺Щ鏃ф湇鍔″櫒澶囦唤鏂囦欢鍒版柊鏈嶅姟鍣�
+        /// </summary>
+        /// <param name="backupId"></param>
+        /// <returns></returns>
+        private string MoveOldBackupFile2New ( string backupId, List<BackupInfoRes> responseDataObj)
+        {
+            Dictionary<string, object> dic = new Dictionary<string, object> ();
+            dic.Add ("backupId", backupId);
+            dic.Add ("homeId", newHomeId);
+            dic.Add ("userId", newUserId);
+            dic.Add ("backupClassify", "USER_DEFINED_BACKUP");
+            dic.Add ("tenantId", "202106");
+
+            List<BackupFileObj> fileObjs = new List<BackupFileObj> ();
+
+            int index = 0;
+            foreach (var file in responseDataObj) {
+                var fileName = file.FileName;
+                if (fileName == "null" || "UserConfig" == fileName || fileName == UserInfo.GlobalRegisterFile) {
+                    continue;
+                }
+                index++;
+                var requestObj3 = new BackupDetailObj () { Id = file.Id };
+                var requestJson3 = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj3);
+                var revertObj3 = MainPage.RequestHttps ("BackupDetail", requestJson3);//涓嬭浇鏃ф湇鍔″櫒鐨勫浠芥枃浠�
+                if (revertObj3.StateCode == "SUCCESS") {
+                    var jsonBytes = Newtonsoft.Json.JsonConvert.SerializeObject (revertObj3.ResponseData);
+                    var byresss = Newtonsoft.Json.JsonConvert.DeserializeObject<byte []> (jsonBytes);
+                    BackupFileObj backupFileObj = new BackupFileObj () { fileName = fileName, content = byresss };
+                    fileObjs.Add (backupFileObj);
+
+                    if (fileObjs.Count > 9) {
+                        if (!dic.ContainsKey ("list")) {
+                            dic.Add ("list", fileObjs);
+                        }
+                        var json = HttpUtil.GetSignRequestJson (dic);
+                        var revertObj_foreach = MainPage.RequestHttps ("/home-wisdom/data/move/file/save", json, false, false, SeverAddr);
+                        if (revertObj_foreach != null) {
+                            if (revertObj_foreach.code == "0") {
+                                fileObjs.Clear ();
+                                continue;
+                            }
+                        }
+                    }
+                }
+            }
+            if (!dic.ContainsKey ("list")) {
+                dic.Add ("list", fileObjs);
+            }
+            var requestJson = HttpUtil.GetSignRequestJson (dic);
+            var revertObj = MainPage.RequestHttps ("/home-wisdom/data/move/file/save", requestJson, false, false, SeverAddr);
+            if (revertObj != null) {
+                if (revertObj.code == "0") {
+                    return "true";
+                }
+            }
+            return "";
+        }
+
+
+
         /// <summary>
         /// 鑾峰彇瀹氭椂鍣ㄥ垪琛�
         /// </summary>
@@ -732,7 +838,7 @@
                                     return;
                                 }
                                 //杩佺Щ浣忓畢锛岃幏鍙栨柊鐨刪omeid
-                                var newHomeId = Home2New ();
+                                newHomeId = Home2New ();
                                 if (newHomeId == "") {
                                     Application.RunOnMainThread (() => {
                                         btnTipMsg.Text = "Home migration failed. Please try again.";
@@ -823,7 +929,12 @@
                                 //鍒涘缓杩佺Щ澶囦唤鏂囦欢澶�
                                 var backId = moveFolder2New (newHomeId);
                                 //杩佺Щ澶囦唤鏂囦欢
-                                var moveFileResult = MoveFile2New (newHomeId, backId);
+                                var moveFileResult = MoveFile2New (backId);
+                                Application.RunOnMainThread (() => {
+                                    btnTipMsg.Text = "Migrating server backup.";
+                                    btnTipMsg.TextColor = SkinStyle.Current.TextColor;
+                                });
+                                MoveOldBackupList ();
                                 if (moveFileResult == "true") {
                                     Application.RunOnMainThread (() => {
                                         btnTipMsg.Text = "Migration backup succeeded, migrating Schedule data.";

--
Gitblit v1.8.0