/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.rjconsultores.ventaboletos.web.utilerias; import javax.servlet.ServletContext; import javax.sql.DataSource; import org.apache.log4j.Logger; import org.flywaydb.core.Flyway; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.Trigger; import org.quartz.TriggerUtils; import org.quartz.impl.StdSchedulerFactory; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.ApplicationContext; import org.zkoss.util.resource.Labels; import org.zkoss.zk.ui.WebApp; import com.rjconsultores.ventaboletos.FlyWay; import com.rjconsultores.ventaboletos.entidad.Constante; import com.rjconsultores.ventaboletos.service.ConstanteService; import com.rjconsultores.ventaboletos.web.gui.controladores.job.GeneracionConferenciaMovimentoJob; import com.rjconsultores.ventaboletos.web.gui.controladores.job.GeneracionCorridaJob; import com.rjconsultores.ventaboletos.web.gui.controladores.job.GeneracionRetencaoDiariaComissaoJob; import com.rjconsultores.ventaboletos.web.gui.controladores.job.MonitoramentoCCFCRZJob; import com.rjconsultores.ventaboletos.web.utilerias.spring.AppContext; /** * * @author gleimar */ public class MyAppInit implements org.zkoss.zk.ui.util.WebAppInit { private static final String HORA_GENERACION_CORRIDA = "HORA_GENERACION_CORRIDA"; private static final String HORA_EXEC_CONFERENCIA_MOVIMENTO = "HORA_EXEC_CONFERENCIA_MOVIMENTO"; private static final String HORA_EXEC_MONITORAMENTO_REDUCAOZ = "HORA_EXEC_MONITORAMENTO_REDUCAOZ"; private static Logger log = Logger.getLogger(MyAppInit.class); SchedulerFactory schedFact = new StdSchedulerFactory(); Scheduler sched; public Scheduler getSched() { return sched; } public void setSched(Scheduler sched) { this.sched = sched; } public SchedulerFactory getSchedFact() { return schedFact; } public void setSchedFact(SchedulerFactory schedFact) { this.schedFact = schedFact; } @Override public void init(WebApp wapp) throws Exception { Labels.register(new MyLabelLocatorGeneral((ServletContext) wapp.getNativeContext())); Labels.register(new MyLabelLocatorCliente((ServletContext) wapp.getNativeContext())); boolean ipBloqueadoGeracaoServico = ipBloqueadoGeracaoServico(); log.info("ipBloqueadoGeracaoServico=" + ipBloqueadoGeracaoServico); if (!ipBloqueadoGeracaoServico) { log.info("ip liberado"); // Generacion Automatica de Corridas jobGeneracionCorridas(); //Geração automatíca da conferência de mmovimento. jobGeneracionConferenciaMovimento(); //Monitoramento automático de Quebra de sequência na Redução Z. jobMonitoramentoReducaoZ(); //Retencao diara comissao jobGeneracionRetencaoDiariaComissao(); } executeFlyway(); } /** * Executa os sqls novos na base de dados */ private void executeFlyway() { // FlyWay.getInstance().defineDataSource(getDataSoure()); // FlyWay.getInstance().start(); // // log.info("Executando Flyway..."); // // try{ // final Flyway flyway = new Flyway(); // // flyway.setDataSource(getDataSoure()); // flyway.setValidateOnMigrate(false); // flyway.setIgnoreFutureMigrations(true); // flyway.setOutOfOrder(true); // flyway.setBaselineOnMigrate(true); // // flyway.migrate(); // }catch(Throwable t){ // log.error("Erro ao executar o flyway",t); // } // // log.info("Flyway executado."); } private boolean ipBloqueadoGeracaoServico() { Constante constanteServidorException = getConstanteService().buscarPorNomeConstante("SERVIDOR_EXCEPCION_GENERACION_CORRIDA"); String ipConstante = constanteServidorException == null ? "" : constanteServidorException.getValorconstante(); if (ipConstante.equals("")) { return false; } String ipExternalAWS = IPValidatorUtileria.getIpExternalAWS(); if (ipConstante.equals(IPValidatorUtileria.getIpExternalAWS())) { log.info(" IP capturado: " + ipExternalAWS); log.info(" IP: " + ipConstante); return true; } else { return false; } } private Integer[] horaExecucion(String nombConstante) { Constante constante = getConstanteService().buscarPorNomeConstante(nombConstante); Integer[] arrayHoraMinuto = new Integer[2]; arrayHoraMinuto[0] = 1; arrayHoraMinuto[1] = 0; if ((constante == null) || (constante.getValorconstante() == null)) { return null; } int hora = 1; int minuto = 0; try { String[] vlrContante = constante.getValorconstante().split(":"); hora = Integer.parseInt(vlrContante[0]); minuto = Integer.parseInt(vlrContante[1]); if (hora < 0 || hora > 23) { hora = 1; } if (minuto < 0 || minuto > 59) { minuto = 0; } arrayHoraMinuto[0] = hora; arrayHoraMinuto[1] = minuto; } catch (Exception e) { log.error("Param hora geracion corrida invalido : " + constante.getValorconstante()); arrayHoraMinuto[0] = 1; arrayHoraMinuto[1] = 0; } return arrayHoraMinuto; } private void jobGeneracionCorridas() { try { sched = schedFact.getScheduler(); JobDetail jobDetail = new JobDetail("GeneracionCorridas", null, GeneracionCorridaJob.class); Integer[] hora = horaExecucion(HORA_GENERACION_CORRIDA); if (hora == null) { log.info("constante HORA_GENERACION_CORRIDA não habilitada."); return; } log.info("Horario de geracao de corrida : " + hora[0] + ":" + hora[1]); Trigger trigger = TriggerUtils.makeDailyTrigger("generacionCorridasTrigger", hora[0], hora[1]); // TESTE TRIGGER // Trigger trigger = TriggerUtils.makeImmediateTrigger("generacionCorridasTrigger", 1, 1000); trigger.setName("generacionCorridasTrigger"); JobDetail job = sched.getJobDetail(jobDetail.getName(), jobDetail.getGroup()); log.info("Job=" + jobDetail.getName() + "." + jobDetail.getGroup()); if (job != null) { log.info("Job ya existia"); boolean deleted = sched.deleteJob(job.getName(), Scheduler.DEFAULT_GROUP); log.info("Deleted=" + deleted); } sched.scheduleJob(jobDetail, trigger); sched.start(); } catch (SchedulerException ex) { log.error(ex); } } /** * Cria job do Quartz para Conferência de Movimento Automática do dia anterior. */ private void jobGeneracionConferenciaMovimento() { try { Integer[] hora = horaExecucion(HORA_EXEC_CONFERENCIA_MOVIMENTO); if(hora ==null){ log.info("Não existe hora cadastrada para o job GeneracionConferenciaMovimentoJob. Verificar a constante HORA_EXEC_CONFERENCIA_MOVIMENTO"); return; } log.info("Início cadastro do job GeneracionConferenciaMovimentoJob"); sched = schedFact.getScheduler(); JobDetail jobDetail = new JobDetail("GeneracionConferenciaMovimentoJob", null, GeneracionConferenciaMovimentoJob.class); Trigger trigger = TriggerUtils.makeDailyTrigger("generacionConferenciaMovimentoTrigger", hora[0], hora[1]); log.info("GeneracionConferenciaMovimentoJob hora execucão: " + hora[0] + ":" + hora[1] ); // TESTE TRIGGER //Trigger trigger = TriggerUtils.makeImmediateTrigger("generacionConferenciaMovimentoTrigger", 1, 1000); trigger.setName("generacionConferenciaMovimentoTrigger"); JobDetail job = sched.getJobDetail(jobDetail.getName(), jobDetail.getGroup()); log.info("Job=" + jobDetail.getName() + "." + jobDetail.getGroup()); if (job != null) { log.info("Job já existe"); boolean deleted = sched.deleteJob(job.getName(), Scheduler.DEFAULT_GROUP); log.info("Deleted=" + deleted); } sched.scheduleJob(jobDetail, trigger); sched.start(); log.info("Fim cadastro do job GeneracionConferenciaMovimentoJob"); } catch (SchedulerException ex) { log.error(ex); } } /** * Cria job do Quartz para Conferência de Movimento Automática do dia anterior. */ private void jobMonitoramentoReducaoZ() { try { Integer[] hora = horaExecucion(HORA_EXEC_MONITORAMENTO_REDUCAOZ); if(hora ==null){ log.info("Não existe hora cadastrada para o job MonitoramentoCCFCRZJob. Verificar a constante HORA_EXEC_MONITORAMENTO_REDUCAOZ"); return; } log.info("Início cadastro do job MonitoramentoCCFCRZJob"); sched = schedFact.getScheduler(); JobDetail jobDetail = new JobDetail("MonitoramentoCCFCRZJob", null, MonitoramentoCCFCRZJob.class); Trigger trigger = TriggerUtils.makeDailyTrigger("monitoramentoCCFCRZJobTrigger", hora[0], hora[1]); log.info("MonitoramentoCCFCRZJob hora execucão: " + hora[0] + ":" + hora[1] ); trigger.setName("monitoramentoCCFCRZJobTrigger"); JobDetail job = sched.getJobDetail(jobDetail.getName(), jobDetail.getGroup()); log.info("Job=" + jobDetail.getName() + "." + jobDetail.getGroup()); if (job != null) { log.info("Job já existe"); boolean deleted = sched.deleteJob(job.getName(), Scheduler.DEFAULT_GROUP); log.info("Deleted=" + deleted); } sched.scheduleJob(jobDetail, trigger); sched.start(); log.info("Fim cadastro do job MonitoramentoCCFCRZJob"); } catch (SchedulerException ex) { log.error(ex); } } /** * Cria job do Quartz para Retencao Diarria da Comissao, sempre executada para o dia anterior. */ private void jobGeneracionRetencaoDiariaComissao() { try { log.info("Início cadastro do job GeneracionRetencaoDiariaComissaoJob"); sched = schedFact.getScheduler(); //Trigger trigger = TriggerUtils.makeMinutelyTrigger("generacionRetencaoDiariaComissaoTrigger", 5, 5); Trigger trigger = TriggerUtils.makeHourlyTrigger("generacionRetencaoDiariaComissaoTrigger"); JobDetail jobDetail = new JobDetail("GeneracionRetencaoDiariaComissaoJob", null, GeneracionRetencaoDiariaComissaoJob.class); log.info("GeneracionRetencaoDiariaComissaoJob em execucão a cada hora"); trigger.setName("generacionRetencaoDiariaComissaoTrigger"); JobDetail job = sched.getJobDetail(jobDetail.getName(), jobDetail.getGroup()); log.info("Job=" + jobDetail.getName() + "." + jobDetail.getGroup()); if (job != null) { log.info("Job já existe"); boolean deleted = sched.deleteJob(job.getName(), Scheduler.DEFAULT_GROUP); log.info("Deleted=" + deleted); } sched.scheduleJob(jobDetail, trigger); sched.start(); log.info("Fim cadastro do job GeneracionRetencaoDiariaComissaoJob"); } catch (SchedulerException ex) { log.error(ex); } } private DataSource getDataSoure() { ApplicationContext appContext = AppContext.getApplicationContext(); BeanFactory factory = (BeanFactory) appContext; DataSource ds = (DataSource) factory.getBean("dataSource"); return ds; } private ConstanteService getConstanteService() { ApplicationContext appContext = AppContext.getApplicationContext(); BeanFactory factory = (BeanFactory) appContext; ConstanteService cs = (ConstanteService) factory.getBean("constanteService"); return cs; } }