//是否达到提醒条件
        private bool IsReachCondition(EFatigueDrivingAlertSetting setting)
        {
            DateTime startTime = DateTime.Now.AddHours(-setting.DrivingDuration);
            DateTime endTime = DateTime.Now;
            IGPSHistoryInfoManager manager = new GPSHistoryInfoManager();
            int rowCountAllState = 0;
            int rowCount = 0;

            if (_MOVOVehicleDict.ContainsKey(setting.VehicleCode))
            {
                rowCount = manager.CountMovoAccOff(setting.VehicleCode, startTime, endTime, out rowCountAllState);
            }
    
            if (rowCountAllState < 100)             //总记录太少,不报警
            {
                Logger.Info(string.Format("车辆code:{0}--总记录太少(少于100),不报警", setting.VehicleCode));
                return false;
            }
            return rowCount == 0;
        }
        private void Alert(EnumAlertState state, EFatigueDrivingAlertSetting setting)
        {
            if (state == EnumAlertState.Alerting)
            {
                if (setting.EnableSMS || setting.Enable)
                {
                    _alertReport = (EFatigueDrivingReport)CreateAlertReport(state, setting);
                    SaveAlertReport();
                    if (setting.EnableSMS && this.IsInReceiveTime(_alertReport.MobileReceiveBeginTime, _alertReport.MobileReceiveEndTime))
                    {
                        SendSMS(_alertReport);
                    }
                    if (setting.Enable && this.IsInReceiveTime(_alertReport.UserReceiveBeginTime, _alertReport.UserReceiveEndTime))
                    {
                        AlarmHandleContext context = new AlarmHandleContext();                        
                        this.SendWebSiteSMS(context, _alertReport);
                    }
                }

            }
            else
            {
                UpdateAlertReport();
            }
        }
        private EBaseAlertReport CreateAlertReport(EnumAlertState state, EFatigueDrivingAlertSetting alertSetting)
        {
            EGPSCurrentInfo _gpsCurrentInfo = new GPSTrackManager().GetCurrentInfo(alertSetting.VehicleCode);
            EFatigueDrivingReport newReport = new EFatigueDrivingReport();
            newReport.EnumAlarmGrade = EnumAlarmGrade.Prompt;
            newReport.ACCState = _gpsCurrentInfo.ACCState;
            newReport.Speed = _gpsCurrentInfo.Speed;
            newReport.VStarkMileage = _gpsCurrentInfo.StarkMileage;
            newReport.EnumSMSInfoType = EnumSMSInfoType.FatigueDriving;
            newReport.GPSCode = _gpsCurrentInfo.GPSCode;
            newReport.GPSReportTime = _gpsCurrentInfo.ReportTime;
            newReport.Latitude = _gpsCurrentInfo.Latitude;
            newReport.Longitude = _gpsCurrentInfo.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(_gpsCurrentInfo.Latitude, _gpsCurrentInfo.Longitude);
            if (_MOVOVehicleDict.ContainsKey(alertSetting.VehicleCode))
            {
                newReport.LicensePlate = _MOVOVehicleDict[alertSetting.VehicleCode];
            }
   
            newReport.EnumAlertState = state;

            newReport.DownSendOrderCode = DownSendCodeHelper.GPS.LogisticVehicle.FatigueDrive;
            newReport.DurationDrivingTime = alertSetting.DrivingDuration;
            newReport.RestTime = alertSetting.RestTime;
            newReport.AlertState = (int)state;
            return newReport;
        }
Esempio n. 4
0
        /// <summary>
        ///  疲劳驾驶提醒设置
        /// </summary>
        /// <param name="vehicleCodes"></param>
        /// <param name="entity"></param>
        /// <returns></returns>
        public bool AddFatigueDrivingAlertSetting(List<Guid> vehicleCodes, EFatigueDrivingAlertSetting entity)
        {
            using (var trans = DACFacade.Gps.FatigueDrivingAlertSettingDAC.BeginTransaction())
            {
                try
                {
                    int deleteCount = DACFacade.Gps.FatigueDrivingAlertSettingDAC.Delete(trans, vehicleCodes);
                    int addCount = 0;

                    foreach (var item in vehicleCodes)
                    {
                        entity.RecordID = Guid.NewGuid();
                        entity.VehicleCode = item.ToString();
                        entity.CreateTime = DateTime.Now;
                        addCount += DACFacade.Gps.FatigueDrivingAlertSettingDAC.Insert(trans, entity);
                    }

                    if (addCount > 0)
                    {
                        trans.Commit();
                        return true;
                    }
                    else
                    {
                        trans.Rollback();
                        return false;
                    }
                }
                catch
                {
                    trans.Rollback();
                    return false;
                }
            }
        }