maia/.svn/pristine/b0/b087c7ef2f1cd6be7554f268fe6...

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();
}
}