341 lines
11 KiB
Java
341 lines
11 KiB
Java
/*
|
||
* 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.commons.lang.StringUtils;
|
||
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.utilerias.Application;
|
||
import com.rjconsultores.ventaboletos.utilerias.ApplicationProperties;
|
||
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<72><61>o automat<61>ca da confer<65>ncia de mmovimento.
|
||
jobGeneracionConferenciaMovimento();
|
||
//Monitoramento autom<6F>tico de Quebra de sequ<71>ncia na Redu<64><75>o Z.
|
||
jobMonitoramentoReducaoZ();
|
||
|
||
//Retencao diara comissao
|
||
jobGeneracionRetencaoDiariaComissao();
|
||
}
|
||
|
||
executeFlyway();
|
||
customToDatabase();
|
||
imageToDatabase();
|
||
}
|
||
|
||
|
||
/**
|
||
* 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 void customToDatabase() {
|
||
|
||
log.info("Executando customToDatabase...");
|
||
ApplicationProperties.getInstance().readConfigurationToDatabase();
|
||
}
|
||
|
||
private void imageToDatabase() {
|
||
|
||
log.info("Executando loadImageToDatabase...");
|
||
ApplicationProperties.getInstance().loadImageToDatabase("empresa.png", false);
|
||
ApplicationProperties.getInstance().loadImageToDatabase("empresa_generica.png", true);
|
||
ApplicationProperties.getInstance().singletonImage();
|
||
}
|
||
|
||
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<65>ncia de Movimento Autom<6F>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<49>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<75>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<65>ncia de Movimento Autom<6F>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<49>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<75>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<49>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<75>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;
|
||
}
|
||
}
|