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)); }