Ejemplo n.º 1
0
 static MvcHtmlHelper()
 {
     GirServico = new GIRServico();
     ServicoUtilitarioConsulta    = new UtilitarioConsultaClient();
     ServicoUnidadeOrganizacional = new UnidadeOrganizacionalServico();
 }
Ejemplo n.º 2
0
 public ComprovanteRendimentoController()
 {
     _girServico  = new GIRServico();
     _repositorio = new RepositorioTempData(TempData);
 }
Ejemplo n.º 3
0
        public static void Main(string[] args)
        {
            //Variáveis de configurações
            _arquivoServico = new ArquivoServico();
            _gir            = new GIRServico();
            Ano             = 2018;

            LoteDTO lote;

            using (_arquivoServico.Conexao = RedeUtil.RecuperarConexaoRede(_arquivoServico.CaminhoDiretorio, _arquivoServico.Usuario))
            {
                Console.WriteLine("==========Teste de performance em arquivos==========");
                Console.WriteLine("Digite SIM para processamento individual");
                Console.WriteLine("Digite NÂO para processamento em lote");
                lote = GerarLote();
                var frase = Console.ReadLine();

                if (!string.IsNullOrEmpty(frase) && frase.ToLower() == "sim")
                {
                    lote.Individual = true;
                }
                else
                {
                    lote.ContribuintesArquivoTxt = _arquivoServico.LerDirfTxt(lote);
                }

                var tarefas = new List <Task>();

                //Para cada arquivo importado (upload) cria-se task para fazer a divisão desses arquivos
                foreach (var arquivo in lote.ArquivosImportados.Where(a => a.ExtensaoArquivo == ".pdf"))
                {
                    var tarefa = new Task(() => { Rotina(arquivo, lote); });
                    tarefas.Add(tarefa);
                    tarefa.Start();
                }

                //Depois que as tarefas terminarem de ser executadas. Verifica-se por ultimo, se houver erro ou não.
                var continuation = Task.Factory.ContinueWhenAll(tarefas.ToArray(), (antecedents) =>
                {
                    if (antecedents.All(a => a.Exception == null))
                    {
                        try
                        {
                            RenomearArquivos(lote);
                            lote.TipoSituacao = TipoSituacao.Processado;
                            _gir.GravarRotina(lote);
                        }
                        catch (DbEntityValidationException)
                        {
                            throw;
                        }
                        catch (Exception e)
                        {
                            //Caso falha a renomeacao dos arquivos ou merge
                            lote.ContribuintesArquivoTxt.ForEach(c =>
                            {
                                if (c.Arquivo.CaminhoArquivo != null)
                                {
                                    c.Status       = StatusContribuinte.FalhaArquivo;
                                    c.TipoSituacao = TipoSituacao.Erro;
                                }
                            });
                            lote.ContribuinteIndividual.Status       = StatusContribuinte.FalhaArquivo;
                            lote.ContribuinteIndividual.TipoSituacao = TipoSituacao.Erro;

                            var exception = e.InnerException ?? e;
                            var w32ex     = exception as Win32Exception;

                            lote.TipoSituacao = TipoSituacao.Erro;
                            lote.CodigoErro   = (w32ex != null ? w32ex.ErrorCode : 0);
                            lote.MensagemErro = exception.Message;

                            _gir.GravarRotina(lote);

                            throw e;
                        }

                        Console.WriteLine("Todas as tarefas foram concluídas com sucesso!");
                        Debug.WriteLine("Todas as tarefas foram concluídas com sucesso!");
                    }
                    //Se houver qualquer exceção lançada em uma task, trataremos aqui esta exceção, neste bloco de codigo
                    else
                    {
                        var task = antecedents.FirstOrDefault(a => a.Exception.GetType() == typeof(NegocioException));
                        if (task != null)
                        {
                            var ex = task.Exception;
                            if (ex != null)
                            {
                                throw new NegocioException(ex.Message, ex.InnerException);
                            }
                        }

                        //Seta falha no arquivo pois não foi feito a renomeacao e nem o merge
                        lote.ContribuintesArquivoTxt.ForEach(c =>
                        {
                            if (c.Arquivo.CaminhoArquivo != null)
                            {
                                c.Status       = StatusContribuinte.FalhaArquivo;
                                c.TipoSituacao = TipoSituacao.Erro;
                            }
                        });
                        lote.ContribuinteIndividual.Status       = StatusContribuinte.FalhaArquivo;
                        lote.ContribuinteIndividual.TipoSituacao = TipoSituacao.Erro;

                        task = (antecedents.FirstOrDefault(a => a.Exception != null));

                        var exception = task.Exception.InnerException ?? task.Exception;
                        var w32ex     = exception as Win32Exception;

                        lote.TipoSituacao = TipoSituacao.Erro;
                        lote.CodigoErro   = (w32ex != null ? w32ex.ErrorCode : 0);
                        lote.MensagemErro = exception.Message;

                        _gir.GravarRotina(lote);

                        var exceptions = antecedents.Where(a => a.Exception != null).Select(a => a.Exception).ToList();
                        var excecoes   = new List <Exception>();

                        foreach (var excep in exceptions)
                        {
                            excecoes.Add(new Exception(excep.InnerException.Message, excep.InnerException));
                        }

                        AggregateException e = new AggregateException(excecoes);

                        Console.WriteLine("Ocorreu falhas no processamento - Split pdf falhou!");
                        Debug.WriteLine("Ocorreu falhas no processamento - Split pdf falhou!");

                        throw e;
                    }
                });

                continuation.Wait();
                Console.Read();
            }
        }