public async Task Executar(FiltroRelatorioDto filtroRelatorioDto)
        {
            SentrySdk.AddBreadcrumb($"Obtendo dados do relatório", "8 - MonitorarStatusRelatorioUseCase");

            var dadosRelatorio = filtroRelatorioDto.ObterObjetoFiltro <DadosRelatorioDto>();

            var detalhesRelatorio = await mediator.Send(new ObterDetalhesRelatorioQuery(dadosRelatorio.RequisicaoId, dadosRelatorio.JSessionId));

            SentrySdk.AddBreadcrumb($"dados do relatório OK", "8 - MonitorarStatusRelatorioUseCase");


            if (detalhesRelatorio != null && detalhesRelatorio.Pronto)
            {
                SentrySdk.AddBreadcrumb($"Indo publicar na fila Prontos..", "8 - MonitorarStatusRelatorioUseCase");

                //TODO: Aplicar Polly ??
                if (await mediator.Send(new SalvarRelatorioJasperLocalCommand(dadosRelatorio.JSessionId, dadosRelatorio.RequisicaoId, dadosRelatorio.ExportacaoId, dadosRelatorio.CodigoCorrelacao)))
                {
                    servicoFila.PublicaFila(new PublicaFilaDto(dadosRelatorio, RotasRabbit.RotaRelatoriosProntosSgp, RotasRabbit.ExchangeSgp, filtroRelatorioDto.CodigoCorrelacao));
                    SentrySdk.CaptureMessage("8 - MonitorarStatusRelatorioUseCase - Publicado na fila PRONTO OK!");
                }
                else
                {
                    PublicarNovamenteNaFila(filtroRelatorioDto, dadosRelatorio);
                }
            }
            else
            {
                PublicarNovamenteNaFila(filtroRelatorioDto, dadosRelatorio);
            }
        }
Example #2
0
        public async Task <bool> Handle(GerarRelatorioAtaFinalHtmlParaPdfCommand request, CancellationToken cancellationToken)
        {
            List <string> paginasEmHtml = new List <string>();

            foreach (var modelPagina in request.Paginas)
            {
                string html = string.Empty;

                html = GerarHtmlRazor(modelPagina, request.NomeTemplate);

                html = html.Replace("logo.png", SmeConstants.LogoSme);

                paginasEmHtml.Add(html);
            }

            //TODO: FILA PARA RELATORIO SEM DADOS?
            if (paginasEmHtml.Any())
            {
                PdfGenerator pdfGenerator = new PdfGenerator(converter);

                var directory = AppDomain.CurrentDomain.BaseDirectory;
                SentrySdk.AddBreadcrumb($"Gerando PDF", $"Caminho geração : {directory}");

                pdfGenerator.ConvertToPdf(paginasEmHtml, directory, request.CodigoCorrelacao.ToString());

                SentrySdk.AddBreadcrumb($"Indo publicar na fila Prontos..", "8 - MonitorarStatusRelatorioUseCase");
                servicoFila.PublicaFila(new PublicaFilaDto(new MensagemRelatorioProntoDto(request.MensagemUsuario, string.Empty), RotasRabbit.RotaRelatoriosProntosSgp, RotasRabbit.ExchangeSgp, request.CodigoCorrelacao));
                SentrySdk.CaptureMessage("8 - MonitorarStatusRelatorioUseCase - Publicado na fila PRONTO OK!");
            }

            return(true);
        }
        public async Task <Unit> Handle(GerarExcelGenericoCommand request, CancellationToken cancellationToken)
        {
            try
            {
                using (var workbook = new XLWorkbook())
                {
                    var worksheet = workbook.Worksheets.Add(request.NomeWorkSheet);

                    if (!request.ObjetoExportacao.Any())
                    {
                        throw new NegocioException("Não foi possível localizar o objeto de consulta.");
                    }

                    var properties = ExtractClassPropertyNames(request.ObjetoExportacao.FirstOrDefault());

                    MontarCabecalho(worksheet, properties);

                    MontarCorpo(request, worksheet);

                    var caminhoBase       = AppDomain.CurrentDomain.BaseDirectory;
                    var caminhoParaSalvar = Path.Combine(caminhoBase, $"relatorios", request.CodigoCorrelacao.ToString());

                    workbook.SaveAs($"{caminhoParaSalvar}.xlsx");
                }

                servicoFila.PublicaFila(new PublicaFilaDto(new MensagemRelatorioProntoDto(), RotasRabbit.RotaRelatoriosProntosSgp, null, request.CodigoCorrelacao));

                return(await Task.FromResult(Unit.Value));
            }
            catch (Exception ex)
            {
                SentrySdk.CaptureException(ex);
                throw ex;
            }
        }
        public async Task <bool> Handle(GerarRelatorioAssincronoCommand request, CancellationToken cancellationToken)
        {
            try
            {
                ParametrosRelatorioDto parametrosDoDto = ObterParametrosRelatorio(request.Dados);

                var post = new ExecucaoRelatorioRequisicaoDto()
                {
                    UnidadeRelatorioUri = request.CaminhoRelatorio,
                    Async            = false,
                    SalvarSnapshot   = false,
                    FormatoSaida     = request.Formato.Name(),
                    Interativo       = false,
                    IgnorarPaginacao = false,
                    Paginas          = null,
                    Parametros       = parametrosDoDto
                };


                SentrySdk.CaptureMessage("6.1 - Obtendo jSessionId...");

                var jsessionId = await loginService.ObterTokenAutenticacao(configuration.GetSection("ConfiguracaoJasper:Username").Value, configuration.GetSection("ConfiguracaoJasper:Password").Value);

                SentrySdk.CaptureMessage($"6.2 - jSessionId = {jsessionId}");


                SentrySdk.CaptureMessage("6.3 - Solicitando relatório...");


                var retorno = await execucaoRelatorioService.SolicitarRelatorio(post, jsessionId);

                var exportacaoId = retorno?.Exports?.FirstOrDefault()?.Id;

                SentrySdk.CaptureMessage($"6.4 - Exportação Id = {exportacaoId}");

                if (exportacaoId != null)
                {
                    var dadosRelatorio = new DadosRelatorioDto(retorno.RequestId, exportacaoId.Value, request.CodigoCorrelacao, jsessionId);
                    var publicacaoFila = new PublicaFilaDto(dadosRelatorio, RotasRabbit.RotaRelatoriosProcessando, null, request.CodigoCorrelacao);

                    servicoFila.PublicaFila(publicacaoFila);

                    var jsonPublicaFila = UtilJson.ConverterApenasCamposNaoNulos(publicacaoFila);
                    Console.WriteLine(jsonPublicaFila);

                    SentrySdk.CaptureMessage("6.5 - Sucesso na publicação da fila: " + publicacaoFila.Rota);
                    return(true);
                }

                SentrySdk.CaptureMessage("6.6 - Erro na geração");

                return(false);
            }
            catch (Exception ex)
            {
                SentrySdk.CaptureException(ex);
                throw ex;
            }
        }
Example #5
0
        public Task <Guid> Handle(GerarCodigoCorrelacaoSGPCommand request, CancellationToken cancellationToken)
        {
            var novaCorrelacao = Guid.NewGuid();

            servicoFila.PublicaFila(new PublicaFilaDto(novaCorrelacao, RotasRabbit.RotaRelatorioCorrelacaoCopiar, null, request.CodigoCorrelacaoParaCopiar));

            return(Task.FromResult(novaCorrelacao));
        }
Example #6
0
        public async Task <Unit> Handle(GerarRelatorioAtaFinalExcelCommand request, CancellationToken cancellationToken)
        {
            try
            {
                if (!request.ObjetoExportacao.Any())
                {
                    throw new NegocioException("Não foi possível localizar o objeto de consulta.");
                }

                var lstCodigosCorrelacao = new Dictionary <Guid, string>();

                var dadosAgrupadosTurma = request.ObjetoExportacao.GroupBy(g => g.Cabecalho);
                var modalidade          = request.ObjetoExportacao.Select(o => o.Modalidade).FirstOrDefault();

                for (int i = 0; i < dadosAgrupadosTurma.Count(); i++)
                {
                    var codigoCorrelacao = Guid.NewGuid();
                    var mensagem         = new MensagemInserirCodigoCorrelacaoDto(TipoRelatorio.ConselhoClasseAtaFinal, TipoFormatoRelatorio.Xlsx);
                    await mediator.Send(new InserirFilaRabbitCommand(new PublicaFilaDto(mensagem, RotasRabbit.RotaRelatorioCorrelacaoInserir, RotasRabbit.ExchangeSgp, codigoCorrelacao, request.UsuarioRf)));

                    using (var workbook = new XLWorkbook())
                    {
                        var worksheet = workbook.Worksheets.Add(request.NomeWorkSheet);

                        var objetoExportacao = dadosAgrupadosTurma.ElementAt(i);

                        var tabelaDados = request.TabelasDados.ElementAt(i);

                        MontarCabecalho(worksheet, objetoExportacao.Key, tabelaDados.Columns.Count);

                        worksheet.Cell(LINHA_GRUPOS, 1).InsertData(tabelaDados);

                        MergearTabela(worksheet, tabelaDados);

                        AdicionarEstilo(worksheet, tabelaDados);

                        var caminhoBase       = AppDomain.CurrentDomain.BaseDirectory;
                        var caminhoParaSalvar = Path.Combine(caminhoBase, $"relatorios", $"{codigoCorrelacao}");

                        workbook.SaveAs($"{caminhoParaSalvar}.xlsx");

                        lstCodigosCorrelacao.Add(codigoCorrelacao, objetoExportacao.Key.Turma);
                    }
                }

                foreach (var codigoCorrelacao in lstCodigosCorrelacao)
                {
                    servicoFila.PublicaFila(new PublicaFilaDto(ObterNotificacao(modalidade, codigoCorrelacao.Value), RotasRabbit.RotaRelatoriosProntosSgp, RotasRabbit.ExchangeSgp, codigoCorrelacao.Key));
                }

                return(await Task.FromResult(Unit.Value));
            }
            catch (Exception ex)
            {
                SentrySdk.CaptureException(ex);
                throw ex;
            }
        }
        public async Task <string> Handle(GerarRelatorioHtmlParaPdfCommand request, CancellationToken cancellationToken)
        {
            var html = await htmlHelper.RenderRazorViewToString(request.NomeTemplate, request.Model);

            html = html.Replace("logoMono.png", SmeConstants.LogoSmeMono);
            html = html.Replace("logo.png", SmeConstants.LogoSme);

            var caminhoBase = AppDomain.CurrentDomain.BaseDirectory;
            var nomeArquivo = Path.Combine(caminhoBase, "relatorios", request.CodigoCorrelacao.ToString());

            PdfGenerator pdfGenerator = new PdfGenerator(converter);

            pdfGenerator.Converter(html, nomeArquivo, request.TituloRelatorioRodape);

            if (request.EnvioPorRabbit)
            {
                servicoFila.PublicaFila(new PublicaFilaDto(new MensagemRelatorioProntoDto(request.MensagemUsuario, request.MensagemTitulo), RotasRabbit.RotaRelatoriosProntosSgp, RotasRabbit.ExchangeSgp, request.CodigoCorrelacao));
                return(string.Empty);
            }
            else
            {
                return(request.CodigoCorrelacao.ToString());
            }
        }
 public Task <bool> Handle(RetornarRelatorioProntoCommand request, CancellationToken cancellationToken)
 {
     servicoFila.PublicaFila(new PublicaFilaDto(request, RotasRabbit.RotaRelatoriosProntosSgp));
     return(Task.FromResult(true));
 }