New file |
| | |
| | | using Shared.Common; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Text; |
| | | |
| | | namespace Shared.Phone |
| | | { |
| | | /// <summary> |
| | | /// 住宅对象的逻辑 |
| | | /// </summary> |
| | | public class HdlResidenceLogic |
| | | { |
| | | #region ■ 变量声明___________________________ |
| | | |
| | | /// <summary> |
| | | /// 住宅对象的逻辑 |
| | | /// </summary> |
| | | private static HdlResidenceLogic m_Current = null; |
| | | /// <summary> |
| | | /// 住宅对象的逻辑 |
| | | /// </summary> |
| | | public static HdlResidenceLogic Current |
| | | { |
| | | get |
| | | { |
| | | if (m_Current == null) |
| | | { |
| | | m_Current = new HdlResidenceLogic(); |
| | | } |
| | | return m_Current; |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 创建新住宅_________________________ |
| | | |
| | | /// <summary> |
| | | /// 创建新的住宅(返回住宅id,null代表失败) |
| | | /// </summary> |
| | | /// <param name="residenceName">住宅名称</param> |
| | | /// <param name="listUintName">自定义单元的标题名称(homeApp设置为null)</param> |
| | | /// <param name="listUintContent">自定义单元的内容(homeApp设置为null)</param> |
| | | /// <param name="TemplateMode">1:无模板有设备 2:有模板有设备 3:无模板无设备</param> |
| | | public string CreatNewResidence(string residenceName, List<string> listUintName, |
| | | List<string> listUintContent, int TemplateMode = 1) |
| | | { |
| | | var pra = new { homeId = 0, homeName = residenceName, homeType = "ZIGBEE" }; |
| | | //添加住宅 |
| | | var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("home-wisdom/app/home/add", RestSharp.Method.POST, pra); |
| | | //检测状态码 |
| | | if (HdlCheckLogic.Current.CheckNetCode(result, ShowNetCodeMode.YES) == false) |
| | | { |
| | | return null; |
| | | } |
| | | var newInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<IdInfoClass>(result.Data.ToString()); |
| | | |
| | | if (listUintName != null) |
| | | { |
| | | //编辑住宅区域 |
| | | var success = this.EditorResidenceArea(newInfo.Id, listUintName, listUintContent); |
| | | if (success == false) |
| | | { |
| | | //编辑住宅区域失败 |
| | | HdlMessageLogic.Current.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.uEditorResidenceAreaFail)); |
| | | } |
| | | } |
| | | |
| | | //添加住宅到缓存 |
| | | this.AddHouseToMemmory(newInfo.Id, residenceName, listUintName, |
| | | listUintContent, TemplateMode); |
| | | |
| | | return newInfo.Id; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 添加住宅到缓存 |
| | | /// </summary> |
| | | /// <param name="houseId">住宅id</param> |
| | | /// <param name="houseName">住宅名称.</param> |
| | | /// <param name="listUintName">自定义单元的标题名称(homeApp设置为null)</param> |
| | | /// <param name="listUintContent">自定义单元的内容(homeApp设置为null)</param> |
| | | /// <param name="TemplateMode">1:无模板有设备 2:有模板有设备 3:无模板无设备</param> |
| | | /// <param name="isOthreShare">是否为其他主用户分享过来的住宅</param> |
| | | /// <param name="accountType">仅子账号登陆的时候使用,当【IsOthreShare】为"true",并且【AccountType】为"1"时,该账号拥有管理员权限</param> |
| | | public void AddHouseToMemmory(string houseId, string houseName, |
| | | List<string> listUintName, List<string> listUintContent, int TemplateMode = 1, |
| | | bool isOthreShare = false, int accountType = 0) |
| | | { |
| | | var home = new Common.House(); |
| | | home.Id = houseId; |
| | | home.Name = houseName; |
| | | home.IsOtherShare = isOthreShare; |
| | | home.AccountType = accountType; |
| | | |
| | | if (listUintName != null) |
| | | { |
| | | home.ListUintName.AddRange(listUintName); |
| | | home.ListUintContent.AddRange(listUintContent); |
| | | } |
| | | home.TemplateMode = TemplateMode; |
| | | if (TemplateMode == 3) |
| | | { |
| | | //标记为虚拟住宅 |
| | | home.IsVirtually = true; |
| | | } |
| | | |
| | | //创建文件夹 |
| | | Common.Global.CreateHomeDirectory(houseId); |
| | | home.Save(); |
| | | Common.Config.Instance.HomeFilePathList.Add(home.FileName); |
| | | Common.Config.Instance.Save(); |
| | | //如果当前没有住宅的话 |
| | | if (Common.Config.Instance.Home.Id == string.Empty) |
| | | { |
| | | Common.Config.Instance.Home = this.GetHouseByFilePath(home.FileName); |
| | | Common.Config.Instance.HomeId = home.Id; |
| | | } |
| | | } |
| | | |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 切换住宅___________________________ |
| | | |
| | | /// <summary> |
| | | /// 切换住宅(注:它只切换内存,界面并未处理) |
| | | /// </summary> |
| | | /// <param name="residenceId"></param> |
| | | /// <returns></returns> |
| | | public bool SwitchResidence(string residenceId) |
| | | { |
| | | //打开进度条 |
| | | ProgressBar.Show(); |
| | | |
| | | Config.Instance.HomeId = residenceId; |
| | | //重新初始化住宅对象 |
| | | Config.Instance.Home = this.GetHouseByHouseId(residenceId); |
| | | Config.Instance.Save(); |
| | | //刷新个人中心的内存及线程 |
| | | bool result = HdlUserCenterLogic.Current.InitUserCenterMenmoryAndThread(false); |
| | | |
| | | //关闭进度条 |
| | | ProgressBar.Close(); |
| | | |
| | | return result; |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 编辑住宅___________________________ |
| | | |
| | | /// <summary> |
| | | /// 编辑住宅 |
| | | /// </summary> |
| | | /// <param name="residenceId">住宅id</param> |
| | | /// <param name="residenceName">住宅名称</param> |
| | | /// <param name="listUintName">自定义单元的标题名称(homeApp设置为null)</param> |
| | | /// <param name="listUintContent">自定义单元的内容(homeApp设置为null)</param> |
| | | /// <param name="TemplateMode">1:无模板有设备 2:有模板有设备 3:无模板无设备</param> |
| | | /// <returns></returns> |
| | | public bool EditorResidenceName(string residenceId, string residenceName, |
| | | List<string> listUintName, List<string> listUintContent, int TemplateMode = 1) |
| | | { |
| | | var pra = new { homeId = Config.Instance.Home.Id, homeType = "ZIGBEE", homeName = residenceName }; |
| | | var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("home-wisdom/app/home/update", RestSharp.Method.POST, pra, null, null, CheckMode.A账号权限); |
| | | //检测状态码 |
| | | if (HdlCheckLogic.Current.CheckNetCode(result, ShowNetCodeMode.YES) == false) |
| | | { |
| | | return false; |
| | | } |
| | | if (listUintName != null) |
| | | { |
| | | //编辑住宅区域 |
| | | var success = this.EditorResidenceArea(residenceId, listUintName, listUintContent); |
| | | if (success == false) |
| | | { |
| | | //编辑住宅区域失败 |
| | | HdlMessageLogic.Current.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.uEditorResidenceAreaFail)); |
| | | } |
| | | } |
| | | //刷新内存的住宅名 |
| | | this.EditorHouseByHouseId(residenceId, residenceName, listUintName, listUintContent, TemplateMode); |
| | | |
| | | return true; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 编辑缓存住宅 |
| | | /// </summary> |
| | | /// <param name="residenceId">住宅id</param> |
| | | /// <param name="residenceName">住宅名称</param> |
| | | /// <param name="listUintName">自定义单元的标题名称(homeApp设置为null)</param> |
| | | /// <param name="listUintContent">自定义单元的内容(homeApp设置为null)</param> |
| | | /// <param name="TemplateMode">1:无模板有设备 2:有模板有设备 3:无模板无设备</param> |
| | | public void EditorHouseByHouseId(string residenceId, string residenceName, |
| | | List<string> listUintName, List<string> listUintContent, int TemplateMode = 1) |
| | | { |
| | | House home = Config.Instance.Home; |
| | | if (Config.Instance.Home.Id != residenceId) |
| | | { |
| | | //从缓存中获取 |
| | | home = GetHouseByHouseId(residenceId); |
| | | } |
| | | if (home == null) |
| | | { |
| | | return; |
| | | } |
| | | home.Name = residenceName; |
| | | if (listUintName != null) |
| | | { |
| | | home.ListUintName.Clear(); |
| | | home.ListUintName.AddRange(listUintName); |
| | | |
| | | home.ListUintContent.Clear(); |
| | | home.ListUintContent.AddRange(listUintContent); |
| | | } |
| | | home.TemplateMode = TemplateMode; |
| | | if (TemplateMode == 3) |
| | | { |
| | | //标记为虚拟住宅 |
| | | home.IsVirtually = true; |
| | | } |
| | | home.Save(); |
| | | //住宅修改名称的话,主页需要重新刷新 |
| | | UserView.UserPage.Instance.RefreshAllForm = true; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 编辑住宅区域 |
| | | /// </summary> |
| | | /// <param name="residenceId">住宅id</param> |
| | | /// <param name="listUintName">自定义单元的标题名称</param> |
| | | /// <param name="listUintContent">自定义单元的内容</param> |
| | | /// <returns></returns> |
| | | private bool EditorResidenceArea(string residenceId, List<string> listUintName, List<string> listUintContent) |
| | | { |
| | | //☆マーク☆ 住宅区域 |
| | | return true; |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 编辑住宅经纬度_____________________ |
| | | |
| | | /// <summary> |
| | | /// 编辑住宅经纬度 |
| | | /// </summary> |
| | | /// <param name="i_latitude">纬度</param> |
| | | /// <param name="i_longitude">经度</param> |
| | | /// <param name="i_addresName">位置名称</param> |
| | | /// <param name="mode">失败时是否显示tip消息</param> |
| | | /// <returns></returns> |
| | | public bool EditorResidenceLongitudeAndLatitude(double i_latitude, double i_longitude, string i_addresName, ShowNetCodeMode mode = ShowNetCodeMode.YES) |
| | | { |
| | | //如果不是虚拟住宅,才更新云端 |
| | | if (Config.Instance.Home.IsVirtually == true) |
| | | { |
| | | //保存缓存 |
| | | Config.Instance.Home.Longitude = i_longitude; |
| | | Config.Instance.Home.Latitude = i_latitude; |
| | | Config.Instance.Home.ResidenceAddressName = i_addresName; |
| | | Config.Instance.Home.Save(); |
| | | return true; |
| | | } |
| | | |
| | | var pra = new { homeId = Config.Instance.Home.Id, homeType = "ZIGBEE", latitude = i_latitude, longitude = i_longitude }; |
| | | var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("home-wisdom/app/home/update", RestSharp.Method.POST, pra, null, null, CheckMode.A账号权限); |
| | | //检测状态码 |
| | | if (HdlCheckLogic.Current.CheckNetCode(result, mode) == false) |
| | | { |
| | | return false; |
| | | } |
| | | //保存缓存 |
| | | Config.Instance.Home.Longitude = i_longitude; |
| | | Config.Instance.Home.Latitude = i_latitude; |
| | | Config.Instance.Home.ResidenceAddressName = i_addresName; |
| | | Config.Instance.Home.Save(); |
| | | |
| | | //设置全部网关的住宅地址 |
| | | var listGateway = HdlGatewayLogic.Current.GetAllLocalGateway(); |
| | | foreach (var gateway in listGateway) |
| | | { |
| | | //不判断是否失败 |
| | | HdlGatewayLogic.Current.SetGatewaySite(gateway.GwId, i_longitude, i_latitude, ShowErrorMode.NO); |
| | | } |
| | | |
| | | return true; |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 获取住宅___________________________ |
| | | |
| | | /// <summary> |
| | | /// 通过【id】获取住宅 |
| | | /// </summary> |
| | | /// <returns>The house by house identifier.</returns> |
| | | /// <param name="houseId">住宅id</param> |
| | | public House GetHouseByHouseId(string houseId) |
| | | { |
| | | var path = System.IO.Path.Combine(Shared.IO.FileUtils.RootPath, Config.Instance.Guid, houseId, $"House_{houseId}.json"); |
| | | var file = HdlFileLogic.Current.ReadFileByteContent(path); |
| | | if (file == null) |
| | | { |
| | | return null; |
| | | } |
| | | return Newtonsoft.Json.JsonConvert.DeserializeObject<House>(System.Text.Encoding.UTF8.GetString(file)); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 通过【文件路径】获取住宅 |
| | | /// </summary> |
| | | /// <returns>The house by file path.</returns> |
| | | /// <param name="filePath">文件路径</param> |
| | | public House GetHouseByFilePath(string filePath) |
| | | { |
| | | var path = System.IO.Path.Combine(Shared.IO.FileUtils.RootPath, Config.Instance.Guid, GetHouseIdByFilePath(filePath), filePath); |
| | | var file = HdlFileLogic.Current.ReadFileByteContent(path); |
| | | if (file == null) |
| | | { |
| | | return null; |
| | | } |
| | | return Newtonsoft.Json.JsonConvert.DeserializeObject<House>(System.Text.Encoding.UTF8.GetString(file)); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 获取云端住宅列表___________________ |
| | | |
| | | /// <summary> |
| | | /// 登陆的时候,获取云端住宅列表(0:当前没有网络的情况下加载本地住宅 1:通过联网加载及校验本地住宅) |
| | | /// </summary> |
| | | /// <param name="mode">失败时是否显示tip消息</param> |
| | | /// <returns></returns> |
| | | public int GetHomeListsFromDbOnLogin(ShowNetCodeMode mode = ShowNetCodeMode.YES) |
| | | { |
| | | //获取云端住宅数据 |
| | | var listHouseData = this.GetHomeListsFromDb(mode); |
| | | if (listHouseData == null) |
| | | { |
| | | return 0; |
| | | } |
| | | |
| | | //清空当前住宅列表 |
| | | Config.Instance.HomeFilePathList.Clear(); |
| | | var listHouse = new List<House>(); |
| | | foreach (var residence in listHouseData) |
| | | { |
| | | //刷新住宅对象的缓存 |
| | | var house = this.RefreshResidenceMemory(residence); |
| | | |
| | | listHouse.Add(house); |
| | | } |
| | | |
| | | //检测本地的住宅文件是否合法 |
| | | var listLocal = this.GetAllLocalResidenceListByDirectory(); |
| | | foreach (var myHouse in listLocal) |
| | | { |
| | | //如果本地存在不属于他的住宅文件,则删除 |
| | | if (myHouse.HouseDataDiv == 1 && Config.Instance.HomeFilePathList.Contains(myHouse.FileName) == false) |
| | | { |
| | | string housePath = System.IO.Path.Combine(Shared.IO.FileUtils.RootPath, Config.Instance.Guid, myHouse.Id); |
| | | HdlFileLogic.Current.DeleteDirectory(housePath); |
| | | } |
| | | } |
| | | |
| | | //如果切换了账号,或者原来的id不存在,则重置住宅ID |
| | | if (Config.Instance.TheSameLoginAccount == false || |
| | | Config.Instance.HomeFilePathList.Find((obj) => obj == $"House_{Config.Instance.HomeId}.json") == null) |
| | | { |
| | | Config.Instance.HomeId = listHouse.Count > 0 ? listHouse[0].Id : string.Empty; |
| | | foreach (var house in listHouse) |
| | | { |
| | | //初始选择它自己的住宅 |
| | | if (house.IsOtherShare == false) |
| | | { |
| | | Config.Instance.HomeId = house.Id; |
| | | Config.Instance.Home = GetHouseByHouseId(house.Id); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | Config.Instance.Save(); |
| | | return 1; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取云端住宅列表 |
| | | /// </summary> |
| | | /// <param name="mode">失败时是否显示tip消息</param> |
| | | /// <returns></returns> |
| | | public List<ResidenceInformation> GetHomeListsFromDb(ShowNetCodeMode mode = ShowNetCodeMode.YES) |
| | | { |
| | | var pra = new { homeType = "ZIGBEE" }; |
| | | |
| | | var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("home-wisdom/app/home/list", RestSharp.Method.POST, pra); |
| | | //检测状态码 |
| | | if (HdlCheckLogic.Current.CheckNetCode(result, mode) == false) |
| | | { |
| | | return null; |
| | | } |
| | | var listTemp = Newtonsoft.Json.JsonConvert.DeserializeObject<List<ResidenceInformation>>(result.Data.ToString()); |
| | | var listData = new List<ResidenceInformation>(); |
| | | foreach (var data in listTemp) |
| | | { |
| | | if (data.HomeType == "ZIGBEE") |
| | | { |
| | | listData.Add(data); |
| | | } |
| | | } |
| | | return this.SortHouse(listData); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 刷新住宅对象的缓存 |
| | | /// </summary> |
| | | /// <param name="i_residence">云端返回的数据转换成的数据</param> |
| | | public House RefreshResidenceMemory(ResidenceInformation i_residence) |
| | | { |
| | | string fileName = $"House_{i_residence.Id}.json"; |
| | | if (Config.Instance.HomeFilePathList.Contains(fileName) == false) |
| | | { |
| | | Config.Instance.HomeFilePathList.Add(fileName); |
| | | } |
| | | var house = this.GetHouseByHouseId(i_residence.Id); |
| | | if (house == null) |
| | | { |
| | | house = new House(); |
| | | } |
| | | house.Id = i_residence.Id; |
| | | house.Name = i_residence.HomeName; |
| | | house.IsOtherShare = i_residence.IsOtherShare; |
| | | house.AccountType = i_residence.AccountType == "ADMIN" ? 1 : 0; |
| | | house.Longitude = i_residence.Longitude; |
| | | house.Latitude = i_residence.Latitude; |
| | | house.IsRemoteControl = i_residence.IsRemoteControl; |
| | | house.LastEditorTime = HdlCommonLogic.Current.ConvertUtcTimeToLocalTime2(i_residence.ModifyTime).ToString("yyyy/MM/dd HH:mm"); |
| | | |
| | | Global.CreateHomeDirectory(i_residence.Id); |
| | | |
| | | house.Save(false); |
| | | |
| | | return house; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 从云端,刷新住宅的区域(true:会刷新i_house的List变量, false:什么都不处理) |
| | | /// </summary> |
| | | /// <param name="i_homeId">住宅ID</param> |
| | | public bool RefreshHomeAreaFromDb(string i_homeId) |
| | | { |
| | | var house = this.GetHouseByHouseId(i_homeId); |
| | | if (house == null) |
| | | { |
| | | return false; |
| | | } |
| | | //var pra2 = new |
| | | //{ |
| | | // RequestVersion = CommonPage.RequestVersion, |
| | | // RequestSource = 5, |
| | | // LoginAccessToken = Common.Config.Instance.Token, |
| | | // HomeId = i_house.Id |
| | | //}; |
| | | //var result = UserCenterLogic.GetResponseDataByRequestHttps("App/GetHomeDirectory", false, pra2, new List<string> { "NotCheck" }); |
| | | //if (result != null) |
| | | //{ |
| | | // var listData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<ResidenceAreaInfo>>(result); |
| | | // //初始化 |
| | | // i_house.ListUintContent = new List<string>(); |
| | | // i_house.ListUintName = new List<string>(); |
| | | // foreach (var data in listData) |
| | | // { |
| | | // i_house.ListUintName.Add(data.Tag); |
| | | // i_house.ListUintContent.Add(data.Remark); |
| | | // } |
| | | // return true; |
| | | //} |
| | | return false; |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 获取本地住宅列表___________________ |
| | | |
| | | /// <summary> |
| | | /// 获取本地住宅列表 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public List<Common.House> GetLocalResidenceList() |
| | | { |
| | | //如果是虚拟住宅,则从根目录中获取 |
| | | if (Common.Config.Instance.Home.IsVirtually == true) |
| | | { |
| | | //从文件夹中获取全部的住宅对象 |
| | | return this.GetAllLocalResidenceListByDirectory(); |
| | | } |
| | | |
| | | var listHome = new List<Common.House>(); |
| | | foreach (var housePath in Common.Config.Instance.HomeFilePathList) |
| | | { |
| | | var home = this.GetHouseByFilePath(housePath); |
| | | if (home == null) |
| | | { |
| | | continue; |
| | | } |
| | | listHome.Add(home); |
| | | } |
| | | return this.SortHouse(listHome); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 从文件夹中获取全部的住宅对象 |
| | | /// </summary> |
| | | /// <param name="getGatewayId">是否获取网关ID(存在listGatewayId里面)</param> |
| | | /// <returns></returns> |
| | | public List<House> GetAllLocalResidenceListByDirectory(bool getGatewayId = false) |
| | | { |
| | | var strPath = System.IO.Path.Combine(Shared.IO.FileUtils.RootPath, Common.Config.Instance.Guid); |
| | | var listHome = new List<Common.House>(); |
| | | //获取全部的文件夹 |
| | | var listDirectory = new List<string>(); |
| | | var arryDirs = System.IO.Directory.GetDirectories(strPath); |
| | | foreach (var file in arryDirs) |
| | | { |
| | | string[] arry = file.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries); |
| | | listDirectory.Add(arry[arry.Length - 1]); |
| | | } |
| | | foreach (var myDir in listDirectory) |
| | | { |
| | | //获取各个文件夹里面的住宅文件 |
| | | string nowPath = System.IO.Path.Combine(strPath, myDir); |
| | | var arryHouse = System.IO.Directory.GetFiles(nowPath, "House_*"); |
| | | if (arryHouse.Length > 0) |
| | | { |
| | | //读取文件内容 |
| | | var textValue = HdlFileLogic.Current.ReadFileTextContent(System.IO.Path.Combine(nowPath, arryHouse[0])); |
| | | if (textValue == null) |
| | | { |
| | | continue; |
| | | } |
| | | var myHouse = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.House>(textValue); |
| | | listHome.Add(myHouse); |
| | | //如果读取网关id的话 |
| | | if (getGatewayId == true) |
| | | { |
| | | //标识初始化完成 |
| | | myHouse.listGatewayId = new List<string>(); |
| | | //获取网关文件 |
| | | var arryGateway = System.IO.Directory.GetFiles(nowPath, "Gateway_*"); |
| | | foreach (var myFile in arryGateway) |
| | | { |
| | | string[] Arry = myFile.Split(new string[] { "_" }, StringSplitOptions.RemoveEmptyEntries); |
| | | if (Arry.Length >= 3) |
| | | { |
| | | //获取其网关id |
| | | myHouse.listGatewayId.Add(Arry[2]); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return this.SortHouse(listHome); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 从文件夹中获取全部备份住宅对象 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public List<House> GetAllLocalBackupResidenceListByDirectory() |
| | | { |
| | | var strPath = System.IO.Path.Combine(IO.FileUtils.RootPath, Config.Instance.Guid); |
| | | var listHome = new List<House>(); |
| | | //获取全部的文件夹 |
| | | var listDirectory = new List<string>(); |
| | | var arryDirs = System.IO.Directory.GetDirectories(strPath); |
| | | foreach (var file in arryDirs) |
| | | { |
| | | string[] arry = file.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries); |
| | | listDirectory.Add(arry[arry.Length - 1]); |
| | | } |
| | | foreach (var myDir in listDirectory) |
| | | { |
| | | if (myDir.StartsWith("BackupResidenceData") == false |
| | | && myDir.StartsWith("DownLoadResidenceData") == false) |
| | | { |
| | | //只要手动备份和云端下载的 |
| | | continue; |
| | | } |
| | | //获取各个文件夹里面的住宅文件 |
| | | string nowPath = System.IO.Path.Combine(strPath, myDir); |
| | | var arryHouse = System.IO.Directory.GetFiles(nowPath, "House_*"); |
| | | if (arryHouse.Length > 0) |
| | | { |
| | | //读取文件内容 |
| | | var textValue = HdlFileLogic.Current.ReadFileTextContent(System.IO.Path.Combine(nowPath, arryHouse[0])); |
| | | if (textValue == null) |
| | | { |
| | | continue; |
| | | } |
| | | var myHouse = Newtonsoft.Json.JsonConvert.DeserializeObject<House>(textValue); |
| | | if (myHouse.Id != Config.Instance.Home.Id) |
| | | { |
| | | //不是这个住宅的备份 |
| | | continue; |
| | | } |
| | | if (myDir.StartsWith("BackupResidenceData") == true) |
| | | { |
| | | //此住宅数据是临时备份数据 |
| | | myHouse.HouseDataDiv = 2; |
| | | myHouse.SaveDirctoryName = myDir; |
| | | } |
| | | else if (myDir.StartsWith("DownLoadResidenceData") == true) |
| | | { |
| | | //此住宅数据是从云端下载的备份数据 |
| | | myHouse.HouseDataDiv = 3; |
| | | myHouse.SaveDirctoryName = myDir; |
| | | } |
| | | listHome.Add(myHouse); |
| | | } |
| | | } |
| | | return listHome; |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 住宅排序___________________________ |
| | | |
| | | /// <summary> |
| | | /// 住宅排序 |
| | | /// </summary> |
| | | /// <param name="i_listHouse"></param> |
| | | /// <returns></returns> |
| | | public List<House> SortHouse(List<House> i_listHouse) |
| | | { |
| | | //从一堆文字中,获取这一堆文字里面数字字符串的最长长度 |
| | | var listName = new List<string>(); |
| | | foreach (var house in i_listHouse) |
| | | { |
| | | listName.Add(house.Name); |
| | | } |
| | | int numberLength = HdlCommonLogic.Current.GetNumberMaxLength(listName); |
| | | |
| | | var listSort = new List<string[]>(); |
| | | var dicHouse = new Dictionary<string, House>(); |
| | | foreach (var house in i_listHouse) |
| | | { |
| | | //临时缓存 |
| | | dicHouse[house.Id] = house; |
| | | |
| | | var strArry = new string[2]; |
| | | strArry[0] = house.Id; |
| | | strArry[1] = string.Empty; |
| | | |
| | | string value = string.Empty; |
| | | foreach (var c in house.Name) |
| | | { |
| | | if (char.IsNumber(c) == true) |
| | | { |
| | | //数字 |
| | | value += c.ToString(); |
| | | continue; |
| | | } |
| | | else if (value != string.Empty) |
| | | { |
| | | //如果房间名字带有数字的话,则左边加零,因为这里有个排序的问题 |
| | | strArry[1] += value.PadLeft(numberLength, '0'); |
| | | value = string.Empty; |
| | | } |
| | | strArry[1] += c.ToString(); |
| | | } |
| | | if (value != string.Empty) |
| | | { |
| | | //以数字结尾的话 |
| | | strArry[1] += value.PadLeft(numberLength, '0'); |
| | | } |
| | | listSort.Add(strArry); |
| | | } |
| | | //排序 |
| | | listSort.Sort((obj1, obj2) => |
| | | { |
| | | if (obj1[1].CompareTo(obj2[1]) > 0) |
| | | { |
| | | return 1; |
| | | } |
| | | return -1; |
| | | }); |
| | | var listSortHouse = new List<House>(); |
| | | foreach (var strArry in listSort) |
| | | { |
| | | listSortHouse.Add(dicHouse[strArry[0]]); |
| | | } |
| | | return listSortHouse; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 云端住宅排序 |
| | | /// </summary> |
| | | /// <param name="i_listData"></param> |
| | | /// <returns></returns> |
| | | public List<ResidenceInformation> SortHouse(List<ResidenceInformation> i_listData) |
| | | { |
| | | //从一堆文字中,获取这一堆文字里面数字字符串的最长长度 |
| | | var listName = new List<string>(); |
| | | foreach (var house in i_listData) |
| | | { |
| | | listName.Add(house.HomeName); |
| | | } |
| | | int numberLength = HdlCommonLogic.Current.GetNumberMaxLength(listName); |
| | | |
| | | var listSort = new List<string[]>(); |
| | | var dicHouse = new Dictionary<string, ResidenceInformation>(); |
| | | foreach (var house in i_listData) |
| | | { |
| | | //临时缓存 |
| | | dicHouse[house.Id] = house; |
| | | |
| | | var strArry = new string[2]; |
| | | strArry[0] = house.Id; |
| | | strArry[1] = string.Empty; |
| | | |
| | | string value = string.Empty; |
| | | foreach (var c in house.HomeName) |
| | | { |
| | | if (char.IsNumber(c) == true) |
| | | { |
| | | //数字 |
| | | value += c.ToString(); |
| | | continue; |
| | | } |
| | | else if (value != string.Empty) |
| | | { |
| | | //如果房间名字带有数字的话,则左边加零,因为这里有个排序的问题 |
| | | strArry[1] += value.PadLeft(numberLength, '0'); |
| | | value = string.Empty; |
| | | } |
| | | strArry[1] += c.ToString(); |
| | | } |
| | | if (value != string.Empty) |
| | | { |
| | | //以数字结尾的话 |
| | | strArry[1] += value.PadLeft(numberLength, '0'); |
| | | } |
| | | listSort.Add(strArry); |
| | | } |
| | | //排序 |
| | | listSort.Sort((obj1, obj2) => |
| | | { |
| | | if (obj1[1].CompareTo(obj2[1]) > 0) |
| | | { |
| | | return 1; |
| | | } |
| | | return -1; |
| | | }); |
| | | var listSortHouse = new List<ResidenceInformation>(); |
| | | foreach (var strArry in listSort) |
| | | { |
| | | listSortHouse.Add(dicHouse[strArry[0]]); |
| | | } |
| | | return listSortHouse; |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 删除住宅___________________________ |
| | | |
| | | /// <summary> |
| | | /// 删除云端住宅 |
| | | /// </summary> |
| | | /// <param name="houseId">删除指定住宅</param> |
| | | /// <returns></returns> |
| | | public bool DeleteCloundHouse(string houseId) |
| | | { |
| | | var pra = new { homeId = houseId }; |
| | | var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("home-wisdom/app/home/delete", RestSharp.Method.POST, pra); |
| | | //检测状态码 |
| | | if (HdlCheckLogic.Current.CheckNetCode(result, ShowNetCodeMode.YES) == false) |
| | | { |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 删除住宅 |
| | | /// </summary> |
| | | /// <param name="filePath">File path.</param> |
| | | public void DeleteHouseMemmory(string houseId) |
| | | { |
| | | string filePath = this.GetHouseFilePathByHouseId(houseId); |
| | | var delPath = System.IO.Path.Combine(Shared.IO.FileUtils.RootPath, Config.Instance.Guid, GetHouseIdByFilePath(filePath)); |
| | | if (System.IO.Directory.Exists(delPath) == false) |
| | | { |
| | | return; |
| | | } |
| | | var fileList = GetHouseFileListByHomeId(houseId); |
| | | foreach (var file in fileList) |
| | | { |
| | | //删除文件 |
| | | System.IO.File.Delete(System.IO.Path.Combine(delPath, file)); |
| | | } |
| | | //删除文件夹 |
| | | System.IO.Directory.Delete(delPath, true); |
| | | //HomeFilePathList中删除该列表 |
| | | Common.Config.Instance.HomeFilePathList.RemoveAll((obj) => obj == filePath); |
| | | Config.Instance.Save(); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 获取该住宅的文件列表_______________ |
| | | |
| | | /// <summary> |
| | | /// 通过【houseId】获取该住宅的文件列表 |
| | | /// </summary> |
| | | /// <returns>The house file list by home identifier.</returns> |
| | | /// <param name="houseId">House identifier.</param> |
| | | public List<string> GetHouseFileListByHomeId(string houseId) |
| | | { |
| | | var list = new List<string> { }; |
| | | var path = System.IO.Path.Combine(Shared.IO.FileUtils.RootPath, Config.Instance.Guid, houseId); |
| | | if (!System.IO.Directory.Exists(path)) |
| | | { |
| | | return new List<string> { }; |
| | | } |
| | | var files = System.IO.Directory.GetFiles(path); |
| | | foreach (var file in files) |
| | | { |
| | | var f = file.Substring(path.Length + 1); |
| | | System.Console.WriteLine(f); |
| | | list.Add(f); |
| | | } |
| | | return list; |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 一般方法___________________________ |
| | | |
| | | /// <summary> |
| | | /// 获取楼层名称 |
| | | /// </summary> |
| | | /// <param name="i_FloorId">楼层ID</param> |
| | | /// <returns></returns> |
| | | public string GetFloorNameById(string i_FloorId) |
| | | { |
| | | if (i_FloorId == null) { return string.Empty; } |
| | | if (Config.Instance.Home.FloorDics.ContainsKey(i_FloorId) == false) |
| | | { |
| | | return string.Empty; |
| | | } |
| | | return Config.Instance.Home.FloorDics[i_FloorId]; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 通过【文件路径】获取住宅id |
| | | /// </summary> |
| | | /// <returns>The house identifier by file path.</returns> |
| | | /// <param name="filePath">文件路径</param> |
| | | public string GetHouseIdByFilePath(string filePath) |
| | | { |
| | | string[] sArray = filePath.Split(new string[] { "House_", ".json" }, StringSplitOptions.RemoveEmptyEntries); |
| | | if (sArray.Length >= 1) |
| | | { |
| | | return sArray[0]; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 通过【住宅id】获取住宅路径 |
| | | /// </summary> |
| | | /// <returns>The house identifier by file path.</returns> |
| | | /// <param name="houseId">住宅id</param> |
| | | public string GetHouseFilePathByHouseId(string houseId) |
| | | { |
| | | return $"House_{houseId}.json"; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取住宅的区域文本 |
| | | /// </summary> |
| | | /// <param name="i_house"></param> |
| | | /// <returns></returns> |
| | | public string GetResidenceAreaText(House i_house) |
| | | { |
| | | return this.GetResidenceAreaText(i_house.ListUintName, i_house.ListUintContent); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取住宅的区域文本 |
| | | /// </summary> |
| | | /// <param name="i_ListUintName">单元标题</param> |
| | | /// <param name="i_ListUintContent">单元内容</param> |
| | | /// <returns></returns> |
| | | public string GetResidenceAreaText(List<string> i_ListUintName, List<string> i_ListUintContent) |
| | | { |
| | | string textArea = string.Empty; |
| | | for (int i = 0; i < i_ListUintName.Count; i++) |
| | | { |
| | | textArea += i_ListUintContent[i] + i_ListUintName[i] + "_"; |
| | | } |
| | | return textArea.TrimEnd('_'); |
| | | } |
| | | |
| | | #endregion |
| | | } |
| | | } |