using System;
|
using System.Collections.Generic;
|
using System.IO;
|
using System.Threading;
|
using HDL_ON.DAL.Server;
|
using Shared;
|
|
namespace HDL_ON.Entity
|
{
|
[System.Serializable]
|
public class DB_ResidenceData
|
{
|
public DB_ResidenceData()
|
{
|
}
|
|
/// <summary>
|
/// 主人token
|
/// </summary>
|
public string MasterToken;
|
|
RegionInfoRes _residecenInfo = new RegionInfoRes();
|
/// <summary>
|
/// 住宅基础信息
|
/// </summary>
|
public RegionInfoRes CurrentRegion
|
{
|
get
|
{
|
if (MainPage.NoLoginMode)
|
{
|
return new RegionInfoRes() { homeName = "HDL Home" ,id = "text000001"};
|
}
|
else
|
{
|
if (_residecenInfo == null)
|
{
|
if (UserInfo.Current.regionList != null && UserInfo.Current.regionList.Count > 0)
|
{
|
_residecenInfo = UserInfo.Current.regionList[0];
|
}
|
else
|
{
|
_residecenInfo = new RegionInfoRes();
|
HDLCommon.Current.Logout();
|
}
|
}
|
return _residecenInfo;
|
}
|
}
|
set
|
{
|
_residecenInfo = value;
|
}
|
}
|
|
/// <summary>
|
/// 功能类型列表
|
/// </summary>
|
[Newtonsoft.Json.JsonIgnore]
|
public List<ShowFunction> functionTypeList = new List<ShowFunction>();
|
|
static DB_ResidenceData instance;
|
public static DB_ResidenceData Instance
|
{
|
get
|
{
|
if (instance == null)
|
{
|
if(MainPage.NoLoginMode)
|
{
|
instance = new DB_ResidenceData();
|
instance.functionTypeList.AddRange(new List<ShowFunction> {
|
ShowFunction.Light,ShowFunction.AC,ShowFunction.Curtain,
|
ShowFunction.FloorHeating,ShowFunction.Music,
|
ShowFunction.Electric,ShowFunction.Environmental,
|
ShowFunction.EnergyMonitoring,
|
ShowFunction.FreshAir,ShowFunction.DoorLock,
|
ShowFunction.Panel,ShowFunction.SecurityMonitoring,
|
ShowFunction.Sensor,ShowFunction.VideoIntercom,
|
ShowFunction.SecurityCenter
|
});
|
instance.SaveResidenceData();
|
instance.residenceImage = "Classification/Room/Roombg.png";
|
instance.HomeGateway = new HomeGatewayInfo()
|
{
|
homeId = "1396717478877241345",
|
gatewayId = "1396997079658602498",
|
mac = "123457890123456",
|
};
|
//初始化住宅功能数据
|
SpatialInfo.CurrentSpatial.InitRoomListFunctions();
|
return instance;
|
}
|
|
try
|
{
|
var residenceDataBytes = ReadResidenceInfo();
|
var userConfigString = System.Text.Encoding.UTF8.GetString(residenceDataBytes);
|
DB_ResidenceData temp = null;
|
|
if (!string.IsNullOrEmpty(userConfigString))
|
{
|
temp = Newtonsoft.Json.JsonConvert.DeserializeObject<DB_ResidenceData>(userConfigString);
|
}
|
if (temp == null)
|
{
|
instance = new DB_ResidenceData { };
|
}
|
else
|
{
|
instance = temp;
|
}
|
instance.functionTypeList.AddRange(new List<ShowFunction> {
|
ShowFunction.Light,ShowFunction.AC,ShowFunction.Curtain,
|
ShowFunction.FloorHeating,ShowFunction.Music,
|
ShowFunction.Electric,ShowFunction.Environmental,
|
ShowFunction.EnergyMonitoring,
|
ShowFunction.FreshAir,ShowFunction.DoorLock,
|
ShowFunction.Panel,ShowFunction.SecurityMonitoring,
|
ShowFunction.Sensor,ShowFunction.VideoIntercom,
|
ShowFunction.SecurityCenter
|
});
|
instance.SupportFacePass = false;
|
instance.SaveResidenceData();
|
}
|
catch (Exception ex)
|
{
|
MainPage.Log($"住宅数据初始化失败:{ex.Message}");
|
instance = new DB_ResidenceData { };
|
return instance;
|
}
|
instance.residenceImage = "Classification/Room/Roombg.png";
|
//初始化住宅功能数据
|
SpatialInfo.CurrentSpatial.InitRoomListFunctions();
|
|
}
|
return instance;
|
}
|
}
|
/// <summary>
|
/// 退出账号清空数据
|
/// </summary>
|
public void EixtAccount()
|
{
|
instance = null;
|
ins_OidList = null;
|
HomeGateway = null;
|
//重置网关状态
|
DriverLayer.Control.Ins.GatewayOnline_Cloud = false;
|
DriverLayer.Control.Ins.GatewayOnline_Local = false;
|
SpatialInfo.CurrentSpatial.Clear();
|
FunctionList.List.Clear();
|
|
///切换住宅清空前住宅缓存自动化列表;
|
HDL_ON.UI.UI2.Intelligence.Automation.Logic.LogicList.Clear();
|
DAL.Mqtt.MqttClient.DisConnectRemote("退出登录,或者切换住宅");
|
}
|
/// <summary>
|
/// 是否支持人脸通行
|
/// </summary>
|
public bool SupportFacePass = false;
|
|
/// <summary>
|
/// 网关详细信息
|
/// </summary>
|
public HomeGatewayInfo HomeGateway;
|
|
/// <summary>
|
/// 0:一端口
|
/// 1:Link协议网关
|
/// </summary>
|
public int GatewayType
|
{
|
get
|
{
|
//#if DEBUG
|
//return 0;
|
//#endif
|
if (HomeGateway == null)
|
return -1;
|
if (HomeGateway.gatewayType != "BUSUDPGATEWAY")
|
{
|
return 1;
|
}
|
else
|
{
|
return 0;
|
}
|
}
|
}
|
/// <summary>
|
/// 记录窗帘全开全关状态
|
/// </summary>
|
public bool GlobalCurtainStatus = false;
|
/// <summary>
|
/// 检测住宅是否绑定了网关
|
/// gatewayId 判空
|
/// </summary>
|
/// <returns></returns>
|
public bool CheckWhetherGatewayIdIsNull()
|
{
|
if (HomeGateway != null && !string.IsNullOrEmpty(HomeGateway.gatewayId))
|
{
|
return false;
|
}
|
else
|
{
|
return true;
|
}
|
}
|
|
/// <summary>
|
/// 检测住宅是否绑定了网关
|
/// </summary>
|
/// <returns></returns>
|
public bool CheckWhetherGatewayIsBound()
|
{
|
if (HomeGateway != null && !string.IsNullOrEmpty(HomeGateway.mac))
|
{
|
return true;
|
}
|
else
|
{
|
return false;
|
}
|
}
|
|
/// <summary>
|
/// 当前住宅的网关MAC
|
/// </summary>
|
public string residenceGatewayMAC
|
{
|
get
|
{
|
if (CheckWhetherGatewayIsBound())
|
{
|
return HomeGateway.mac.ToUpper();
|
}
|
else
|
{
|
return "";
|
}
|
}
|
set
|
{
|
if (CheckWhetherGatewayIsBound())
|
{
|
HomeGateway.mac = value;
|
}
|
else
|
{
|
HomeGateway = new HomeGatewayInfo() { mac = value };
|
}
|
}
|
|
}
|
|
///// <summary>
|
///// 城市信息
|
///// </summary>
|
//public static Entity.CityInfo cityInfo = new Entity.CityInfo();
|
|
/// <summary>
|
/// 住宅图片
|
/// </summary>
|
public string residenceImage;
|
/// <summary>
|
/// 当前住宅的网关MAC
|
/// </summary>
|
//public string residenceGatewayMAC = "4E47323347591243";//"0281B9078C000000";// "00964E19C4467B1E";
|
/// <summary>
|
/// 保存住宅数据
|
/// </summary>
|
public void SaveResidenceData()
|
{
|
if (this == null || this.CurrentRegion == null)
|
return;
|
var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this));
|
WirteResidenceInfo(ssd);
|
}
|
/// <summary>
|
/// 当前选择的楼层
|
/// </summary>
|
public string CurFoor = Language.StringByID(StringId.All);
|
|
/// <summary>
|
/// 当前选择的楼层
|
/// </summary>
|
[Newtonsoft.Json.JsonIgnore]
|
public SpatialInfo CurFloor = new SpatialInfo() { roomId = "", roomName = Language.StringByID(StringId.All)};
|
/// <summary>
|
/// 分类界面显示的楼层
|
/// </summary>
|
[Newtonsoft.Json.JsonIgnore]
|
public SpatialInfo ClassificationChooseFloor = new SpatialInfo() { roomId = "", roomName = Language.StringByID(StringId.All) };
|
|
/// <summary>
|
/// 根目录
|
/// </summary>
|
static string RootPath = Environment.GetFolderPath(System.Environment.SpecialFolder.Personal) + "/";
|
/// <summary>
|
/// 读取ResidenceInfo文件
|
/// </summary>
|
/// <returns></returns>
|
static byte[] ReadResidenceInfo()
|
{
|
var fileName = "DB_ResidenceData";
|
FileStream fs = null;
|
try
|
{
|
var temp = CreateUserFloder(OnAppConfig.Instance.LastLoginUserId);
|
if (File.Exists(Path.Combine(temp, fileName)))
|
{
|
fs = new FileStream(Path.Combine(temp, fileName), FileMode.Open, FileAccess.Read);
|
}
|
else if (File.Exists(fileName))
|
{
|
fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
|
}
|
else
|
{
|
return new byte[0];
|
}
|
byte[] bytes = new byte[fs.Length];
|
fs.Read(bytes, 0, bytes.Length);
|
return bytes;
|
}
|
catch
|
{
|
return new byte[0];
|
}
|
finally
|
{
|
try
|
{
|
if (fs != null)
|
{
|
fs.Close();
|
}
|
}
|
catch
|
{
|
|
}
|
}
|
|
}
|
/// <summary>
|
/// 保存ResidenceInfo
|
/// </summary>
|
/// <param name="bytes"></param>
|
/// <returns></returns>
|
static bool WirteResidenceInfo(byte[] bytes)
|
{
|
var fileName = "DB_ResidenceData";
|
FileStream fs = null;
|
|
try
|
{
|
var temp = CreateUserFloder(OnAppConfig.Instance.LastLoginUserId);
|
fs = new FileStream(Path.Combine(temp, fileName), FileMode.Create, FileAccess.Write);
|
fs.Write(bytes, 0, bytes.Length);
|
fs.Flush();
|
MainPage.Log("SaveFile:" + fileName);
|
return true;
|
}
|
catch (Exception ex)
|
{
|
MainPage.Log("FileUtiles Code 113:" + ex.ToString());
|
return false;
|
}
|
finally
|
{
|
try
|
{
|
if (fs != null)
|
{
|
fs.Close();
|
}
|
}
|
catch (Exception ex)
|
{
|
MainPage.Log("FileUtils Code 121 :" + ex.ToString());
|
}
|
}
|
}
|
/// <summary>
|
/// 创建一个住宅的账号文件夹
|
/// </summary>
|
static string CreateUserFloder(string userId)
|
{
|
var path = Path.Combine(RootPath, userId);
|
if (!Directory.Exists(path))
|
{
|
Directory.CreateDirectory(path);
|
}
|
return path + "/";
|
}
|
|
|
#region oid列表 a协议转bus协议控制使用
|
/// <summary>
|
/// oid数据保存的文件名
|
/// </summary>
|
[Newtonsoft.Json.JsonIgnore]
|
public static string OidSavePathName = "AProtocolData_FunctionOid";
|
static List<FunctionOid> ins_OidList;
|
public static List<FunctionOid> functionOidList
|
{
|
get
|
{
|
if (ins_OidList == null)
|
{
|
var bytes = Common.FileUtlis.Files.ReadFile(OidSavePathName);
|
if (bytes == null || bytes.Length == 0)
|
{
|
ins_OidList = new List<FunctionOid>();
|
}
|
else
|
{
|
var jsonString = System.Text.Encoding.UTF8.GetString(bytes);
|
if (string.IsNullOrEmpty(jsonString))
|
{
|
ins_OidList = new List<FunctionOid>();
|
}
|
else
|
{
|
var list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<FunctionOid>>(jsonString);
|
if (list == null)
|
{
|
ins_OidList = new List<FunctionOid>();
|
}
|
else
|
{
|
ins_OidList = list;
|
}
|
}
|
}
|
}
|
return ins_OidList;
|
}
|
}
|
/// <summary>
|
/// 保存oid数据,每次保存都会覆盖
|
/// </summary>
|
public static void SaveOidList(string oidJsonString)
|
{
|
var oidBytes = System.Text.Encoding.UTF8.GetBytes(oidJsonString);
|
|
Common.FileUtlis.Files.WriteFileByBytes(OidSavePathName, oidBytes);
|
}
|
|
#endregion
|
|
|
|
/// <summary>
|
/// 上一次提示的时间
|
/// </summary>
|
public DateTime LastTipTime = DateTime.MinValue;
|
/// <summary>
|
/// 是否需要提示
|
/// </summary>
|
public bool NeedTip
|
{
|
get
|
{
|
return (DateTime.Now - LastTipTime).TotalDays > 2;
|
}
|
}
|
|
}
|
}
|