예제 #1
0
        //Pega os arquivos (edital e anexos) da licitação e depois os deleta
        private static void GetFiles(Licitacao licitacao)
        {
            try
            {
                //var webdriver = WebDriverChrome.LoadWebDriver(name);
                //web = webdriver.Item1;
                //wait = webdriver.Item2;
                if (web != null)
                {
                    web.Quit();
                }

                var driver = ChromeDriverService.CreateDefaultService();
                driver.HideCommandPromptWindow = true;
                var op = new ChromeOptions();
                op.AddUserProfilePreference("download.default_directory", pathEditais);
                web = new ChromeDriver(driver, new ChromeOptions(), TimeSpan.FromSeconds(300));
                web.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(300);
                wait = new WebDriverWait(web, TimeSpan.FromSeconds(300));

                //Cria diretório específico para os arquivos
                if (!Directory.Exists(pathEditais))
                {
                    Directory.CreateDirectory(pathEditais);
                }

                web.Navigate().GoToUrl(licitacao.LinkEdital);

                if (web.PageSource.Contains("Arquivos"))
                {
                    var accordionItems = web.FindElements(By.ClassName("ui-accordion-header"));

                    foreach (var item in accordionItems)
                    {
                        try
                        {
                            if (item.Text.Contains("Arquivos"))
                            {
                                item.Click();
                                break;
                            }
                        }
                        catch (Exception e)
                        {
                            RService.Log("Exception (GetFiles/Accordion) " + e.Message + " at {0}", logPath);
                        }
                    }
                }

                var downloadButtons = web.FindElements(By.ClassName("ui-button-text-icon-left"));

                foreach (var button in downloadButtons)
                {
                    try
                    {
                        button.Click();
                        Thread.Sleep(10000);
                    }
                    catch (Exception e)
                    {
                        RService.Log("Exception (GetFiles/FileButton) " + e.Message + " at {0}", logPath);
                    }
                }

                string[] files = Directory.GetFiles(pathEditais);

                foreach (var file in files)
                {
                    string fileName = file.Split('/')[1];
                    if (!string.IsNullOrEmpty(fileName))
                    {
                        #region AWS
                        RService.Log("(GetFiles) " + name + ": Enviando o arquivo para Amazon S3... " + fileName + " at {0}", logPath);

                        if (AWS.SendObject(licitacao, pathEditais, fileName))
                        {
                            LicitacaoArquivo licitacaoArq = new LicitacaoArquivo();
                            licitacaoArq.NomeArquivo         = fileName;
                            licitacaoArq.NomeArquivoOriginal = name + DateTime.Now.ToString("yyyyMMddHHmmss");
                            licitacaoArq.NomeArquivoFonte    = name;
                            licitacaoArq.Status      = 0;
                            licitacaoArq.IdLicitacao = licitacao.Id;

                            LicitacaoArquivoRepository repoArq = new LicitacaoArquivoRepository();
                            repoArq.Insert(licitacaoArq);

                            if (File.Exists(pathEditais + fileName))
                            {
                                File.Delete(pathEditais + fileName);
                            }

                            RService.Log("(GetFiles) " + name + ": Arquivo " + fileName + " enviado com sucesso para Amazon S3" + " at {0}", logPath);
                        }
                        else
                        {
                            RService.Log("Exception (GetFiles) " + name + ": Erro ao enviar o arquivo para Amazon (CreateLicitacaoArquivo) {0}", logPath);
                        }

                        #endregion
                    }
                }
            }
            catch (Exception e)
            {
                RService.Log("Exception (GetFiles) " + name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " / " + e.InnerException + " at {0}", logPath);
            }
        }
예제 #2
0
        internal static void InitCallBack(object state)
        {
            //Busca as configurações de execução do robô no banco.
            config = ConfigRobotController.FindByName(name);

            try
            {
                if (config.Active == 'Y')
                {
                    //Deleta o log antigo para criar o novo.
                    if (File.Exists(Path.GetTempPath() + name + ".txt"))
                    {
                        File.Delete(Path.GetTempPath() + name + ".txt");
                    }

                    config.Status = 'R';
                    ConfigRobotController.Update(config);
                    using (FileStream fs = File.Create(Path.GetTempPath() + Guid.NewGuid().ToString() + ".ire")) { }

                    Init();

                    //Atualiza as informações do robô de acordo com a última execução.
                    config = ConfigRobotController.FindByName(name);
                    config.NumLicitLast = numLicitacoes;
                    RService.Log(name + " find " + numLicitacoes + " at {0}", logPath);
                    numLicitacoes = 0;

                    config.Status   = 'W';
                    config.LastDate = DateTime.Now;
                    ConfigRobotController.Update(config);
                }

                //Agenda a próxima execução do robô.
                RService.ScheduleMe(config);

                //Arquivo que indica ao manager que é hora de atualizar as informações.
                File.Create(Path.GetTempPath() + Guid.NewGuid().ToString() + ".ire");
            }
            catch (Exception e)
            {
                RService.Log("Exception (InitCallBack) " + name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", logPath);
            }
            finally
            {
                //Finaliza e deleta as instâncias do navegador e da pasta
                if (web != null)
                {
                    web.Close();
                }

                if (Directory.Exists(pathEditais))
                {
                    Directory.Delete(pathEditais);
                }
            }

            RService.Log("Finished " + name + " at {0}", logPath);

            //Envia o log por e-mail
            EmailHandle.SendMail(logPath, name);
        }
예제 #3
0
        //Método para pegar as licitações do site do TCE-PI
        private static void GetLicitacoes()
        {
            try
            {
                //var webdriver = WebDriverChrome.LoadWebDriver(name);
                //var webdriver = WebDriverPhantomJS.LoadWebDriver(name, web);
                //web = webdriver.Item1;
                //wait = webdriver.Item2;

                if (web != null)
                {
                    web.Quit();
                }

                var driver = ChromeDriverService.CreateDefaultService();
                driver.HideCommandPromptWindow = true;

                var op = new ChromeOptions();
                op.AddUserProfilePreference("download.default_directory", TCEPIController.pathEditais);

                web = new ChromeDriver(driver, op, TimeSpan.FromSeconds(300));
                web.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(300);
                wait = new WebDriverWait(web, TimeSpan.FromSeconds(300));

                web.Navigate().GoToUrl(Constants.TCEPI_SITE);
                wait.Until(ExpectedConditions.ElementExists(By.XPath("//*[@id=\"formMural:btnPesquisar\"]/span[2]")));
                web.FindElement(By.XPath("//*[@id=\"formMural:btnPesquisar\"]/span[2]")).Click();
                Thread.Sleep(3000);

                /*Laço que se repete até o fim das licitações. O fim é demarcado pela quantidade de licitações na lista licitNums:
                 * em cada página o número é 50, menos na última página. Quando o número for diferente de 50, ele termina*/
                do
                {
                    licitNums = new List <string>();

                    RService.Log("(GetLicitacoes) " + name + ": Acessando página " + currentPage + " at {0}", logPath);

                    string pageHtml = web.PageSource.ToString();
                    var    licits   = StringHandle.GetMatches(pageHtml, @"\?id=\d{6}");

                    //Pega os números das licitações da página em questão
                    foreach (var licit in licits)
                    {
                        string licNum = licit.ToString().Replace("?id=", "");
                        licitNums.Add(licNum);
                    }

                    RService.Log("(GetLicitacoes) " + name + ": Acessando licitações da página " + currentPage + " at {0}", logPath);

                    foreach (string lic in licitNums)
                    {
                        if (!alreadyInserted.Contains(Int64.Parse(lic)))
                        {
                            Licitacao licitacao = CreateLicitacao(lic);
                            if (licitacao != null && !LicitacaoController.Exists(licitacao.IdLicitacaoFonte.ToString()))
                            {
                                repo = new LicitacaoRepository();
                                try
                                {
                                    repo.Insert(licitacao);
                                    RService.Log("(GetLicitacoes) " + name + ": Licitação " + licitacao.IdLicitacaoFonte + " inserida com sucesso at {0}", logPath);
                                    numLicitacoes++;

                                    GetFiles(licitacao);
                                }
                                catch (Exception e)
                                {
                                    RService.Log("Exception (GetLicitacoes) " + name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " / Mensagem de erro: " + mensagemErro + " at {0}", logPath);
                                }
                            }
                        }
                    }

                    //webdriver = WebDriverChrome.LoadWebDriver(name);
                    //web = webdriver.Item1;
                    //wait = webdriver.Item2;

                    web = new ChromeDriver(driver, op, TimeSpan.FromSeconds(300));
                    web.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(300);
                    wait = new WebDriverWait(web, TimeSpan.FromSeconds(300));

                    web.Navigate().GoToUrl(Constants.TCEPI_SITE);
                    web.FindElement(By.XPath("//*[@id=\"formMural:btnPesquisar\"]/span[2]")).Click();
                    for (int i = 0; i < currentPage; i++)
                    {
                        wait.Until(ExpectedConditions.ElementExists(By.XPath("//*[@id=\"formListaLic:listaLic_paginator_top\"]/a[3]")));
                        web.FindElement(By.XPath("//*[@id=\"formListaLic:listaLic_paginator_top\"]/a[3]")).Click();
                        Thread.Sleep(10000);
                    }

                    currentPage++;
                } while (licitNums.Count() == 10);
            }
            catch (Exception e)
            {
                StackTrace st    = new StackTrace(e, true);
                var        frame = st.GetFrame(st.FrameCount - 1);
                var        line  = frame.GetFileLineNumber();
                RService.Log("Exception (GetLicitacoes) " + name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at line " + line + " at {0}", logPath);
            }
        }
예제 #4
0
        //Cria a licitação em questão com os respectivos dados
        private static Licitacao CreateLicitacao(string lic)
        {
            Licitacao licitacao = new Licitacao();

            try
            {
                licitacao.DigitacaoUsuario = 43;
                licitacao.Estado           = Constants.TCEPI_ESTADO;
                licitacao.EstadoFonte      = Constants.TCEPI_UF;
                licitacao.IdLicitacaoFonte = Convert.ToInt64(lic);
                licitacao.IdFonte          = 1442;
                licitacao.LinkEdital       = string.Format(Constants.TCEPI_LICIT, lic);
                licitacao.LinkSite         = Constants.TCEPI_HOST;
                licitacao.Lote             = lote;

                web.Navigate().GoToUrl(licitacao.LinkEdital);

                string licitacaoHtmlText = web.PageSource.ToString();

                var helper = StringHandle.GetMatches(licitacaoHtmlText, "negrito\">(.|\n)*?</span");
                licitacao.Processo    = helper[1].ToString().Replace("negrito\">", "").Replace("</span", "").Replace("Pregão ", "");
                licitacao.Observacoes = null;

                licitacao.AberturaData = Convert.ToDateTime(helper[2].ToString().Replace("negrito\">", "").Replace("</span", ""));
                licitacao.EntregaData  = Convert.ToDateTime(helper[7].ToString().Replace("negrito\">", "").Replace("</span", ""));
                licitacao.ValorMax     = helper[4].ToString().Replace("negrito\">", "").Replace("</span", "");

                var num = web.FindElement(By.XPath("//*[@id=\"j_idt23_content\"]/div[1]/div[2]/span"));
                licitacao.Num = num.Text.Split('º')[1].Trim();
                var modalidade = num.Text.Split('º')[0].Replace(" N", "").Trim();
                licitacao.Modalidade = NameToModalidade.ContainsKey(StringHandle.RemoveAccent(modalidade.ToUpper())) ? NameToModalidade[StringHandle.RemoveAccent(modalidade.ToUpper())] : null;

                if (licitacao.Modalidade == null)
                {
                    licitacao.Modalidade = NameToModalidade["PREGAO"];
                }

                var objeto = web.FindElement(By.XPath("//*[@id=\"j_idt23_content\"]/div[4]/div[2]/label"));
                licitacao.Objeto = objeto.Text.Trim();

                var depto = web.FindElement(By.XPath("//*[@id=\"j_idt20_content\"]/div/div[2]/h2"));
                licitacao.Departamento = depto.Text.Trim();
                licitacao.Orgao        = OrgaoController.GetOrgaoByNameAndUf(licitacao.Departamento + ":PI", NameToOrgao);

                if (licitacao.Departamento.Contains("P. M. DE "))
                {
                    var    textInfo = new CultureInfo("pt-BR").TextInfo;
                    string cidade   = licitacao.Departamento.Remove(0, 9);
                    licitacao.Cidade      = textInfo.ToTitleCase(cidade);
                    licitacao.CidadeFonte = Cidades.ContainsKey(cidade) ? Cidades[licitacao.Cidade.ToUpper()] : CityUtil.GetCidadeFonte(licitacao.Cidade, Cidades);
                }
                else
                {
                    foreach (var cid in Cidades)
                    {
                        if (licitacao.Objeto.Contains(cid.Key))
                        {
                            licitacao.Cidade      = cid.Key;
                            licitacao.CidadeFonte = cid.Value;
                        }
                    }

                    if (string.IsNullOrEmpty(licitacao.Cidade))
                    {
                        licitacao.Cidade      = "Teresina";
                        licitacao.CidadeFonte = 5721;
                    }
                }
            }
            catch (Exception e)
            {
                RService.Log("Exception (CreateLicitacao) " + name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", logPath);
            }

            return(LicitacaoController.IsValid(licitacao, out mensagemErro) ? licitacao : null);
        }
예제 #5
0
        /*Inicia o processamento do robot*/
        private static void Init()
        {
            RService.Log("(Init) " + Name + ": Começando o processamento.. " + "at {0}", Path.GetTempPath() + Name + ".txt");
            try
            {
                AlreadyColected = new HashSet <long>();

                /*Lista das licitacoes que já existem para bec.sp.gov*/
                //AlreadyInserted = LicitacaoController.GetAlreadyInserted(Constants.BEC_SITE);

                /*Lista das cidades para o estado*/
                Cidades = CidadeController.GetNameToCidade(Constants.BEC_UF);

                Modalidade = ModalidadeController.FindById(24);
                Orgao      = OrgaoController.FindById(388);
                Lote       = LoteController.CreateLote(43, 507);
                Repo       = new LicitacaoRepository();

                //Define os pontos de partida, uri e argumentos do post
                List <string> urls = new List <string>();

                urls.Add(Constants.BEC_LINK_MODALIDADE_71);
                urls.Add(Constants.BEC_LINK_MODALIDADE_72);

                /*Percorre cada modalidade*/
                foreach (string uri in urls)
                {
                    /*Lista dos parametros do post*/
                    NameValueCollection post = new NameValueCollection();

                    /*Percorre as naturezas de cada modalidade*/
                    foreach (var attr in WebHandle.GetHtmlDocOfPage(uri, post).DocumentNode.Descendants("span").Where(x => x.Attributes.Contains("id") &&
                                                                                                                      x.Attributes["id"].Value.ToString().Contains(Constants.BEC_ID_NATUREZA)))
                    {
                        string urin = attr.SelectSingleNode("a").Attributes["href"].Value.ToString();

                        int page = 2, count = 20;

                        /*Percorre as páginas para cada uma das naturezas (ex: 1;2;3)*/
                        HtmlDocument pagehtml = WebHandle.GetHtmlDocOfPage(urin, post);
                        while (pagehtml != null && count == 20)
                        {
                            RService.Log("(GetOC) " + Name + ": Percorrendo os links da página.. " + (page - 1) + " at {0}", Path.GetTempPath() + Name + ".txt");

                            //Pega as licitações de cada página (OC's)
                            count = GetOC(pagehtml);
                            //Pega o html da próxima página
                            pagehtml = WebHandle.GetHtmlDocOfPage(urin, GetFormParameters(pagehtml, page));
                            //Numero da proxima página
                            page++;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                RService.Log("Exception (Init) " + Name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
            }
            finally
            {
                if (NumLicitacoes <= 0)
                {
                    LoteController.Delete(Lote);
                }
            }
        }
예제 #6
0
        /*Acessa página dos arquivos de edital passando pelo captcha*/
        private static void DownloadEdAndCreatLicArq(string num, Licitacao licitacao)
        {
            RService.Log("(DownloadEdAndCreatLicArq) " + Name + ": Visualizando arquivos de edital, licitação... " + num + " at {0}", Path.GetTempPath() + Name + ".txt");

            try
            {
                if (web != null)
                {
                    web.Quit();
                }

                var driver = ChromeDriverService.CreateDefaultService();
                driver.HideCommandPromptWindow = true;
                var op = new ChromeOptions();
                op.AddUserProfilePreference("download.default_directory", PathEditais);
                web = new ChromeDriver(driver, new ChromeOptions(), TimeSpan.FromSeconds(300));
                web.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(300);
                wait = new WebDriverWait(web, TimeSpan.FromSeconds(300));


                web.Navigate().GoToUrl(licitacao.LinkEdital);

                if (TryReload)
                {
                    foreach (var a in web.FindElements(By.TagName("a")))
                    {
                        if (!string.IsNullOrEmpty(a.GetAttribute("onclick")) && a.GetAttribute("onclick").Contains("Listar documentos"))
                        {
                            web.ExecuteScript(a.GetAttribute("onclick"));
                            wait.Until(ExpectedConditions.ElementIsVisible(By.Id("idImgListarAnexo")));

                            web.ExecuteScript(GetScriptFillCaptcha("idImgListarAnexo", "inputCaptchaAnexosLicitacao"));
                            Thread.Sleep(1000);

                            web.ExecuteScript("document.getElementById('botao_continuar').click()");
                            Thread.Sleep(2000);

                            var select = web.FindElement(By.TagName("select"));
                            new SelectElement(select).SelectByValue("-1"); //mostrar todos

                            MatchCollection linkForm = Regex.Matches(web.PageSource, "numeroLicitacao=(.+?)&amp;sem-reg=true");

                            if (linkForm.Count > 0)
                            {
                                DownloadEditais(FindDocLinks(num), licitacao, linkForm);
                            }

                            if (Directory.Exists(PathEditais))
                            {
                                Directory.Delete(PathEditais, true);
                            }

                            break;
                        }
                    }
                }
                else
                {
                    web.ExecuteScript(GetScriptFillCaptcha("idImgListarAnexo", "inputCaptchaAnexosLicitacao"));
                    Thread.Sleep(1000);

                    web.ExecuteScript("document.getElementById('botao_continuar').click()");
                    Thread.Sleep(2000);

                    var select = web.FindElement(By.XPath("//*[@id=\"tDocumento_length\"]/label/select"));
                    new SelectElement(select).SelectByText("Todos");

                    MatchCollection linkForm = Regex.Matches(web.PageSource, "numeroLicitacao=(.+?)&amp;sem-reg=true");

                    DownloadEditais(FindDocLinks(num), licitacao, linkForm);

                    if (Directory.Exists(PathEditais))
                    {
                        Directory.Delete(PathEditais, true);
                    }
                }
            }
            catch (Exception e)
            {
                if (TryReload)
                {
                    RService.Log("Exception (DownloadEdAndCreatLicArq) " + Name + ": Falha na visualização, tentando novamente... " + num + " at {0}", Path.GetTempPath() + Name + ".txt");

                    TryReload = false;
                    DownloadEdAndCreatLicArq(num, licitacao);
                }
                else
                {
                    RService.Log("Exception (DownloadEdAndCreatLicArq) " + Name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
                }

                TryReload = true;
            }
        }
예제 #7
0
        /*Cria uma nova licitacao.*/
        private static Licitacao CreateLicitacao(HtmlDocument htmDoc, string ocnum, string situacao)
        {
            RService.Log("(CreateLicitacao) " + Name + ": Criando licitação.. " + ocnum + " at {0}", Path.GetTempPath() + Name + ".txt");
            Licitacao licitacao = new Licitacao();

            try
            {
                licitacao.Lote        = Lote;
                licitacao.LinkSite    = Constants.BEC_SITE;
                licitacao.Modalidade  = Modalidade;
                licitacao.IdFonte     = 507;
                licitacao.EstadoFonte = Constants.BEC_UF;
                licitacao.CidadeFonte = 9668;
                licitacao.Orgao       = Orgao;
                licitacao.Cidade      = Constants.BEC_CIDADE;
                licitacao.Estado      = Constants.BEC_ESTADO;
                licitacao.Excluido    = 0;
                licitacao.SegmentoAguardandoEdital = 0;
                licitacao.DigitacaoUsuario         = 43; //Robo
                licitacao.Situacao = situacao;

                //licitacao.DigitacaoData = null;
                //licitacao.ProcessamentoData = null;

                licitacao.Num = ocnum;
                licitacao.IdLicitacaoFonte = long.Parse(ocnum);
                licitacao.Departamento     = htmDoc.DocumentNode.Descendants("span").SingleOrDefault(x => x.Attributes.Contains("id") && x.Attributes["id"].Value.Contains("ctl00_wucOcFicha_txtNomUge")).InnerText.Trim();
                int count;

                string city = htmDoc.DocumentNode.Descendants("span").SingleOrDefault(x => x.Attributes.Contains("id") && x.Attributes["id"].Value.Contains("ctl00_wucOcFicha_txtDescricaoEnteFederativo")).InnerText.Trim();
                if (city != "GOVERNO DO ESTADO DE SÃO PAULO")
                {
                    city = StringHandle.RemoveAccent(city);
                    foreach (var cidade in Cidades)
                    {
                        if (city.Contains(cidade.Key))
                        {
                            licitacao.Cidade      = cidade.Key;
                            licitacao.CidadeFonte = cidade.Value;
                            break;
                        }
                    }
                }

                /*Percorre os links da OC para montar o objeto licitação*/
                bool findFirstEditalLink = false;
                bool findFirstOcLink     = false;
                foreach (HtmlNode htmNode in htmDoc.DocumentNode.Descendants("li"))
                {
                    /*Link onde ficam os arquivos do edital*/
                    HtmlNode htmlNodeInNode = htmNode.SelectSingleNode("a");

                    if (htmlNodeInNode != null)
                    {
                        if (htmlNodeInNode.Attributes.Contains("href") && htmlNodeInNode.Attributes["href"].Value.Contains("bec_pregao_UI/Edital") && !findFirstEditalLink)
                        {
                            licitacao.LinkEdital = htmlNodeInNode.Attributes["href"].Value.Trim();
                            findFirstEditalLink  = true;
                        }
                        /*Link para a pag onde ficam as datas*/
                        if (htmlNodeInNode.Attributes.Contains("href") && htmlNodeInNode.Attributes["href"].Value.Contains("bec_pregao_UI/Agendamento"))
                        {
                            /*Html da pág onde ficam as datas*/
                            HtmlDocument htmDocAgendamento = WebHandle.GetHtmlDocOfPage(htmlNodeInNode.Attributes["href"].Value);
                            /*Tabela de datas, agendamentos*/
                            HtmlNode table = htmDocAgendamento.DocumentNode.Descendants("table").SingleOrDefault(x => x.Attributes.Contains("id") && x.Attributes["id"].Value.Contains("ctl00_conteudo_grd"));
                            /*Cada célula da tabela*/
                            List <HtmlNode> tds = table.Descendants("td").ToList();
                            count = 0;
                            foreach (HtmlNode inf in tds)
                            {
                                /*Célula com o label ENTREGA DE PROPOSTA, na célula seguinte ficam as datas*/
                                if (inf.InnerText.ToUpper().Trim().Contains("ENTREGA DE PROPOSTA"))
                                {
                                    MatchCollection matches = StringHandle.GetMatches(tds[count + 1].InnerText.Trim(), @"(\d{2}\/\d{2}\/\d{4}\s+\d{2}:\d{2})");
                                    licitacao.EntregaData  = DateHandle.Parse(matches[0].Groups[1].Value, "dd/MM/yyyy hh:mm");
                                    licitacao.AberturaData = DateHandle.Parse(matches[1].Groups[1].Value, "dd/MM/yyyy hh:mm");
                                    break;
                                }
                                count++;
                            }
                        }
                        /*Link com dados da OC*/
                        if (htmlNodeInNode.Attributes.Contains("href") && htmlNodeInNode.Attributes["href"].Value.Contains("bec_pregao_UI/OC") && !findFirstOcLink)
                        {
                            HtmlDocument htmDocFasePrep = WebHandle.GetHtmlDocOfPage(htmlNodeInNode.Attributes["href"].Value);
                            licitacao.Endereco = Regex.Replace(htmDocFasePrep.DocumentNode.Descendants("span").SingleOrDefault(x => x.Attributes.Contains("id") && x.Attributes["id"].Value.Contains("ctl00_conteudo_Wuc_OC_Ficha2_txtEndUge")).InnerText.Trim(), @"\s+", " ");
                            licitacao.Objeto   = "Contratação de " + Regex.Replace(htmDocFasePrep.DocumentNode.Descendants("span").SingleOrDefault(x => x.Attributes.Contains("id") && x.Attributes["id"].Value.Contains("ctl00_conteudo_Wuc_OC_Ficha2_txtNaturezaJuridica")).InnerText.Trim(), @"\s+", " ");
                            findFirstOcLink    = true;
                        }
                    }
                }

                licitacao.ItensLicitacao = licitacao.ItensLicitacao ?? new List <ItemLicitacao>();

                CreateItensLicitacao(htmDoc, licitacao);
            }
            catch (Exception e)
            {
                RService.Log("Exception (CreateLicitacao) " + Name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
            }

            return(LicitacaoController.IsValid(licitacao, out mensagemErro) ? licitacao : null);
        }
예제 #8
0
        /*Cria as Licitacaoes arquivos se conseguir envia-los por ftp*/
        private static void CreateLicitacaoArquivo(Licitacao licitacao)
        {
            RService.Log("(CreateLicitacaoArquivo) " + Name + ": Criando arquivo de edital da licitação.. " + licitacao.IdLicitacaoFonte + " at {0}", Path.GetTempPath() + Name + ".txt");
            try
            {
                string fileName = FileHandle.GetATemporaryFileName();
                string zipPath  = string.Empty;
                if (Directory.Exists(PathEditais))
                {
                    zipPath = @Path.GetTempPath() + fileName + ".zip";
                    ZipFile.CreateFromDirectory(PathEditais, zipPath);
                }
                Directory.Delete(PathEditais, true);
                if (!string.IsNullOrEmpty(zipPath))
                {
                    #region FTP
                    //if (FTP.SendFileFtp(new FTP(@Path.GetTempPath(), fileName + ".zip", FTP.Adrss, FTP.Pwd, FTP.UName), Name))
                    //{
                    //LicitacaoArquivo licitacaoArq = new LicitacaoArquivo();
                    //licitacaoArq.NomeArquivo = fileName + ".zip";
                    //licitacaoArq.NomeArquivoOriginal = Name + DateTime.Now.ToString("yyyyMMddHHmmss");
                    //licitacaoArq.Status = 0;
                    //licitacaoArq.IdLicitacao = licitacao.Id;

                    //LicitacaoArquivoRepository repoArq = new LicitacaoArquivoRepository();
                    //repoArq.Insert(licitacaoArq);

                    //if (File.Exists(zipPath))
                    //{
                    //File.Delete(zipPath);
                    //}
                    //}
                    //else
                    //{
                    //RService.Log("(CreateLicitacaoArquivo) " + Name + ": error sending the file by FTP (CreateLicitacaoArquivo) {0}", Path.GetTempPath() + Name + ".txt");
                    //}
                    #endregion

                    #region AWS
                    RService.Log("(CreateLicitacaoArquivo) " + Name + ": Enviando arquivo para Amazon S3... " + fileName + " at {0}", Path.GetTempPath() + Name + ".txt");

                    if (AWS.SendObject(licitacao, Path.GetTempPath(), fileName + ".zip"))
                    {
                        LicitacaoArquivo licitacaoArq = new LicitacaoArquivo();
                        licitacaoArq.NomeArquivo         = fileName + ".zip";
                        licitacaoArq.NomeArquivoOriginal = Name + DateTime.Now.ToString("yyyyMMddHHmmss");
                        licitacaoArq.Status      = 0;
                        licitacaoArq.IdLicitacao = licitacao.Id;

                        LicitacaoArquivoRepository repoArq = new LicitacaoArquivoRepository();
                        repoArq.Insert(licitacaoArq);

                        if (File.Exists(zipPath))
                        {
                            File.Delete(zipPath);
                        }

                        RService.Log("(CreateLicitacaoArquivo) " + Name + ": Arquivo " + fileName + " enviado com sucesso para Amazon S3" + " at {0}", Path.GetTempPath() + Name + ".txt");
                    }
                    else
                    {
                        RService.Log("Exception (CreateLicitacaoArquivo) " + Name + ": Erro ao enviar o arquivo para Amazon (CreateLicitacaoArquivo) {0}", Path.GetTempPath() + Name + ".txt");
                    }
                    #endregion
                }
                else
                {
                    RService.Log("(CreateLicitacaoArquivo) " + Name + ": error while create zip file (CreateLicitacaoArquivo) {0}", Path.GetTempPath() + Name + ".txt");
                }
            }
            catch (Exception e)
            {
                RService.Log("Exception (CreateLicitacaoArquivo) " + Name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
            }
        }
예제 #9
0
        /*Criando licitação arquivo e enviando para pasta FTP*/
        public static bool CreateLicitacaoArquivo(string nomeRobo, Licitacao licitacao, string edital, string pathEditais, string nameFile, ReadOnlyCollection <OpenQA.Selenium.Cookie> AllCookies)
        {
            try
            {
                if (!Directory.Exists(pathEditais))
                {
                    Directory.CreateDirectory(pathEditais);
                }

                string fileName = FileHandle.GetATemporaryFileName() + WebHandle.GetExtensionFile(nameFile);

                RService.Log("(CreateLicitacaoArquivo) " + nomeRobo + ": Fazendo o download do arquivo... " + fileName + " at {0}", Path.GetTempPath() + nomeRobo + ".txt");

                if (WebHandle.DownloadFileWebRequest(AllCookies, edital, pathEditais + fileName) && File.Exists(pathEditais + fileName))
                {
                    #region FTP
                    //RService.Log("(CreateLicitacaoArquivo) " + nomeRobo + ": Enviando arquivo por FTP... " + fileName + " at {0}", Path.GetTempPath() + nomeRobo + ".txt");

                    //int fileCount = Directory.GetFiles(pathEditais).Length;
                    //int wait = 0;

                    //while (fileCount == 0 && wait < 6)
                    //{
                    //Thread.Sleep(5000);
                    //wait++;
                    //}

                    //if (FTP.SendFileFtp(new FTP(pathEditais, fileName, FTP.Adrss, FTP.Pwd, FTP.UName), nomeRobo))
                    //{
                    //LicitacaoArquivo licitacaoArq = new LicitacaoArquivo();
                    //licitacaoArq.NomeArquivo = fileName;
                    //licitacaoArq.NomeArquivoOriginal = nomeRobo + DateTime.Now.ToString("yyyyMMddHHmmss");
                    //licitacaoArq.NomeArquivoFonte = nameFile;
                    //licitacaoArq.Status = 0;
                    //licitacaoArq.IdLicitacao = licitacao.Id;

                    //LicitacaoArquivoRepository repoArq = new LicitacaoArquivoRepository();
                    //repoArq.Insert(licitacaoArq);

                    //if (File.Exists(pathEditais + fileName))
                    //{
                    //File.Delete(pathEditais + fileName);
                    //}

                    //RService.Log("(CreateLicitacaoArquivo) " + nomeRobo + ": Arquivo " + fileName + " enviado com sucesso at {0}", Path.GetTempPath() + nomeRobo + ".txt");

                    //return true;
                    //}
                    //else
                    //{
                    //RService.Log("Exception (CreateLicitacaoArquivo) " + nomeRobo + ": Erro ao enviar o arquivo por FTP (CreateLicitacaoArquivo) {0}", Path.GetTempPath() + nomeRobo + ".txt");
                    //}
                    #endregion

                    #region AWS
                    RService.Log("(CreateLicitacaoArquivo) " + nomeRobo + ": Enviando o arquivo para Amazon S3... " + fileName + " at {0}", Path.GetTempPath() + nomeRobo + ".txt");

                    if (AWS.SendObject(licitacao, pathEditais, fileName))
                    {
                        LicitacaoArquivo licitacaoArq = new LicitacaoArquivo();
                        licitacaoArq.NomeArquivo         = fileName;
                        licitacaoArq.NomeArquivoOriginal = nomeRobo + DateTime.Now.ToString("yyyyMMddHHmmss");
                        licitacaoArq.NomeArquivoFonte    = nameFile;
                        licitacaoArq.Status      = 0;
                        licitacaoArq.IdLicitacao = licitacao.Id;

                        LicitacaoArquivoRepository repoArq = new LicitacaoArquivoRepository();
                        repoArq.Insert(licitacaoArq);

                        if (File.Exists(pathEditais + fileName))
                        {
                            File.Delete(pathEditais + fileName);
                        }

                        RService.Log("(CreateLicitacaoArquivo) " + nomeRobo + ": Arquivo " + fileName + " enviado com sucesso para Amazon S3" + " at {0}", Path.GetTempPath() + nomeRobo + ".txt");

                        return(true);
                    }
                    else
                    {
                        RService.Log("Exception (CreateLicitacaoArquivo) " + nomeRobo + ": Erro ao enviar o arquivo para Amazon (CreateLicitacaoArquivo) {0}", Path.GetTempPath() + nomeRobo + ".txt");
                    }

                    #endregion
                }
                else
                {
                    RService.Log("Exception (CreateLicitacaoArquivo) " + nomeRobo + ": Erro ao fazer o download do arquivo, no link: " + edital + " at {0}", Path.GetTempPath() + nomeRobo + ".txt");
                }
            }
            catch (Exception e)
            {
                RService.Log("Exception (CreateLicitacaoArquivo) " + nomeRobo + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " / " + e.InnerException + " at {0}", Path.GetTempPath() + nomeRobo + ".txt");
            }
            return(false);
        }
예제 #10
0
        internal static bool CreateLicitacaoArquivo(string nomeRobo, Licitacao licitacao, string pathEditais, string nameFile, ReadOnlyCollection <Cookie> allCookies)
        {
            try
            {
                if (!Directory.Exists(pathEditais))
                {
                    Directory.CreateDirectory(pathEditais);
                }

                string fileName = FileHandle.GetATemporaryFileName() + WebHandle.GetExtensionFile(nameFile);
                System.Threading.Thread.Sleep(15000);

                if (File.Exists(pathEditais + "\\" + nameFile))
                {
                    if (nomeRobo.Contains("BB") || nomeRobo.Contains("PCP") || nomeRobo.Contains("TCERS") || nomeRobo.Contains("CRJ"))
                    {
                        File.Move(pathEditais + nameFile, pathEditais + fileName);
                    }

                    #region FTP
                    //RService.Log("(CreateLicitacaoArquivo) " + nomeRobo + ": Enviando arquivo por FTP... " + fileName + " at {0}", Path.GetTempPath() + nomeRobo + ".txt");

                    //if (FTP.SendFileFtp(new FTP(pathEditais, fileName, FTP.Adrss, FTP.Pwd, FTP.UName), nomeRobo))
                    //{
                    //LicitacaoArquivo licitacaoArq = new LicitacaoArquivo();
                    //licitacaoArq.NomeArquivo = fileName;
                    //licitacaoArq.NomeArquivoOriginal = nomeRobo + DateTime.Now.ToString("yyyyMMddHHmmss");
                    //licitacaoArq.NomeArquivoFonte = nameFile;
                    //licitacaoArq.Status = 0;
                    //licitacaoArq.IdLicitacao = licitacao.Id;

                    //LicitacaoArquivoRepository repoArq = new LicitacaoArquivoRepository();
                    //repoArq.Insert(licitacaoArq);

                    //if (File.Exists(pathEditais + fileName))
                    //{
                    //File.Delete(pathEditais + fileName);
                    //}

                    //return true;
                    //}
                    //else
                    //{
                    //RService.Log("Exception (CreateLicitacaoArquivo) " + nomeRobo + ": Erro ao enviar o arquivo por FTP (CreateLicitacaoArquivo) {0}", Path.GetTempPath() + nomeRobo + ".txt");
                    //}

                    #endregion

                    #region AWS
                    RService.Log("(CreateLicitacaoArquivo) " + nomeRobo + ": Enviando o arquivo para Amazon S3... " + fileName + " at {0}", Path.GetTempPath() + nomeRobo + ".txt");

                    if (AWS.SendObject(licitacao, pathEditais, fileName))
                    {
                        LicitacaoArquivo licitacaoArq = new LicitacaoArquivo();
                        licitacaoArq.NomeArquivo         = fileName;
                        licitacaoArq.NomeArquivoOriginal = nomeRobo + DateTime.Now.ToString("yyyyMMddHHmmss");
                        licitacaoArq.NomeArquivoFonte    = nameFile;
                        licitacaoArq.Status      = 0;
                        licitacaoArq.IdLicitacao = licitacao.Id;

                        LicitacaoArquivoRepository repoArq = new LicitacaoArquivoRepository();
                        repoArq.Insert(licitacaoArq);

                        if (File.Exists(pathEditais + fileName))
                        {
                            File.Delete(pathEditais + fileName);
                        }

                        RService.Log("(CreateLicitacaoArquivo) " + nomeRobo + ": Arquivo " + fileName + " enviado com sucesso para Amazon S3" + " at {0}", Path.GetTempPath() + nomeRobo + ".txt");

                        return(true);
                    }
                    else
                    {
                        RService.Log("Exception (CreateLicitacaoArquivo) " + nomeRobo + ": Erro ao enviar o arquivo para Amazon (CreateLicitacaoArquivo) {0}", Path.GetTempPath() + nomeRobo + ".txt");
                    }

                    #endregion
                }
            }
            catch (Exception e)
            {
                RService.Log("Exception (CreateLicitacaoArquivo) " + nomeRobo + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " / " + e.InnerException + " at {0}", Path.GetTempPath() + nomeRobo + ".txt");
            }

            return(false);
        }
예제 #11
0
        public static string FindCity(Licitacao licitacao)
        {
            string cidadeEstado = string.Empty;
            string nomeDpto     = licitacao.Orgao.Nome;
            string estado       = licitacao.Orgao.Estado;

            try
            {
                if (nomeDpto.Contains("- AC") || nomeDpto.Contains("/AC") || nomeDpto.Contains("ACRE") || nomeDpto.Contains("RIO BRANCO") || estado.Contains("AC"))
                {
                    cidadeEstado = "Rio Branco/AC/16";
                }
                else if (nomeDpto.Contains("- AL") || nomeDpto.Contains("/AL") || nomeDpto.Contains("ALAGOAS") || nomeDpto.Contains("MACEIÓ") || nomeDpto.Contains("MACEIO") || estado.Contains("AL"))
                {
                    cidadeEstado = "Maceió/AL/109";
                }
                else if (nomeDpto.Contains("- AM") || nomeDpto.Contains("/AM") || nomeDpto.Contains("AMAZONAS") || nomeDpto.Contains("MANAUS") || estado.Contains("AM"))
                {
                    cidadeEstado = "Manaus/AM/AM";
                }
                else if (nomeDpto.Contains("- AP") || nomeDpto.Contains("/AP") || nomeDpto.Contains("AMAPÁ") || nomeDpto.Contains("MACAPÁ") || nomeDpto.Contains("MACAPA") || estado.Contains("AP"))
                {
                    cidadeEstado = "Macapá/AP/307";
                }
                else if (nomeDpto.Contains("- BA") || nomeDpto.Contains("/BA") || nomeDpto.Contains("BAHIA") || nomeDpto.Contains("SALVADOR") || estado.Contains("BA"))
                {
                    cidadeEstado = "Salvador/BA/988";
                }
                else if (nomeDpto.Contains("- CE") || nomeDpto.Contains("/CE") || nomeDpto.Contains("CEARÁ") || nomeDpto.Contains("FORTALEZA") || estado.Contains("CE"))
                {
                    cidadeEstado = "Fortaleza/CE/1347";
                }
                else if (nomeDpto.Contains("- DF") || nomeDpto.Contains("/DF") || nomeDpto.Contains("DISTRITO FEDERAL") || nomeDpto.Contains("BRASÍLIA") || nomeDpto.Contains("BRASILIA") || estado.Contains("DF"))
                {
                    cidadeEstado = "Brasília/DF/1778";
                }
                else if (nomeDpto.Contains("- ES") || nomeDpto.Contains("/ES") || nomeDpto.Contains("ESPÍRITO SANTO") || nomeDpto.Contains("VITÓRIA") || nomeDpto.Contains("VITORIA") || estado.Contains("ES"))
                {
                    cidadeEstado = "Vitória/ES/2048";
                }
                else if (nomeDpto.Contains("- GO") || nomeDpto.Contains("/GO") || nomeDpto.Contains("GOIÁS") || nomeDpto.Contains("GOIÂNIA") || nomeDpto.Contains("GOIAS") || nomeDpto.Contains("GOIANIA") || estado.Contains("GO"))
                {
                    cidadeEstado = "Goiânia/GO/2174";
                }
                else if (nomeDpto.Contains("- MA") || nomeDpto.Contains("/MA") || nomeDpto.Contains("MARANHÃO") || nomeDpto.Contains("SÃO LUÍS") || nomeDpto.Contains("SAO LUIS") || estado.Contains("MA"))
                {
                    cidadeEstado = "São Luís/MA/2587";
                }
                else if (nomeDpto.Contains("- MG") || nomeDpto.Contains("/MG") || nomeDpto.Contains("MINAS GERAIS") || nomeDpto.Contains("BELO HORIZONTE") || nomeDpto.Contains("UFMG") || estado.Contains("MG"))
                {
                    cidadeEstado = "Belo Horizonte/MG/2754";
                }
                else if (nomeDpto.Contains("- MS") || nomeDpto.Contains("/MS") || nomeDpto.Contains("MATO GROSSO DO SUL") || nomeDpto.Contains("CAMPO GRANDE") || estado.Contains("MS"))
                {
                    cidadeEstado = "Campo Grande/MS/4141";
                }
                else if (nomeDpto.Contains("- MT") || nomeDpto.Contains("/MT") || nomeDpto.Contains("MATO GROSSO") || nomeDpto.Contains("CUIABÁ") || nomeDpto.Contains("CUIABA") || estado.Contains("MT"))
                {
                    cidadeEstado = "Cuiabá/MT/4347";
                }
                else if (nomeDpto.Contains("- PA") || nomeDpto.Contains("/PA") || nomeDpto.Contains("PARÁ") || nomeDpto.Contains("BELÉM") || nomeDpto.Contains("BELEM") || estado.Contains("PA"))
                {
                    cidadeEstado = "Belém/PA/4565";
                }
                else if (nomeDpto.Contains("- PB") || nomeDpto.Contains("/PB") || nomeDpto.Contains("PARAÍBA") || nomeDpto.Contains("JOÃO PESSOA") || nomeDpto.Contains("JOAO PESSOA") || estado.Contains("PB"))
                {
                    cidadeEstado = "João Pessoa/PB/4964";
                }
                else if (nomeDpto.Contains("- PE") || nomeDpto.Contains("/PE") || nomeDpto.Contains("PERNAMBUCO") || nomeDpto.Contains("RECIFE") || estado.Contains("PE"))
                {
                    cidadeEstado = "Recife/PE/5406";
                }
                else if (nomeDpto.Contains("- PI") || nomeDpto.Contains("/PI") || nomeDpto.Contains("PIAUÍ") || nomeDpto.Contains("TERESINA") || estado.Contains("PI"))
                {
                    cidadeEstado = "Teresina/PI/5721";
                }
                else if (nomeDpto.Contains("- PR") || nomeDpto.Contains("/PR") || nomeDpto.Contains("PARANÁ") || nomeDpto.Contains("CURITIBA") || estado.Contains("PR"))
                {
                    cidadeEstado = "Curitiba/PR/6015";
                }
                else if (nomeDpto.Contains("- RJ") || nomeDpto.Contains("/RJ") || nomeDpto.Contains("RJ") || nomeDpto.Contains("RIO DE JANEIRO") || estado.Contains("RJ"))
                {
                    cidadeEstado = "Rio de Janeiro/RJ";
                }
                else if (nomeDpto.Contains("- RN") || nomeDpto.Contains("/RN") || nomeDpto.Contains("RIO GRANDE DO NORTE") || nomeDpto.Contains("NATAL") || estado.Contains("RN"))
                {
                    cidadeEstado = "Natal/RN/7221";
                }
                else if (nomeDpto.Contains("- RO") || nomeDpto.Contains("/RO") || nomeDpto.Contains("RONDÔNIA") || nomeDpto.Contains("PORTO VELHO") || estado.Contains("RO"))
                {
                    cidadeEstado = "Porto Velho/RO/7352";
                }
                else if (nomeDpto.Contains("- RR") || nomeDpto.Contains("/RR") || nomeDpto.Contains("RORAIMA") || nomeDpto.Contains("BOA VISTA") || estado.Contains("RR"))
                {
                    cidadeEstado = "Boa Vista/RR/7375";
                }
                else if (nomeDpto.Contains("- RS") || nomeDpto.Contains("/RS") || nomeDpto.Contains("RIO GRANDE DO SUL") || nomeDpto.Contains("PORTO ALEGRE") || estado.Contains("RS"))
                {
                    cidadeEstado = "Porto Alegre/RS/7994";
                }
                else if (nomeDpto.Contains("- SC") || nomeDpto.Contains("/SC") || nomeDpto.Contains("SANTA CATARINA") || nomeDpto.Contains("FLORIANÓPOLIS") || nomeDpto.Contains("FLORIANOPOLIS") || estado.Contains("SC"))
                {
                    cidadeEstado = "Florianópolis/SC/8452";
                }
                else if (nomeDpto.Contains("- SE") || nomeDpto.Contains("/SE") || nomeDpto.Contains("SERGIPE") || nomeDpto.Contains("ARACAJU") || estado.Contains("SE"))
                {
                    cidadeEstado = "Aracaju/SE/8770";
                }
                else if (nomeDpto.Contains("- SP") || nomeDpto.Contains("/SP") || nomeDpto.Contains("SÃO PAULO") || nomeDpto.Contains("PAULISTA") || nomeDpto.Contains("SAO PAULO") || estado.Contains("SP"))
                {
                    cidadeEstado = "São Paulo/SP/9668";
                }
                else if (nomeDpto.Contains("- TO") || nomeDpto.Contains("/TO") || nomeDpto.Contains("TOCANTINS") || nomeDpto.Contains("PALMAS") || estado.Contains("TO"))
                {
                    cidadeEstado = "Palmas/TO/9899";
                }
                else
                {
                    RService.Log("Exception (FindCity): Não foi possível identificar a localidade do órgão " + nomeDpto + " at {0}", Path.GetTempPath() + "RSERVICE" + ".txt");
                }
            }
            catch (Exception e)
            {
                RService.Log("Exception (FindCity): Não foi possível identificar a localidade do órgão " + nomeDpto + " at {0}", Path.GetTempPath() + "RSERVICE" + ".txt");
                return(null);
            }

            return(cidadeEstado);
        }