Java tutorial
/*** Copyright (c) 2012 - 2020 Hrcules S. S. Jos Este arquivo parte do programa Oramento Domstico. Oramento Domstico um software livre; voc pode redistribui-lo e/ou modific-lo dentro dos termos da Licena Pblica Geral Menor GNU como publicada pela Fundao do Software Livre (FSF); na verso 2.1 da Licena. Este programa distribudo na esperana que possa ser til, mas SEM NENHUMA GARANTIA; sem uma garantia implcita de ADEQUAO a qualquer MERCADO ou APLICAO EM PARTICULAR. Veja a Licena Pblica Geral Menor GNU em portugus para maiores detalhes. Voc deve ter recebido uma cpia da Licena Pblica Geral Menor GNU sob o nome de "LICENSE.TXT" junto com este programa, se no, acesse o site do projeto no endereco https://github.com/herculeshssj/orcamento ou escreva para a Fundao do Software Livre(FSF) Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. Para mais informaes sobre o programa Oramento Domstico e seu autor entre em contato pelo e-mail herculeshssj@outlook.com, ou ainda escreva para Hrcules S. S. Jos, Av. Ministro Lafaeyte de Andrade, 1683 - Bl. 3 Apt 404, Marco II - Nova Iguau, RJ, Brasil. ***/ package br.com.hslife.orcamento.task; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import br.com.hslife.orcamento.component.EmailComponent; import br.com.hslife.orcamento.component.OpcaoSistemaComponent; import br.com.hslife.orcamento.entity.Agenda; import br.com.hslife.orcamento.entity.LancamentoConta; import br.com.hslife.orcamento.enumeration.StatusLancamentoConta; import br.com.hslife.orcamento.enumeration.TipoAgendamento; import br.com.hslife.orcamento.facade.IAgenda; import br.com.hslife.orcamento.facade.ILancamentoConta; import br.com.hslife.orcamento.model.CriterioAgendamento; import br.com.hslife.orcamento.model.CriterioBuscaLancamentoConta; @Component @Transactional(propagation = Propagation.SUPPORTS) public class AgendamentoTask { private static final Logger logger = LogManager.getLogger(AgendamentoTask.class); @Autowired private EmailComponent emailComponent; @Autowired private OpcaoSistemaComponent opcaoSistemaComponent; @Autowired private IAgenda service; @Autowired private ILancamentoConta lancamentoContaService; public ILancamentoConta getLancamentoContaService() { return lancamentoContaService; } public EmailComponent getEmailComponent() { return emailComponent; } public OpcaoSistemaComponent getOpcaoSistemaComponent() { return opcaoSistemaComponent; } public IAgenda getService() { return service; } @Scheduled(fixedDelay = 3600000) @SuppressWarnings("deprecation") public void enviarEmailNotificacao() { try { Date inicio = new Date(); inicio.setHours(0); inicio.setMinutes(0); inicio.setSeconds(0); Date fim = new Date(inicio.getTime()); fim.setHours(23); fim.setMinutes(59); fim.setSeconds(59); List<Agenda> agendamentos = getService().buscarAgendamentoPorOuDataInicioOuDataFimEAlerta(inicio, fim, true); // Itera a lista de agendamentos encontrados, e para cada uma envia um e-mail para o usurio for (Agenda a : agendamentos) { // Se o usurio marcou para no receber notificao o e-mail no ser enviado if (getOpcaoSistemaComponent().getNotificarAgendamentosEmail(a.getUsuario())) { StringBuilder mensagemEmail = new StringBuilder(); mensagemEmail.append("Prezado " + a.getUsuario().getNome() + ",\n\n"); mensagemEmail.append("O seguinte agendamento foi marcado para notific-lo:\n\n"); mensagemEmail.append(a.getDescricao() + "\n"); mensagemEmail.append("Tipo: " + a.getTipoAgendamento() + "\n"); mensagemEmail.append("Perodo: \n" + a.getDateLabel() + "\n"); mensagemEmail.append("Dia inteiro: " + (a.isDiaInteiro() ? "SIM" : "NO") + "\n"); mensagemEmail.append("Notas: " + (a.getNotas() == null ? "-" : a.getNotas()) + "\n\n"); mensagemEmail.append( "Caso no queira mais receber notificaes a respeito desse evento, desmarque a caixa 'Emitir Alerta' nas propriedades do agendamento.\n\n\n"); mensagemEmail.append("Administrador do Sistema"); emailComponent.setDestinatario(a.getUsuario().getNome()); emailComponent.setEmailDestinatario(a.getUsuario().getEmail()); emailComponent.setAssunto("Oramento Domstico - Lembrete de agendamento"); emailComponent.setMensagem(mensagemEmail.toString()); emailComponent.enviarEmail(); } } } catch (Exception e) { logger.catching(e); e.printStackTrace(); } } @Scheduled(fixedDelay = 3600000) @SuppressWarnings("deprecation") public void executarTarefa() { try { CriterioAgendamento criterioAgendamento = new CriterioAgendamento(); criterioAgendamento.setTipo(TipoAgendamento.PREVISAO); List<Agenda> agendamentos = getService().buscarPorCriterioAgendamento(criterioAgendamento); List<LancamentoConta> lancamentosAtualizados = new ArrayList<>(); LancamentoConta lancamento; Date dataLancamento; for (Agenda agenda : agendamentos) { Date dataAgenda = new Date(agenda.getInicio().getYear() + 1900, agenda.getInicio().getMonth(), agenda.getInicio().getDate(), 0, 0, 0); switch (agenda.getEntity()) { case "LancamentoConta": lancamento = getLancamentoContaService().buscarPorID(agenda.getIdEntity()); if (lancamento != null) { dataLancamento = new Date(lancamento.getDataPagamento().getYear() + 1900, lancamento.getDataPagamento().getMonth(), lancamento.getDataPagamento().getDate(), 0, 0, 0); if (lancamento.getStatusLancamentoConta().equals(StatusLancamentoConta.AGENDADO) && dataLancamento.equals(dataAgenda)) { lancamentosAtualizados.add(lancamento); } else { getService().excluir(agenda); } } else { getService().excluir(agenda); } break; default: break; } } CriterioBuscaLancamentoConta criterioBusca = new CriterioBuscaLancamentoConta(); criterioBusca.setStatusLancamentoConta(new StatusLancamentoConta[] { StatusLancamentoConta.AGENDADO }); criterioBusca.setDataInicio(new Date()); List<LancamentoConta> lancamentos = getLancamentoContaService().buscarPorCriterioBusca(criterioBusca); lancamentos.removeAll(lancamentosAtualizados); for (LancamentoConta l : lancamentos) { Agenda agenda = new Agenda(); agenda.setDescricao(l.getDescricao()); agenda.setInicio(l.getDataPagamento()); agenda.setFim(l.getDataPagamento()); agenda.setDiaInteiro(true); agenda.setEmitirAlerta(true); agenda.setTipoAgendamento(TipoAgendamento.PREVISAO); agenda.setNotas(l.getObservacao()); agenda.setUsuario(l.getConta().getUsuario()); agenda.setIdEntity(l.getId()); agenda.setEntity(l.getClass().getSimpleName()); getService().cadastrar(agenda); } } catch (Exception e) { logger.catching(e); e.printStackTrace(); } } }