Esempio n. 1
0
        protected bool IsReachCondition(EGPSCurrentInfo current, ETraceAlertSetting alertSetting)
        {
            VLatLonRange aVLatLonRange = VLatLonRange.Get(current.Latitude, current.Longitude, alertSetting.Range);

            return ((aVLatLonRange.Latitude1 < alertSetting.TracePoint.Latitude && alertSetting.TracePoint.Latitude < aVLatLonRange.Latitude2) &&
                (aVLatLonRange.Longitude1 < alertSetting.TracePoint.Longitude && alertSetting.TracePoint.Longitude < aVLatLonRange.Longitude2));
            //return Static_TraceAlertSettingSearchService.IsInTraceRange(current.Latitude, current.Longitude, alertSetting.TracePoint.RecordID, alertSetting.Range);
        }
 private IList<ETraceAlertSetting> GetExistThisSetting(ETraceAlertSetting alertSetting)
 {
     using (IRepository repository = SessionManager.CreateRepository(typeof(ETraceAlertSetting)))
     {
         Expression expression = null;
         Query query = new Query(typeof(ETraceAlertSetting));
         ExpressionUtility<Guid>.AddExpression("VehicleCode", alertSetting.VehicleCode, BinaryOperatorType.EqualTo, ref expression);
         query.Expression = expression;
         return repository.List<ETraceAlertSetting>(query);
     }
 }
Esempio n. 3
0
        protected bool IsReachConditionAlertAgain(EGPSCurrentInfo current, ETraceAlertSetting seting, LastTracePointAlertStatus lastCachingPointStatus)
        {
            // 从来没有报警,则需要报警
            if (lastCachingPointStatus.LastAlertTime == null)
                return true;

            TimeSpan differenceTime = current.ReportTime - lastCachingPointStatus.LastAlertTime.Value;
            if (differenceTime.TotalSeconds <= Static_AlarnIntervalTime)
                return false;

            // 取上一条Trace报警状态,如果找不到直接跳出(实际上不可能找不到的,因为至少会返回一个空内容的实例,除非数据库访问错误)
            var lastCachingStatus = AlarmLastStatusService.Singleton.GetLastTraceAlertStatus(current, seting);
            if (lastCachingStatus == null || !lastCachingStatus.LastAlertExists)
                return true;

            // 若最后一个报警的标注点不是当前需要报警的标注点,则报警。
            if (lastCachingStatus.LastAlertTracePointId != seting.TracePointID.ToString().ToLower())
                return true;

            // 如果是同一个标注点内报警,且当前车辆的ACC为开,则符合再次报警条件。
            return (current.ACCState == 1);
        }
Esempio n. 4
0
        protected void Alert(AlarmHandleContext context, EGPSCurrentInfo current, EnumAlertState state, ETraceAlertSetting alertSetting, LastTracePointAlertStatus lastCachingPointStatus)
        {
            if (alertSetting.EnableSMS || alertSetting.Enable)
            {
                // 生成报警实例,并将报警存入数据库,最新的报警状态放入缓存中
                ETraceAlertReport alertReport = this.CreateAlertReport(context, current, state, alertSetting);

                DateTime dt1 = DateTime.Now;
                GPSServiceFacade.AlertService.Add<ETraceAlertReport>(alertReport);
                Logger.Info(string.Format("Static_AlertReportService.Add<ETraceAlertReport>(alertReport)共花销{0}毫秒", (DateTime.Now - dt1).TotalMilliseconds));

                lastCachingPointStatus.LastAlertTime = current.ReportTime;
                AlarmLastStatusService.Singleton.SaveLastTracePointAlertStatus(current, alertSetting, lastCachingPointStatus);

                LastTraceAlertStatus lastCachingStatus = new LastTraceAlertStatus()
                {
                    LastAlertTracePointId = alertSetting.TracePointID.ToString().ToLower(),
                    LastAlertTime = current.ReportTime
                };
                AlarmLastStatusService.Singleton.SaveLastTraceAlertStatus(current.VehicleCode.Value, lastCachingStatus);

                if (alertSetting.EnableSMS && this.IsInMobileReceiveTime(alertReport))
                {
                    this.SendSMS(context, alertReport);
                }

                if (alertSetting.Enable && this.IsInUserReceiveTime(alertReport))
                {
                    this.SendWebSiteSMS(context, alertReport);
                }
            }
        }
Esempio n. 5
0
        protected ETraceAlertReport CreateAlertReport(AlarmHandleContext context, EGPSCurrentInfo current, EnumAlertState state, ETraceAlertSetting alertSetting)
        {
            ETraceAlertReport newReport = new ETraceAlertReport();

            newReport.EnumAlarmGrade = EnumAlarmGrade.Prompt;
            newReport.EnumSMSInfoType = EnumSMSInfoType.Mark;
            newReport.ACCState = current.ACCState;
            newReport.Speed = current.Speed;
            newReport.VStarkMileage = current.StarkMileage;
            newReport.GPSCode = current.GPSCode;
            newReport.ACCState = current.ACCState;
            newReport.Speed = current.Speed;
            newReport.GPSReportTime = current.ReportTime;
            newReport.Latitude = current.Latitude;
            newReport.Longitude = current.Longitude;
            newReport.MobileReceiveBeginTime = alertSetting.MobileReceiveBeginTime;
            newReport.MobileReceiveEndTime = alertSetting.MobileReceiveEndTime;
            newReport.ReceiveMobileList = alertSetting.ReceiveMobileList;
            newReport.ReceiveUserList = alertSetting.ReceiveUserList;
            newReport.TenantCode = alertSetting.TenantCode;
            newReport.UserReceiveBeginTime = alertSetting.UserReceiveBeginTime;
            newReport.UserReceiveEndTime = alertSetting.UserReceiveEndTime;
            newReport.VehicleCode = alertSetting.VehicleCode;
            newReport.VehiclePosition = this.GetPlaceName(context, current.Latitude, current.Longitude);
            newReport.LicensePlate = this.GetLicensePlate(context, current.VehicleCode.Value, alertSetting.TenantCode);
            newReport.EnumAlertState = state;
            newReport.DownSendOrderCode = DownSendCodeHelper.GPS.LogisticVehicle.AddressTracking;
            newReport.TracePoint = alertSetting.TracePoint;

            return newReport;
        }
Esempio n. 6
0
        public LastTraceAlertStatus GetLastTraceAlertStatus(EGPSCurrentInfo current, ETraceAlertSetting alertSetting)
        {
            if (!current.VehicleCode.HasValue) return null;

            string key = CONST_KEY_LAST_TRACE_STATUS + current.VehicleCode.Value.ToString();
            var result = this.CachedService.Get(key) as LastTraceAlertStatus;
            if (result == null)
            {
                // 找不到则从数据库查找最后一条报表记录
                DateTime dt1 = DateTime.Now;
                var lastReport = GPSServiceFacade.Report.Trace.GetAllLastReport(alertSetting.VehicleCode);
                Logger.Info("从数据库查找最后一条Trace报表记录", "开销时间(毫秒)", (DateTime.Now - dt1).TotalMilliseconds, "Vehicle Code", current.VehicleCode.Value, "TracePoint", alertSetting.TracePoint.RecordID);

                result = new LastTraceAlertStatus();
                if (lastReport != null)
                {
                    result.LastAlertTracePointId = lastReport.TracePointID.ToString().ToLower();  // alertSetting.RecordID.ToString();
                    result.LastAlertTime = lastReport.GPSReportTime;
                }
                lastReport = null;

                this.SaveLastTraceAlertStatus(current.VehicleCode.Value, result);
            }

            return result;
        }
Esempio n. 7
0
 public void SaveLastTracePointAlertStatus(EGPSCurrentInfo current, ETraceAlertSetting alertSetting, LastTracePointAlertStatus status)
 {
     string key = CONST_KEY_LAST_TRACEPOINT_STATUS + current.VehicleCode.Value.ToString() + "_" + alertSetting.TracePoint.RecordID;
     if (status == null)
     {
         status = new LastTracePointAlertStatus();
     }
     this.CachedService.Add(key, status, DateTime.Now.AddDays(1));
 }