黄学彪
2020-12-17 9f326f4000847e6167d8166fa2f6a66f53cb3734
ZigbeeApp/Shared/Phone/Common/Logic/HdlBackupLogic.cs
New file
@@ -0,0 +1,1516 @@
using Newtonsoft.Json;
using Shared.Common;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.IO;
using System.Net;
using System.Text;
namespace Shared.Phone
{
    /// <summary>
    /// 备份业务的逻辑
    /// </summary>
    public class HdlBackupLogic
    {
        #region ■ 变量声明___________________________
        /// <summary>
        /// 备份业务的逻辑
        /// </summary>
        private static HdlBackupLogic m_Current = null;
        /// <summary>
        /// 备份业务的逻辑
        /// </summary>
        public static HdlBackupLogic Current
        {
            get
            {
                if (m_Current == null)
                {
                    m_Current = new HdlBackupLogic();
                }
                return m_Current;
            }
        }
        #endregion
        #region ■ 获取备份名字列表___________________
        /// <summary>
        /// 从云端获取备份数据的名字列表
        /// </summary>
        /// <param name="backupDiv">备份类型(1:手动备份,2:自动备份)</param>
        /// <param name="mode">失败时是否显示tip消息</param>
        /// <param name="getOptionBackup">是否获取功能备份</param>
        /// <returns></returns>
        public List<BackupListNameInfo> GetBackupListNameFromDB(BackUpMode backupDiv, ShowNetCodeMode mode = ShowNetCodeMode.YES, bool getOptionBackup = false)
        {
            var pra = new { homeId = Config.Instance.Home.Id };
            var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("home-wisdom/app/backup/folder/findAll", RestSharp.Method.POST, pra, null, null, CheckMode.A账号权限);
            //检测状态码
            if (HdlCheckLogic.Current.CheckNetCode(result, mode) == false)
            {
                return null;
            }
            //获取备份类型的字符标识
            string strdiv = this.GetBackUpModeText(backupDiv);
            var listData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<BackupListNameInfo>>(result.Data.ToString());
            var list = new List<BackupListNameInfo>();
            foreach (var data2 in listData)
            {
                if (getOptionBackup == false && data2.FolderName == HdlFileNameResourse.OptionBackupName)
                {
                    //不获取功能备份
                    continue;
                }
                if (data2.BackupClassify != strdiv || data2.BackupDataType != "ZIGBEE_HOME")
                {
                    //不是指定的备份类型,或者zigbee的备份,则不获取
                    continue;
                }
                list.Add(data2);
            }
            return list;
        }
        /// <summary>
        /// <para>从云端获取备份的文件,然后存入本地指定的临时文件夹</para>
        /// <para>返回文件夹名字(里面存放着全部的文件),返回null时,代表失败</para>
        /// </summary>
        /// <param name="i_folderId">备份主键</param>
        /// <param name="mode">失败时是否显示tip消息</param>
        /// <returns></returns>
        public string GetBackFileFromDBAndSetToLocation(string i_folderId, ShowNetCodeMode mode = ShowNetCodeMode.YES)
        {
            //不允许按系统的返回键
            Config.Instance.BackKeyCanClick = false;
            HdlUserCenterResourse.AccountOption.AppCanSignout = false;
            //首先先创建一个临时文件夹,存在文件则清空
            string newDir = HdlFileNameResourse.DownLoadBackupTempDirectory;
            HdlFileLogic.Current.CreateDirectory(newDir, true);
            //获取这个备份下面有多少个文件
            var dicFile = GetBackFileIDFromDB(i_folderId, mode);
            if (dicFile == null)
            {
                //关闭进度条
                ProgressFormBar.Current.Close();
                //允许按系统的返回键
                Config.Instance.BackKeyCanClick = true;
                HdlUserCenterResourse.AccountOption.AppCanSignout = true;
                return null;
            }
            //一个个的下载文件
            int listFileCount = dicFile.Count;
            int fileCount = 0;
            foreach (string fileName in dicFile.Keys)
            {
                fileCount++;
                //账号已经退出
                if (HdlCheckLogic.Current.IsAccountLoginOut() == true)
                {
                    //关闭进度条
                    ProgressFormBar.Current.Close();
                    //允许按系统的返回键
                    Config.Instance.BackKeyCanClick = true;
                    HdlUserCenterResourse.AccountOption.AppCanSignout = true;
                    return null;
                }
                //★设置需要获取的文件名字★
                var pra = new { fileId = dicFile[fileName], folderId = i_folderId, homeId = Config.Instance.Home.Id };
                var result = HdlHttpLogic.Current.RequestByteFromZigbeeHttps("home-wisdom/app/backup/file/downOne", RestSharp.Method.POST, pra, null, null, CheckMode.A账号权限, true, 10);
                //检测状态码
                if (result == null || result.Length == 0)
                {
                    //关闭进度条
                    ProgressFormBar.Current.Close();
                    //允许按系统的返回键
                    Config.Instance.BackKeyCanClick = true;
                    HdlUserCenterResourse.AccountOption.AppCanSignout = true;
                    return null;
                }
                //将输入写入本地的临时文件夹
                if (fileName.StartsWith("House_") == false)
                {
                    HdlFileLogic.Current.SaveByteToFile(System.IO.Path.Combine(newDir, fileName), result);
                }
                else
                {
                    //兼容旧云端的数据迁移到新云端
                    var myHouse = Newtonsoft.Json.JsonConvert.DeserializeObject<House>(Encoding.UTF8.GetString(result));
                    myHouse.Id = Config.Instance.Home.Id;
                    HdlFileLogic.Current.SaveFileContent(System.IO.Path.Combine(newDir, myHouse.FileName), myHouse);
                }
                //设置进度值
                ProgressFormBar.Current.SetValue(fileCount, listFileCount);
            }
            //允许按系统的返回键
            Config.Instance.BackKeyCanClick = true;
            HdlUserCenterResourse.AccountOption.AppCanSignout = true;
            return newDir;
        }
        /// <summary>
        /// 从云端获取全部的备份文件的名字(key:文件名字 value:主键)
        /// </summary>
        /// <param name="i_folderId">备份主键</param>
        /// <param name="mode">失败时是否显示tip消息</param>
        /// <returns></returns>
        private Dictionary<string, string> GetBackFileIDFromDB(string i_folderId, ShowNetCodeMode mode = ShowNetCodeMode.YES)
        {
            //获取这个备份下的文件列表
            var pra = new { folderId = i_folderId, homeId = Config.Instance.Home.Id };
            var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("home-wisdom/app/backup/file/findAll", RestSharp.Method.POST, pra, null, null, CheckMode.A账号权限);
            //检测状态码
            if (HdlCheckLogic.Current.CheckNetCode(result, mode) == false)
            {
                return null;
            }
            var listData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<LoadBackupFileNameInfo>>(result.Data.ToString());
            //获取文件名字
            var dicFileName = new Dictionary<string, string>();
            foreach (var fileData in listData)
            {
                dicFileName[fileData.FileName] = fileData.Id;
            }
            return dicFileName;
        }
        #endregion
        #region ■ 创建备份___________________________
        /// <summary>
        /// 创建一个备份名字(成功时返回备份的主键ID,失败时返回null)
        /// </summary>
        /// <param name="backupName">备份名字</param>
        /// <param name="backupDiv">备份类型(1:手动备份,2:自动备份)</param>
        /// <param name="mode">失败时是否显示tip消息</param>
        /// <returns></returns>
        public string CreatNewBackupNameToDB(string backupName, BackUpMode backupDiv, ShowNetCodeMode mode = ShowNetCodeMode.YES)
        {
            //获取备份类型的字符标识
            string strdiv = this.GetBackUpModeText(backupDiv);
            var pra = new
            {
                backupClassify = strdiv,
                backupDataType = "ZIGBEE_HOME",
                folderName = backupName,
                homeId = Config.Instance.Home.Id
            };
            var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("home-wisdom/app/backup/folder/create", RestSharp.Method.POST, pra, null, null, CheckMode.A账号权限);
            //检测状态码
            if (HdlCheckLogic.Current.CheckNetCode(result, mode) == false)
            {
                return null;
            }
            var data = Newtonsoft.Json.JsonConvert.DeserializeObject<AddBackupNameResult>(result.Data.ToString());
            return data.Id;
        }
        /// <summary>
        /// 保存本地备份到APP(调试宝专用)
        /// </summary>
        /// <param name="backupName">备份名字</param>
        /// <param name="finishEvent">完成后的回调事件(参数为文件夹名字)</param>
        public void SaveBackupDataToApp(string backupName, Action<string> finishEvent = null)
        {
            //获取本机保存的全部住宅备份数据
            var listLocalHouse = HdlResidenceLogic.Current.GetAllLocalResidenceListByDirectory(false);
            var directoryName = "BackupResidenceData_" + DateTime.Now.ToString("yyyyMMdd_HHmmss");
            foreach (var house in listLocalHouse)
            {
                if (house.Id == Config.Instance.Home.Id && house.Name == backupName
                    && house.HouseDataDiv != 1)
                {
                    //如果本地拥有相同名字的备份的话,则直接覆盖
                    directoryName = house.SaveDirctoryName;
                    //备份数据已经存在,是否覆盖?
                    HdlMessageLogic.Current.ShowMassage(ShowMsgType.Confirm, Language.StringByID(R.MyInternationalizationString.BackUpDataIsEsixtAndPickUp), () =>
                    {
                        //将本地文件复制到指定的文件夹中
                        this.CopyLocalFileToDirectory(directoryName, backupName, finishEvent);
                    });
                    return;
                }
            }
            //将本地文件复制到指定的文件夹中
            this.CopyLocalFileToDirectory(directoryName, backupName, finishEvent);
        }
        /// <summary>
        /// 将本地文件复制到指定的文件夹中(调试宝专用)
        /// </summary>
        /// <param name="directoryName">保存的文件夹名字</param>
        /// <param name="backUpName">备份名字</param>
        /// <param name="finishEvent">完成后的回调事件(参数为文件夹名字)</param>
        private void CopyLocalFileToDirectory(string directoryName, string backUpName, Action<string> finishEvent = null)
        {
            //当前路径
            var localPath = Common.Config.Instance.FullPath;
            //需要保存的路径
            var savePath = System.IO.Path.Combine(Shared.IO.FileUtils.RootPath, Common.Config.Instance.Guid, directoryName);
            if (System.IO.Directory.Exists(savePath) == false)
            {
                //创建文件夹
                System.IO.Directory.CreateDirectory(savePath);
            }
            else
            {
                //如果存在,则清空全部文件
                var files = System.IO.Directory.GetFiles(savePath);
                foreach (var file in files)
                {
                    HdlFileLogic.Current.DeleteFile(file);
                }
            }
            //本地全部的文件
            var listLocalFile = HdlFileLogic.Current.GetRootPathListFile();
            foreach (var file in listLocalFile)
            {
                //判断指定文件是否需要复制过去
                if (file.StartsWith("House_") == true
                    || this.IsNotUpLoadFile(file) == true)
                {
                    continue;
                }
                string localFile = System.IO.Path.Combine(localPath, file);
                string newFile = System.IO.Path.Combine(savePath, file);
                try
                {
                    //复制
                    System.IO.File.Copy(localFile, newFile);
                }
                catch { }
            }
            //序列化住宅对象
            string oldHomeName = Common.Config.Instance.Home.Name;
            Common.Config.Instance.Home.Name = backUpName;
            HdlFileLogic.Current.SaveFileContent(System.IO.Path.Combine(savePath, Common.Config.Instance.Home.FileName), Common.Config.Instance.Home);
            Common.Config.Instance.Home.Name = oldHomeName;
            //将模板数据保存到到指定的文件夹中
            var templateName = HdlTemplateCommonLogic.Current.GetNewTemplateFileName();
            var templateFile = HdlTemplateCommonLogic.Current.SaveTemplateDataToFile(templateName, backUpName);
            //将模板bin文件移动到备份文件夹中
            try { System.IO.File.Move(templateFile, System.IO.Path.Combine(savePath, templateName)); }
            catch (Exception ex) { HdlLogLogic.Current.WriteLog(ex, "移动模板失败"); }
            //本地备份保存成功
            if (finishEvent == null)
            {
                HdlMessageLogic.Current.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.SaveLocalBackDataSuccess));
            }
            else
            {
                //调用回调函数
                finishEvent.Invoke(directoryName);
            }
        }
        #endregion
        #region ■ 上传备份___________________________
        /// <summary>
        /// 上传本地所有文件到云端(函数内部有进度条)
        /// </summary>
        /// <param name="i_folderId">备份主键ID</param>
        /// <param name="upPath">指定上传的是哪个文件夹的文件(全路径),不指定时,上传的是本地路径下的文件</param>
        /// <param name="showBar">是否设置显示进度条</param>
        /// <param name="mode">失败时是否显示tip消息</param>
        /// <returns></returns>
        public bool UpLoadBackupFileToDB(string i_folderId, string upPath = "", bool showBar = true, ShowNetCodeMode mode = ShowNetCodeMode.YES)
        {
            List<string> listAllFile = null;
            //文件夹的全路径
            string fullDir = string.Empty;
            string localTemplateName = string.Empty;
            if (upPath == string.Empty)
            {
                //将模板数据保存到到指定的文件夹中
                var templateName = HdlTemplateCommonLogic.Current.GetNewTemplateFileName();
                var templateFile = HdlTemplateCommonLogic.Current.SaveTemplateDataToFile(templateName, "HomeTemplate");
                //将模板bin文件移动到备份文件夹中
                localTemplateName = System.IO.Path.Combine(Config.Instance.FullPath, templateName);
                try { System.IO.File.Move(templateFile, localTemplateName); }
                catch (Exception ex) { HdlLogLogic.Current.WriteLog(ex, "移动模板失败"); }
                //获取本地文件
                listAllFile = HdlFileLogic.Current.GetRootPathListFile();
                fullDir = Common.Config.Instance.FullPath;
            }
            else
            {
                listAllFile = HdlFileLogic.Current.GetFileFromDirectory(upPath);
                fullDir = upPath;
            }
            if (listAllFile.Count == 0)
            {
                return true;
            }
            //普通文件,可以一次性上传多个的
            var listNormalFile = new List<string>();
            foreach (string fileName in listAllFile)
            {
                //判断指定文件是否需要上传(根目录的才判断)
                if (upPath == string.Empty && this.IsNotUpLoadFile(fileName) == true)
                {
                    continue;
                }
                listNormalFile.Add(fileName);
            }
            //开启进度条
            int listFileCount = listNormalFile.Count;
            if (showBar == true)
            {
                //开启进度条 正在上传备份文件
                ProgressFormBar.Current.Start();
                ProgressFormBar.Current.SetMsg(Language.StringByID(R.MyInternationalizationString.uBackupFileUploading));
            }
            //不允许按系统的返回键
            Config.Instance.BackKeyCanClick = false;
            HdlUserCenterResourse.AccountOption.AppCanSignout = false;
            for (int i = 0; i < listNormalFile.Count; i++)
            {
                string file = listNormalFile[i];
                //账号已经退出
                if (HdlCheckLogic.Current.IsAccountLoginOut() == true)
                {
                    //关闭进度条
                    ProgressFormBar.Current.Close();
                    //允许按系统的返回键
                    Config.Instance.BackKeyCanClick = true;
                    HdlUserCenterResourse.AccountOption.AppCanSignout = true;
                    if (localTemplateName != string.Empty)
                    {
                        //删除掉这个模板文件
                        HdlFileLogic.Current.DeleteFile(localTemplateName);
                    }
                    return false;
                };
                var fileByte = HdlFileLogic.Current.ReadFileByteContent(System.IO.Path.Combine(fullDir, file));
                //执行上传
                bool falge = this.DoUpLoadInfoToDB(i_folderId, file, fileByte, mode);
                if (falge == false)
                {
                    //关闭进度条
                    ProgressFormBar.Current.Close();
                    //允许按系统的返回键
                    Config.Instance.BackKeyCanClick = true;
                    HdlUserCenterResourse.AccountOption.AppCanSignout = true;
                    if (localTemplateName != string.Empty)
                    {
                        //删除掉这个模板文件
                        HdlFileLogic.Current.DeleteFile(localTemplateName);
                    }
                    return false;
                }
                //设置进度值
                ProgressFormBar.Current.SetValue(i + 1, listFileCount);
            }
            if (localTemplateName != string.Empty)
            {
                //删除掉这个模板文件
                HdlFileLogic.Current.DeleteFile(localTemplateName);
            }
            //进度条关闭
            ProgressFormBar.Current.Close();
            //允许按系统的返回键
            Config.Instance.BackKeyCanClick = true;
            HdlUserCenterResourse.AccountOption.AppCanSignout = true;
            return true;
        }
        /// <summary>
        /// 执行上传到云端
        /// </summary>
        /// <param name="i_folderId">备份主键ID</param>
        /// <param name="i_fileName">文件名字</param>
        /// <param name="i_content">上传的数据</param>
        /// <param name="mode">失败时是否显示tip消息</param>
        /// <returns></returns>
        public bool DoUpLoadInfoToDB(string i_folderId, string i_fileName, byte[] i_content, ShowNetCodeMode mode = ShowNetCodeMode.YES)
        {
            var dicQuery = new Dictionary<string, object>();
            dicQuery["folderId"] = i_folderId;
            dicQuery["fileName"] = i_fileName;
            dicQuery["homeId"] = Config.Instance.Home.Id;
            var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("home-wisdom/app/backup/file/create", RestSharp.Method.POST, i_content, dicQuery, null, CheckMode.A账号权限, true, 10);
            //检测状态码
            if (HdlCheckLogic.Current.CheckNetCode(result, mode) == false)
            {
                return false;
            }
            return true;
        }
        #endregion
        #region ■ 编辑备份___________________________
        /// <summary>
        /// 编辑备份名字
        /// </summary>
        /// <param name="i_folderId">备份主键id</param>
        /// <param name="i_backName">备注名字</param>
        /// <param name="mode">失败时是否显示tip消息</param>
        /// <returns></returns>
        public bool EditorBackupName(string i_folderId, string i_backName, ShowNetCodeMode mode = ShowNetCodeMode.YES)
        {
            var pra = new { folderId = i_folderId, folderName = i_backName, homeId = Config.Instance.Home.Id };
            var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("home-wisdom/app/backup/folder/update", RestSharp.Method.POST, pra, null, null, CheckMode.A账号权限);
            //检测状态码
            if (HdlCheckLogic.Current.CheckNetCode(result, mode) == false)
            {
                return false;
            }
            return true;
        }
        #endregion
        #region ■ 下载备份___________________________
        /// <summary>
        /// 下载APP备份文档(函数内部有进度条,调试宝专用)
        /// </summary>
        /// <param name="BackupClassId"></param>
        /// <param name="BackupName">云端显示的名字</param>
        /// <param name="finishEvent">成功之后的事件,参数为保存备份的路径文件夹(全路径)</param>
        public void DownLoadAppBackupInfo(string BackupClassId, string BackupName, Action<string> finishEvent = null)
        {
            //获取本机保存的全部住宅备份数据
            var listLocalHouse = HdlResidenceLogic.Current.GetAllLocalResidenceListByDirectory(false);
            var directoryName = "DownLoadResidenceData_" + DateTime.Now.ToString("yyyyMMdd_HHmmss");
            foreach (var house in listLocalHouse)
            {
                //如果名字和住宅base数据的名字一样也可以保存
                if (house.Name == BackupName && house.HouseDataDiv != 1)
                {
                    //如果本地拥有相同名字的备份的话,则直接覆盖
                    directoryName = house.SaveDirctoryName;
                    //备份数据已经存在,是否覆盖?
                    HdlMessageLogic.Current.ShowMassage(ShowMsgType.Confirm, Language.StringByID(R.MyInternationalizationString.BackUpDataIsEsixtAndPickUp), () =>
                    {
                        //下载APP备份文档,然后存入固定的文件夹中
                        HdlThreadLogic.Current.RunThread(() =>
                        {
                            this.DownLoadAppBackupInfoAndSetToDirectory(BackupClassId, directoryName, finishEvent);
                        });
                    });
                    return;
                }
            }
            //下载APP备份文档,然后存入固定的文件夹中
            this.DownLoadAppBackupInfoAndSetToDirectory(BackupClassId, directoryName, finishEvent);
        }
        /// <summary>
        /// 下载APP备份文档,然后存入固定的文件夹中(调试宝专用)
        /// </summary>
        /// <param name="BackupClassId"></param>
        /// <param name="targetDir">目标文件夹</param>
        /// <param name="finishEvent">成功之后的事件,参数为保存备份的路径文件夹(全路径)</param>
        private void DownLoadAppBackupInfoAndSetToDirectory(string BackupClassId, string targetDir, Action<string> finishEvent = null)
        {
            //全路径
            targetDir = System.IO.Path.Combine(Shared.IO.FileUtils.RootPath, Common.Config.Instance.Guid, targetDir);
            //打开进度条 正在获取备份文件列表
            ProgressFormBar.Current.Start();
            ProgressFormBar.Current.SetMsg(Language.StringByID(R.MyInternationalizationString.uBackupFileListGetting));
            //从云端获取备份的文件,然后存入本地的临时文件夹
            string tempDirectory = GetBackFileFromDBAndSetToLocation(BackupClassId);
            if (tempDirectory == null)
            {
                //关闭进度条
                ProgressFormBar.Current.Close();
                return;
            }
            tempDirectory = System.IO.Path.Combine(Config.Instance.FullPath, tempDirectory);
            if (System.IO.Directory.Exists(targetDir) == false)
            {
                //创建文件夹
                System.IO.Directory.CreateDirectory(targetDir);
            }
            else
            {
                //如果存在,则清空全部文件
                var files = System.IO.Directory.GetFiles(targetDir);
                foreach (var file in files)
                {
                    HdlFileLogic.Current.DeleteFile(file);
                }
            }
            //获取下载到的全部的文件
            var listFile = HdlFileLogic.Current.GetFileFromDirectory(tempDirectory);
            foreach (var file in listFile)
            {
                var sourseFile = System.IO.Path.Combine(tempDirectory, file);
                var targetFile = System.IO.Path.Combine(targetDir, file);
                //移动文件
                try { System.IO.File.Move(sourseFile, targetFile); }
                catch { }
            }
            //关闭进度条
            ProgressFormBar.Current.Close();
            //调用回调函数
            finishEvent?.Invoke(targetDir);
            finishEvent = null;
        }
        #endregion
        #region ■ 读取备份___________________________
        /// <summary>
        /// 读取APP备份文档(函数内部有进度条,Home专用)
        /// </summary>
        /// <param name="i_folderId"></param>
        /// <param name="mode">失败时是否显示tip消息</param>
        public bool LoadAppBackupInfo(string i_folderId, ShowNetCodeMode mode = ShowNetCodeMode.YES)
        {
            //打开进度条 正在获取备份文件列表
            ProgressFormBar.Current.Start();
            ProgressFormBar.Current.SetMsg(Language.StringByID(R.MyInternationalizationString.uBackupFileListGetting));
            //从云端获取备份的文件,然后存入本地的临时文件夹
            string tempDirectory = GetBackFileFromDBAndSetToLocation(i_folderId, mode);
            if (tempDirectory == null)
            {
                //关闭进度条
                ProgressFormBar.Current.Close();
                return false;
            }
            //清空全部房间
            HdlRoomLogic.Current.DeleteAllRoom();
            //清空本地全部的场景数据
            HdlSceneLogic.Current.DeleteAllLocalScene();
            //如果读取到的文件完全没有问题,则清理本地的文件
            HdlFileLogic.Current.DeleteAllLocationFile(false);
            //清理本地的模板文件
            HdlTemplateCommonLogic.Current.DeleteAllLocalFile();
            //没有错误的话,则移动到当前住宅文件夹下面
            HdlFileLogic.Current.MoveDirectoryFileToHomeDirectory(tempDirectory, true);
            //删除全部的自动备份的本地文件(此函数用于读取自动备份的时候使用)
            this.DeleteAllAutoBackupFile();
            //刷新本地缓存
            HdlUserCenterLogic.Current.RefreshAllMemory();
            //关闭进度条
            ProgressFormBar.Current.Close();
            return true;
        }
        #endregion
        #region ■ 加载备份___________________________
        /// <summary>
        /// 加载本地的备份数据(调试宝专用)
        /// </summary>
        /// <param name="strDirectory">备份数据所在的文件夹(不是全路径)</param>
        public void LoadLocalBackupData(string strDirectory)
        {
            //全路径
            strDirectory = System.IO.Path.Combine(Shared.IO.FileUtils.RootPath, Common.Config.Instance.Guid, strDirectory);
            //清空全部房间
            HdlRoomLogic.Current.DeleteAllRoom();
            //清空本地全部的场景数据
            HdlSceneLogic.Current.DeleteAllLocalScene();
            //清理本地的文件
            HdlFileLogic.Current.DeleteAllLocationFile(false);
            //清理本地的模板文件
            HdlTemplateCommonLogic.Current.DeleteAllLocalFile();
            string localDir = Common.Config.Instance.FullPath;
            //获取全部的文件
            var listFile = HdlFileLogic.Current.GetFileFromDirectory(strDirectory);
            foreach (var file in listFile)
            {
                var sourseFile = System.IO.Path.Combine(strDirectory, file);
                if (file.StartsWith("ModelData_") == true)
                {
                    //复制模板数据文件到指定文件夹
                    HdlTemplateCommonLogic.Current.CopyTemplateFileToLocalDirectory2(sourseFile);
                    continue;
                }
                //其他文件都移到本地
                var targetFile = System.IO.Path.Combine(localDir, file);
                //复制文件
                try { System.IO.File.Copy(sourseFile, targetFile, true); }
                catch { }
            }
            //刷新本地缓存
            HdlUserCenterLogic.Current.RefreshAllMemory();
        }
        #endregion
        #region ■ 恢复临时备份_______________________
        /// <summary>
        /// 恢复临时备份
        /// </summary>
        public void RestoreTemporaryBackupData()
        {
            //如果本地存在临时备份的文件夹的话,则说明用户在查看模板的时候,强制关闭了App
            //这个时候,App再次启动的时候,则还原数据
            if (System.IO.Directory.Exists(HdlFileNameResourse.TemporaryBackupLocalFileDirectory) == false)
            {
                return;
            }
            //清空全部房间
            HdlRoomLogic.Current.DeleteAllRoom();
            //清空本地全部的场景数据
            HdlSceneLogic.Current.DeleteAllLocalScene();
            //清理本地的文件
            HdlFileLogic.Current.DeleteAllLocationFile(false);
            //清理本地的模板文件
            HdlTemplateCommonLogic.Current.DeleteAllLocalFile();
            //将备份中的模板文件复制到模板的文件夹
            HdlFileLogic.Current.CopyDirectoryFileToDirectory(HdlFileNameResourse.TemporaryBackupTemplateFileDirectory, HdlFileNameResourse.LocalTemplateDirectory);
            //将备份中的根目录文件复制到根目录
            HdlFileLogic.Current.CopyDirectoryFileToDirectory(HdlFileNameResourse.TemporaryBackupLocalFileDirectory, Common.Config.Instance.FullPath);
            //删除掉这个临时备份的文件夹
            HdlFileLogic.Current.DeleteDirectory(HdlFileNameResourse.TemporaryBackupLocalFileDirectory);
        }
        #endregion
        #region ■ 删除备份___________________________
        /// <summary>
        /// 删除云端备份
        /// </summary>
        /// <param name="i_folderId">备份的主键</param>
        /// <param name="mode">失败时是否显示tip消息</param>
        /// <returns></returns>
        public bool DeleteDbBackupData(string i_folderId, ShowNetCodeMode mode = ShowNetCodeMode.YES)
        {
            var pra = new { folderId = i_folderId, homeId = Config.Instance.Home.Id };
            var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("home-wisdom/app/backup/folder/delete", RestSharp.Method.POST, pra, null, null, CheckMode.A账号权限);
            //检测状态码
            if (HdlCheckLogic.Current.CheckNetCode(result, mode) == false)
            {
                return false;
            }
            return true;
        }
        /// <summary>
        /// 删除本地备份
        /// </summary>
        /// <param name="dirctoryName">文件夹名字</param>
        public void DeleteLocalBackupData(string dirctoryName)
        {
            string strPath = System.IO.Path.Combine(Shared.IO.FileUtils.RootPath, Common.Config.Instance.Guid, dirctoryName);
            if (System.IO.Directory.Exists(strPath) == true)
            {
                try { System.IO.Directory.Delete(strPath, true); }
                catch (Exception ex)
                { HdlLogLogic.Current.WriteLog(ex, "删除本地备份文件失败"); }
            }
        }
        #endregion
        #region ■ 上传自动备份_______________________
        /// <summary>
        /// 手动执行上传自动备份数据(0:没有可上传的自动备份数据 1:成功 -1:失败)
        /// </summary>
        /// <returns></returns>
        public int DoUpLoadAutoBackupDataByHand()
        {
            //编辑文件
            List<string> listEditor = this.GetLocalAutoBackupEditorFile();
            //删除文件
            List<string> listDelete = this.GetLocalAutoBackupDeleteFile();
            //没有数据
            if (listEditor.Count == 0 && listDelete.Count == 0)
            {
                return 0;
            }
            //开启进度条 正在上传备份文件
            ProgressFormBar.Current.Start();
            ProgressFormBar.Current.SetMsg(Language.StringByID(R.MyInternationalizationString.uBackupFileUploading));
            //上传文件到云端
            bool result = UpLoadAutoBackupFileToDB(listEditor);
            if (result == false)
            {
                ProgressFormBar.Current.Close();
                return -1;
            }
            //删除文件
            result = DoDeleteAutoBackFileFromDB(listDelete);
            if (result == false)
            {
                ProgressFormBar.Current.Close();
                return -1;
            }
            ProgressFormBar.Current.Close();
            return 1;
        }
        /// <summary>
        /// 上传文件到云端
        /// </summary>
        /// <param name="listFile">编辑或者添加的文件(目前已经不是上传它了)</param>
        /// <returns></returns>
        private bool UpLoadAutoBackupFileToDB(List<string> listFile)
        {
            //获取app的自动备份
            var listBackData = this.GetBackupListNameFromDB(BackUpMode.A自动备份);
            if (listBackData == null)
            {
                return false;
            }
            string strBackId = string.Empty;
            if (listBackData.Count == 0)
            {
                //创建一个新的备份
                strBackId = this.CreatNewBackupNameToDB("AutoBackup", BackUpMode.A自动备份);
                if (strBackId == null)
                {
                    return false;
                }
            }
            else
            {
                //自动备份只有一个
                strBackId = listBackData[0].Id;
            }
            string localPath = Config.Instance.FullPath;
            //将模板数据保存到到指定的文件夹中
            var templateName = HdlTemplateCommonLogic.Current.GetNewTemplateFileName(new DateTime(2000, 12, 31, 12, 59, 57));
            var templateFile = HdlTemplateCommonLogic.Current.SaveTemplateDataToFile(templateName, "HomeTemplate");
            //将模板bin文件移动到备份文件夹中
            var localTemplateName = System.IO.Path.Combine(localPath, templateName);
            try { System.IO.File.Move(templateFile, localTemplateName); }
            catch (Exception ex) { HdlLogLogic.Current.WriteLog(ex, "移动模板失败"); }
            //获取本地文件
            var listAllFile = HdlFileLogic.Current.GetRootPathListFile();
            var listUpFile = new List<string>();
            foreach (string fileName in listAllFile)
            {
                //判断指定文件是否需要上传(根目录的才判断)
                if (this.IsNotUpLoadFile(fileName) == true)
                {
                    continue;
                }
                //其他图片的资源文件,只有在变更了的时候,才上传
                if (fileName.EndsWith(".png") == true && listFile.Contains(fileName) == false)
                {
                    continue;
                }
                listUpFile.Add(fileName);
            }
            int listFileCount = listUpFile.Count;
            for (int i = 0; i < listUpFile.Count; i++)
            {
                string file = listUpFile[i];
                //读取文件内容
                var fileContent = HdlFileLogic.Current.ReadFileByteContent(System.IO.Path.Combine(localPath, file));
                if (fileContent == null)
                {
                    continue;
                }
                //执行上传
                var falge = this.DoUpLoadInfoToDB(strBackId, file, fileContent);
                if (falge == false)
                {
                    return false;
                }
                //设置进度值
                ProgressFormBar.Current.SetValue(i + 1, listFileCount);
            }
            //删除掉这个模板文件
            HdlFileLogic.Current.DeleteFile(localTemplateName);
            //删除文件
            var backPath = HdlFileNameResourse.AutoBackupDirectory;
            foreach (var file in listFile)
            {
                string fullName = System.IO.Path.Combine(backPath, file);
                HdlFileLogic.Current.DeleteFile(fullName);
            }
            return true;
        }
        /// <summary>
        /// 云端执行删除指定文件
        /// </summary>
        /// <param name="listData">删除的文件</param>
        /// <returns></returns>
        private bool DoDeleteAutoBackFileFromDB(List<string> listData)
        {
            if (listData.Count == 0)
            {
                return true;
            }
            //获取app的自动备份
            var data = this.GetBackupListNameFromDB(BackUpMode.A自动备份);
            if (data == null || data.Count == 0)
            {
                return true;
            }
            //自动备份只有一个
            var result = this.DeleteDbBackupData(data[0].Id);
            if (result == false)
            {
                return false;
            }
            //删除文件
            var backPath = HdlFileNameResourse.AutoBackupdeleteDirectory;
            foreach (var file in listData)
            {
                string fullName = System.IO.Path.Combine(backPath, file);
                HdlFileLogic.Current.DeleteFile(fullName);
            }
            return true;
        }
        #endregion
        #region ■ 获取本地自动备份文件_______________
        /// <summary>
        /// 获取本地自动备份目录下的添加或者编辑的文件
        /// </summary>
        /// <returns></returns>
        public List<string> GetLocalAutoBackupEditorFile()
        {
            return HdlFileLogic.Current.GetFileFromDirectory(HdlFileNameResourse.AutoBackupDirectory);
        }
        /// <summary>
        /// 获取本地自动备份目录下的删除的文件
        /// </summary>
        /// <returns></returns>
        public List<string> GetLocalAutoBackupDeleteFile()
        {
            return HdlFileLogic.Current.GetFileFromDirectory(HdlFileNameResourse.AutoBackupdeleteDirectory);
        }
        #endregion
        #region ■ 设置自动备份文件状态_______________
        /// <summary>
        /// 变更自动备份添加或者修改文件的状态
        /// </summary>
        /// <param name="fileName">文件的名字,不含路径</param>
        public void AddOrEditorAutoBackFileStatu(string fileName)
        {
            fileName = System.IO.Path.GetFileName(fileName);
            //自动备份目录
            string strBackPath = HdlFileNameResourse.AutoBackupDirectory;
            if (System.IO.Directory.Exists(strBackPath) == false)
            {
                //预创建个人中心全部的文件夹
                HdlFileLogic.Current.CreatAllUserCenterDirectory();
            }
            //自动删除备份目录
            string strdelBackPath = HdlFileNameResourse.AutoBackupdeleteDirectory;
            //如果删除列表里面有这个东西的话,移除掉
            string delFile = System.IO.Path.Combine(strdelBackPath, fileName);
            HdlFileLogic.Current.DeleteFile(delFile);
            string soureFile = System.IO.Path.Combine(Common.Config.Instance.FullPath, fileName);
            string newFile = System.IO.Path.Combine(strBackPath, fileName);
            //原原本本的复制文件到指定文件夹
            HdlFileLogic.Current.CopyFile(soureFile, newFile);
        }
        /// <summary>
        /// 变更自动备份删除文件的状态
        /// </summary>
        /// <param name="fileName">文件的名字,不含路径</param>
        public void DeleteAutoBackFileStatu(string fileName)
        {
            fileName = System.IO.Path.GetFileName(fileName);
            //自动删除备份目录
            string strBackPath = HdlFileNameResourse.AutoBackupdeleteDirectory;
            string newFile = System.IO.Path.Combine(strBackPath, fileName);
            //创建一个空文件
            var file = System.IO.File.Create(newFile);
            file.Close();
            //自动备份目录
            strBackPath = HdlFileNameResourse.AutoBackupDirectory;
            //如果备份列表里面有这个东西的话,移除掉
            string delFile = System.IO.Path.Combine(strBackPath, fileName);
            HdlFileLogic.Current.DeleteFile(delFile);
        }
        #endregion
        #region ■ 同步数据___________________________
        /// <summary>
        /// 同步云端数据(仅限APP启动之后) -1:异常   0:已经同步过,不需要同步  1:正常同步  2:没有自动备份数据
        /// </summary>
        /// <returns></returns>
        public int SynchronizeDbAutoBackupData()
        {
            //暂时不支持成员
            if (HdlUserCenterResourse.ResidenceOption.AuthorityNo == 3)
            {
                //同步服务器的分享内容
                HdlShardLogic.Current.SynchronizeDbSharedContent();
                return 1;
            }
            //判断是否能够同步数据
            string checkFile = HdlFileNameResourse.AutoDownLoadBackupCheckFile;
            //如果本地已经拥有了这个文件,则说明不是新手机,不再自动还原
            if (System.IO.File.Exists(checkFile) == true)
            {
                return 0;
            }
            //获取app的自动备份
            var listData = HdlBackupLogic.Current.GetBackupListNameFromDB(BackUpMode.A自动备份);
            if (listData == null)
            {
                return -1;
            }
            if (listData.Count == 0)
            {
                //创建一个空文件(标识已经完成同步)
                var file = System.IO.File.Create(checkFile);
                file.Close();
                return 2;
            }
            //自动备份只有一个
            string backId = listData[0].Id;
            //账号数据同步中
            ProgressFormBar.Current.Start();
            ProgressFormBar.Current.SetMsg(Language.StringByID(R.MyInternationalizationString.uAccountDataIsSynchronizing));
            //从云端获取备份的文件,然后存入本地指定的临时文件夹
            string tempDir = HdlBackupLogic.Current.GetBackFileFromDBAndSetToLocation(backId);
            if (tempDir == null)
            {
                //删除检测文件
                System.IO.File.Delete(checkFile);
                //关闭进度条
                ProgressFormBar.Current.Close();
                //同步失败
                return -1;
            }
            //如果读取到的文件完全没有问题,则清理本地的文件
            HdlFileLogic.Current.DeleteAllLocationFile(false);
            //没有错误的话,则移动到当前住宅文件夹下面
            HdlFileLogic.Current.MoveDirectoryFileToHomeDirectory(tempDir, true);
            //创建一个空文件(标识已经完成同步)
            var file2 = System.IO.File.Create(checkFile);
            file2.Close();
            //重新刷新住宅对象
            HdlUserCenterLogic.Current.RefreshHomeObject();
            //根据模板文件,恢复数据
            HdlTemplateCommonLogic.Current.RecoverDataByTemplateBinFile();
            //强制生成设备和网关文件
            HdlTemplateCommonLogic.Current.CreatDeviceAndGatewayFileFromMemoryByForce();
            //关闭进度条
            ProgressFormBar.Current.Close();
            return 1;
        }
        #endregion
        #region ■ 上传Log备份________________________
        /// <summary>
        /// 上传Log备份(隐匿功能)
        /// </summary>
        /// <returns></returns>
        public bool UpLoadLogBackup()
        {
            string upPath = HdlFileNameResourse.LogDirectory;
            if (HdlFileLogic.Current.GetFileFromDirectory(upPath).Count == 0)
            {
                //没有Log文件
                return true;
            }
            ProgressFormBar.Current.Start();
            ProgressFormBar.Current.SetMsg("正在上传Log文件");
            //从云端获取数据
            var pageData = this.GetBackupListNameFromDB(BackUpMode.A手动备份, ShowNetCodeMode.YES, true);
            if (pageData == null)
            {
                ProgressFormBar.Current.Close();
                return false;
            }
            string backId = string.Empty;
            for (int i = 0; i < pageData.Count; i++)
            {
                if (pageData[i].FolderName == HdlFileNameResourse.OptionBackupName)
                {
                    //获取功能备份的ID
                    backId = pageData[i].Id;
                    break;
                }
            }
            if (backId == string.Empty)
            {
                //创建新的备份
                backId = this.CreatNewBackupNameToDB(HdlFileNameResourse.OptionBackupName, BackUpMode.A手动备份);
                if (backId == null)
                {
                    ProgressFormBar.Current.Close();
                    return false;
                }
            }
            //上传Log文件
            bool result = this.UpLoadBackupFileToDB(backId, upPath, false);
            if (result == true)
            {
                try
                {
                    var listAllFile = HdlFileLogic.Current.GetFileFromDirectory(upPath);
                    if (listAllFile.Count > 10)
                    {
                        listAllFile.Sort();
                        while (listAllFile.Count >= 10)
                        {
                            System.IO.File.Delete(listAllFile[0]);
                            listAllFile.RemoveAt(0);
                        }
                    }
                }
                catch { }
            }
            ProgressFormBar.Current.Close();
            HdlThreadLogic.Current.RunMain(() =>
            {
                var contr = new ShowMsgControl(ShowMsgType.Tip, "Log上传成功");
                contr.Show();
            });
            return result;
        }
        /// <summary>
        /// 上传东西到隐匿功能备份
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="byteData"></param>
        /// <returns></returns>
        public bool UpLoadByteDataToOptionBackup(string fileName, byte[] byteData)
        {
            ProgressFormBar.Current.Start();
            ProgressFormBar.Current.SetMsg("正在上传文件");
            //从云端获取数据
            var pageData = this.GetBackupListNameFromDB(BackUpMode.A手动备份, ShowNetCodeMode.YES, true);
            if (pageData == null)
            {
                ProgressFormBar.Current.Close();
                HdlThreadLogic.Current.RunMain(() =>
                {
                    var contr = new ShowMsgControl(ShowMsgType.Tip, "获取功能备份失败");
                    contr.Show();
                });
                return false;
            }
            string backId = string.Empty;
            for (int i = 0; i < pageData.Count; i++)
            {
                if (pageData[i].FolderName == HdlFileNameResourse.OptionBackupName)
                {
                    //获取功能备份的ID
                    backId = pageData[i].Id;
                    break;
                }
            }
            if (backId == string.Empty)
            {
                //创建新的备份
                backId = this.CreatNewBackupNameToDB(HdlFileNameResourse.OptionBackupName, BackUpMode.A手动备份);
                if (backId == null)
                {
                    ProgressFormBar.Current.Close();
                    HdlThreadLogic.Current.RunMain(() =>
                    {
                        var contr = new ShowMsgControl(ShowMsgType.Tip, "创建功能备份失败");
                        contr.Show();
                    });
                    return false;
                }
            }
            //执行上传
            bool falge = DoUpLoadInfoToDB(backId, fileName, byteData);
            //关闭进度条
            ProgressFormBar.Current.Close();
            if (falge == false)
            {
                HdlThreadLogic.Current.RunMain(() =>
                {
                    var contr = new ShowMsgControl(ShowMsgType.Tip, "文件上传成功");
                    contr.Show();
                });
                return false;
            }
            HdlThreadLogic.Current.RunMain(() =>
            {
                var contr = new ShowMsgControl(ShowMsgType.Tip, "文件上传成功");
                contr.Show();
            });
            return true;
        }
        #endregion
        #region ■ 读取隐匿功能配置___________________
        /// <summary>
        /// 读取隐匿功能配置(不要在意返回值)
        /// </summary>
        /// <returns></returns>
        public bool LoadHideOption()
        {
            //先初始化
            HdlUserCenterResourse.HideOption = new HideOptionInfo();
            if (HdlUserCenterResourse.ResidenceOption.AuthorityNo != 1 && HdlUserCenterResourse.ResidenceOption.AuthorityNo != 2)
            {
                return true;
            }
            //从云端获取数据
            var pageData = this.GetBackupListNameFromDB(BackUpMode.A手动备份, ShowNetCodeMode.No, true);
            if (pageData == null)
            {
                return false;
            }
            string backId = string.Empty;
            for (int i = 0; i < pageData.Count; i++)
            {
                if (pageData[i].FolderName == HdlFileNameResourse.OptionBackupName)
                {
                    //获取功能备份的ID
                    backId = pageData[i].Id;
                    break;
                }
            }
            if (backId == string.Empty)
            {
                //没有功能配置
                return true;
            }
            //获取这个备份下面有多少个文件
            var dicFile = this.GetBackFileIDFromDB(backId, ShowNetCodeMode.No);
            if (dicFile == null)
            {
                return false;
            }
            if (dicFile.Count == 0)
            {
                return true;
            }
            //检测
            string checkKeys = HdlCommonLogic.Current.EncryptPassword(HdlUserCenterResourse.FileEncryptKey, HdlFileNameResourse.ShowOptionMenuFile + HdlUserCenterResourse.UserInfo.Account);
            if (dicFile.ContainsKey(checkKeys) == true)
            {
                //显示主页隐藏菜单(Debug用)
                HdlUserCenterResourse.HideOption.CenterHideMenu = 1;
            }
            checkKeys = HdlCommonLogic.Current.EncryptPassword(HdlUserCenterResourse.FileEncryptKey, HdlFileNameResourse.DetailedLogFile + HdlUserCenterResourse.UserInfo.Account);
            if (dicFile.ContainsKey(checkKeys) == true)
            {
                //出力详细Log(Debug用)
                HdlUserCenterResourse.HideOption.DetailedLog = 1;
            }
            checkKeys = HdlCommonLogic.Current.EncryptPassword(HdlUserCenterResourse.FileEncryptKey, HdlFileNameResourse.DeviceHistoryFile + HdlUserCenterResourse.UserInfo.Account);
            if (dicFile.ContainsKey(checkKeys) == true)
            {
                //显示设备历史版本(Debug用)
                HdlUserCenterResourse.HideOption.DeviceHistory = 1;
            }
            checkKeys = HdlCommonLogic.Current.EncryptPassword(HdlUserCenterResourse.FileEncryptKey, HdlFileNameResourse.StartDebugAppFile + HdlUserCenterResourse.UserInfo.Account);
            if (dicFile.ContainsKey(checkKeys) == true)
            {
                //开启后台调试App功能(Debug用)
                HdlUserCenterResourse.HideOption.StartDebugApp = 1;
            }
            checkKeys = HdlCommonLogic.Current.EncryptPassword(HdlUserCenterResourse.FileEncryptKey, HdlFileNameResourse.CheckDeviceTypeFile + HdlUserCenterResourse.UserInfo.Account);
            if (dicFile.ContainsKey(checkKeys) == true)
            {
                //开启检测设备Type的(Debug用)
                HdlUserCenterResourse.HideOption.CheckDeviceType = 1;
            }
            return true;
        }
        #endregion
        #region ■ 备份提醒___________________________
        /// <summary>
        /// 保存备份提醒设置到本地
        /// </summary>
        /// <param name="notPrompted">不再提示</param>
        /// <param name="day"></param>
        public void SaveBackupNotPrompted(bool notPrompted, int day = -1)
        {
            //文件全路径
            string fullName = HdlFileNameResourse.AutoBackupNotPromptedFile;
            BackupNotPrompted info = null;
            if (System.IO.File.Exists(fullName) == true)
            {
                var data = HdlFileLogic.Current.ReadFileByteContent(fullName);
                info = JsonConvert.DeserializeObject<BackupNotPrompted>(System.Text.Encoding.UTF8.GetString(data));
            }
            if (info == null)
            {
                info = new BackupNotPrompted();
            }
            info.NotPrompted = notPrompted;
            if (day != -1)
            {
                info.OldDay = DateTime.Now.ToString("yyyy-MM-dd");
                info.Day = day;
            }
            //保存
            HdlFileLogic.Current.SaveFileContent(fullName, info);
        }
        /// <summary>
        /// 显示自动备份的界面
        /// </summary>
        public void ShowAutoBackupPromptedForm()
        {
            if (HdlUserCenterResourse.ResidenceOption.AuthorityNo == 3)
            {
                //暂不支持成员
                return;
            }
            //判断是否有文件变更了
            if (CheckAutoBackupFileIsChanged() == false)
            {
                return;
            }
            //判断能否显示自动备份的界面
            if (this.CheckCanShowAutoBackupForm() == true)
            {
                //HdlThreadLogic.Current.RunMain(() =>
                //{
                //    var form = new UserCenter.HdlBackup.HdlAutoBackupForm();
                //    form.AddForm();
                //});
            }
        }
        /// <summary>
        /// 检测自动备份文件是否变更过
        /// </summary>
        /// <returns></returns>
        private bool CheckAutoBackupFileIsChanged()
        {
            List<string> listFile1 = HdlFileLogic.Current.GetFileFromDirectory(HdlFileNameResourse.AutoBackupDirectory);
            List<string> listFile2 = this.GetLocalAutoBackupDeleteFile();
            if (listFile1.Count == 0 && listFile2.Count == 0)
            {
                //没有文件变更
                return false;
            }
            if (listFile2.Count > 0)
            {
                //有文件被删除
                return true;
            }
            foreach (var fileName in listFile1)
            {
                //住宅和收藏文件,不作为判断标准
                if (fileName.StartsWith("House_") == true
                  || fileName == "Room_Favorite.json")
                {
                    continue;
                }
                return true;
            }
            return false;
        }
        /// <summary>
        /// 检测能否显示自动备份的界面
        /// </summary>
        /// <returns></returns>
        private bool CheckCanShowAutoBackupForm()
        {
            //文件全路径
            string fullName = HdlFileNameResourse.AutoBackupNotPromptedFile;
            if (System.IO.File.Exists(fullName) == false)
            {
                //本地没有存在这个文件
                return true;
            }
            BackupNotPrompted info = null;
            var data = HdlFileLogic.Current.ReadFileByteContent(fullName);
            info = JsonConvert.DeserializeObject<BackupNotPrompted>(System.Text.Encoding.UTF8.GetString(data));
            if (info.NotPrompted == true)
            {
                //不再提示
                return false;
            }
            if (info.Day == 0)
            {
                return true;
            }
            DateTime oldTime = Convert.ToDateTime(info.OldDay);
            int intDay = (DateTime.Now - oldTime).Days;
            //时间已经超过
            if (intDay >= info.Day)
            {
                return true;
            }
            return false;
        }
        #endregion
        #region ■ 一般方法___________________________
        /// <summary>
        /// 判断是否是应该上传的文件
        /// </summary>
        /// <param name="file"></param>
        /// <returns></returns>
        public bool IsNotUpLoadFile(string file)
        {
            if (file.StartsWith("Device_") == true
               || file.StartsWith("Gateway_") == true
               || file.StartsWith("Room_") == true
               || file.StartsWith("Scene_") == true)
            {
                //设备,网关,房间,场景文件不需要上传,它已经保存在bin模板文件中
                return true;
            }
            return false;
        }
        /// <summary>
        /// 获取备份类型的字符标识
        /// </summary>
        /// <param name="i_mode"></param>
        /// <returns></returns>
        public string GetBackUpModeText(BackUpMode i_mode)
        {
            if (i_mode == BackUpMode.A自动备份)
            {
                return "AUTOMATIC_USER_BACKUP";
            }
            return "USER_DEFINED_BACKUP";
        }
        /// <summary>
        /// 删除全部的自动备份的本地文件(此函数用于读取自动备份的时候使用)
        /// </summary>
        public void DeleteAllAutoBackupFile()
        {
            //清空自动备份【文件夹】(编辑,追加)
            string dirPath = HdlFileNameResourse.AutoBackupDirectory;
            HdlFileLogic.Current.DeleteDirectory(dirPath);
            HdlFileLogic.Current.CreateDirectory(dirPath, true);
            //清空自动备份【文件夹】(删除)
            dirPath = HdlFileNameResourse.AutoBackupdeleteDirectory;
            HdlFileLogic.Current.DeleteDirectory(dirPath);
            HdlFileLogic.Current.CreateDirectory(dirPath, true);
        }
        #endregion
        #region ■ 数据结构___________________________
        /// <summary>
        /// 自动备份不需要再次提醒的结构体
        /// </summary>
        private class BackupNotPrompted
        {
            /// <summary>
            /// 不再提示
            /// </summary>
            public bool NotPrompted = false;
            /// <summary>
            /// 前一次的日期:2019-01-01(格式)
            /// </summary>
            public string OldDay = string.Empty;
            /// <summary>
            /// 相隔日期天数
            /// </summary>
            public int Day = 0;
        }
        #endregion
    }
}