static MvcHtmlHelper() { GirServico = new GIRServico(); ServicoUtilitarioConsulta = new UtilitarioConsultaClient(); ServicoUnidadeOrganizacional = new UnidadeOrganizacionalServico(); }
public ComprovanteRendimentoController() { _girServico = new GIRServico(); _repositorio = new RepositorioTempData(TempData); }
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(); } }