HDL Home App 第二版本 旧平台金堂用 正在使用
chenqiyang
2022-06-22 dc0309e64f02227d8e1468b7326c07955f804612
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlAlarmsLogic.cs
old mode 100755 new mode 100644
@@ -11,508 +11,526 @@
    /// </summary>
    public class HdlAlarmsLogic
    {
        #region ■ 变量声明___________________________
        #region ■ 变量声明___________________________
        /// <summary>
        /// 本地安防数据
        /// </summary>
        private static HdlAlarmsLogic m_Current = null;
        /// <summary>
        /// 本地安防数据
        /// </summary>
        public static HdlAlarmsLogic Current
        {
            get
            {
                if (m_Current == null)
                {
                    m_Current = new HdlAlarmsLogic();
                }
                return m_Current;
            }
        }
        /// <summary>
        /// 安防上报信息
        /// </summary>
        public List<SafeguardAlarmInfo> listSafetyAlarmInfo = new List<SafeguardAlarmInfo>();
        /// <summary>
        /// 门锁上报信息
        /// </summary>
        public List<DeviceAlarmInfo> listDoorLockAlarmInfo = new List<DeviceAlarmInfo>();
        /// <summary>
        /// 上一次安防上报信息保存的文件名字(考虑到用户有可能24点的时候,不退出APP)
        /// </summary>
        private string oldDeviceAlarmFile = string.Empty;
        #endregion
        #region ■ 重新刷新报警信息___________________
        /// <summary>
        /// 重新刷新报警信息
        /// </summary>
        public void RefreshAlarmInfo()
        {
            this.listSafetyAlarmInfo.Clear();
            this.listDoorLockAlarmInfo.Clear();
            string fileName = DateTime.Now.ToString("yyyyMMdd");
            //判断有没有这个文件
            string fullName = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.SafeguardAlarmDirectory, fileName);
            if (System.IO.File.Exists(fullName) == true)
            {
                lock (listSafetyAlarmInfo)
                {
                    string dir = System.IO.Path.Combine(DirNameResourse.LocalMemoryDirectory, DirNameResourse.SafeguardAlarmDirectory);
                    var data = Global.ReadFileByDirectory(dir, fileName);
                    this.listSafetyAlarmInfo = JsonConvert.DeserializeObject<List<SafeguardAlarmInfo>>(System.Text.Encoding.UTF8.GetString(data));
                    if (this.listSafetyAlarmInfo == null)
                    {
                        this.listSafetyAlarmInfo = new List<SafeguardAlarmInfo>();
                    }
                }
            }
            //门锁记录
            fullName = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.DoorLockAlarmDirectory, fileName);
            if (System.IO.File.Exists(fullName) == true)
            {
                lock (listDoorLockAlarmInfo)
                {
                    string dir = System.IO.Path.Combine(DirNameResourse.LocalMemoryDirectory, DirNameResourse.DoorLockAlarmDirectory);
                    var data = Global.ReadFileByDirectory(dir, fileName);
                    this.listDoorLockAlarmInfo = JsonConvert.DeserializeObject<List<DeviceAlarmInfo>>(System.Text.Encoding.UTF8.GetString(data));
                    if (this.listDoorLockAlarmInfo == null)
                    {
                        this.listDoorLockAlarmInfo = new List<DeviceAlarmInfo>();
                    }
                }
            }
        }
        #endregion
        #region ■ 安防报警保存_______________________
        /// <summary>
        /// 保存安防报警信息到本地
        /// </summary>
        /// <param name="device"></param>
        public bool SaveSafeguardAlarmInfo(CommonDevice device)
        {
            int ZoneId = HdlSafeguardLogic.Current.GetZoneIdByIASZone(device);
            if (ZoneId == -1)
            {
                //这个传感器不存在于任何防区
                return false;
            }
            var msgInfo = this.GetSensorAlarmInfo(device);
            if (msgInfo == null)
            {
                //异常??
                return false;
            }
            lock (listSafetyAlarmInfo)
            {
                //获取保存安防信息的文件名字
                string fileName = this.GetSafeguardAlarmFileName();
                var data = new SafeguardAlarmInfo();
                data.AlarmType = SafeguardAlarmType.Sensor;
                data.ZoneId = ZoneId;
                data.DeviceAddr = device.DeviceAddr;
                data.DeviceEpoint = device.DeviceEpoint;
                data.DeviceName = device.DeviceName;
                data.Time = DateTime.Now.ToString("HH:mm:ss");
                data.RoomName = Common.Room.CurrentRoom.GetRoomNameByDevice(device);
                //报警结束
                data.AlarmMsg = msgInfo.AlarmMsg != string.Empty ? msgInfo.AlarmMsg : Language.StringByID(R.MyInternationalizationString.uAlarmFinish);
                //电池报警
                data.BatteryMsg = msgInfo.BatteryMsg;
                //被拆报警
                data.DemolishmentMsg = msgInfo.DemolishmenMsg;
                //限制它的长度
                this.listSafetyAlarmInfo.Insert(0, data);
                if (this.listSafetyAlarmInfo.Count > UserCenterResourse.Option.SafetyOnedayMaxAlarmMsgCount)
                {
                    this.listSafetyAlarmInfo.RemoveAt(this.listSafetyAlarmInfo.Count - 1);
                }
                //保存到本地
                var saveData = JsonConvert.SerializeObject(this.listSafetyAlarmInfo);
                var byteData = System.Text.Encoding.UTF8.GetBytes(saveData);
                string dir = System.IO.Path.Combine(DirNameResourse.LocalMemoryDirectory, DirNameResourse.SafeguardAlarmDirectory);
                Global.WriteFileToDirectoryByBytes(dir, fileName, byteData);
                if (UserCenterResourse.DicActionForm.ContainsKey("SafetyManagementMainForm") == true)
                {
                    var form = (Phone.UserCenter.Safety.SafetyManagementMainForm)UserCenterResourse.DicActionForm["SafetyManagementMainForm"];
                    form?.AddSafeguardLogPushRow(device);
                }
                return true;
            }
        }
        /// <summary>
        /// 保存布防操作信息到本地
        /// </summary>
        /// <param name="garrison">布防模式</param>
        /// <param name="appendText">附加文本</param>
        public void SaveSafeguardAlarmInfo(GarrisonMode garrison, string appendText = "")
        {
            if (garrison == GarrisonMode.None)
            {
                return;
            }
            lock (listSafetyAlarmInfo)
            {
                //获取保存安防信息的文件名字
                string fileName = this.GetSafeguardAlarmFileName();
                var data = new SafeguardAlarmInfo();
                data.Time = DateTime.Now.ToString("HH:mm:ss");
                data.AlarmType = SafeguardAlarmType.None;
                if (garrison == GarrisonMode.AtHome)
                {
                    data.AlarmType = SafeguardAlarmType.AtHome;
                    //没有内部防区
                    if (HdlSafeguardLogic.Current.IsHadInternalDefenseArea() == false)
                    {
                        //布防已执行
                        data.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uExecuteGarrison);
                    }
                    else
                    {
                        //在家布防已执行
                        data.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uExecuteAtHomeGarrison);
                    }
                }
                else if (garrison == GarrisonMode.RemoveHome)
                {
                    //离家布防已执行
                    data.AlarmType = SafeguardAlarmType.RemoveHome;
                    data.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uExecuteRemoveHomeGarrison);
                }
                else if (garrison == GarrisonMode.RemoveGarrison)
                {
                    //撤防已执行
                    data.AlarmType = SafeguardAlarmType.RemoveGarrison;
                    data.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uExecuteWithdrawGarrison);
                }
                else
                {
                    return;
                }
                //添加附加文本
                data.AlarmMsg = data.AlarmMsg + appendText;
                //限制它的长度
                this.listSafetyAlarmInfo.Insert(0, data);
                if (this.listSafetyAlarmInfo.Count > UserCenterResourse.Option.SafetyOnedayMaxAlarmMsgCount)
                {
                    this.listSafetyAlarmInfo.RemoveAt(this.listSafetyAlarmInfo.Count - 1);
                }
                //保存到本地
                var saveData = JsonConvert.SerializeObject(this.listSafetyAlarmInfo);
                var byteData = System.Text.Encoding.UTF8.GetBytes(saveData);
                string dir = System.IO.Path.Combine(DirNameResourse.LocalMemoryDirectory, DirNameResourse.SafeguardAlarmDirectory);
                Global.WriteFileToDirectoryByBytes(dir, fileName, byteData);
            }
        }
        /// <summary>
        /// 获取保存安防信息的文件名字
        /// </summary>
        /// <returns></returns>
        private string GetSafeguardAlarmFileName()
        {
            string fileName = DateTime.Now.ToString("yyyyMMdd");
            if (fileName != oldDeviceAlarmFile)
            {
                //考虑到用户有可能24点的时候不退出APP,这个时候直接刷新
                this.RefreshAlarmInfo();
            }
            oldDeviceAlarmFile = fileName;
            return fileName;
        }
        /// <summary>
        /// 获取本地记录的安防报警信息
        /// </summary>
        /// <returns></returns>
        public Dictionary<string, List<SafeguardAlarmInfo>> GetSafeguardAlarmInfo()
        {
            lock (listSafetyAlarmInfo)
            {
                string fullPath = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.SafeguardAlarmDirectory);
                //借用一下自动备份获取指定目录下面的文件的函数
                List<string> listFile = HdlAutoBackupLogic.GetFileFromDirectory(fullPath);
                //升序
                listFile.Sort();
                var dic = new Dictionary<string, List<SafeguardAlarmInfo>>();
                string dir = System.IO.Path.Combine(DirNameResourse.LocalMemoryDirectory, DirNameResourse.SafeguardAlarmDirectory);
                for (int i = listFile.Count - 1; i >= 0; i--)
                {
                    var data = Global.ReadFileByDirectory(dir, listFile[i]);
                    var info = JsonConvert.DeserializeObject<List<SafeguardAlarmInfo>>(System.Text.Encoding.UTF8.GetString(data));
                    if (info == null)
                    {
                        continue;
                    }
                    var listInfo = new List<SafeguardAlarmInfo>();
                    for (int j = 0; j < info.Count; j++)
                    {
                        if (j == UserCenterResourse.Option.SafetyOnedayMaxAlarmMsgCount)
                        {
                            //每天最多三十条数据
                            break;
                        }
                        listInfo.Add(info[j]);
                    }
                    dic[listFile[i]] = listInfo;
                    if (dic.Count == UserCenterResourse.Option.SafetyMaxAlarmMsgDay)
                    {
                        //只要三天的量
                        break;
                    }
                }
                return dic;
            }
        /// <summary>
        /// 本地安防数据
        /// </summary>
        private static HdlAlarmsLogic m_Current = null;
        /// <summary>
        /// 本地安防数据
        /// </summary>
        public static HdlAlarmsLogic Current
        {
            get
            {
                if (m_Current == null)
                {
                    m_Current = new HdlAlarmsLogic();
                }
                return m_Current;
            }
        }
        #endregion
        /// <summary>
        /// 安防上报信息
        /// </summary>
        public List<SafeguardAlarmInfo> listSafetyAlarmInfo = new List<SafeguardAlarmInfo>();
        /// <summary>
        /// 门锁上报信息
        /// </summary>
        public List<DeviceAlarmInfo> listDoorLockAlarmInfo = new List<DeviceAlarmInfo>();
        /// <summary>
        /// 上一次安防上报信息保存的文件名字(考虑到用户有可能24点的时候,不退出APP)
        /// </summary>
        private string oldDeviceAlarmFile = string.Empty;
        #region ■ 传感器报警的信息翻译文本___________
        #endregion
        /// <summary>
        /// 获取传感器报警的信息翻译文本(返回null则表示没有达成报警条件,停止报警则返回空字符串)
        /// </summary>
        /// <param name="i_device"></param>
        /// <returns></returns>
        public IASZoneReportInfo GetSensorAlarmInfo(CommonDevice i_device)
        {
            //IAS安防信息上报
            if ((i_device is IASZone) == false)
            {
                return null;
            }
            string mainkey = Common.LocalDevice.Current.GetDeviceMainKeys(i_device);
            //因为推送的是虚拟的设备,所以去获取真实物理设备
            CommonDevice device = Common.LocalDevice.Current.GetDevice(mainkey);
            if (device == null)
            {
                return null;
            }
            IASZone iASZone = (IASZone)i_device;
            var alarmInfo = new IASZoneReportInfo();
            if (iASZone.iASInfo.Battery == 1)
            {
                //电池电量低
                alarmInfo.BatteryMsg = Language.StringByID(R.MyInternationalizationString.uLowElectricityConsumption);
            }
            if (iASZone.iASInfo.Tamper == 1)
            {
                //设备被拆除
                alarmInfo.DemolishmenMsg = Language.StringByID(R.MyInternationalizationString.uDeviceWasDismantled);
            }
            //运动传感器
            if (device.IasDeviceType == 13)
            {
                if (iASZone.iASInfo.Alarm1 == 1)
                {
                    //有不明物体经过
                    alarmInfo.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uHadUnKnowObjectPassed);
                }
            }
            //烟雾传感器
            else if (device.IasDeviceType == 40)
            {
                if (iASZone.iASInfo.Alarm1 == 1)
                {
                    //烟雾报警
                    alarmInfo.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uSmogAlarm);
                }
            }
            //水侵传感器
            else if (device.IasDeviceType == 42)
            {
                if (iASZone.iASInfo.Alarm1 == 1)
                {
                    //检测到漏水
                    alarmInfo.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uWaterLeakageDetection);
                }
            }
            //燃气传感器
            else if (device.IasDeviceType == 43)
            {
                if (iASZone.iASInfo.Alarm1 == 1)
                {
                    //燃气泄漏
                    alarmInfo.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uCarbonMonoxideRevealed);
                }
            }
            //紧急按钮
            else if (device.IasDeviceType == 44)
            {
                //紧急按钮
                if (iASZone.iASInfo.Alarm1 == 1)
                {
                    //紧急按钮被按下
                    alarmInfo.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uEmergencyButtonPressdown);
                }
            }
            //钥匙扣
            else if (device.IasDeviceType == 277)
            {
                if (iASZone.iASInfo.Alarm1 == 1)
                {
                    //钥匙扣触发报警
                    alarmInfo.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uKeyFobAlarm);
                }
            }
            //门窗传感器
            else if (device.IasDeviceType == 21 || device.IasDeviceType == 22)
            {
                if (iASZone.iASInfo.Alarm1 == 1)
                {
                    //门窗被打开
                    alarmInfo.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uDoorOrWindowHadBeenOpen);
                }
                else
                {
                    //门窗已关闭
                    alarmInfo.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uDoorOrWindowHadClosed);
                }
            }
            else
            {
                //传感器
                if (iASZone.iASInfo.Alarm1 == 1)
                {
                    //触发传感器报警
                    alarmInfo.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uSensorAlarmHadTriggered);
                }
            }
            return alarmInfo;
        #region ■ 重新刷新报警信息___________________
        /// <summary>
        /// 重新刷新报警信息
        /// </summary>
        public void RefreshAlarmInfo()
        {
            this.listSafetyAlarmInfo.Clear();
            this.listDoorLockAlarmInfo.Clear();
            string fileName = DateTime.Now.ToString("yyyyMMdd");
            //安防报警
            string fullName = System.IO.Path.Combine(DirNameResourse.SafeguardAlarmDirectory, fileName);
            var data1 = HdlFileLogic.Current.ReadFileByteContent(fullName);
            if (data1 != null)
            {
                this.listSafetyAlarmInfo = JsonConvert.DeserializeObject<List<SafeguardAlarmInfo>>(System.Text.Encoding.UTF8.GetString(data1));
                if (this.listSafetyAlarmInfo == null)
                {
                    this.listSafetyAlarmInfo = new List<SafeguardAlarmInfo>();
                }
            }
            //门锁记录
            fullName = System.IO.Path.Combine(DirNameResourse.DoorLockAlarmDirectory, fileName);
            var data2 = HdlFileLogic.Current.ReadFileByteContent(fullName);
            if (data2 != null)
            {
                this.listDoorLockAlarmInfo = JsonConvert.DeserializeObject<List<DeviceAlarmInfo>>(System.Text.Encoding.UTF8.GetString(data2));
                if (this.listDoorLockAlarmInfo == null)
                {
                    this.listDoorLockAlarmInfo = new List<DeviceAlarmInfo>();
                }
            }
        }
        #endregion
        #region ■ 安防报警保存_______________________
        /// <summary>
        /// 保存安防报警信息到本地
        /// </summary>
        /// <param name="device"></param>
        public bool SaveSafeguardAlarmInfo(CommonDevice device)
        {
            int ZoneId = HdlSafeguardLogic.Current.GetZoneIdByIASZone(device);
            if (ZoneId == -1)
            {
                //这个传感器不存在于任何防区
                return false;
            }
            var msgInfo = this.GetSensorAlarmInfo(device);
            if (msgInfo == null)
            {
                //异常??
                return false;
            }
            lock (listSafetyAlarmInfo)
            {
                //获取保存安防信息的文件名字
                string fileName = this.GetSafeguardAlarmFileName();
                var data = new SafeguardAlarmInfo();
                data.AlarmType = SafeguardAlarmType.Sensor;
                data.ZoneId = ZoneId;
                data.DeviceAddr = device.DeviceAddr;
                data.DeviceEpoint = device.DeviceEpoint;
                data.DeviceName = device.DeviceName;
                data.Time = DateTime.Now.ToString("HH:mm:ss");
                data.RoomName = HdlRoomLogic.Current.GetRoomNameByDevice(device);
                //报警结束
                data.AlarmMsg = msgInfo.AlarmMsg != string.Empty ? msgInfo.AlarmMsg : Language.StringByID(R.MyInternationalizationString.uAlarmFinish);
                //电池报警
                data.BatteryMsg = msgInfo.BatteryMsg;
                //被拆报警
                data.DemolishmentMsg = msgInfo.DemolishmenMsg;
                //限制它的长度
                this.listSafetyAlarmInfo.Insert(0, data);
                if (this.listSafetyAlarmInfo.Count > UserCenterResourse.ResidenceOption.SafetyOnedayMaxAlarmMsgCount)
                {
                    this.listSafetyAlarmInfo.RemoveAt(this.listSafetyAlarmInfo.Count - 1);
                }
                //保存到本地
                string fullName = System.IO.Path.Combine(DirNameResourse.SafeguardAlarmDirectory, fileName);
                HdlFileLogic.Current.SaveFileContent(fullName, this.listSafetyAlarmInfo);
                if (UserCenterResourse.DicActionForm.ContainsKey("SafetyManagementMainForm") == true)
                {
                    var form = (Phone.UserCenter.Safety.SafetyManagementMainForm)UserCenterResourse.DicActionForm["SafetyManagementMainForm"];
                    form?.AddSafeguardLogPushRow(device);
                }
                return true;
            }
        }
        /// <summary>
        /// 保存布防操作信息到本地
        /// </summary>
        /// <param name="garrison">布防模式</param>
        /// <param name="appendText">附加文本</param>
        public void SaveSafeguardAlarmInfo(GarrisonMode garrison, string appendText = "")
        {
            if (garrison == GarrisonMode.None)
            {
                return;
            }
            lock (listSafetyAlarmInfo)
            {
                //获取保存安防信息的文件名字
                string fileName = this.GetSafeguardAlarmFileName();
                var data = new SafeguardAlarmInfo();
                data.Time = DateTime.Now.ToString("HH:mm:ss");
                data.AlarmType = SafeguardAlarmType.None;
                if (garrison == GarrisonMode.AtHome)
                {
                    data.AlarmType = SafeguardAlarmType.AtHome;
                    //没有内部防区
                    if (HdlSafeguardLogic.Current.IsHadInternalDefenseArea() == false)
                    {
                        //布防已执行
                        data.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uExecuteGarrison);
                    }
                    else
                    {
                        //在家布防已执行
                        data.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uExecuteAtHomeGarrison);
                    }
                }
                else if (garrison == GarrisonMode.RemoveHome)
                {
                    //离家布防已执行
                    data.AlarmType = SafeguardAlarmType.RemoveHome;
                    data.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uExecuteRemoveHomeGarrison);
                }
                else if (garrison == GarrisonMode.RemoveGarrison)
                {
                    //撤防已执行
                    data.AlarmType = SafeguardAlarmType.RemoveGarrison;
                    data.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uExecuteWithdrawGarrison);
                }
                else
                {
                    return;
                }
                //添加附加文本
                data.AlarmMsg = data.AlarmMsg + appendText;
                //限制它的长度
                this.listSafetyAlarmInfo.Insert(0, data);
                if (this.listSafetyAlarmInfo.Count > UserCenterResourse.ResidenceOption.SafetyOnedayMaxAlarmMsgCount)
                {
                    this.listSafetyAlarmInfo.RemoveAt(this.listSafetyAlarmInfo.Count - 1);
                }
                //保存到本地
                string fullName = System.IO.Path.Combine(DirNameResourse.SafeguardAlarmDirectory, fileName);
                HdlFileLogic.Current.SaveFileContent(fullName, this.listSafetyAlarmInfo);
            }
        }
        /// <summary>
        /// 获取保存安防信息的文件名字
        /// </summary>
        /// <returns></returns>
        private string GetSafeguardAlarmFileName()
        {
            string fileName = DateTime.Now.ToString("yyyyMMdd");
            if (fileName != oldDeviceAlarmFile)
            {
                //考虑到用户有可能24点的时候不退出APP,这个时候直接刷新
                this.RefreshAlarmInfo();
            }
            oldDeviceAlarmFile = fileName;
            return fileName;
        }
        /// <summary>
        /// 获取本地记录的安防报警信息
        /// </summary>
        /// <returns></returns>
        public Dictionary<string, List<SafeguardAlarmInfo>> GetSafeguardAlarmInfo()
        {
            lock (listSafetyAlarmInfo)
            {
                string fullPath = DirNameResourse.SafeguardAlarmDirectory;
                //获取指定目录下面的文件
                List<string> listFile = HdlFileLogic.Current.GetFileFromDirectory(fullPath);
                //升序
                listFile.Sort();
                var dic = new Dictionary<string, List<SafeguardAlarmInfo>>();
                for (int i = listFile.Count - 1; i >= 0; i--)
                {
                    var data = HdlFileLogic.Current.ReadFileByteContent(System.IO.Path.Combine(fullPath, listFile[i]));
                    var info = JsonConvert.DeserializeObject<List<SafeguardAlarmInfo>>(System.Text.Encoding.UTF8.GetString(data));
                    if (info == null)
                    {
                        continue;
                    }
                    var listInfo = new List<SafeguardAlarmInfo>();
                    for (int j = 0; j < info.Count; j++)
                    {
                        if (j == UserCenterResourse.ResidenceOption.SafetyOnedayMaxAlarmMsgCount)
                        {
                            //每天最多三十条数据
                            break;
                        }
                        listInfo.Add(info[j]);
                    }
                    dic[listFile[i]] = listInfo;
                    if (dic.Count == UserCenterResourse.ResidenceOption.SafetyMaxAlarmMsgDay)
                    {
                        //只要三天的量
                        break;
                    }
                }
                return dic;
            }
        }
        #endregion
        #region ■ 传感器报警的信息翻译文本___________
        /// <summary>
        /// 获取传感器报警的信息翻译文本(返回null则表示没有达成报警条件,停止报警则返回空字符串)
        /// </summary>
        /// <param name="i_device"></param>
        /// <returns></returns>
        public IASZoneReportInfo GetSensorAlarmInfo(CommonDevice i_device)
        {
            //IAS安防信息上报
            if ((i_device is IASZone) == false)
            {
                return null;
            }
            string mainkey = Common.LocalDevice.Current.GetDeviceMainKeys(i_device);
            //因为推送的是虚拟的设备,所以去获取真实物理设备
            CommonDevice device = Common.LocalDevice.Current.GetDevice(mainkey);
            if (device == null)
            {
                return null;
            }
            IASZone iASZone = (IASZone)i_device;
            if (iASZone.iASInfo == null)
            {
                return null;
            }
            var alarmInfo = new IASZoneReportInfo();
            if (iASZone.iASInfo.Battery == 1)
            {
                //电池电量低
                alarmInfo.BatteryMsg = Language.StringByID(R.MyInternationalizationString.uLowElectricityConsumption);
            }
            if (iASZone.iASInfo.Tamper == 1)
            {
                //设备被拆除
                alarmInfo.DemolishmenMsg = Language.StringByID(R.MyInternationalizationString.uDeviceWasDismantled);
            }
            //运动传感器
            if (device.IasDeviceType == 13 || device.IasDeviceType == 541)
            {
                if (iASZone.iASInfo.Alarm1 == 1)
                {
                    //有人经过
                    alarmInfo.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uHadUnKnowObjectPassed);
                }
            }
            //烟雾传感器
            else if (device.IasDeviceType == 40)
            {
                if (iASZone.iASInfo.Alarm1 == 1)
                {
                    //烟雾报警
                    alarmInfo.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uSmogAlarm);
                }
            }
            //水侵传感器
            else if (device.IasDeviceType == 42)
            {
                if (iASZone.iASInfo.Alarm1 == 1)
                {
                    //检测到漏水
                    alarmInfo.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uWaterLeakageDetection);
                }
            }
            //燃气传感器
            else if (device.IasDeviceType == 43)
            {
                if (iASZone.iASInfo.Alarm1 == 1)
                {
                    //燃气泄漏
                    alarmInfo.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uCarbonMonoxideRevealed);
                }
            }
            //紧急按钮
            else if (device.IasDeviceType == 44)
            {
                //紧急按钮
                if (iASZone.iASInfo.Alarm1 == 1)
                {
                    //紧急按钮被按下
                    alarmInfo.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uEmergencyButtonPressdown);
                }
            }
            //钥匙扣
            else if (device.IasDeviceType == 277)
            {
                if (iASZone.iASInfo.Alarm1 == 1)
                {
                    //钥匙扣触发报警
                    alarmInfo.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uKeyFobAlarm);
                }
            }
            //门窗传感器
            else if (device.IasDeviceType == 21 || device.IasDeviceType == 22)
            {
                if (iASZone.iASInfo.Alarm1 == 1)
                {
                    //门窗被打开
                    alarmInfo.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uDoorOrWindowHadBeenOpen);
                }
                else
                {
                    //门窗已关闭
                    alarmInfo.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uDoorOrWindowHadClosed);
                }
            }
            else
            {
                //传感器
                if (iASZone.iASInfo.Alarm1 == 1)
                {
                    //触发传感器报警
                    alarmInfo.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uSensorAlarmHadTriggered);
                }
            }
            return alarmInfo;
        }
        /// <summary>
        /// 获取单个Json数据里面,包含的全部报警信息条数
        /// </summary>
        /// <param name="alarmInfo"></param>
        /// <returns></returns>
        public List<string> GetSensorListAlarmMsg(SafeguardAlarmInfo alarmInfo)
        {
            var listMsg = new List<string>();
            //一条信息里面,它可能包含多个报警
            if (string.IsNullOrEmpty(alarmInfo.AlarmMsg) == false)
            {
                //报警信息
                listMsg.Add(alarmInfo.AlarmMsg);
            }
            if (alarmInfo.BatteryMsg != null)
            {
                //电池电量
                listMsg.Add(alarmInfo.BatteryMsg);
            }
            if (alarmInfo.DemolishmentMsg != null)
            {
                //被拆报警
                listMsg.Add(alarmInfo.DemolishmentMsg);
            }
            return listMsg;
        }
        #endregion
        #region ■ 门锁报警保存_______________________
        #region ■ 门锁报警保存_______________________
        /// <summary>
        /// 保存门锁报警信息到本地
        /// </summary>
        /// <param name="jobject"></param>
        public bool SaveDoorLockAlarmInfo(Newtonsoft.Json.Linq.JObject jobject)
        /// <summary>
        /// 保存门锁报警信息到本地
        /// </summary>
        /// <param name="jobject"></param>
        public bool SaveDoorLockAlarmInfo(Newtonsoft.Json.Linq.JObject jobject)
        {
            var device = Common.LocalDevice.Current.GetDevice(jobject.Value<string>("DeviceAddr"), jobject.Value<int>("Epoint"));
            var device = Common.LocalDevice.Current.GetDevice(jobject.Value<string>("DeviceAddr"), jobject.Value<int>("Epoint"));
            if ((device is ZigBee.Device.DoorLock) == false)
            {
                //它不是门锁
                return false;
            }
            var msgInfo = this.GetDoorLockAlarmInfo(jobject);
            if (msgInfo == null)
            {
                //异常??
                return false;
            }
            lock (listDoorLockAlarmInfo)
            {
                //获取保存安防信息的文件名字
                string fileName = this.GetSafeguardAlarmFileName();
                msgInfo.DeviceAddr = device.DeviceAddr;
                msgInfo.DeviceEpoint = device.DeviceEpoint;
                msgInfo.DeviceName = device.DeviceName;
                msgInfo.Time = DateTime.Now.ToString("HH:mm:ss");
                msgInfo.RoomName = Common.Room.CurrentRoom.GetRoomNameByDevice(device);
                //限制它的长度
                this.listDoorLockAlarmInfo.Insert(0, msgInfo);
                if (this.listDoorLockAlarmInfo.Count > UserCenterResourse.Option.DoorLockOnedayMaxAlarmMsgCount)
                {
                    this.listDoorLockAlarmInfo.RemoveAt(this.listDoorLockAlarmInfo.Count - 1);
                }
                //保存到本地
                var saveData = JsonConvert.SerializeObject(this.listDoorLockAlarmInfo);
                var byteData = System.Text.Encoding.UTF8.GetBytes(saveData);
                string dir = System.IO.Path.Combine(DirNameResourse.LocalMemoryDirectory, DirNameResourse.DoorLockAlarmDirectory);
                Global.WriteFileToDirectoryByBytes(dir, fileName, byteData);
                return true;
            }
        }
        /// <summary>
        /// 获取本地记录的门锁报警信息
        /// </summary>
        /// <returns></returns>
        public Dictionary<string, List<DeviceAlarmInfo>> GetAllDoorLockAlarmInfo()
        {
            lock (listDoorLockAlarmInfo)
            {
                string fullPath = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.DoorLockAlarmDirectory);
                //借用一下自动备份获取指定目录下面的文件的函数
                List<string> listFile = HdlAutoBackupLogic.GetFileFromDirectory(fullPath);
                //升序
                listFile.Sort();
                var dic = new Dictionary<string, List<DeviceAlarmInfo>>();
                string dir = System.IO.Path.Combine(DirNameResourse.LocalMemoryDirectory, DirNameResourse.DoorLockAlarmDirectory);
                for (int i = listFile.Count - 1; i >= 0; i--)
                {
                    var data = Global.ReadFileByDirectory(dir, listFile[i]);
                    var info = JsonConvert.DeserializeObject<List<DeviceAlarmInfo>>(System.Text.Encoding.UTF8.GetString(data));
                    if (info == null)
                    {
                        continue;
                    }
                    var listInfo = new List<DeviceAlarmInfo>();
                    for (int j = 0; j < info.Count; j++)
                    {
                        if (j == UserCenterResourse.Option.DoorLockOnedayMaxAlarmMsgCount)
                        {
                            //每天最多三十条数据
                            break;
                        }
                        listInfo.Add(info[j]);
                    }
                    dic[listFile[i]] = listInfo;
                    if (dic.Count == UserCenterResourse.Option.DoorLockMaxAlarmMsgDay)
                    {
                        //只要三天的量
                        break;
                    }
                }
                return dic;
            }
            }
            var msgInfo = this.GetDoorLockAlarmInfo(jobject);
            if (msgInfo == null)
            {
                //异常??
                return false;
            }
            lock (listDoorLockAlarmInfo)
            {
                //获取保存安防信息的文件名字
                string fileName = this.GetSafeguardAlarmFileName();
                msgInfo.DeviceAddr = device.DeviceAddr;
                msgInfo.DeviceEpoint = device.DeviceEpoint;
                msgInfo.DeviceName = device.DeviceName;
                msgInfo.Time = DateTime.Now.ToString("HH:mm:ss");
                msgInfo.RoomName = HdlRoomLogic.Current.GetRoomNameByDevice(device);
                //限制它的长度
                this.listDoorLockAlarmInfo.Insert(0, msgInfo);
                if (this.listDoorLockAlarmInfo.Count > UserCenterResourse.ResidenceOption.DoorLockOnedayMaxAlarmMsgCount)
                {
                    this.listDoorLockAlarmInfo.RemoveAt(this.listDoorLockAlarmInfo.Count - 1);
                }
                //保存到本地
                string fullName = System.IO.Path.Combine(DirNameResourse.DoorLockAlarmDirectory, fileName);
                HdlFileLogic.Current.SaveFileContent(fullName, this.listDoorLockAlarmInfo);
                return true;
            }
        }
        #endregion
        /// <summary>
        /// 获取本地记录的门锁报警信息
        /// </summary>
        /// <returns></returns>
        public Dictionary<string, List<DeviceAlarmInfo>> GetAllDoorLockAlarmInfo()
        {
            lock (listDoorLockAlarmInfo)
            {
                string fullPath = DirNameResourse.DoorLockAlarmDirectory;
                //获取指定目录下面的文件
                List<string> listFile = HdlFileLogic.Current.GetFileFromDirectory(fullPath);
                //升序
                listFile.Sort();
                var dic = new Dictionary<string, List<DeviceAlarmInfo>>();
                for (int i = listFile.Count - 1; i >= 0; i--)
                {
                    var data = HdlFileLogic.Current.ReadFileByteContent(System.IO.Path.Combine(fullPath, listFile[i]));
                    var info = JsonConvert.DeserializeObject<List<DeviceAlarmInfo>>(System.Text.Encoding.UTF8.GetString(data));
                    if (info == null)
                    {
                        continue;
                    }
                    var listInfo = new List<DeviceAlarmInfo>();
                    for (int j = 0; j < info.Count; j++)
                    {
                        if (j == UserCenterResourse.ResidenceOption.DoorLockOnedayMaxAlarmMsgCount)
                        {
                            //每天最多三十条数据
                            break;
                        }
                        listInfo.Add(info[j]);
                    }
                    dic[listFile[i]] = listInfo;
        #region ■ 门锁报警的信息翻译文本_____________
                    if (dic.Count == UserCenterResourse.ResidenceOption.DoorLockMaxAlarmMsgDay)
                    {
                        //只要三天的量
                        break;
                    }
                }
                return dic;
            }
        }
        /// <summary>
        /// 获取门锁报警的信息翻译文本(返回null则表示条件未达成)
        /// </summary>
        /// <param name="jobject"></param>
        /// <returns></returns>
        private DeviceAlarmInfo GetDoorLockAlarmInfo(Newtonsoft.Json.Linq.JObject jobject)
        {
            var info = (DoorLockAlarmsResult)JsonConvert.DeserializeObject<DoorLockAlarmsResult>(jobject["Data"].ToString());
            var alarmInfo = new DeviceAlarmInfo();
        #endregion
        #region ■ 门锁报警的信息翻译文本_____________
        /// <summary>
        /// 获取门锁报警的信息翻译文本(返回null则表示条件未达成)
        /// </summary>
        /// <param name="jobject"></param>
        /// <returns></returns>
        public DeviceAlarmInfo GetDoorLockAlarmInfo(Newtonsoft.Json.Linq.JObject jobject)
        {
            var info = JsonConvert.DeserializeObject<DoorLockAlarmsResult>(jobject["Data"].ToString());
            var alarmInfo = new DeviceAlarmInfo();
            if (info.Clusterid == 1)
            {
@@ -549,62 +567,57 @@
                    //暴力开门
                    alarmInfo.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uDoorLockAlarmMsg5);
                }
                else if (info.AlarmCode == 16)
                else if (info.AlarmCode == 216)
                {
                    //常开模式开启
                    //常开模式开启(门锁触发)
                    alarmInfo.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uDoorLockAlarmMsg6);
                    alarmInfo.MsgDiv = 9000;
                }
                else if (info.AlarmCode == 17)
                else if (info.AlarmCode == 217)
                {
                    //常开模式结束
                    //常开模式结束(门锁触发)
                    alarmInfo.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uDoorLockAlarmMsg7);
                    alarmInfo.MsgDiv = 9000;
                }
                else if (info.AlarmCode == 32)
                else if (info.AlarmCode == 218)
                {
                    //门铃触发
                    //常开模式开启(网关触发)
                    alarmInfo.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uDoorLockAlarmMsg9);
                    alarmInfo.MsgDiv = 9000;
                }
                else if (info.AlarmCode == 219)
                {
                    //常开模式结束(网关触发)
                    alarmInfo.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uDoorLockAlarmMsg10);
                    alarmInfo.MsgDiv = 9000;
                }
                else if (info.AlarmCode == 232)
                {
                    //有人访问
                    alarmInfo.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uDoorLockAlarmMsg8);
                }
            }
            return alarmInfo.AlarmMsg == string.Empty ? null : alarmInfo;
            return alarmInfo.AlarmMsg == string.Empty ? null : alarmInfo;
        }
        #endregion
        #region ■ 一般方法___________________________
        /// <summary>
        /// 获取报警信息的文件名字
        /// </summary>
        /// <returns></returns>
        private string GetAlarmFileName()
        {
            string fileName = DateTime.Now.ToString("yyyyMMdd");
            if (fileName != oldDeviceAlarmFile)
            {
                //考虑到用户有可能24点的时候不退出APP,这个时候直接刷新
                this.RefreshAlarmInfo();
            }
            oldDeviceAlarmFile = fileName;
            return fileName;
        }
        #endregion
        #region ■ 结构体_____________________________
        /// <summary>
        /// 门锁的报警结果
        /// 获取报警信息的文件名字
        /// </summary>
        private class DoorLockAlarmsResult
        /// <returns></returns>
        private string GetAlarmFileName()
        {
            /// <summary>
            /// 报警类型
            /// </summary>
            public int AlarmCode = -1;
            /// <summary>
            /// Clusterid
            /// </summary>
            public int Clusterid = -1;
            string fileName = DateTime.Now.ToString("yyyyMMdd");
            if (fileName != oldDeviceAlarmFile)
            {
                //考虑到用户有可能24点的时候不退出APP,这个时候直接刷新
                this.RefreshAlarmInfo();
            }
            oldDeviceAlarmFile = fileName;
            return fileName;
        }
        #endregion