Ejemplo n.º 1
0
        private bool ProcessarArqDelimitadoOuFixo(bool pEmLote, string pSchemaDST, string pNomeTabelaSTG, string pNomeTabelaDST, string pPathFormatFile, string pDelimitador, string pFieldQuote, string pNomeArquivo, int pIdArquivo, Global.Behavior pBehavior, int pFirstLine = 1, string pLineFeed = "\\r\\n")
        {
            bool Result = false;

            try
            {
//                Global.TipoArquivo TipoArquivo = Global.TipoArquivo.TXT;
                if (pEmLote)
                {
                    Result = ProcessArq.ProcessaEmLoteSTG(pSchemaDST, pNomeTabelaSTG, pNomeTabelaDST, pPathFormatFile, pDelimitador, pFieldQuote, pNomeArquivo, pIdArquivo, pBehavior, pFirstLine, pLineFeed);
                }
                else
                {
                    Result = ProcessArq.ProcessaTXT(pSchemaDST, pNomeTabelaDST, pNomeArquivo, pIdArquivo, pDelimitador, pBehavior);
                }
            }
            catch (Exception ex)
            {
                Result = false;
                Global.EnviarParaLog("ERRO: Não foi possível processar o Arquivo " + pNomeArquivo + " [" + ex.Message + "]", "ProcArqDELOuFixo", true, pIdArquivo);
            }
            return(Result);
        }
Ejemplo n.º 2
0
        public void OrquestraProcessamento(string pIdServico)
        {
            bool FoiProcessado = false;

            try
            {
                string DirAplicacao = GetDir_Aplicacao();
                Global.PathInputError = DirAplicacao + "ETL\\INPUT_ERROR";
                Global.PathFormatFile = DirAplicacao + "ETL\\BCPFORMAT";

                MonitoramentosModel        monitoramentos = new MonitoramentosModel();
                List <MonitoramentosModel> lstMonitor     = processArqController.GetMonitoramentos(pIdServico);
                //string NomeDoPacote = processArqController.GetNomePacote(1);

                if (lstMonitor.Count() > 0)
                {
                    processArqController.AtualizaSituacaoThread(pIdServico, "Processando");
                    foreach (var drMonitoramentos in lstMonitor)
                    {
                        ArquivosModel arquivosModal = new ArquivosModel();
                        int           IdArquivo     = drMonitoramentos.id_arquivo;
                        //Global.IdDoArquivo = ProcessArq.IdArquivo.ToString();
                        string NomeTabelaSTG = "STAGE_ETL_" + drMonitoramentos.id_arquivo.ToString();

                        List <ArquivosModel> drArq = processArqController.GetArquivos(drMonitoramentos.id_arquivo);
                        if (drArq.Count() > 0)
                        {
                            foreach (var drArquivos in drArq)
                            {
                                if (string.IsNullOrEmpty(drArquivos.ConexaoBusiness))
                                {
                                    //Se ConexaoBusiness estiver vazio, popula com o BI padrao
                                    string ds = ""; string ic = ""; string uid = ""; string p = ""; bool apw = false;
                                    processArqController.GetDadosdoBancoDST("", ref ds, ref ic, ref uid, ref p, ref apw);
                                    drArquivos.ConexaoBusiness = ic;
                                }

                                if (!processArqController.DataBaseCriada(drArquivos.ConexaoBusiness))
                                {
                                    Global.EnviarParaLog($"Preparando para criar o Banco de Dados {drArquivos.ConexaoBusiness}.", "OrquestraProcmto", true, IdArquivo);
                                    processArqController.CriarDataBaseDst(drArquivos.ConexaoBusiness, drArquivos.id_arquivo);
                                }

                                if (!processArqController.DataBaseCriada(drArquivos.ConexaoBusiness))
                                {
                                    Global.EnviarParaLog($"Banco de dados {drArquivos.ConexaoBusiness} não foi criado.", "OrquestraProcmto", true, IdArquivo);
                                    return;
                                }
                                else
                                {
                                    Global.EnviarParaLog($"Banco de Dados {drArquivos.ConexaoBusiness} criado.", "OrquestraProcmto", true, IdArquivo);
                                }

                                processArqController.CriarTabela_ArquivosCarregados(drArquivos.ConexaoBusiness, drArquivos.id_arquivo);

                                string        NomeTabelaDST = GetNomeTabelaDST(drArquivos.tb_destino.ToString(), drArquivos.id_arquivo);// drArquivos.tb_destino.ToString()+"_"+ drArquivos.id_arquivo.ToString();
                                List <string> lstArquivos   = new List <string>();
                                //DirectoryInfo dir = new DirectoryInfo($"{drArquivos.dir_entrada.ToString()}");
                                lstArquivos = ProcessArq.GetListaArquivos(drArquivos.dir_entrada.ToString(), drArquivos.mascara_arquivo, IdArquivo);//BuscaArquivosPelaMascara(drArquivos.dir_entrada.ToString() , drArquivos.mascara_arquivo, IdArquivo);//BuscaArquivos(dir);
                                foreach (var lArq in lstArquivos)
                                {
                                    if (drArquivos.tp_carga.ToUpper() == "FULL")
                                    {
                                        if (ProcessArq.TabelaCriada(drArquivos.ConexaoBusiness, NomeTabelaDST))
                                        {
                                            try
                                            {
                                                DropTabela(drArquivos.ConexaoBusiness, NomeTabelaDST, IdArquivo);
                                                Global.EnviarParaLog($"Tabela {NomeTabelaDST}) apagada com sucesso.", true, IdArquivo);
                                            }
                                            catch (Exception ex)
                                            {
                                                Global.EnviarParaLog($"Erro ao apagar a tabela: {NomeTabelaDST}. MOTIVO: {ex.Message}", true, IdArquivo);
                                            }
                                        }
                                    }

                                    string NomeArquivo = lArq;
                                    string Delimitador = drArquivos.delimitador.ToString();
                                    Global.EnviarParaLog($"ATENÇÃO: Arquivo que será executado: {NomeArquivo}.", "OrquestraProcmto", true, IdArquivo);
                                    //Altera o Banco para utilizar Opçoes bulk_logged
                                    ProcessArq.AlterDatabaseToBulk_logged(drArquivos.ConexaoBusiness);
                                    bool Result = false;
                                    //ProcessArq.LineFeed = drArquivos.LineFeed;
                                    //ProcessArq.FirstLine = drArquivos.FirstLine;
                                    Global.EnviarParaLog($"Dados do LineFeed({drArquivos.LineFeed}) utilizado.", "OrquestraProcmto", true, IdArquivo);
                                    switch (drArquivos.tp_arquivo.ToUpper())
                                    {
                                    case "DBF":
                                        //Processa arquivos DBF
                                        ProcessArq.TipoArquivo = Global.TipoArquivo.DBF;
                                        Result        = ProcessArq.ProcessaEmLoteDBF(drArquivos.ConexaoBusiness, NomeTabelaDST, NomeArquivo, IdArquivo);
                                        FoiProcessado = true;
                                        break;

                                    case "EXCEL":
                                        //Processa arquivos EXCEL
                                        string NomePlanilha = drArquivos.nm_Planilha.ToString();
                                        ProcessArq.TipoArquivo = Global.TipoArquivo.EXCEL;
                                        Result        = ProcessArq.ProcessaEmLoteXLSX(drArquivos.ConexaoBusiness, NomeTabelaDST, NomePlanilha, NomeArquivo, IdArquivo);
                                        FoiProcessado = true;
                                        break;

                                    case "DELIMITADO":
                                        //Processa arquivos DELIMITADO
                                        Result        = ProcessarArqDelimitadoOuFixo(true, drArquivos.ConexaoBusiness, NomeTabelaSTG, NomeTabelaDST, Global.PathFormatFile, Delimitador, drArquivos.cercador, NomeArquivo, IdArquivo, Global.Behavior.DELIMITADO, drArquivos.FirstLine, drArquivos.LineFeed);
                                        FoiProcessado = true;
                                        break;

                                    case "FIXO":
                                        //Processa arquivos FIXO
                                        Result        = ProcessarArqDelimitadoOuFixo(true, drArquivos.ConexaoBusiness, NomeTabelaSTG, NomeTabelaDST, Global.PathFormatFile, Delimitador, drArquivos.cercador, NomeArquivo, IdArquivo, Global.Behavior.FIXO, drArquivos.FirstLine, drArquivos.LineFeed);
                                        FoiProcessado = true;
                                        break;
                                    }
                                    Global.EnviarParaLog($"Processamento do Arquivo {NomeArquivo} Concluído", "OrquestraProcmto", true, IdArquivo);
                                    Global.EnviarParaLog($"Move Para Processados({Result.ToString()})", "OrquestraProcmto", true, IdArquivo);
                                    if (drArquivos.tp_arquivo != "EXCEL")
                                    {
                                        ProcessArq.MoveParaProcessados(NomeArquivo, IdArquivo, Result);
                                    }
                                    else
                                    {
                                        //Tratativa quando for Excel
                                        if ((drArquivos.FlagPlanTemVariasAbas == "NAO") || (drArquivos.FlagPlanTemVariasAbas == "SIM" && drArquivos.FlagUltimaAbaPlanilha == "SIM"))
                                        {
                                            ProcessArq.MoveParaProcessados(NomeArquivo, IdArquivo, Result);
                                        }
                                    }

                                    if (Result)
                                    {
                                        processArqController.PopulaARQUIVOSCARREGADOS(drArquivos.ConexaoBusiness, drArquivos.tb_destino, drArquivos.dir_entrada, Path.GetFileName(NomeArquivo), IdArquivo);
                                        if (drArquivos.tp_arquivo.ToUpper() == "DELIMITADO" || drArquivos.tp_arquivo.ToUpper() == "FIXO")
                                        {
                                            try
                                            {
                                                processArqController.DropTabela(NomeTabelaSTG, processArqController.ConnectionsStringDST(drArquivos.ConexaoBusiness));
                                                Global.EnviarParaLog($"Tabela stage {NomeTabelaSTG}) apagada com sucesso.", "OrquestraProcmto", true, IdArquivo);
                                            }
                                            catch (Exception ex)
                                            {
                                                Global.EnviarParaLog($"Erro ao apagar a tabela stage: {NomeTabelaSTG}. MOTIVO: {ex.Message}", "OrquestraProcmto", true, IdArquivo);
                                            }
                                        }
                                        if (drArquivos.dir_saida.Length > 0)
                                        {
                                            SqlConnection _Conn = new SqlConnection(Global.ConnectionsString);
                                            _Conn.Open();
                                            try
                                            {
                                                processArqController.GeraSaidaDoArquivo(_Conn, NomeTabelaDST, drArquivos.dir_saida, drArquivos.ConexaoBusiness, IdArquivo);
                                            }
                                            finally
                                            {
                                                _Conn.Close();
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                else
                {
                    Global.EnviarParaLog($"Erro: Não foi encontrado Código do Arquivo para o Serviço {pIdServico}.", "OrquestraProcmto");
                }
            }
            catch (Exception ex)
            {
                Global.EnviarParaLog($"Erro: {ex.Message}.", "OrquestraProcmto");
            }
            finally
            {
                processArqController.AtualizaSituacaoThread(pIdServico, "Ocioso");
                if (FoiProcessado)
                {
                    EnviarEmail(Global.Strtoint(pIdServico));
                }
            }
        }