package br.com.centralit.citcorpore.batch; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Locale; import javax.mail.Flags; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMultipart; import microsoft.exchange.webservices.data.ConflictResolutionMode; import microsoft.exchange.webservices.data.EWSHttpException; import microsoft.exchange.webservices.data.EmailMessage; import microsoft.exchange.webservices.data.Item; import microsoft.exchange.webservices.data.ItemId; import microsoft.exchange.webservices.data.ServiceLocalException; import net.htmlparser.jericho.Source; import br.com.centralit.citcorpore.bean.OcorrenciaSolicitacaoDTO; import br.com.centralit.citcorpore.bean.SolicitacaoServicoDTO; import br.com.centralit.citcorpore.integracao.ClienteEmailCentralServicoDao; import br.com.centralit.citcorpore.negocio.OcorrenciaSolicitacaoService; import br.com.centralit.citcorpore.negocio.SolicitacaoServicoService; import br.com.centralit.citcorpore.util.Enumerados; import br.com.centralit.citcorpore.util.ParametroUtil; import br.com.citframework.excecao.LogicException; import br.com.citframework.service.ServiceLocator; import br.com.citframework.util.UtilDatas; /** * * @author geber.costa * 1 )Essa Thread verifica os emails recebidos, se existir um ou varios emails novos a thread os grava em uma ocorrencia, * e essa ocorrencia � gravada em uma solicitaca. * * 2) A solicita��o � alterada � a que o n�mero estiver no titulo do email. * * 3) Para a Thread funcionar, � necess�rio ter no m�nimo a vers�o 7 do java, e o parametro de HABILITA_ROTINA_DE_LEITURA_EMAIL estar setada como 'S', * por padr�o o parametro vem setado como 'N' * * 4) * */ public class ThreadVerificaEmailRecebido extends Thread{ private boolean threadAtiva = true; @Override public void run() { while(threadAtiva){ try { String parametro = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.HABILITA_ROTINA_DE_LEITURA_EMAIL,""); String versaoJava = System.getProperty("java.version"); //"1.7.0_40" if(parametro.equalsIgnoreCase("")||parametro.equalsIgnoreCase("N")){ this.threadAtiva = false; } else if(parametro.equalsIgnoreCase("S")){ if(versaoJava.charAt(2)>=7 || versaoJava.charAt(0)>1){ sleep(1000); System.out.println("###########################################"); System.out.println("VERS�O DO JAVA : "+versaoJava); System.out.println("###########################################"); //0 - Verificar se � pop ou imap //1 - Ler emails novos //2 - Verificar o titulo (cada titulo com um numero, corresponde a solicitacao) //3 - Pegar o numero da solicitacao(esta no titulo) , criar uma ocorrencia e gravar ela nessa solicitacao. (Tentar ajax para ficar mais dinamico). verificarEmail(); }else{ System.out.println("###########################################"); System.out.println("� necess�rio possuir pelo menos a vers�o 7 do java para funcionar o recebimento de emails pelo sistema"); System.out.println("###########################################"); this.threadAtiva = false; } } } catch (InterruptedException e1) { System.out.println("###########################################"); System.out.println("Erro ao iniciar a Thread"); System.out.println("###########################################"); e1.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } catch (LogicException e) { e.printStackTrace(); } catch (ServiceLocalException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } } public static void verificarEmail() throws Exception{ String protocolo = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.SMTP_LEITURA_Provider,""); if(protocolo.equalsIgnoreCase("pop")||protocolo.equalsIgnoreCase("pop3")){ receberEmailPop(); }else if(protocolo.equalsIgnoreCase("imap")){ receberEmailImap(); } } public static void receberEmailPop(){ try{ System.out.println("LENDO EMAILS POP..."); //Verifica qual tipo de provider, se � imap , ou pop/pop3 ClienteEmailCentralServicoDao clienteEmail = new ClienteEmailCentralServicoDao(); Message mensagens[] = clienteEmail.getEmail2s(); MimeMultipart mmp = new MimeMultipart(); MimeBodyPart mbp1 = new MimeBodyPart(); MimeBodyPart mbp2 = new MimeBodyPart(); int contador = 0; for (Message message : mensagens) { if(!message.isSet(Flags.Flag.SEEN)){ String solicitacao = message.getSubject(); boolean encontrar = solicitacao.matches(".*Solicita��o.*"); /** * Verifica se no t�tulo do email existe a palavra Solicita��o e o n�mero, caso exista, ele vai vincular o email a solicitacao do titulo, */ if(encontrar){ encontrar = solicitacao.matches(".*[0-9].*"); /** * Verifica se no t�tulo do email possui valor num�rico, se possuir, prossegue, sen�o, encerra */ if(encontrar){ /** * Retira tudo o que n�o for num�rico, pega os numeros e usa como id da solicitacao de servico */ solicitacao = solicitacao.replaceAll("[^0-9]", ""); mmp = (MimeMultipart) message.getContent(); mbp1 = (MimeBodyPart) mmp.getBodyPart(0); mbp2 = (MimeBodyPart) mmp.getBodyPart(1); System.out.println("-----------------------------------------------------------------------"); System.out.println("CONTE�DO DO EMAIL :"+ mbp1.getContent()); System.out.println("TITULO DO EMAIL : "+message.getSubject()); System.out.println("-----------------------------------------------------------------------"); System.out.println("Contador : "+contador); contador++; String minutoFormatado = ""; OcorrenciaSolicitacaoDTO ocorrenciaDto = new OcorrenciaSolicitacaoDTO(); OcorrenciaSolicitacaoService ocorrenciaService = (OcorrenciaSolicitacaoService) ServiceLocator.getInstance().getService(OcorrenciaSolicitacaoService.class, null); ocorrenciaDto.setIdSolicitacaoServico(Integer.parseInt(solicitacao)); Calendar calendar = Calendar.getInstance(); int hora = calendar.get(Calendar.HOUR_OF_DAY); int minuto = calendar.get(Calendar.MINUTE); ocorrenciaDto.setDataregistro( UtilDatas.getSqlDate(new java.util.Date())); if(minuto<10){ minutoFormatado = "0"+String.valueOf(minuto); ocorrenciaDto.setHoraregistro(hora+":"+minuto); }else{ ocorrenciaDto.setHoraregistro(hora+":"+minuto); } ocorrenciaDto.setRegistradopor("Email - Automatico"); ocorrenciaDto.setDescricao(message.getSubject().toString()); ocorrenciaDto.setOcorrencia(mbp1.getContent().toString()); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss"); java.sql.Date dataFormatada = UtilDatas.getSqlDate(message.getReceivedDate()); ocorrenciaDto.setDataregistro( UtilDatas.getSqlDate(new java.util.Date())); String data = UtilDatas.formatHoraFormatadaHHMMSSStr(message.getReceivedDate()); ocorrenciaService.create(ocorrenciaDto); } }}} System.out.println("THREAD FINALIZADA!!!---------------------"); }catch(Exception e){ System.out.println("###########################################"); System.out.println("Erro ao executar a Thread"); System.out.println("###########################################"); e.printStackTrace(); } } public static void receberEmailImap() throws Exception{ ArrayList<Item> results = null; EmailMessage email = null; ClienteEmailCentralServicoDao clienteEmailCentralServicoDao = new ClienteEmailCentralServicoDao(); results = clienteEmailCentralServicoDao.getMails(); System.out.println("IMAP... LENDO EMAILS"); try{ for(Item item :results){ ItemId itemId = item.getId(); email = EmailMessage.bind(item.getService(), itemId); String texto = email.getBody().toString(); Source source = new Source(email.getBody().toString()); String textoFormatado = source.getTextExtractor().toString(); System.out.println("Mensagem : \n"+texto+" \nFIM da Mensagem ------------"); DateFormat dateFormat = DateFormat.getTimeInstance(); Locale br = new Locale("pt","BR"); SimpleDateFormat formatarHora = new SimpleDateFormat("hh:mm",br); String solicitacao = email.getSubject(); String corpoEmail = email.getBody().toString(); // boolean encontrar = solicitacao.matches(".*Solicita��o.*"); if(encontrar){ encontrar = solicitacao.matches(".*[0-9].*"); if(encontrar){ solicitacao = solicitacao.replaceAll("[^0-9]", ""); SolicitacaoServicoService solicitacaoServicoService = (SolicitacaoServicoService) ServiceLocator.getInstance().getService(SolicitacaoServicoService.class, null); SolicitacaoServicoDTO solicitacaoDto = new SolicitacaoServicoDTO(); solicitacaoDto.setIdSolicitacaoServico(Integer.parseInt(solicitacao)); boolean existeSolicitacao =solicitacaoServicoService.existeSolicitacaoServico(solicitacaoDto); if(existeSolicitacao){ OcorrenciaSolicitacaoDTO ocorrenciaDto = new OcorrenciaSolicitacaoDTO(); OcorrenciaSolicitacaoService ocorrenciaService = (OcorrenciaSolicitacaoService) ServiceLocator.getInstance().getService(OcorrenciaSolicitacaoService.class, null); ocorrenciaDto.setIdSolicitacaoServico(Integer.parseInt(solicitacao)); Calendar calendar = Calendar.getInstance(); int hora = calendar.get(Calendar.HOUR_OF_DAY); int minuto = calendar.get(Calendar.MINUTE); ocorrenciaDto.setDataregistro( UtilDatas.getSqlDate(new java.util.Date())); ocorrenciaDto.setHoraregistro(hora+":"+minuto); ocorrenciaDto.setRegistradopor("Email - Automatico"); ocorrenciaDto.setDescricao(email.getSubject()); ocorrenciaDto.setOcorrencia(texto); ocorrenciaService.create(ocorrenciaDto); } } } email.setIsRead(true); email.update(ConflictResolutionMode.AlwaysOverwrite); } } catch(EWSHttpException ex){ System.out.println("Teste"); } System.out.println("LEITURA CONCLUIDA"); try { } catch (Exception e) { e.printStackTrace(); } } }