using Shared.Common;
using System;
using System.Collections.Generic;
using System.Text;
namespace Shared.Phone.UserCenter
{
///
/// 住宅对象的逻辑
///
public class HdlResidenceLogic
{
#region ■ 变量声明___________________________
///
/// 住宅对象的逻辑
///
private static HdlResidenceLogic m_Current = null;
///
/// 住宅对象的逻辑
///
public static HdlResidenceLogic Current
{
get
{
if (m_Current == null)
{
m_Current = new HdlResidenceLogic();
}
return m_Current;
}
}
#endregion
#region ■ 创建新住宅_________________________
///
/// 创建新的住宅(返回住宅id,null代表失败)
///
/// 住宅名称
public string CreatNewResidence(string residenceName)
{
var Pra = new AddResidencePra();
Pra.Name = residenceName;
//添加住宅
string resultData = UserCenterLogic.GetResponseDataByRequestHttps("App/AddHome", false, Pra);
if (string.IsNullOrEmpty(resultData) == true)
{
return null;
}
var newInfo = Newtonsoft.Json.JsonConvert.DeserializeObject>(resultData);
//添加住宅到缓存
this.AddHouseToMemmory(newInfo[0].Id, residenceName);
return newInfo[0].Id;
}
///
/// 添加住宅到缓存
///
/// 住宅id
/// 住宅名称.
/// 是否为其他主用户分享过来的住宅
/// 仅子账号登陆的时候使用,当【IsOthreShare】为"true",并且【AccountType】为"1"时,该账号拥有管理员权限
public void AddHouseToMemmory(string houseId, string houseName,
bool isOthreShare = false, int accountType = 0)
{
var home = new Common.House();
home.Id = houseId;
home.Name = houseName;
home.IsOthreShare = isOthreShare;
home.AccountType = accountType;
//创建文件夹
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 ■ 切换住宅___________________________
///
/// 切换住宅(注:它只切换内存,界面并未处理)
///
///
///
public void SwitchResidence(string residenceId)
{
//打开进度条
ProgressBar.Show();
Config.Instance.HomeId = residenceId;
//重新初始化住宅对象
Config.Instance.Home = this.GetHouseByHouseId(residenceId);
Config.Instance.Save();
//刷新个人中心的内存及线程
UserCenterLogic.InitUserCenterMenmoryAndThread(false);
//关闭进度条
ProgressBar.Close();
}
#endregion
#region ■ 编辑住宅___________________________
///
/// 编辑住宅
///
/// 住宅id
/// 住宅名称
///
public bool EditorResidenceName(string residenceId, string residenceName)
{
var Pra = new EditorResidencePra();
Pra.HomeId = residenceId;
Pra.Name = residenceName;
Pra.IsOtherAccountCtrl = false;
Pra.LoginAccessToken = Config.Instance.Token;
//编辑住宅
bool flage = UserCenterLogic.GetResultStatuByRequestHttps("App/EditHome", false, Pra);
if (flage == true)
{
//刷新内存的住宅名
this.EditorHouseByHouseId(residenceId, residenceName);
}
return flage;
}
///
/// 编辑缓存住宅
///
/// 住宅id
/// 住宅名称
public void EditorHouseByHouseId(string residenceId, string residenceName)
{
if (Config.Instance.Home.Id == residenceId)
{
Config.Instance.Home.Name = residenceName;
}
var home = GetHouseByHouseId(residenceId);
if (home == null)
{
return;
}
home.Name = residenceName;
home.Save();
//住宅修改名称的话,主页需要重新刷新
UserView.UserPage.Instance.RefreshForm = true;
}
#endregion
#region ■ 获取住宅___________________________
///
/// 通过【id】获取住宅
///
/// The house by house identifier.
/// 住宅id
public House GetHouseByHouseId(string houseId)
{
var path = System.IO.Path.Combine(Shared.IO.FileUtils.RootPath, Config.Instance.Guid, houseId, $"House_{houseId}.json");
var file = Shared.IO.FileUtils.ReadFile(path);
if (file == null)
{
return null;
}
return Newtonsoft.Json.JsonConvert.DeserializeObject(System.Text.Encoding.UTF8.GetString(file));
}
///
/// 通过【文件路径】获取住宅
///
/// The house by file path.
/// 文件路径
public House GetHouseByFilePath(string filePath)
{
var path = System.IO.Path.Combine(Shared.IO.FileUtils.RootPath, Config.Instance.Guid, GetHouseIdByFilePath(filePath), filePath);
var file = Shared.IO.FileUtils.ReadFile(path);
if (file == null)
{
return null;
}
return Newtonsoft.Json.JsonConvert.DeserializeObject(System.Text.Encoding.UTF8.GetString(file));
}
#endregion
#region ■ 获取云端住宅列表___________________
///
/// 获取云端住宅列表
///
public List GetHomeListsFromDb()
{
if (HdlWifiLogic.Current.CanAccessHttp == false)
{
//当前无法联网
return Config.Instance.HomeFilePathList;
}
var requestObj = new SendDataToServer.ResidenceListReqDto()
{
RequestVersion = CommonPage.RequestVersion,
ReqDto = new SendDataToServer.ResidenceListObj()
{
LoginAccessToken = Config.Instance.Token,
PageSetting = new SendDataToServer.ResidenceListPageSettingObj { PageSize = 999 }
}
};
try
{
var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(requestObj);
var revertObj = CommonPage.Instance.RequestHttpsZigbeeAsync("App/GetHomePager", System.Text.Encoding.UTF8.GetBytes(requestJson));
if (revertObj == null)
{
return null;
}
if (revertObj.StateCode.ToUpper() == "SUCCESS")
{
var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject(revertObj.ResponseData.ToString());
if (responseDataObj.TotalCount > 0)
{
//清空当前住宅列表
Config.Instance.HomeFilePathList.Clear();
var listHouse = new List();
foreach (var residence in responseDataObj.PageData)
{
Config.Instance.HomeFilePathList.Add($"House_{residence.Id}.json");
var house = GetHouseByHouseId(residence.Id);
if (house == null)
{
house = new House
{
Id = residence.Id,
Name = residence.Name,
IsOthreShare = residence.IsOthreShare,
AccountType = residence.AccountType,
MainUserDistributedMark = residence.MainUserDistributedMark,
Longitude = residence.Longitude,
Latitude = residence.Latitude
};
}
else
{
house.Id = residence.Id;
house.Name = residence.Name;
house.IsOthreShare = residence.IsOthreShare;
house.AccountType = residence.AccountType;
house.MainUserDistributedMark = residence.MainUserDistributedMark;
house.Longitude = residence.Longitude;
house.Latitude = residence.Latitude;
}
Global.CreateHomeDirectory(residence.Id);
house.Save(false);
listHouse.Add(house);
}
//如果切换了账号,或者原来的id不存在,则重置住宅ID
if (Config.Instance.TheSameLoginAccount == false ||
Config.Instance.HomeFilePathList.Find((obj) => obj == $"House_{Config.Instance.HomeId}.json") == null)
{
Config.Instance.HomeId = listHouse[0].Id;
foreach (var house in listHouse)
{
//初始选择它自己的住宅
if (house.IsOthreShare == false)
{
Config.Instance.HomeId = house.Id;
Config.Instance.Home = GetHouseByHouseId(house.Id);
break;
}
}
}
Config.Instance.Save();
}
}
}
catch (Exception ex)
{
HdlLogLogic.Current.WriteLog(ex);
}
return Config.Instance.HomeFilePathList;
}
#endregion
#region ■ 获取本地住宅列表___________________
///
/// 获取本地住宅列表
///
///
public List GetLocalResidenceList()
{
//如果是虚拟住宅,则从根目录中获取
if (Common.Config.Instance.Home.IsVirtually == true)
{
//从文件夹中获取全部的住宅对象
return this.GetAllLocalResidenceListByDirectory();
}
var listHome = new List();
foreach (var housePath in Common.Config.Instance.HomeFilePathList)
{
var home = this.GetHouseByFilePath(housePath);
if (home == null)
{
continue;
}
listHome.Add(home);
}
return listHome;
}
///
/// 从文件夹中获取全部的住宅对象
///
///
public List GetAllLocalResidenceListByDirectory()
{
var strPath = System.IO.Path.Combine(Shared.IO.FileUtils.RootPath, Common.Config.Instance.Guid);
var listHome = new List();
//获取全部的文件夹
var listDirectory = new List();
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 = UserCenterLogic.LoadFileContent(System.IO.Path.Combine(nowPath, arryHouse[0]));
if (textValue == null)
{
continue;
}
var myHouse = Newtonsoft.Json.JsonConvert.DeserializeObject(textValue);
listHome.Add(myHouse);
}
}
return listHome;
}
#endregion
#region ■ 删除住宅___________________________
///
/// 删除住宅
///
/// File path.
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 ■ 获取该住宅的文件列表_______________
///
/// 通过【houseId】获取该住宅的文件列表
///
/// The house file list by home identifier.
/// House identifier.
public List GetHouseFileListByHomeId(string houseId)
{
var list = new List { };
var path = System.IO.Path.Combine(Shared.IO.FileUtils.RootPath, Config.Instance.Guid, houseId);
if (!System.IO.Directory.Exists(path))
{
return new List { };
}
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 ■ 一般方法___________________________
///
/// 获取楼层名称
///
/// 楼层ID
///
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];
}
///
/// 通过【文件路径】获取住宅id
///
/// The house identifier by file path.
/// 文件路径
public string GetHouseIdByFilePath(string filePath)
{
string[] sArray = filePath.Split(new string[] { "House_", ".json" }, StringSplitOptions.RemoveEmptyEntries);
if (sArray.Length >= 1)
{
return sArray[0];
}
return null;
}
///
/// 通过【住宅id】获取住宅路径
///
/// The house identifier by file path.
/// 住宅id
public string GetHouseFilePathByHouseId(string houseId)
{
return $"House_{houseId}.json";
}
#endregion
#region ■ 结构体_____________________________
///
/// 添加住宅的启动参数
///
private class AddResidencePra : IfacePraCommon
{
///
/// RequestVersion
///
public string RequestVersion = Common.CommonPage.RequestVersion;
///
/// LoginAccessToken
///
public string LoginAccessToken = Common.Config.Instance.Token;
///
/// Name
///
public string Name = string.Empty;
}
///
/// 新住宅的信息
///
private class NewResidenceInfo
{
///
/// ZigbeeHomeGuid
///
public string Id = string.Empty;
}
#endregion
}
}