/// <summary>
        /// Obtem as passagens pendentes disponiveis para processamento.
        /// </summary>
        /// <param name="tempoMaximoTtlEmMinutos">Tempo do TTL em minutos.</param>
        /// <param name="qtdMaximaPassagensParaProcessar">Quantidade máxima de passagens a processar.</param>
        /// <returns>PassagemPendenteMessage[]</returns>
        private List<PassagemPendenteMessage> ObterPassagensDisponiveisParaProcessamento(int tempoMaximoTtlEmMinutos
            , int qtdMaximaPassagensParaProcessar
            , IEnumerable<ConcessionariaModel> concessionarias)
        {
            Log.Debug(GeradorPassagemPendenteResource.ObterPassagensPendentes);

            if (concessionarias == null || !concessionarias.Any())
            {
                throw new ArgumentNullException("concessionarias", GeradorPassagemPendenteResource.NaoExisteConcessionarias);
            }

            var concessionariasArtesp = concessionarias.Where(x => x.AtivoProtocoloArtesp);
            if (concessionariasArtesp == null || !concessionariasArtesp.Any())
            {
                throw new ArgumentNullException("concessionariasArtesp", GeradorPassagemPendenteResource.NaoExisteConcessionariasArtesp);
            }


            var request = new ObterPassagensPendentesFilter
            {
                QuantidadeMinutosTtl = tempoMaximoTtlEmMinutos,
                QtdMaximaPassagens = qtdMaximaPassagensParaProcessar
            };
            var obterPassagensPendentesQuery = new ObterPassagensPendentesQuery(_dataSourceMensageria);
            var passagensDisponiveisProcessamento = obterPassagensPendentesQuery.Execute(request);
            if (passagensDisponiveisProcessamento == null || !passagensDisponiveisProcessamento.Any())
            {
                throw new ArgumentNullException("passagensDisponiveisProcessamento", GeradorPassagemPendenteResource.NaoExistePassagensPendentes);
            }


            if (passagensDisponiveisProcessamento == null || !passagensDisponiveisProcessamento.Any())
            {
                throw new ArgumentNullException("passagensDisponiveisProcessamento", GeradorPassagemPendenteResource.NaoExistePassagensPendentes);
            }


            return passagensDisponiveisProcessamento.ToList();
        }
        public override IEnumerable <PassagemPendenteMessage> Execute(ObterPassagensPendentesFilter filter)
        {
            var resultado = DataSource.Connection.Query <PassagemPendenteMessage>(
                "spObterMensagemPendenteProcessamento",
                new
            {
                filter.QtdMaximaPassagens,
            },
                commandType: CommandType.StoredProcedure,
                commandTimeout: 600
                );

            foreach (var item in resultado)
            {
                item.DataCriacao =
                    new System.DateTime
                        (year: item.DataCriacao.Year, month: item.DataCriacao.Month, day: item.DataCriacao.Day,
                        hour: item.DataCriacao.Hour, minute: item.DataCriacao.Minute, second: item.DataCriacao.Second, kind: System.DateTimeKind.Utc);
            }

            return(resultado);
        }