git-svn-id: https://svn.coded.pt/svn/SIPRP@726 bb69d46d-e84e-40c8-a05a-06db0d633741

0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z
Tiago Simão 18 years ago
parent d8f56fbb77
commit 7198774813

@ -29,6 +29,7 @@ import siprp.data.MarcacaoEstabelecimentoData;
import siprp.data.MarcacaoSaveAndDeleteHandler;
import siprp.data.MarcacaoTrabalhadorData;
import siprp.data.TrabalhadorData;
import siprp.lembretes.LembretesDemon;
import siprp.update.UpdateWindow;
import com.evolute.utils.EVUtilsImageLib;
@ -209,6 +210,7 @@ public class Main implements com.evolute.utils.ui.window.Connector
// }
// catch( Exception ex ){}
// new Exception().printStackTrace();
LembretesDemon.go();
return true;
}

@ -18,6 +18,7 @@ import siprp.database.cayenne.objects.Trabalhadores;
import siprp.database.cayenne.objects.TrabalhadoresConsultasDatas;
import siprp.database.cayenne.objects.TrabalhadoresEcd;
import siprp.database.cayenne.objects.TrabalhadoresEcdsDatas;
import siprp.database.cayenne.objects.TrabalhadoresFichasAptidao;
import siprp.database.cayenne.objects.TrabalhadoresProcesso;
import siprp.medicina.MedicinaConstants;
import siprp.medicina.processo.ProcessoConstants;
@ -41,7 +42,6 @@ public class MedicinaDAO extends MainDAO implements MedicinaConstants
{
return (TrabalhadoresEcdsDatas) DataObjectUtils.objectForPK( context, TrabalhadoresEcdsDatas.class, id );
}
public List<Empresas> getAllEmpresas()
{

@ -9,8 +9,21 @@
package siprp.lembretes;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import siprp.database.cayenne.objects.Empresas;
import siprp.database.cayenne.objects.Estabelecimentos;
import siprp.database.cayenne.objects.Trabalhadores;
import siprp.database.cayenne.providers.MedicinaDAO;
import siprp.medicina.MedicinaConstants;
import com.evolute.utils.Singleton;
import com.evolute.utils.arrays.Virtual2DArray;
import com.evolute.utils.db.DBException;
import com.evolute.utils.db.DBManager;
import com.evolute.utils.db.Executer;
import com.evolute.utils.sql.Assignment;
@ -18,8 +31,7 @@ import com.evolute.utils.sql.Delete;
import com.evolute.utils.sql.Field;
import com.evolute.utils.sql.Insert;
import com.evolute.utils.sql.Select;
import java.util.Date;
import java.util.HashMap;
import com.evolute.utils.sql.Select2;
/**
*
@ -36,6 +48,8 @@ public class LembretesDataProvider
new HashMap<Integer,TipoLembrete>();
private TipoLembrete tiposLembrete[];
private MedicinaDAO medicinaDAO = null ;
private Executer EXECUTER;
/** Creates a new instance of LembretesDataProvider */
@ -44,6 +58,7 @@ public class LembretesDataProvider
{
DBManager dbm = ( DBManager ) Singleton.getInstance( Singleton.DEFAULT_DBMANAGER );
EXECUTER = dbm.getSharedExecuter( this );
medicinaDAO = new MedicinaDAO();
}
public static LembretesDataProvider getProvider()
@ -164,18 +179,31 @@ public class LembretesDataProvider
{
try
{
Insert insert =
new Insert( "lembretes",
new Assignment[]{
new Assignment( new Field( "tipo_id" ), tipoID ),
new Assignment( new Field( "data" ), date ),
new Assignment( new Field( "descricao" ), descricao ),
new Assignment( new Field( "texto" ), texto ),
new Assignment( new Field( "empresa_id" ), empresaID ),
new Assignment( new Field( "estabelecimento_id" ), estabelecimentoID ),
new Assignment( new Field( "trabalhador_id" ), trabalhadorID ),
new Assignment( new Field( isConsulta ? "trabalhadores_consultas_datas_id" : "trabalhadores_ecds_datas_id" ), marcacaoID ) } );
EXECUTER.executeQuery( insert );
Select2 query = new Select2(
new String[]{ "lembretes" },
null,
null,
new String[]{ "id" },
new Field( "tipo_id" ).isEqual( tipoID ).
and( new Field( "data" ).isEqual( date ).
and( new Field( "trabalhador_id" ).isEqual( trabalhadorID ) ) ),
null, null, null, null);
Virtual2DArray array = EXECUTER.executeQuery( query );
if( array.columnLength() == 0 )
{
Insert insert =
new Insert( "lembretes",
new Assignment[]{
new Assignment( new Field( "tipo_id" ), tipoID ),
new Assignment( new Field( "data" ), date ),
new Assignment( new Field( "descricao" ), descricao ),
new Assignment( new Field( "texto" ), texto ),
new Assignment( new Field( "empresa_id" ), empresaID ),
new Assignment( new Field( "estabelecimento_id" ), estabelecimentoID ),
new Assignment( new Field( "trabalhador_id" ), trabalhadorID ),
new Assignment( new Field( isConsulta ? "trabalhadores_consultas_datas_id" : "trabalhadores_ecds_datas_id" ), marcacaoID ) } );
EXECUTER.executeQuery( insert );
}
}
catch( Exception e )
{
@ -298,4 +326,111 @@ public class LembretesDataProvider
}
}
private Calendar makeDateCalendar()
{
Calendar now = Calendar.getInstance();
Calendar nowDate = Calendar.getInstance();
nowDate.clear();
nowDate.set( Calendar.YEAR, now.get( Calendar.YEAR ) );
nowDate.set( Calendar.MONTH, now.get( Calendar.MONTH ) );
nowDate.set( Calendar.DAY_OF_MONTH, now.get( Calendar.DAY_OF_MONTH ) );
return nowDate;
}
public List<Integer> getFichasExpiradasID()
{
List<Integer> fichasExpiradas = new LinkedList<Integer>();
try
{
Calendar nowDate = makeDateCalendar();
Select2 query = new Select2(
new String[]{ "exames" },
null,
null,
new String[]{ "id" },
new Field( "proximo_exame" ).isEqual( nowDate.getTime() ),
null, null, null, null);
Virtual2DArray array = EXECUTER.executeQuery( query );
for( int i = 0; i < array.columnLength(); fichasExpiradas.add( (Integer) array.get( i, 0 ) ), ++i );
} catch( DBException e )
{
e.printStackTrace();
}
return fichasExpiradas;
}
public List<Integer> getFichasExpiradasSemData()
{
List<Integer> fichasExpiradas = new LinkedList<Integer>();
try
{
Calendar date = makeDateCalendar();
date.add( Calendar.MONTH, -22 );
Select2 query = new Select2(
new String[]{ "exames" },
null,
null,
new String[]{ "id" },
new Field( "proximo_exame" ).isEqual( null ).and( new Field( "data" ).isEqual( date.getTime() ) ),
null, null, null, null);
Virtual2DArray array = EXECUTER.executeQuery( query );
for( int i = 0; i < array.columnLength(); fichasExpiradas.add( (Integer) array.get( i, 0 ) ), ++i );
} catch( DBException e )
{
e.printStackTrace();
}
return fichasExpiradas;
}
public void createLembretesForFichas( List<Integer> fichas )
{
for( Integer fichaID : fichas )
{
Integer tipoID = getTipoLembreteIDByCodigo( LembretesConstants.CODE_MARCACOES );
try
{
Integer trabalhadorID = getTrabalhadorIDForFichaID( fichaID );
Trabalhadores trabalhador = medicinaDAO.getTrabalhadorByID( trabalhadorID );
Estabelecimentos estabelecimento = trabalhador.getToEstabelecimentos();
Empresas empresa = estabelecimento.getToEmpresas();
criarLembreteConsulta( tipoID,
new Date(),
MedicinaConstants.LEMBRETE_RENOVACAO_FICHA_APTIDAO_STRING ,
null,
empresa.getId(),
estabelecimento.getId(),
trabalhador.getId(),
null
);
}
catch(Exception e)
{
System.out.println(e);
}
}
}
private Integer getTrabalhadorIDForFichaID( Integer fichaID )
{
Integer result = null;
try
{
Select2 query = new Select2(
new String[]{ "exames" },
null,
null,
new String[]{ "trabalhador_id" },
new Field( "id" ).isEqual( fichaID ),
null, null, null, null);
Virtual2DArray array = EXECUTER.executeQuery( query );
result = (Integer) array.get( 0, 0 );
} catch( DBException e )
{
e.printStackTrace();
}
return result;
}
}

@ -0,0 +1,109 @@
package siprp.lembretes;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
public class LembretesDemon extends Thread
{
private static final long SLEEP_TIME_MILLIS = 60 * 60 * 1000; // one hour
private static boolean isRunning = false;
private static LembretesDemon instance = null;
private LembretesDataProvider lembretesProvider = null;
private boolean doneForToday = false;
private Calendar lastIteration = Calendar.getInstance();
private LembretesDemon()
{
try
{
lembretesProvider = new LembretesDataProvider();
} catch( Exception e )
{
e.printStackTrace();
}
}
/**
* Instanciates and starts a LembretesDemon
*/
public static void go()
{
getInstance();
startDemon();
}
/**
* Gets LembretesDemon
* @return
*/
public static LembretesDemon getInstance()
{
if( LembretesDemon.instance == null )
{
LembretesDemon.instance = new LembretesDemon();
}
return LembretesDemon.instance;
}
public static void stopDemon()
{
if( LembretesDemon.isRunning )
{
LembretesDemon.isRunning = false;
}
}
public static void startDemon()
{
if( !LembretesDemon.isRunning )
{
LembretesDemon.isRunning = true;
instance.start();
}
}
@Override
public void run()
{
System.out.println( new Date() + ": Starting LembretesDemon" );
while( isRunning )
{
try
{
Calendar now = Calendar.getInstance();
if( !doneForToday || lastIterationWasYesterday( now ) )
{
doStuff();
doneForToday = true;
}
lastIteration = now;
Thread.sleep( SLEEP_TIME_MILLIS );
} catch( InterruptedException e )
{
e.printStackTrace();
}
}
System.out.println( new Date() + ": Stopping LembretesDemon" );
}
private void doStuff()
{
List<Integer> fichasExpiradas = lembretesProvider.getFichasExpiradasID();
fichasExpiradas.addAll( lembretesProvider.getFichasExpiradasSemData() );
lembretesProvider.createLembretesForFichas( fichasExpiradas );
}
private boolean lastIterationWasYesterday( Calendar now )
{
return ( now.get( Calendar.DAY_OF_MONTH ) > lastIteration.get( Calendar.DAY_OF_MONTH ) )
||
( now.get( Calendar.DAY_OF_MONTH ) == 1 && lastIteration.get( Calendar.DAY_OF_MONTH ) != 1 );
}
}

@ -11,6 +11,7 @@ package siprp.medicina;
import com.evolute.utils.Singleton;
import siprp.SingletonConstants;
import static com.evolute.utils.strings.UnicodeLatin1Map.*;
/**
*
@ -78,4 +79,6 @@ public interface MedicinaConstants
public static final String LEMBRETE_DESMARCOU_SIPRP_STRING = "SIPRP Desmarcou";
public static final String LEMBRETE_DESMARCOU_TRABALHADOR_STRING = "Trabalhador Desmarcou";
public static final String LEMBRETE_FALTOU_TRABALHADOR_STRING = "Trabalhador Faltou";
public static final String LEMBRETE_RENOVACAO_FICHA_APTIDAO_STRING = "Renova" + ccedil + atilde + "o da Ficha";
}

@ -1,8 +1,18 @@
package siprp.medicina.processo.ui;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.*;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.APAGAR_PROCESSO;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.CREATE_CONSULTA;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.CREATE_CONSULTA_MARCACAO;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.CREATE_CONSULTA_MARCACAO_EMAIL;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.CREATE_CONSULTA_MARCACAO_OBSERVACOES;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.CREATE_EXAME;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.CREATE_EXAME_MARCACAO;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.CREATE_EXAME_MARCACAO_EMAIL;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.CREATE_EXAME_MARCACAO_OBSERVACOES;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.CREATE_FICHA;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.CREATE_PROCESSO;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.LOAD_TRABALHADOR;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.REFRESH;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.SELECT_TREE_NODE;
import info.clearthought.layout.TableLayout;
import info.clearthought.layout.TableLayoutConstraints;
@ -21,7 +31,6 @@ import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import leaf.LeafWindow;
import leaf.LeafLogic.LeafLogicActionBinding;
import leaf.LeafLogic.LeafUIActionBinding;
import leaf.LeafWindow.ActionActivation;
@ -38,7 +47,6 @@ import siprp.database.cayenne.objects.TrabalhadoresEcdsDatasEmails;
import siprp.database.cayenne.objects.TrabalhadoresEcdsDatasObservacoes;
import siprp.database.cayenne.objects.TrabalhadoresFichasAptidao;
import siprp.database.cayenne.objects.TrabalhadoresProcesso;
import siprp.medicina.MarcacaoConsultaExtendedPanel;
import siprp.medicina.processo.ProcessoDataProvider;
import siprp.medicina.processo.estrutura.ConsultaMutableTreeNode;
import siprp.medicina.processo.estrutura.DataMutableTreeNode;
@ -46,7 +54,6 @@ import siprp.medicina.processo.estrutura.ECDsMutableTreeNode;
import siprp.medicina.processo.estrutura.EstruturaProcessoRenderer;
import siprp.medicina.processo.estrutura.FichaAptidaoMutableTreeNode;
import siprp.medicina.processo.estrutura.MailMutableTreeNode;
import siprp.medicina.processo.estrutura.MarcacaoMutableTreeNode;
import siprp.medicina.processo.estrutura.ObservacoesMutableTreeNode;
import siprp.medicina.processo.estrutura.ProcessoMutableTreeNode;
import siprp.medicina.processo.estrutura.TrabalhadorMutableTreeNode;

Loading…
Cancel
Save