using System;
|
using System.Collections.Generic;
|
using HDL_ON.Common;
|
using HDL_ON.DAL.Server;
|
using Shared;
|
|
namespace HDL_ON.Entity
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public class SecurityAlarm
|
{
|
public SecurityAlarm()
|
{
|
|
}
|
|
/// <summary>
|
/// 安防云端id
|
/// </summary>
|
public string userSecurityId;
|
/// <summary>
|
/// 安防sid
|
/// </summary>
|
public string sid;
|
/// <summary>
|
/// 安防名称
|
/// </summary>
|
public string name;
|
/// <summary>
|
/// 安防延时
|
/// </summary>
|
public string delay ="0";
|
/// <summary>
|
/// 报警延时
|
/// </summary>
|
public string output_delay = "0";
|
/// <summary>
|
/// 状态
|
/// 布防:enable
|
/// 撒防:disable
|
/// </summary>
|
public string status = "disable";
|
/// <summary>
|
/// 报警状态
|
/// </summary>
|
public bool alarm = false;
|
/// <summary>
|
/// 类型
|
/// "all"--全宅布防,
|
/// "normal"--普通模式,
|
/// "all_day":24小时,
|
/// "mute":静音
|
/// </summary>
|
public string type = "normal";
|
/// <summary>
|
/// 更新时间
|
/// </summary>
|
public string modifyTime;
|
/// <summary>
|
/// 安防输入条件
|
/// </summary>
|
public List<SecurityInput> input = new List<SecurityInput>();
|
/// <summary>
|
/// 安防输出
|
/// </summary>
|
public List<SecurityOutput> output = new List<SecurityOutput>();
|
/// <summary>
|
/// 安防通知配置
|
/// </summary>
|
public SecurityNoticeConfig noticeConfig = new SecurityNoticeConfig();
|
/// <summary>
|
/// 安防推送配置
|
/// </summary>
|
public List<SecurityPushConfig> pushConfigs = new List<SecurityPushConfig>();
|
|
/// <summary>
|
/// 数据存储文件名
|
/// </summary>
|
[Newtonsoft.Json.JsonIgnore]
|
public string savePath
|
{
|
get
|
{
|
return "SecurityData_" + sid;
|
}
|
}
|
/// <summary>
|
/// 保存文件
|
/// </summary>
|
public void SaveFile()
|
{
|
var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this));
|
FileUtlis.Files.WriteFileByBytes(savePath, ssd);
|
}
|
/// <summary>
|
/// 刷新本地数据
|
/// </summary>
|
/// <returns></returns>
|
public SecurityAlarm RefeshData()
|
{
|
var dataBytes = FileUtlis.Files.ReadFile(savePath);
|
var dataString = System.Text.Encoding.UTF8.GetString(dataBytes);
|
var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<SecurityAlarm>(dataString);
|
return temp;
|
}
|
|
/// <summary>
|
/// 保存安防信息
|
/// </summary>
|
public string SaveInfo()
|
{
|
HttpServerRequest hsr = new HttpServerRequest();
|
if (string.IsNullOrEmpty(this.noticeConfig.noticeContent))
|
{
|
this.noticeConfig.noticeContent = Language.StringByID(StringId.SecurityAlarmTipString).Replace("{0}", name);
|
}
|
if (this.noticeConfig.enable)
|
{
|
if (this.pushConfigs.Count == 0)
|
{
|
pushConfigs.Add(new SecurityPushConfig()
|
{
|
pushMethod = "APP",
|
pushTarget = new List<string>() { UserInfo.Current.ID }
|
});
|
}
|
}
|
|
if (string.IsNullOrEmpty(sid))
|
{
|
NewSid();
|
var pack = hsr.AddSecurity(new List<SecurityAlarm>() { this });
|
if (pack.Code == StateCode.SUCCESS)
|
{
|
SaveFile();
|
}
|
else
|
{
|
sid = "";
|
}
|
return pack.Code;
|
}
|
else
|
{
|
var pack = hsr.EditSecurity(new List<SecurityAlarm>() { this });
|
if (pack.Code == StateCode.SUCCESS)
|
{
|
SaveFile();
|
}
|
return pack.Code;
|
}
|
}
|
|
|
/// <summary>
|
/// 生成sid方法
|
/// </summary>
|
public void NewSid()
|
{
|
try
|
{
|
string sOidBeginsWith = "000101";//厂商 + 通讯方式
|
DateTime dt = DateTime.Now;
|
DateTime startTime = TimeZoneInfo.ConvertTimeToUtc(new DateTime(2020, 1, 1));
|
long m = (long)((dt - startTime).TotalMilliseconds / 10);
|
string sTimeSpan = "00000000";
|
|
byte[] arry = new byte[4];
|
arry[0] = (byte)(m & 0xFF);
|
arry[1] = (byte)((m & 0xFF00) >> 8);
|
arry[2] = (byte)((m & 0xFF0000) >> 16);
|
arry[3] = (byte)((m >> 24) & 0xFF);
|
sTimeSpan = arry[0].ToString("X2") + arry[1].ToString("X2") + arry[2].ToString("X2") + arry[3].ToString("X2");
|
|
|
if (sTimeSpan.Length >= 8)
|
{
|
sTimeSpan = sTimeSpan.Substring(0, 8);
|
}
|
else
|
{
|
sTimeSpan = Guid.NewGuid().ToString().Substring(0, 8);
|
//sTimeSpan = "00000000";
|
}
|
|
sid = sOidBeginsWith + sTimeSpan;
|
|
sid += "16";
|
sid += "1601";
|
int maxId = 1;
|
|
|
for (int i = 0; i < FunctionList.List.securities.Count; i++)
|
{
|
string s = FunctionList.List.securities[i].sid.Substring(20, 4);
|
int iThisSceneId = Convert.ToInt16(s, 16);
|
if (iThisSceneId > maxId)
|
maxId = iThisSceneId;
|
}
|
|
sid += (maxId + 1).ToString("X4");
|
sid += "0000";
|
}
|
catch
|
{
|
}
|
}
|
|
|
}
|
|
/// <summary>
|
/// 安防状态配置
|
/// </summary>
|
public class SecurityState
|
{
|
/// <summary>
|
/// 安防云端id
|
/// </summary>
|
public string userSecurityId;
|
/// <summary>
|
/// 网关id 网关id 如果传的是sid该字段需要传
|
/// </summary>
|
public string gatewayId;
|
/// <summary>
|
/// 安防sid
|
/// </summary>
|
public string sid;
|
/// <summary>
|
/// 状态 enable布防、disable撒防
|
/// </summary>
|
public string status;
|
}
|
|
/// <summary>
|
/// 安防bypass设置对象
|
/// </summary>
|
public class SecurityBypass
|
{
|
/// <summary>
|
/// 安防云端id
|
/// </summary>
|
public string userSecurityId;
|
/// <summary>
|
/// 输入设备bypass状态列表
|
/// </summary>
|
public List<SecurityBypassInput> input = new List<SecurityBypassInput>();
|
|
}
|
/// <summary>
|
/// 输入设备bypass状态
|
/// </summary>
|
public class SecurityBypassInput
|
{
|
/// <summary>
|
/// 设备sid
|
/// </summary>
|
public string sid;
|
/// <summary>
|
/// true:启用
|
/// false:停用(临时bypass)
|
/// </summary>
|
public string bypass;
|
}
|
|
/// <summary>
|
/// 安防输入
|
/// </summary>
|
public class SecurityInput
|
{
|
/// <summary>
|
/// 输入条件(功能)的sid
|
/// 输入设备sid
|
/// </summary>
|
public string sid;
|
/// <summary>
|
/// Bypass设置 false:启用中、true:临时bypass中
|
/// </summary>
|
public string bypass = "false";
|
/// <summary>
|
/// 安防输入条件
|
/// </summary>
|
public List<SecurityInputCondition> condition = new List<SecurityInputCondition>();
|
|
/// <summary>
|
/// 加入输入条件
|
/// 本地判断使用
|
/// </summary>
|
//[Newtonsoft.Json.JsonIgnore]
|
//public bool addCondition = false;
|
|
/// <summary>
|
/// 判断条件
|
/// </summary>
|
public string comparator = "=";
|
|
[Newtonsoft.Json.JsonIgnore]
|
Function _function = null;
|
/// <summary>
|
/// 对应的功能对象
|
/// </summary>
|
/// <returns></returns>
|
public Function GetFunction()
|
{
|
if (_function == null)
|
{
|
_function = FunctionList.List.Functions.Find((obj) => obj.sid == sid);
|
}
|
return _function;
|
}
|
|
/// <summary>
|
/// 获取单个状态的显示文本
|
/// </summary>
|
/// <param name="inputValue"></param>
|
/// <returns></returns>
|
public string GetStateText(string inputValue)
|
{
|
string text = "";
|
|
if (GetFunction() == null)
|
return text;
|
switch (GetFunction().spk)
|
{
|
case SPK.SensorGas:
|
case SPK.SensorSmoke:
|
if (inputValue == "true")
|
{
|
text += Language.StringByID(StringId.InAlarm) + " ";
|
}
|
else if (inputValue == "false")
|
{
|
text += Language.StringByID(StringId.Normal) + " ";
|
}
|
break;
|
case SPK.SensorPir:
|
if (inputValue == "true")
|
{
|
text += Language.StringByID(StringId.youren) + " ";
|
}
|
else if (inputValue == "false")
|
{
|
text += Language.StringByID(StringId.wuren) + " ";
|
}
|
break;
|
case SPK.SensorWater:
|
if (inputValue == "true")
|
{
|
text += Language.StringByID(StringId.WaterLeakage) + " ";
|
}
|
else if (inputValue == "false")
|
{
|
text += Language.StringByID(StringId.Normal) + " ";
|
}
|
break;
|
case SPK.SensorDoorWindow:
|
if (inputValue == "true")
|
{
|
text += Language.StringByID(StringId.Open) + " ";
|
}
|
else if (inputValue == "false")
|
{
|
text += Language.StringByID(StringId.Close) + " ";
|
}
|
break;
|
}
|
|
return text;
|
}
|
|
/// <summary>
|
/// 状态文本
|
/// </summary>
|
/// <returns></returns>
|
public string StateText ()
|
{
|
string text = "";
|
switch(GetFunction().spk)
|
{
|
case SPK.SensorGas:
|
case SPK.SensorSmoke:
|
foreach (var con in condition)
|
{
|
if (con.value == "true" || con.value == "alarm")
|
{
|
text += Language.StringByID(StringId.InAlarm) + " ";
|
}
|
else if (con.value == "false" || con.value == "normal")
|
{
|
text += Language.StringByID(StringId.Normal) + " ";
|
}
|
}
|
break;
|
case SPK.SensorPir:
|
foreach (var con in condition)
|
{
|
if (con.value == "true")
|
{
|
text += Language.StringByID(StringId.youren) + " ";
|
}
|
else if (con.value == "false")
|
{
|
text += Language.StringByID(StringId.wuren) + " ";
|
}
|
}
|
break;
|
case SPK.SensorWater:
|
foreach (var con in condition)
|
{
|
if (con.value == "true" || con.value == "alarm")
|
{
|
text += Language.StringByID(StringId.WaterLeakage) + " ";
|
}
|
else if (con.value == "false" || con.value == "normal")
|
{
|
text += Language.StringByID(StringId.Normal) + " ";
|
}
|
}
|
break;
|
case SPK.SensorDoorWindow:
|
foreach (var con in condition)
|
{
|
if (con.value == "true" || con.value == "open")
|
{
|
text += Language.StringByID(StringId.Open) + " ";
|
}
|
else if (con.value == "false" || con.value == "close")
|
{
|
text += Language.StringByID(StringId.Close) + " ";
|
}
|
}
|
break;
|
}
|
|
return text;
|
}
|
|
}
|
/// <summary>
|
/// 安防输入条件
|
/// </summary>
|
public class SecurityInputCondition
|
{
|
/// <summary>
|
/// 属性(条件)名称
|
/// </summary>
|
public string key;
|
/// <summary>
|
/// 操作(执行)条件
|
/// < 小于 > 大于 ==等于
|
/// </summary>
|
public string comparator;
|
/// <summary>
|
/// 条件值类型
|
/// int \float\ string
|
/// </summary>
|
public string data_type = "string";
|
/// <summary>
|
/// 值
|
/// </summary>
|
public string value;
|
/// <summary>
|
/// Bypass设置 true:临时bypass中、false:启用中
|
/// </summary>
|
public bool bypass = false;
|
}
|
|
/// <summary>
|
/// 安防输出
|
/// </summary>
|
public class SecurityOutput
|
{
|
/// <summary>
|
/// 控制目标类型
|
/// 1:设备
|
/// 2:场景
|
/// 3:自动化
|
/// </summary>
|
public string target_type = "1";
|
/// <summary>
|
/// 输出目标的sid
|
/// </summary>
|
public string sid;
|
/// <summary>
|
/// 安防输出状态
|
/// </summary>
|
public List<SecurityOutputStatus> status = new List<SecurityOutputStatus>();
|
|
/// <summary>
|
/// 本地不存在数据(数据可能被删了)
|
/// </summary>
|
public bool LocalData ()
|
{
|
var function = FunctionList.List.GetLightList().Find((obj) => obj.sid == sid);
|
if (function != null)
|
{
|
return true;
|
}
|
else
|
{
|
var scene = FunctionList.List.scenes.Find((obj) => obj.sid == sid);
|
if (scene != null)
|
{
|
return true;
|
}
|
}
|
return false;
|
}
|
|
|
string _name;
|
[Newtonsoft.Json.JsonIgnore]
|
public string name
|
{
|
get
|
{
|
if (string.IsNullOrEmpty(_name))
|
{
|
|
var function = FunctionList.List.GetLightList().Find((obj) => obj.sid == sid);
|
if (function != null)
|
{
|
_name = function.name;
|
}
|
else
|
{
|
var scene = FunctionList.List.scenes.Find((obj) => obj.sid == sid);
|
if (scene != null)
|
{
|
_name = scene.name;
|
}
|
}
|
}
|
return _name;
|
}
|
set
|
{
|
_name = value;
|
}
|
}
|
|
|
|
string _roomName;
|
[Newtonsoft.Json.JsonIgnore]
|
public string RoomName
|
{
|
get
|
{
|
if (string.IsNullOrEmpty(_roomName))
|
{
|
|
var function = FunctionList.List.GetLightList().Find((obj) => obj.sid == sid);
|
if (function != null)
|
{
|
_roomName = function.GetRoomListName();
|
}
|
else
|
{
|
var scene = FunctionList.List.scenes.Find((obj) => obj.sid == sid);
|
if (scene != null)
|
{
|
_roomName = scene.GetRoomListName();
|
}
|
}
|
}
|
return _roomName;
|
}
|
set
|
{
|
_roomName = value;
|
}
|
}
|
|
string _spk;
|
[Newtonsoft.Json.JsonIgnore]
|
public string spk
|
{
|
get
|
{
|
if (string.IsNullOrEmpty(_spk))
|
{
|
var function = FunctionList.List.GetLightList().Find((obj) => obj.sid == sid);
|
if (function != null)
|
{
|
_spk = function.spk;
|
}
|
}
|
return _spk;
|
}
|
}
|
|
|
/// <summary>
|
/// 状态文本
|
/// </summary>
|
/// <returns></returns>
|
public string StateText()
|
{
|
string text = "";
|
if (target_type == "1")
|
{
|
switch (spk)
|
{
|
case SPK.LightDimming:
|
case SPK.LightCCT:
|
case SPK.LightRGB:
|
case SPK.LightSwitch:
|
foreach (var state in status)
|
{
|
if(state.key == FunctionAttributeKey.OnOff)
|
{
|
if (state.value == "off")
|
{
|
text = Language.StringByID(StringId.Close);
|
}
|
else
|
{
|
text = Language.StringByID(StringId.Open);
|
}
|
}
|
else if (state.key == FunctionAttributeKey.Brightness)
|
{
|
if (state.value == "0")
|
{
|
text = Language.StringByID(StringId.Close);
|
}
|
else
|
{
|
text = Language.StringByID(StringId.Open);
|
}
|
}
|
}
|
break;
|
}
|
}else if(target_type == "2")
|
{
|
text = Language.StringByID(StringId.Open);
|
}
|
|
return text;
|
}
|
|
}
|
/// <summary>
|
/// 安防输出状态
|
/// </summary>
|
public class SecurityOutputStatus
|
{
|
public string key;
|
public string value;
|
}
|
|
/// <summary>
|
/// 安防通知配置
|
/// </summary>
|
public class SecurityNoticeConfig
|
{
|
/// <summary>
|
/// 是否开启通知
|
/// </summary>
|
public bool enable = true;
|
/// <summary>
|
/// 通知内容
|
/// </summary>
|
public string noticeContent;
|
|
}
|
/// <summary>
|
/// 安防推送配置
|
/// </summary>
|
public class SecurityPushConfig
|
{
|
/// <summary>
|
/// 推送方式
|
/// APP:app push
|
/// SMS:短信
|
/// </summary>
|
public string pushMethod = "APP";
|
/// <summary>
|
/// 推送目标
|
/// </summary>
|
public List<string> pushTarget = new List<string>();
|
}
|
|
|
/// <summary>
|
/// A协议控制数据的对象
|
/// </summary>
|
public class SecurityStatusObj
|
{
|
public List<SecurityStatusData> objects = new List<SecurityStatusData>();
|
|
public string time_stamp = "";
|
public string id = "";
|
}
|
|
public class SecurityStatusData
|
{
|
public string sid;
|
public string status ="disable" ;
|
public bool alarm = false;
|
}
|
}
|