Пример #1
0
 public bool DiretorioExiste(string path)
 {
     using (RedeUtil.RecuperarConexaoRede(CaminhoDiretorio, Usuario))
     {
         return(Directory.Exists(path));
     }
 }
Пример #2
0
 public PdfReader InstanciarPdfReader(string path)
 {
     using (RedeUtil.RecuperarConexaoRede(CaminhoDiretorio, Usuario))
     {
         return(new PdfReader(path));
     }
 }
Пример #3
0
 public PdfCopy InstanciarPdfCopy(Document doc, string path)
 {
     using (RedeUtil.RecuperarConexaoRede(CaminhoDiretorio, Usuario))
     {
         return(new PdfCopy(doc, new FileStream(path, FileMode.Create)));
     }
 }
Пример #4
0
 public String BuscaExtensaoArquivo(string path)
 {
     using (RedeUtil.RecuperarConexaoRede(CaminhoDiretorio, Usuario))
     {
         return(Path.GetExtension(path).ToLower());
     }
 }
Пример #5
0
 public byte[] GetBytesArquivo(string path)
 {
     using (RedeUtil.RecuperarConexaoRede(CaminhoDiretorio, Usuario))
     {
         return(File.ReadAllBytes(path));
     }
 }
Пример #6
0
 public void MoverArquivo(string pathOrigem, string pathDestino)
 {
     using (RedeUtil.RecuperarConexaoRede(CaminhoDiretorio, Usuario))
     {
         File.Move(pathOrigem, pathDestino);
     }
 }
Пример #7
0
 public void DeletarArquivo(string path)
 {
     using (RedeUtil.RecuperarConexaoRede(CaminhoDiretorio, Usuario))
     {
         File.Delete(path);
     }
 }
Пример #8
0
 public void CriarDiretorio(string caminho)
 {
     using (RedeUtil.RecuperarConexaoRede(CaminhoDiretorio, Usuario))
     {
         Directory.CreateDirectory(caminho);
     }
 }
Пример #9
0
 public void CriarDiretorios(IEnumerable <string> caminhos)
 {
     using (RedeUtil.RecuperarConexaoRede(CaminhoDiretorio, Usuario))
     {
         foreach (var caminho in caminhos)
         {
             Directory.CreateDirectory(caminho);
         }
     }
 }
Пример #10
0
 public void RemoverDiretorio(string path)
 {
     using (RedeUtil.RecuperarConexaoRede(CaminhoDiretorio, Usuario))
     {
         if (Directory.Exists(path))
         {
             Directory.Delete(path, true);
         }
     }
 }
Пример #11
0
        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);
        }
Пример #12
0
        public void GerarProcessamento(LoteDTO lote)
        {
            try
            {
                using (Conexao = RedeUtil.RecuperarConexaoRede(CaminhoDiretorio, Usuario))
                {
                    CriarEstruturaDiretorios(lote.AnoExercicio);

                    MigrarArquivosUpload(lote);

                    if (!lote.Individual)
                    {
                        lote.ContribuintesArquivoTxt = LerDirfTxt(lote);
                    }

                    SplitLote(lote);
                }
            }
            catch (NegocioException e)
            {
                foreach (var arquivo in lote.ArquivosImportados)
                {
                    File.Delete(arquivo.CaminhoArquivo);
                }

                Conexao.Dispose();

                throw new NegocioException(e.Message, e.InnerException);
            }
            catch (Exception e)
            {
                Conexao.Dispose();

                lote.TipoSituacao = TipoSituacao.Erro;
                lote.CodigoErro   = Marshal.GetExceptionCode();
                lote.MensagemErro = e.Message;

                if (Contribuinte != null)
                {
                    Contribuinte.TipoSituacao = TipoSituacao.Erro;
                    Contribuinte.Status       = StatusContribuinte.FalhaArquivo;
                }

                _gir.GravarRotina(lote);

                throw new Exception(e.Message, e.InnerException);
            }
        }
Пример #13
0
        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);
            }
        }
Пример #14
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();
            }
        }