Example #1
0
        public GeradorPassagemReprovadaEdiResponse Execute(GeradorPassagemReprovadaPorTransacaoParceiroExceptionEdiRequest request)
        {
            var response = new GeradorPassagemReprovadaEdiResponse {
                PassagemReprovadaEdi = new PassagemReprovadaEDI()
            };

            Mapper.Map(request.PassagemPendenteEdi, response.PassagemReprovadaEdi);

            response.PassagemReprovadaEdi.CodigoRetorno = request.CodigoRetornoTransacaoTrf;

            var queryConfigSistema =
                new ObterConfiguracaoSistemaQuery(true, _dataSourceConectSysReadOnly, _dataSourceFallBack);
            var parceiroId = queryConfigSistema.Execute(ConfiguracaoSistemaModel.CodigoParceiroRoadCard);

            response.PassagemReprovadaEdi.TransacaoRecusadaParceiro = new TransacaoRecusadaParceiroEdi
            {
                DetalheTRNId = request.PassagemPendenteEdi.DetalheTrnId,
                CodigoRetornoTransacaoTRF = request.CodigoRetornoTransacaoTrf,
                DataPassagemNaPraca       = request.PassagemPendenteEdi.DataPassagem,
                ParceiroId     = parceiroId.Valor.TryToInt(),
                Valor          = request.PassagemPendenteEdi.Valor,
                ViagemAgendada = new DetalheViagem
                {
                    Id = request.DetalheViagemId
                },
                DataEnvioAoParceiro = null
            };

            response.PassagemReprovadaEdi.Veiculo = request.PassagemPendenteEdi.Adesao.Veiculo;

            return(response);
        }
        private void GerarPassagemPendente()
        {
            try
            {
                var obterConfiguracaoSistemaQuery = new ObterConfiguracaoSistemaQuery(false, _readOnlyDataSource, _dataSource);
                var configuracaoSistemaTtl        = obterConfiguracaoSistemaQuery.Execute("ConfiguracaoTtlEmMinutos");
                var configuracaoQtdMaximaPassagensParaProcessar = obterConfiguracaoSistemaQuery.Execute("QuantidadeMaximaPassagensParaProcessar");

                if (configuracaoSistemaTtl != null)
                {
                    if (configuracaoQtdMaximaPassagensParaProcessar != null)
                    {
                        var tempoMaximoTtlEmMinutos = int.Parse(configuracaoSistemaTtl.Valor);
                        var qtdMaximaPassagens      = int.Parse(configuracaoQtdMaximaPassagensParaProcessar.Valor);

                        Log.Debug("Obtendo Detalhes Pendentes de processamento.");

                        var qryDetalhePassagemPendenteEstacionamento = new ListarDetalhePassagemPendenteEstacionamentoQuery(_dataSourcePark);
                        var detalhesPassagemPendenteEstacionamento   = qryDetalhePassagemPendenteEstacionamento.Execute(new ListarDetalhePassagemPendenteEstacionamentoFilter
                        {
                            QuantidadeMaximaPassagens = qtdMaximaPassagens,
                            QuantidadeMinutosTtl      = tempoMaximoTtlEmMinutos
                        }).ToList();

                        Log.Info($"Foram encontrados {detalhesPassagemPendenteEstacionamento.Count()} Detalhe disponíveis para processamento.");

                        if (detalhesPassagemPendenteEstacionamento.Any())
                        {
                            Log.Info($"Foram encontradas {detalhesPassagemPendenteEstacionamento.Count()} Detalhes pendentes para envio ao barramento.");
                            var sucessoEnvio = EnviarDetalhesPassagemPendenteEstacionamentoPendentes(detalhesPassagemPendenteEstacionamento.ToList());
                            if (sucessoEnvio)
                            {
                                var sucessoAtualizacaoPassagemPendenteEstacionamento = AtualizarTtlDetalhesPassagemPendenteEstacionamento(detalhesPassagemPendenteEstacionamento, tempoMaximoTtlEmMinutos);
                                Log.Info(sucessoAtualizacaoPassagemPendenteEstacionamento
                                    ? "Sucesso na atualização do TTL das passagens pendentes."
                                    : "Houve falha na atualização do TTL das passagens pendentes.");
                            }
                            else
                            {
                                Log.Info("Houve falha no envio das mensagens para o barramento");
                            }
                        }
                    }
                    else
                    {
                        Log.Info("Parâmetro QtdMaximaPassagensParaProcessar não definido.");
                    }
                }
                else
                {
                    Log.Info("Parâmetro ConfiguracaoTtlEmMinutos não definido.");
                }
            }
            catch (Exception e)
            {
                Log.Error(string.Format(GeradorPassagemPendenteParkResource.Error, e.Message), e);
            }
        }
Example #3
0
        static ConfiguracaoSistemaCacheRepository()
        {
            _memoryCache = new MemoryCache("ConfiguracaoSistemaMemoryCache");

            var dataSourceProvider = new DbConnectionDataSourceProvider();
            var dataSource         = dataSourceProvider.GetDataSource(DbConnectionDataSourceType.ConectSysReadOnly);
            var dataSourceFallback = dataSourceProvider.GetDataSource(DbConnectionDataSourceType.ConectSys);

            _configuracaoSistemaQuery = new ObterConfiguracaoSistemaQuery(true, dataSource, dataSourceFallback);
        }
        public ProcessadorPassagemAprovadaParkHandler()
        {
            _dataSource = new ServiceBusDataSourceBase("TransacoesServiceBus", ServiceBusUtil.FactoriesCount);
            _dataSourceConectSysReadOnly = AdoDataSourceProvider.GetDataSource(DbConnectionDataSourceType.ConectSysReadOnly);
            _dataSourceFallBack          = AdoDataSourceProvider.GetDataSource(DbConnectionDataSourceType.ConectSys);

            if (!string.IsNullOrEmpty(_chaveCriptografiaBanco))
            {
                return;
            }
            var querySistema = new ObterConfiguracaoSistemaQuery(true, _dataSourceConectSysReadOnly, _dataSourceFallBack);

            _chaveCriptografiaBanco = querySistema.Execute(ConfiguracaoSistemaModel.ChaveCriptografiaBanco).Valor;
        }
        private bool HorarioDePassagemEIncompativel()
        {
            var queryConfiguracaoSistema    = new ObterConfiguracaoSistemaQuery(true, _dataSourceConectSysReadOnly, _dataSourceFallBack);
            var configuracaoHorarioPassagem = queryConfiguracaoSistema.Execute(ConfiguracaoSistemaModel.HorarioDePassagem).Valor.TryToInt();

            var dataReferencia = _passagemPendenteEdi.DataPassagem.AddSeconds(-_passagemPendenteEdi.Praca.TempoRetornoPraca).AddMinutes(-(configuracaoHorarioPassagem + 5));

            var obterIdUltimaTransacaoPassagem = new ObterIdUltimaTransacaoPassagemQuery();
            var idUltimaTransacaoPassagem      = obterIdUltimaTransacaoPassagem.Execute(new DetalheTrnFilter
            {
                OBUId       = _passagemPendenteEdi.Tag.OBUId,
                CodigoPraca = _passagemPendenteEdi.Praca.CodigoPraca,
                Data        = dataReferencia
            });

            if ((idUltimaTransacaoPassagem ?? 0) > 0)
            {
                var obterDetalheTrnQuery = new ObterDetalheTrnPorTransacaoIdQuery();
                var detalheTrn           = obterDetalheTrnQuery.Execute(idUltimaTransacaoPassagem ?? 0);

                var diferencaMinutosAceito = _passagemPendenteEdi.DataPassagem.Subtract(detalheTrn.Data).TotalMinutes;

                if (diferencaMinutosAceito < 0)
                {
                    diferencaMinutosAceito = diferencaMinutosAceito * -1;
                }

                if (diferencaMinutosAceito < _passagemPendenteEdi.Praca.TempoRetornoPraca)
                {
                    if (detalheTrn.StatusCobrancaId == (int)StatusCobranca.Provisoria && _passagemPendenteEdi.StatusCobranca == StatusCobranca.Confirmacao)
                    {
                        return(false);
                    }

                    return(true);
                }
            }

            var verificarSeTempoDePassagemEhInValido = new TempoDePassagemEhInValidoQuery(_dataSourceConectSysReadOnly);
            var tempoDePassagemEhInValido            = verificarSeTempoDePassagemEhInValido.Execute(_passagemPendenteEdi);


            if (_passagemPendenteEdi.StatusCobranca != StatusCobranca.Confirmacao)
            {
                return(tempoDePassagemEhInValido);
            }

            return(false);
        }
        private void ValorTransacaoUltrapassaLimitePermitido()
        {
            var obterConfiguracaoSistemaQuery = new ObterConfiguracaoSistemaQuery(true, _dataSourceConectSysReadOnly, _dataSourceFallBack);
            var configuracao =
                obterConfiguracaoSistemaQuery.Execute(ConfiguracaoSistemaModel.TransacaoEstacionamentoLimiteValor);

            if (configuracao != null)
            {
                var valorLimite = configuracao.Valor.TryToDecimal();
                if (PassagemPendenteEstacionamento.Valor > valorLimite)
                {
                    throw new ParkException(PassagemPendenteEstacionamento, EstacionamentoErros.DataTransacaoUltrapassaLimitePermitido);
                }
            }
        }
        private void ValidarDataTransacaoUltrapassaLimitePermitido()
        {
            var obterConfiguracaoSistemaQuery = new ObterConfiguracaoSistemaQuery(true, _dataSourceConectSysReadOnly, _dataSourceFallBack);
            var configuracao =
                obterConfiguracaoSistemaQuery.Execute(ConfiguracaoSistemaModel.TransacaoEstacionamentoLimiteDias);

            if (configuracao != null)
            {
                var quantidadeDias = configuracao.Valor.TryToInt();
                if (PassagemPendenteEstacionamento.DataPassagem > DateTime.Now.AddDays(quantidadeDias) ||
                    PassagemPendenteEstacionamento.DataPassagem < DateTime.Now.AddDays(-quantidadeDias))
                {
                    throw new ParkException(PassagemPendenteEstacionamento, EstacionamentoErros.DataTransacaoUltrapassaLimitePermitido);
                }
            }
        }
Example #8
0
        /// <summary>
        /// Obtem quantidade máxima de passagens para processar.
        /// </summary>
        /// <param name="obterConfiguracaoSistemaQuery">ObterConfiguracaoSistemaQuery.</param>
        /// <returns>Quantidade máxima de passagens para processar.</returns>
        private int ObterQtdMaximaPassagensParaProcessaar(ObterConfiguracaoSistemaQuery obterConfiguracaoSistemaQuery)
        {
            Log.Debug(String.Format(GeradorPassagemPendenteResource.ObterConfiguracaoSistema, "QuantidadeMaximaPassagensParaProcessar"));
            var configuracaoQtdMaximaPassagensParaProcessar = obterConfiguracaoSistemaQuery.Execute("QuantidadeMaximaPassagensParaProcessar");

            if (configuracaoQtdMaximaPassagensParaProcessar == null)
            {
                throw new ArgumentNullException("configuracaoQtdMaximaPassagensParaProcessar", String.Format(GeradorPassagemPendenteResource.NaoExisteConfiguracaoSistema, "QuantidadeMaximaPassagensParaProcessar"));
            }

            var qtdMaximaPassagensParaProcessar = 0;

            if (!int.TryParse(configuracaoQtdMaximaPassagensParaProcessar.Valor, out qtdMaximaPassagensParaProcessar))
            {
                throw new ArgumentException(String.Format(GeradorPassagemPendenteResource.ConfiguracaoSistemaInvalida, "QuantidadeMaximaPassagensParaProcessar", configuracaoQtdMaximaPassagensParaProcessar.Valor), "qtdMaximaPassagensParaProcessar");
            }

            return(qtdMaximaPassagensParaProcessar);
        }
Example #9
0
        /// <summary>
        /// Executa geração de passagens pendentes de forma assincrona.
        /// </summary>
        /// <returns>Task</returns>
        public async Task ExecuteAsync()
        {
            try
            {
                await Task.Run(async() =>
                {
                    try
                    {
                        var obterConfiguracaoSistemaQuery   = new ObterConfiguracaoSistemaQuery(true, _readOnlyDataSource, _dataSource);
                        int tempoMaximoTtlEmMinutos         = ObterTempoMaximoTtlEmMinutos(obterConfiguracaoSistemaQuery);
                        int qtdMaximaPassagensParaProcessar = ObterQtdMaximaPassagensParaProcessaar(obterConfiguracaoSistemaQuery);
                        var concessionarias = _obterConcessionariasQuery.Execute();

                        var handler = new GeradorPassagensPendentesHandler(_readOnlyDataSource
                                                                           , _dataSource
                                                                           , _dataSourceMensageria
                                                                           , _serviceBusDataSource
                                                                           , _obterConcessionariasQuery
                                                                           , _passagemPendenteTopicCommand);


                        var count     = 0;
                        var iteracoes = 100;
                        while (count < iteracoes)
                        {
                            count++;
                            Log.Debug($"{GeradorPassagemPendenteResource.InicioProcesso} - Execução {count}.");
                            await handler.GerarPassagensPendentesAsync(tempoMaximoTtlEmMinutos, qtdMaximaPassagensParaProcessar, concessionarias);
                            Log.Debug($"{GeradorPassagemPendenteResource.FinalProcesso} - Execução {count}.");
                        }
                    }
                    catch (Exception ex)
                    {
                        Log.Error(string.Format(GeradorPassagemPendenteResource.Error, ex.Message), ex);
                    }
                });
            }
            catch (Exception e)
            {
                Log.Error(string.Format(GeradorPassagemPendenteResource.Error, e.Message), e);
            }
        }
Example #10
0
        /// <summary>
        /// Obtem o tempo máximo do Ttl em minutos.
        /// </summary>
        /// <param name="query">ObterConfiguracaoSistemaQuery</param>
        /// <returns>Tempo máximo do Ttl em minutos.</returns>
        private int ObterTempoMaximoTtlEmMinutos(ObterConfiguracaoSistemaQuery query)
        {
            Log.Debug(String.Format(GeradorPassagemPendenteResource.ObterConfiguracaoSistema, "ConfiguracaoItemPendenteProcessamentoTtlEmMinutos"));
            var configuracaoSistemaTtl = query.Execute("ConfiguracaoItemPendenteProcessamentoTtlEmMinutos");

            if (configuracaoSistemaTtl == null)
            {
                throw new ArgumentNullException("configuracaoSistemaTtl", String.Format(GeradorPassagemPendenteResource.NaoExisteConfiguracaoSistema, "ConfiguracaoItemPendenteProcessamentoTtlEmMinutos"));
            }

            var tempoMaximoTtlEmMinutos = 0;

            if (!int.TryParse(configuracaoSistemaTtl.Valor, out tempoMaximoTtlEmMinutos))
            {
                throw new ArgumentException(String.Format(GeradorPassagemPendenteResource.ConfiguracaoSistemaInvalida, "ConfiguracaoItemPendenteProcessamentoTtlEmMinutos", configuracaoSistemaTtl.Valor)
                                            , "tempoMaximoTtlEmMinutos");
            }

            return(tempoMaximoTtlEmMinutos);
        }
Example #11
0
        private decimal ObterLimiteDeCredito()
        {
            var queryConfiguracaoSistema        = new ObterConfiguracaoSistemaQuery(true, _dataSourceConectSysReadOnly, _dataSourceFallBack);
            var configuracaoSaldoMinimoNegativo = queryConfiguracaoSistema.Execute(ConfiguracaoSistemaModel.SaldoMinimoNegativo).Valor.TryToDecimal();

            switch (_passagemPendenteEdi.Adesao.Plano)
            {
            case PlanoDePagamento.PrePago:
                return(0);

            case PlanoDePagamento.RecargaAutomatica:
            case PlanoDePagamento.PlanoMensalidade:
            case PlanoDePagamento.ValorVariavel:
                return(configuracaoSaldoMinimoNegativo * -1);

            case PlanoDePagamento.PrePagoEmpresarial:
            case PlanoDePagamento.PosPagoEmpresarial:
                return(ObterLimiteDeCreditoConfiguracaoPlanoCliente());
            }
            throw new EdiDomainException("Plano não configurado.", _passagemPendenteEdi);
        }