Ejemplo n.º 1
0
        private string[] DownloadListLink(string _filepath, ref PedidoImportacao newPedidoEntity, IIdentityContext _systemContext)
        {
            var index = newPedidoEntity.Arquivos.FirstOrDefault().Index;

            newPedidoEntity.LogPedidoImportacao.Add(new LogPedidoImportacao()
            {
                Descricao       = "Encontrado arquivo de listagem de links...",
                IndicadorStatus = "I"
            });
            _systemContext.SaveChanges();

            newPedidoEntity.LogPedidoImportacao.Add(new LogPedidoImportacao()
            {
                Descricao       = "Lendo Links para download...",
                IndicadorStatus = "I"
            });
            _systemContext.SaveChanges();

            var           links = File.ReadAllLines(_filepath);
            List <string> files = new List <string>()
            {
            };

            newPedidoEntity.LogPedidoImportacao.Add(new LogPedidoImportacao()
            {
                Descricao       = "Realizando Download dos arquivos listados na lista de links...",
                IndicadorStatus = "I"
            });
            _systemContext.SaveChanges();

            for (var i = 0; i < links.Count(); i++)
            {
                var arquivo = new ArquivoBase
                {
                    Index     = index,
                    Nome      = $"Arquivo{i}",
                    UrlOrigem = links[i]
                };

                newPedidoEntity.LogPedidoImportacao.Add(new LogPedidoImportacao()
                {
                    Descricao       = $"Realizando download do link {links[i]} da lista de links...",
                    IndicadorStatus = "I"
                });
                newPedidoEntity.Arquivos.Add(arquivo);
                _systemContext.SaveChanges();

                this.DownloadOnDisk(arquivo, newPedidoEntity, _systemContext);
            }

            var path      = Path.Combine(Configuration.DefaultTempBaseFiles, newPedidoEntity.PastaTemp);
            var filesList = Directory.GetFiles(path);

            files.AddRange(filesList);

            return(files.ToArray());
        }
Ejemplo n.º 2
0
        public string[] CheckFileList(string fileName, PedidoImportacao newPedidoEntity, IIdentityContext _systemContext)
        {
            try
            {
                string path  = Path.Combine(Configuration.DefaultTempBaseFiles, newPedidoEntity.PastaTemp);
                var    index = newPedidoEntity.Arquivos.FirstOrDefault().Index;

                newPedidoEntity.LogPedidoImportacao.Add(new LogPedidoImportacao()
                {
                    Descricao       = "Listando arquivos baixados no disco...",
                    IndicadorStatus = "I"
                });
                _systemContext.SaveChanges();

                var files = Directory.GetFiles(path);

                var linkListFiles = files.Where(a => a.Contains("link.txt")).FirstOrDefault();

                if (!string.IsNullOrEmpty(linkListFiles))
                {
                    files = this.DownloadListLink(linkListFiles, ref newPedidoEntity, _systemContext);
                }

                foreach (var file in files)
                {
                    newPedidoEntity.Arquivos.Add(new ArquivoBase
                    {
                        Index     = index,
                        Nome      = Path.GetFileName(file),
                        UrlOrigem = "."
                    });
                }

                newPedidoEntity.LogPedidoImportacao.Add(new LogPedidoImportacao()
                {
                    Descricao       = "Registrando novos arquivos para leitura...",
                    IndicadorStatus = "I"
                });
                _systemContext.SaveChanges();

                return(files);
            }
            catch (Exception erro)
            {
                newPedidoEntity.LogPedidoImportacao.Add(new LogPedidoImportacao
                {
                    Descricao       = $"Erro ocorrido ao checar arquivos: {erro.Message}",
                    IndicadorStatus = "E"
                });

                newPedidoEntity.Estado = "E";
                _systemContext.SaveChanges();

                throw erro;
            }
        }
Ejemplo n.º 3
0
        public static string TraduzirEstado(this PedidoImportacao pedidoImportacao)
        {
            switch (pedidoImportacao.Estado)
            {
            case "A":
                return("Aguardando");

            case "C":
                return("Concluido");

            default:
                return("Status não encontrado");
            }
        }
Ejemplo n.º 4
0
        public async Task <PedidoImportacao> CreateImportRequestAsync(string _url, string _index, IPrincipal User)
        {
            Usuario usuario;

            using (var identityContext = identityBusiness)
            {
                usuario = await identityContext.GetUsuarioAsync(User as ClaimsPrincipal);

                usuario = _systemContext.Usuario.Include(a => a.PedidosImportacao).FirstOrDefault(a => a.Id == usuario.Id);
            }

            if (usuario == null)
            {
                throw new Exception("Usuario não encontrado.");
            }

            var newPedidoEntity = new PedidoImportacao
            {
                LogPedidoImportacao = new List <LogPedidoImportacao>(),
                Estado   = "A",
                Arquivos = new List <ArquivoBase>()
                {
                    new ArquivoBase
                    {
                        Index = new Index
                        {
                            Name = _index
                        },
                        Nome      = "inicial.zip",
                        UrlOrigem = _url
                    }
                },
                Usuario   = usuario,
                PastaTemp = $"{_index}Temp"
            };

            newPedidoEntity.LogPedidoImportacao.Add(new LogPedidoImportacao()
            {
                Descricao       = "Aguardando processo de download iniciar...",
                IndicadorStatus = "I"
            });

            usuario.PedidosImportacao.Add(newPedidoEntity);

            _systemContext.SaveChanges();

            return(newPedidoEntity);
        }
Ejemplo n.º 5
0
        public void RegisterNewFiles(string[] files, PedidoImportacao pedido, IIdentityContext context)
        {
            var index = pedido.Arquivos.FirstOrDefault().Index;

            for (var i = 0; i < files.Length; i++)
            {
                var fileName = Path.GetFileName(files[i]);

                pedido.Arquivos.Add(new ArquivoBase
                {
                    Index = index,
                    Nome  = fileName
                });
            }

            context.SaveChanges();
        }
Ejemplo n.º 6
0
        public IEnumerable <LogPedidoImportacao> GetLogPedidoImportacao(long id)
        {
            var pedidos = _systemContext.PedidoImportacao.Where(a => a.ID == id).Include(a => a.LogPedidoImportacao).OrderByDescending(a => a.DataTermino).FirstOrDefault();

            if (pedidos == null)
            {
                pedidos = new PedidoImportacao {
                    LogPedidoImportacao = new List <LogPedidoImportacao>()
                }
            }
            ;

            var logs = pedidos.LogPedidoImportacao;

            if (logs != null)
            {
                logs.ToList().ForEach(a => a.IndicadorStatus = a.TraduzirEstado());
            }

            return(logs);
        }
    }
Ejemplo n.º 7
0
 public void UpdateToRegisterData(PedidoImportacao pedido, IIdentityContext context)
 {
     pedido.Estado = "AR";
     context.SaveChanges();
 }
Ejemplo n.º 8
0
        public void DownloadOnDisk(ArquivoBase arquivo, PedidoImportacao newPedidoEntity, IIdentityContext _context)
        {
            var index = arquivo.Index;

            var destineBase    = Path.Combine(Configuration.DefaultTempBaseFiles, index.Name);
            var destineExtract = Path.Combine(Configuration.DefaultTempBaseFiles, newPedidoEntity.PastaTemp);

            newPedidoEntity.LogPedidoImportacao.Add(new LogPedidoImportacao
            {
                Descricao       = "Criando diretorio de extração...",
                IndicadorStatus = "I"
            });

            try
            {
                _context.SaveChanges();
            }
            catch (Exception erro)
            {
                throw erro;
            }

            //LinuxHelpers.Exec($"chmod 777 {Path.Combine(Directory.GetCurrentDirectory(), "wwwroot")}");
            Directory.CreateDirectory(destineExtract);
            Directory.CreateDirectory(destineBase);
            var fileBaseName = Path.Combine(destineBase, arquivo.Nome);

            var uri = new Uri(arquivo.UrlOrigem);

            newPedidoEntity.LogPedidoImportacao.Add(new LogPedidoImportacao
            {
                Descricao       = $"Realizando download do arquivo {arquivo.Nome}...",
                IndicadorStatus = "I"
            });

            try
            {
                _context.SaveChanges();
            }
            catch (Exception erro)
            {
                throw erro;
            }

            var webClient = new WebClient();

            Debug.WriteLine("--------------------------------------------------");
            Debug.WriteLine("Iniciando Download");
            this._importacaoWebClient = newPedidoEntity;
            this._identityWebClient   = _context;

            webClient.DownloadProgressChanged += WebClient_DownloadProgressChanged;
            webClient.DownloadFileCompleted   += WebClient_DownloadFileCompleted;
            try
            {
                webClient.DownloadFileTaskAsync(uri, $"{fileBaseName}").GetAwaiter().GetResult();
                newPedidoEntity = this._importacaoWebClient;
                _context        = this._identityWebClient;
            }
            catch (Exception erro)
            {
                newPedidoEntity.LogPedidoImportacao.Add(new LogPedidoImportacao
                {
                    Descricao       = $"Erro ao registrar a importação: {erro.Message}...",
                    IndicadorStatus = "E"
                });
                newPedidoEntity.Estado = "E";
                _context.SaveChanges();

                throw erro;
            }

            newPedidoEntity.LogPedidoImportacao.Add(new LogPedidoImportacao
            {
                Descricao       = $"Extraindo arquivo {arquivo.Nome}...",
                IndicadorStatus = "I"
            });
            _context.SaveChanges();

            //if(Directory.Exists(destineExtract))
            //{
            //    Directory.Delete()
            //}

            using (ZipFile zip1 = ZipFile.Read(fileBaseName))
            {
                foreach (ZipEntry zip in zip1)
                {
                    zip.Extract(destineExtract, ExtractExistingFileAction.OverwriteSilently);
                }
            }

            //     ZipFile.ExtractToDirectory(fileBaseName, destineExtract);

            newPedidoEntity.LogPedidoImportacao.Add(new LogPedidoImportacao
            {
                Descricao       = $"Arquivos extraidos e sendo encaminhados para a fase de analise",
                IndicadorStatus = "I"
            });
            _context.SaveChanges();
        }
Ejemplo n.º 9
0
        public void InserirArquivo(PedidoImportacao pedido, IIdentityContext context)
        {
            pedido.LogPedidoImportacao.Add(new LogPedidoImportacao()
            {
                Descricao       = "Iniciando conexão com ElasticSearch...",
                IndicadorStatus = "I"
            });

            var arquivo = pedido.Arquivos.FirstOrDefault();
            var index   = arquivo.Index;

            context.SaveChanges();

            var repository = this._unitOfWork.StartClient <Dictionary <string, string> >($"{index.Name}Repository", index.Name);

            bool isMemoryFull = false;

            var _file = pedido.Arquivos.Where(a => a.Nome != arquivo.Nome).FirstOrDefault();

            pedido.LogPedidoImportacao.Add(new LogPedidoImportacao()
            {
                Descricao       = $"Iniciando leitura do arquivo {_file.Nome}...",
                IndicadorStatus = "I"
            });

            context.SaveChanges();

            var filePath = Path.Combine(Configuration.DefaultTempBaseFiles, pedido.PastaTemp, _file.Nome);

            var encoding = Functions.GetEncoding(filePath);
            var file     = File.ReadLines(filePath, encoding);

            var cabecalho   = file.FirstOrDefault().Split(';').Select(a => a.Replace("\"", "").Replace("\"", "")).ToArray();
            var loadObjects = new List <Dictionary <string, string> >();
            int valorTotal  = 0;
            int fileSize    = file.Count();

            int contador = 200000;
            int skip     = 1;

            var ramErrors = new Dictionary <int[], string>(); //skip, contador

            pedido.LogPedidoImportacao.Add(new LogPedidoImportacao()
            {
                Descricao       = $"Iniciando gravação do arquivo {_file.Nome}...",
                IndicadorStatus = "I"
            });

            context.SaveChanges();

            do
            {
                try
                {
                    var listObject = new List <Dictionary <string, string> >();

                    loadObjects.AddRange(file.Skip(skip).Take(contador).Select(a => a.Split(';').Select(t => t.Replace("\"", "").Replace("\"", "")).ToArray().Zip(cabecalho, (value, key) => new { key, value }).ToDictionary(z => z.key, b => b.value)));

                    valorTotal += loadObjects.Count;

                    this.WorkWithObjMemory(ref loadObjects, ref repository, ref isMemoryFull, cabecalho);

                    skip += contador;
                }
                catch (Exception erro)
                {
                    ramErrors.Add(new int[] { skip, contador }, $"[ERRO] - {erro.Message}");
                }
            }while (valorTotal < fileSize - 1);

            this.DeleteTempFiles(filePath);

            if (ramErrors.Count > 0)
            {
                foreach (var error in ramErrors)
                {
                    pedido.LogPedidoImportacao.Add(new LogPedidoImportacao()
                    {
                        Descricao       = $"Erro ao gravar o arquivo {_file.Nome} - {error.Value}...",
                        IndicadorStatus = "E"
                    });
                }

                pedido.Estado = "E";

                context.SaveChanges();
                return;
            }

            pedido.LogPedidoImportacao.Add(new LogPedidoImportacao()
            {
                Descricao       = $"Processo de leitura do arquivo finalizado sem erros",
                IndicadorStatus = "C"
            });

            pedido.Estado = "C";

            context.SaveChanges();
        }