162 lines
6.7 KiB
Plaintext
Executable File
162 lines
6.7 KiB
Plaintext
Executable File
package com.fp.general.scheduler;
|
|
|
|
import org.quartz.Job;
|
|
import org.quartz.JobDataMap;
|
|
import org.quartz.JobExecutionContext;
|
|
import org.quartz.JobExecutionException;
|
|
|
|
import com.fp.common.exception.CommonException;
|
|
import com.fp.common.exception.ExceptionHandler;
|
|
import com.fp.common.logger.APPLogger;
|
|
import com.fp.dto.rules.ScheduleRule;
|
|
import com.fp.dto.save.SaveRequest;
|
|
import com.fp.persistence.commondb.NestedSave;
|
|
import com.fp.persistence.commondb.PersistenceHelper;
|
|
import com.fp.persistence.commondb.PersistenceManager;
|
|
import com.fp.persistence.commondb.data.SessionData;
|
|
import com.fp.persistence.commondb.data.ThreadFacade;
|
|
import com.fp.persistence.commondb.helper.FormatDates;
|
|
import com.fp.persistence.pgeneral.date.TgeneAccountingDateBranch;
|
|
import com.fp.persistence.pgeneral.schedule.TgeneScheduleLog;
|
|
import com.fp.persistence.pgeneral.schedule.TgeneScheduleLogKey;
|
|
import com.fp.persistence.pgeneral.schedule.TgeneScheduleProcess;
|
|
|
|
/**
|
|
* Clase que se encarga de ejecutar tareas calendarizadas, que se parametrizan en TgeneSchdeleEven.
|
|
*
|
|
* @author Jorge Vaca
|
|
* @version 2.1
|
|
*/
|
|
public class SchedulerJob implements Job {
|
|
|
|
/*
|
|
* (non-Javadoc)
|
|
*
|
|
* @see org.quartz.Job#execute(org.quartz.JobExecutionContext)
|
|
*/
|
|
@Override
|
|
public void execute(JobExecutionContext context) throws JobExecutionException {
|
|
TgeneScheduleLog log = null;
|
|
Integer cia = null;
|
|
try {
|
|
JobDataMap jdm = context.getJobDetail().getJobDataMap();
|
|
String event = jdm.getString("evento");
|
|
APPLogger.getLogger().error("INICIA EJECUCION DE TAREA " + event);
|
|
// compania para obtener el entity manager
|
|
SessionData s = new SessionData();
|
|
cia = jdm.getInt("cia");
|
|
s.setCompany(cia);
|
|
|
|
ThreadFacade.setSaveRequest(s);
|
|
PersistenceHelper.setEntityManager(PersistenceManager.getInstance().createEntityManagerLocal());
|
|
PersistenceHelper.beginNewTransaction();
|
|
// ejecuta la tarea calendarizada.
|
|
TgeneScheduleProcess process = TgeneScheduleProcess.find(PersistenceHelper.getEntityManager(), event);
|
|
SaveRequest saveRequest = this.fillSaveRequest(jdm, process);
|
|
// Fija resultado de ejecucion de la tarea
|
|
log = this.createTgeneScheduleLog(event, saveRequest);
|
|
this.processByRule(process, jdm, saveRequest);
|
|
PersistenceHelper.save(log);
|
|
PersistenceHelper.commitNewTransaction();
|
|
} catch (Exception e) {
|
|
PersistenceHelper.rollbackNewTransaction();
|
|
this.saveError(cia, e, log);
|
|
} finally {
|
|
PersistenceHelper.closeSession();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Metodo que se encarga de grabar el error que se genera en la ejecucion de la tarea calendarizada.
|
|
*
|
|
* @param exception Excepcion que contiene el error presentado.
|
|
* @throws Exception
|
|
*/
|
|
private void saveError(Integer cia, Exception exeption, TgeneScheduleLog log) {
|
|
try {
|
|
ExceptionHandler eh = new ExceptionHandler(exeption, "es");
|
|
if (eh.getCode().length() > 20) {
|
|
log.setResultcode(eh.getCode().substring(0, 19));
|
|
} else {
|
|
log.setResultcode(eh.getCode());
|
|
}
|
|
if (eh.getUserMessage().length() > 399) {
|
|
log.setResultmessage(eh.getUserMessage().substring(0, 399));
|
|
} else {
|
|
log.setResultmessage(eh.getUserMessage());
|
|
}
|
|
new NestedSave(cia, log);
|
|
} catch (Exception e) {
|
|
APPLogger.getLogger().error(e, e);
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Crea una instancia de TgeneScheduleLog, que almacena el resultado de la tarea calendarizada.
|
|
*
|
|
* @param pEvent codigo de evento de la tarea calendarizada.
|
|
* @param saveRequest Objeto que contiene el request de entrada de ejecucion de la tarea.
|
|
* @return TgeneScheduleLog
|
|
* @throws Exception
|
|
*/
|
|
private TgeneScheduleLog createTgeneScheduleLog(String pEvent, SaveRequest saveRequest) throws Exception {
|
|
TgeneScheduleLogKey key = new TgeneScheduleLogKey();
|
|
key.setEventcode(pEvent);
|
|
key.setRealdate(FormatDates.getInstance().getDataBaseTimestamp());
|
|
TgeneScheduleLog log = new TgeneScheduleLog(key);
|
|
TgeneAccountingDateBranch date = com.fp.persistence.commondb.db.DataHelper.getInstance().getTgeneAccountingDateBranch(
|
|
saveRequest.getCompany(), 0);
|
|
log.setProcessdate(date.getAccountingdate());
|
|
log.setUsercode(saveRequest.getUser());
|
|
log.setResultcode("0");
|
|
log.setResultmessage("TRANSACCION REALIZADA CORRECTAMENTE");
|
|
return log;
|
|
}
|
|
|
|
/**
|
|
* Metodo encargado de ejecutar reglas de procesos calendarizados.
|
|
*
|
|
* @param pProcess Objeto que contiene la regla a ejecutar.
|
|
* @throws Exception
|
|
*/
|
|
private void processByRule(TgeneScheduleProcess pProcess, JobDataMap jdm, SaveRequest saveRequest) throws Exception {
|
|
ScheduleRule rule = null;
|
|
try {
|
|
rule = (ScheduleRule) Class.forName(pProcess.getProcesscode()).newInstance();
|
|
} catch (ClassNotFoundException e) {
|
|
throw new CommonException("COMMON-0006", "REGLA {0} A EJECUTAR NO DEFINIDO MODULE: {1} TRANS: {2} VERSION {3}",
|
|
pProcess.getProcesscode(), e, saveRequest.getTransactionModule(), saveRequest.getTransactionCode(),
|
|
saveRequest.getTransactionVersion());
|
|
} catch (ClassCastException e) {
|
|
throw new CommonException("COMMON-0007", "REGLA {0} A EJECUTAR MODULE: {1} TRANS: {2} VERSION {3} NO IMPLEMENTA {4}", e,
|
|
pProcess.getProcesscode(), saveRequest.getTransactionModule(), saveRequest.getTransactionCode(),
|
|
saveRequest.getTransactionVersion(), ScheduleRule.class.getName());
|
|
}
|
|
rule.execute(saveRequest);
|
|
}
|
|
|
|
/**
|
|
* Arma y entrega un objeto SaveRequest, utilizado en la ejecucion de transacciones.
|
|
*
|
|
* @param jdm Map con parametros necesarios para ejecutar una tarea calendarizada.
|
|
* @param process
|
|
* @return SaveRequest
|
|
* @throws Exception
|
|
*/
|
|
private SaveRequest fillSaveRequest(JobDataMap jdm, TgeneScheduleProcess process) throws Exception {
|
|
SaveRequest sq = new SaveRequest();
|
|
sq.setCompany(jdm.getInt("cia"));
|
|
sq.setBranchCode(jdm.getInt("suc"));
|
|
sq.setOfficeCode(jdm.getInt("ofi"));
|
|
sq.setTerminalCode(jdm.getString("ter"));
|
|
sq.setChannelCode(jdm.getString("can"));
|
|
sq.setUser(jdm.getString("usu"));
|
|
sq.setTransactionModule(process.getTransactionmodule());
|
|
sq.setTransactionCode(process.getTransactioncode());
|
|
sq.setTransactionVersion(process.getTransactionversion());
|
|
return sq;
|
|
}
|
|
|
|
}
|