JLChen
2021-08-21 af9c3e0b3b1eb370e966b3ca9db3f62848d4189b
HDL_ON/Entity/Function/SecurityAlarm.cs
@@ -1,11 +1,117 @@
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 SecurityCenter
    {
        static SecurityCenter _center;
        public static SecurityCenter Security
        {
            get
            {
                if(_center == null)
                {
                    _center = new SecurityCenter();
                }
                return _center;
            }
        }
        SecurityAlarm _securityAlarm;
        /// <summary>
        /// 当前布防模式
        /// </summary>
        public SecurityAlarm CurrentDefenseMode
        {
            get
            {
                return _securityAlarm;
            }
            set
            {
                _securityAlarm = value;
                UI.HomePage.LoadEvent_RefreshSecurityStatus();
            }
        }
        HttpServerRequest httpServerRequest = new HttpServerRequest();
        List<SecurityAlarm> _securityAlarmList;
        /// <summary>
        /// 防区列表
        /// </summary>
        public List<SecurityAlarm> securityAlarmList
        {
            get
            {
                if(_securityAlarmList == null)
                {
                  _securityAlarmList =  GetSecurityAlarmList();
                }
                return _securityAlarmList;
            }
        }
        /// <summary>
        /// 读取云端安防列表
        /// </summary>
        /// <returns></returns>
        public List<SecurityAlarm> GetSecurityAlarmList()
        {
            var pack = httpServerRequest.GetSecurityList();
            if(pack.Code == StateCode.SUCCESS)
            {
                var revData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<SecurityAlarm>>(pack.Data.ToString());
                if(revData!= null)
                {
                    _securityAlarmList = revData;
                    return revData;
                }
            }
            return new List<SecurityAlarm>();
        }
        /// <summary>
        /// 状态 enable布防、disable撒防
        /// </summary>
        public string status
        {
            get
            {
                string result = "disable";
                foreach(var s in securityAlarmList)
                {
                    if(s.status == "enable")
                    {
                        result = "enable";
                        break;
                    }
                }
                return result;
            }
        }
    }
    public class SecurityAlarm
    {
        /// <summary>
        /// 安防云端id
        /// </summary>
        public string userSecurityId;
        /// <summary>
        /// 安防sid
        /// </summary>
@@ -21,7 +127,7 @@
        /// <summary>
        /// 状态 enable布防、disable撒防
        /// </summary>
        public string status;
        public string status = "disable";
        /// <summary>
        /// 类型
        /// "all"--全宅布防,
@@ -29,7 +135,7 @@
        /// "all_day":24小时,
        /// "mute":静音
        /// </summary>
        public string type;
        public string type = "normal";
        /// <summary>
        /// 更新时间
        /// </summary>
@@ -70,6 +176,93 @@
            var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this));
            FileUtlis.Files.WriteFileByBytes(savePath, ssd);
        }
        /// <summary>
        /// 保存安防信息
        /// </summary>
        public string SaveInfo()
        {
            HttpServerRequest hsr = new HttpServerRequest();
            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 < SecurityCenter.Security.securityAlarmList.Count; i++)
                {
                    string s = SecurityCenter.Security.securityAlarmList[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>
@@ -126,11 +319,10 @@
        public string bypass;
    }
    /// <summary>
    /// 安防输入
    /// </summary>
public class SecurityInput
    public class SecurityInput
    {
        /// <summary>
        /// 输入条件(功能)的sid
@@ -145,6 +337,154 @@
        /// 安防输入条件
        /// </summary>
        public List<SecurityInputCondition> condition = new List<SecurityInputCondition>();
        /// <summary>
        /// 加入输入条件
        /// 本地判断使用
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public bool addCondition = false;
        [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")
                        {
                            text += Language.StringByID(StringId.InAlarm) + " ";
                        }
                        else if (con.value == "false")
                        {
                            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")
                        {
                            text += Language.StringByID(StringId.WaterLeakage) + " ";
                        }
                        else if (con.value == "false")
                        {
                            text += Language.StringByID(StringId.Normal) + " ";
                        }
                    }
                    break;
                case SPK.SensorDoorWindow:
                    foreach (var con in condition)
                    {
                        if (con.value == "true")
                        {
                            text += Language.StringByID(StringId.Open) + " ";
                        }
                        else if (con.value == "false")
                        {
                            text += Language.StringByID(StringId.Close) + " ";
                        }
                    }
                    break;
            }
            return text;
        }
        
    }
    /// <summary>
@@ -179,9 +519,11 @@
    {
        /// <summary>
        /// 控制目标类型
        /// 设备:0,场景1,自动化2
        /// 0:设备
        /// 1:场景
        /// 2:自动化
        /// </summary>
        public string target_type;
        public string target_type ="0";
        /// <summary>
        /// 输出目标的sid
        /// </summary>
@@ -190,6 +532,69 @@
        /// 安防输出状态
        /// </summary>
        public List<SecurityOutputStatus> status = new List<SecurityOutputStatus>();
        /// <summary>
        /// 加入输入条件
        /// 本地判断使用
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public bool addCondition = false;
        [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>
        /// <returns></returns>
        public string StateText()
        {
            string text = "";
            if (target_type == "0")
            {
                switch (GetFunction().spk)
                {
                    case SPK.LightDimming:
                    case SPK.LightCCT:
                    case SPK.LightRGB:
                    case SPK.LightSwitch:
                        foreach (var state in status)
                        {
                            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 == "1")
            {
            }
            return text;
        }
    }
    /// <summary>
    /// 安防输出状态