90 lines
3.3 KiB
Plaintext
Executable File
90 lines
3.3 KiB
Plaintext
Executable File
package com.fp.viaticos.mail;
|
|
|
|
import java.util.concurrent.ExecutorService;
|
|
import java.util.concurrent.Executors;
|
|
|
|
import org.hibernate.SQLQuery;
|
|
import org.hibernate.ScrollableResults;
|
|
|
|
import com.fp.common.logger.APPLogger;
|
|
import com.fp.dto.save.SaveRequest;
|
|
import com.fp.persistence.commondb.PersistenceHelper;
|
|
import com.fp.viaticos.mail.thread.MailPorSolicitud;
|
|
|
|
/**
|
|
* Clase que se encarga de almacenar comentarios de la tarea y el estatus actual de la solicitud.
|
|
*
|
|
* @author Jorge Vaca.
|
|
* @version 2.1
|
|
*/
|
|
public class MailMasivo {
|
|
|
|
/**
|
|
* Result que contiene los numeros de solicitud o informes por entregar que ya llegaron a la fecha de vencimeinto y
|
|
* hay que enviar recordatorios.
|
|
*/
|
|
protected ScrollableResults rSet;
|
|
|
|
/**
|
|
* Recorre el resultset que contiene los numeros de operacion a ejecutar el tareas del lote, ejecuta por operacion.
|
|
*
|
|
* @param numerohilos Numero de hilos a levantar en paralelo para la ejecucion del lote.
|
|
* @throws Exception
|
|
*/
|
|
protected void ejecutar(Integer hilos, SaveRequest pSaverequest) throws Exception {
|
|
ExecutorService pool = Executors.newFixedThreadPool(hilos);
|
|
try {
|
|
if (rSet != null) {
|
|
while (rSet.next()) {
|
|
try {
|
|
Object[] obj = rSet.get();
|
|
// Ejecuta tareas por operacion o por criterio unico de ejecucion.
|
|
procesaPorSolicitud(pool, obj, pSaverequest);
|
|
} catch (Exception e) {
|
|
APPLogger.getLogger().error(e, e);
|
|
}
|
|
}
|
|
}
|
|
} finally {
|
|
if (rSet != null) {
|
|
rSet.close();
|
|
}
|
|
}
|
|
// control de finalizacion de ejecucion del bathc.
|
|
pool.shutdown();
|
|
boolean isfinish = pool.isTerminated();
|
|
while (!isfinish) {
|
|
isfinish = pool.isTerminated();
|
|
Thread.sleep(600);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Levanta un hilo por solictud, de la clase que se encarga de enviar notificaciones.
|
|
*
|
|
* @param pool Objeto que contiene el Ejecutor de hilos.
|
|
* @param obj Objeto que contiene la solicitud tipo y numero de dias desde el cual no tomo una accion en el flujo.
|
|
* @param pSaverequest
|
|
* @throws Exception
|
|
*/
|
|
private void procesaPorSolicitud(ExecutorService pool, Object[] obj, SaveRequest pSaverequest) throws Exception {
|
|
MailPorSolicitud thread = new MailPorSolicitud(pSaverequest, (String) obj[0], (String) obj[1], Integer.valueOf(obj[2].toString()));
|
|
pool.execute(thread);
|
|
}
|
|
|
|
/** Sentencia que entrega las solicitudes a enviar mail. */
|
|
private static final String JPQL = " select cod_solicitud, cod_tipo, ((trunc(sysdate) - fec_fin_viatico)) + 1 dias "
|
|
+ "from via_solicitud where (trunc(sysdate) - fec_fin_viatico) + 1 between 1 and 4 and cod_estado in ('SAP','IPI') ant tipo = 'SOL' ";
|
|
|
|
/**
|
|
* Metodo que obtiene las solicitudes a enviar mail masivos.
|
|
*
|
|
* @throws Exception
|
|
*/
|
|
protected void fillRset() throws Exception {
|
|
SQLQuery qry = PersistenceHelper.getSession().createSQLQuery(MailMasivo.JPQL);
|
|
rSet = qry.scroll();
|
|
}
|
|
|
|
}
|