public FileResult BuscaPdf(string fileName, int ano) { if (fileName == null && ano == 0) { throw new Exception("Parâmetros inválidos"); } var consulta = new ConsultaInformeColaboradorQueryHandler(); var filtro = new InformeColaboradorFiltro { AnoExercicio = ano, CPFCNPJ = fileName }; var arquivo = consulta.Execute(filtro).FirstOrDefault(); var caminhoDir = arquivo.CaminhoDiretorio; var nomeServer = ConfigurationManager.AppSettings["NomeServer"].RemoveContraBarra(); var diretorioServer = ConfigurationManager.AppSettings["DiretorioServer"].RemoveContraBarra(); var raizPathInformesColaboradores = String.Format(@"\\{0}\{1}", nomeServer, diretorioServer); while (Path.IsPathRooted(caminhoDir)) { caminhoDir = caminhoDir.Remove(0, 1); } var path = Path.Combine(raizPathInformesColaboradores, caminhoDir, fileName + arquivo.ExtensaoArquivo); var servico = new ArquivoServico(); try { using (servico.Conexao = RedeUtil.RecuperarConexaoRede(servico.CaminhoDiretorio, servico.Usuario)) { FileStream file = new FileStream(path, FileMode.Open); return(File(file, "application/pdf", fileName + ".pdf")); } } catch (Exception e) { servico.Conexao.Dispose(); throw new Exception("Erro ao tentar baixar arquivo " + arquivo.CPFCNPJ + " " + e.Message, e.InnerException); } }
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(); } }
public static IEnumerable <ArquivoVM> ArmazenarArquivosParaProcessamento(IEnumerable <HttpPostedFileBase> arquivos, ArquivoServico servico) { var arquivosArmazenados = new List <ArquivoVM>(); var caminho = String.Format(@"{0}\{1}", servico.CaminhoDiretorio, ArquivoServico.PastaTempUpload); var dto = new ArquivoVM(); try { using (servico.Conexao = RedeUtil.RecuperarConexaoRede(servico.CaminhoDiretorio, servico.Usuario)) { Directory.CreateDirectory(caminho); foreach (var item in arquivos) { var nomeArquivo = ValidaNomeArquivoParaUpload(item.FileName); var path = String.Format(@"{0}\{1}", caminho, nomeArquivo); dto = new ArquivoVM() { CaminhoArquivo = path, NomeArquivo = nomeArquivo }; /* * Utilizando filestream ao invés do método SaveAs do HttpPostedFileBase * devido ao um bug de envio de arquivo pdf corrompido */ using (FileStream arquivo = new FileStream(path, FileMode.Create)) { item.InputStream.CopyTo(arquivo); } dto.ExtensaoArquivo = Path.GetExtension(path).ToLower(); arquivosArmazenados.Add(dto); } } } catch (Exception e) { servico.Conexao.Dispose(); if (!String.IsNullOrEmpty(dto.CaminhoArquivo)) { dto.ArquivoFalhouAoImportar = true; arquivosArmazenados.Add(dto); } else { throw new Exception("Erro ao tentar importar arquivos" + e.Message, e.InnerException); } } return(arquivosArmazenados); }
public static void ValidaEnvioArquivosDuplicados(List <ArquivoVM> arquivosUpload, List <HttpPostedFileBase> arquivosEnviados, ArquivoServico arquivoServico) { //Verificar se o usuário mandou outro arquivo txt if (arquivosUpload.Any(a => a.ExtensaoArquivo == ".txt") && arquivosEnviados.Any(a => a.ContentType == "text/plain")) { //Remoção do arquivo na lista e diretório para efetuar upload novamente var txt = arquivosUpload.FirstOrDefault(a => a.ExtensaoArquivo == ".txt"); arquivoServico.DeletarArquivo(txt.CaminhoArquivo); arquivosUpload.Remove(txt); } //Verifica com base no nome do arquivo se já foi feito upload for (int i = arquivosEnviados.Count - 1; i >= 0; i--) { var file = arquivosUpload.FirstOrDefault(a => a.NomeArquivo == arquivosEnviados[i].FileName); if (file != null) { if (file.ArquivoFalhouAoImportar) { //Remoção da lista para efetuar upload novamente arquivosUpload.Remove(file); } else { //Remoção para não duplicar e não processar arquivo novamente arquivosEnviados.RemoveAt(i); } } } }
public ProcessamentoController() { _arquivoServico = new ArquivoServico(); _repositorio = new RepositorioTempData(TempData); }