Example #1
0
        public override void Handle(EGPSCurrentInfo current, AlarmHandleContext context)
        {
            // 获取Fortify的配置数据,没有配置则不进行任何处理
            var setting = AlarmSettingsService.Singleton.GetFortifyAlertSetting(current.VehicleCode.Value);
            if (setting == null)
            {
                this.RemoveRunningState(context.RunningState, EnumSMSInfoType.Fortify);
                AlarmLastStatusService.Singleton.RemoveLastFortifyWarning(current);
                return;
            }
            try
            {
                // 取上一条报警状态
                var lastCachingStatus = AlarmLastStatusService.Singleton.GetLastFortifyWarning(current);
                if (lastCachingStatus == null)
                {
                    lastCachingStatus = new LastFortifyAlertStatus();
                }
               
                if (!lastCachingStatus.IsOutRange)
                {
                    //如果上一次没有离开设防区域 那么检查这次是否离开了设防区域
                    var isOutRange = CheckIsOutRange(current, setting);
                    if (isOutRange)
                    {
                        
                        //如果离开了设防区域
                        //触发报警
                        Alert(context, current, setting, true);
                        //设置状态为超出设防范围 目的是用于下一次不再触发报警
                        lastCachingStatus.IsOutRange = true;
                        lastCachingStatus.LastAlertTime = current.ReportTime;
                    }
                }
                
                //保存目前状态
                AlarmLastStatusService.Singleton.SaveLastFortifyWarning(current, lastCachingStatus);

            }
            catch (Exception ex)
            {
                Logger.Error(ex, "VehicleCode", current.VehicleCode, "GPSCode", current.GPSCode);
            }

        }
        public void SaveLastFortifyWarning(EGPSCurrentInfo current,LastFortifyAlertStatus status)
        {
            if (status == null) return;

            string key = CONST_KEY_LAST_FORTIFY_STATUS + current.VehicleCode.Value.ToString();

            this.CachedService.Add(key, status, DateTime.Now.AddDays(1));
        }