package br.com.centralit.citcorpore.batch;
import java.sql.Date;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.Semaphore;
import org.apache.commons.lang.StringEscapeUtils;
import br.com.centralit.citcorpore.bean.AcordoNivelServicoDTO;
import br.com.centralit.citcorpore.bean.EmpregadoDTO;
import br.com.centralit.citcorpore.bean.EscalonamentoDTO;
import br.com.centralit.citcorpore.bean.OcorrenciaSolicitacaoDTO;
import br.com.centralit.citcorpore.bean.ProblemaDTO;
import br.com.centralit.citcorpore.bean.RegraEscalonamentoDTO;
import br.com.centralit.citcorpore.bean.RelEscalonamentoSolServicoDto;
import br.com.centralit.citcorpore.bean.SolicitacaoServicoDTO;
import br.com.centralit.citcorpore.bean.UsuarioDTO;
import br.com.centralit.citcorpore.integracao.AcordoNivelServicoDao;
import br.com.centralit.citcorpore.integracao.EmpregadoDao;
import br.com.centralit.citcorpore.integracao.EscalonamentoDAO;
import br.com.centralit.citcorpore.integracao.OcorrenciaSolicitacaoDao;
import br.com.centralit.citcorpore.integracao.RegraEscalonamentoDAO;
import br.com.centralit.citcorpore.integracao.RelEscalonamentoSolServicoDao;
import br.com.centralit.citcorpore.integracao.SolicitacaoServicoDao;
import br.com.centralit.citcorpore.integracao.UsuarioDao;
import br.com.centralit.citcorpore.mail.MensagemEmail;
import br.com.centralit.citcorpore.negocio.OcorrenciaSolicitacaoServiceEjb;
import br.com.centralit.citcorpore.negocio.ProblemaService;
import br.com.centralit.citcorpore.negocio.SolicitacaoServicoServiceEjb;
import br.com.centralit.citcorpore.util.CriptoUtils;
import br.com.centralit.citcorpore.util.Enumerados.CategoriaOcorrencia;
import br.com.centralit.citcorpore.util.Enumerados.OrigemOcorrencia;
import br.com.centralit.citcorpore.util.Enumerados.ParametroSistema;
import br.com.centralit.citcorpore.util.ParametroUtil;
import br.com.citframework.dto.IDto;
import br.com.citframework.excecao.LogicException;
import br.com.citframework.excecao.PersistenceException;
import br.com.citframework.integracao.TransactionControler;
import br.com.citframework.integracao.TransactionControlerImpl;
import br.com.citframework.service.ServiceLocator;
import br.com.citframework.util.UtilDatas;
@SuppressWarnings("unchecked")
public class MonitoraIncidentes extends Thread {
private String LOGINGERENTE = null;
private SolicitacaoServicoServiceEjb solicitacaoServicoService;
private final Semaphore performanceDataSemaphore = new Semaphore(1);
@Override
public void run() {
while (true) {
performanceDataSemaphore.acquireUninterruptibly();
String ID_MODELO_EMAIL_ESCALACAO_AUTOMATICA_STR = "";
Integer ID_MODELO_EMAIL_ESCALACAO_AUTOMATICA = 0;
String ID_MODELO_EMAIL_PRAZO_VENCENDO_STR = "";
Integer ID_MODELO_EMAIL_PRAZO_VENCENDO = null;
String ligaFuncionamentoRegrasEscalonamento = "N";
Timestamp dataHoraAtual = UtilDatas.getDataHoraAtual();
try {
LOGINGERENTE = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.LOGIN_USUARIO_ENVIO_EMAIL_AUTOMATICO, "N");
ligaFuncionamentoRegrasEscalonamento = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.HABILITA_REGRA_ESCALONAMENTO, "N");
ID_MODELO_EMAIL_ESCALACAO_AUTOMATICA_STR = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.ID_MODELO_EMAIL_ESCALACAO_AUTOMATICA, "0");
ID_MODELO_EMAIL_PRAZO_VENCENDO_STR = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.ID_MODELO_EMAIL_PRAZO_VENCENDO, "");
if (!ID_MODELO_EMAIL_PRAZO_VENCENDO_STR.trim().equals("")) {
ID_MODELO_EMAIL_PRAZO_VENCENDO = new Integer(ID_MODELO_EMAIL_PRAZO_VENCENDO_STR);
}
} catch (Exception e) {
}
try {
ID_MODELO_EMAIL_ESCALACAO_AUTOMATICA = new Integer(ID_MODELO_EMAIL_ESCALACAO_AUTOMATICA_STR.trim());
} catch (Exception e) {
}
EscalonamentoDAO escalonamentoDao = null;
OcorrenciaSolicitacaoDao ocorrenciaSolicitacaoDao = null;
RegraEscalonamentoDAO regraEscalonamentoDao = null;
RelEscalonamentoSolServicoDao relEscalonamentoSolServicoDao = null;
SolicitacaoServicoDao solicitacaoServicoDao = new SolicitacaoServicoDao();
AcordoNivelServicoDao acordoNivelServicoDao = null;
TransactionControler tc = new TransactionControlerImpl(solicitacaoServicoDao.getAliasDB());
try {
if (!tc.isStarted())
tc.start();
solicitacaoServicoDao.setTransactionControler(tc);
Collection<SolicitacaoServicoDTO> col = null;
try {
/* Lista todas as solicita��oes relacionadas a regra de escalonamento definido e demais. */
col = solicitacaoServicoDao.listSolicitacoesByRegra();
} catch (Exception e) {
e.printStackTrace();
}
if (col != null) {
escalonamentoDao = new EscalonamentoDAO();
escalonamentoDao.setTransactionControler(tc);
ocorrenciaSolicitacaoDao = new OcorrenciaSolicitacaoDao();
ocorrenciaSolicitacaoDao.setTransactionControler(tc);
regraEscalonamentoDao = new RegraEscalonamentoDAO();
regraEscalonamentoDao.setTransactionControler(tc);
relEscalonamentoSolServicoDao = new RelEscalonamentoSolServicoDao();
relEscalonamentoSolServicoDao.setTransactionControler(tc);
acordoNivelServicoDao = new AcordoNivelServicoDao();
acordoNivelServicoDao.setTransactionControler(tc);
for (SolicitacaoServicoDTO solicitacaoServicoDTO : col) {
OcorrenciaSolicitacaoDTO ocorrSolDto = null;
try {
ocorrSolDto = ocorrenciaSolicitacaoDao.findUltimoByIdSolicitacaoServico(solicitacaoServicoDTO.getIdSolicitacaoServico());
} catch (Exception e) {
e.printStackTrace();
}
if (ligaFuncionamentoRegrasEscalonamento != null && ligaFuncionamentoRegrasEscalonamento.equalsIgnoreCase("S")) {
Collection<RegraEscalonamentoDTO> colecaoRegrasEscalonamento = null;
Collection<EscalonamentoDTO> colecaoEscalonamento = null;
try {
// regra: 1 para solicita��o/incidente, 2 para mudan�a, 3 para problema
colecaoRegrasEscalonamento = regraEscalonamentoDao.findRegraBySolicitacao(solicitacaoServicoDTO, 1);
if (colecaoRegrasEscalonamento != null) {
for (RegraEscalonamentoDTO regraEscalonamentoDTO : colecaoRegrasEscalonamento) {
trataSituacaoVencimentoSolicitacao(solicitacaoServicoDTO, regraEscalonamentoDTO, solicitacaoServicoDao, dataHoraAtual, ocorrSolDto,
ID_MODELO_EMAIL_PRAZO_VENCENDO, tc);
trataCriacaoAutomaticaDeProblema(solicitacaoServicoDTO, regraEscalonamentoDTO, solicitacaoServicoDao, dataHoraAtual, tc);
colecaoEscalonamento = escalonamentoDao.findByRegraEscalonamento(regraEscalonamentoDTO);
if (colecaoEscalonamento != null) {
for (EscalonamentoDTO escalonamentoDTO : colecaoEscalonamento) {
if (escalonamentoDTO.getPrazoExecucao() == null || escalonamentoDTO.getPrazoExecucao().intValue() == 0)
continue;
// Verifica se j� existe referencia
boolean temEscalonamento = relEscalonamentoSolServicoDao.temRelacionamentoSolicitacaoEscalonamento(solicitacaoServicoDTO.getIdSolicitacaoServico(),
escalonamentoDTO.getIdEscalonamento());
if (temEscalonamento) {
// System.out.println("Escalonamento " + escalonamentoDTO.getIdEscalonamento() + " j� executado.");
continue;
}
if (regraEscalonamentoDTO.getTipoDataEscalonamento() != null && regraEscalonamentoDTO.getTipoDataEscalonamento().intValue() == 1) {
/**
* Verifica se o tempo que se passou � maior que o prazo de execu��o
*/
// se o prazo for a combinar, prazohh e prazomm ser�o 0, n�o vai cair na regra de escalonamento
if ((solicitacaoServicoDTO.getDataHoraSolicitacao() != null)
&& ((solicitacaoServicoDTO.getPrazoHH() != 0) || (solicitacaoServicoDTO.getPrazoMM() != 0))
&& (dataHoraAtual.getTime() - solicitacaoServicoDTO.getDataHoraSolicitacao().getTime()) > (escalonamentoDTO.getPrazoExecucao() * 60 * 1000)) {
if (escalonamentoDTO.getIdGrupoExecutor() != null) {
/**
* Atualizando a tabela de relacionamento
*/
RelEscalonamentoSolServicoDto dto = new RelEscalonamentoSolServicoDto();
dto.setIdSolicitacaoServico(solicitacaoServicoDTO.getIdSolicitacaoServico());
dto.setIdEscalonamento(escalonamentoDTO.getIdEscalonamento());
relEscalonamentoSolServicoDao.create(dto);
/**
* Realizando o escalonamento da solicita��o com base nas regras estabelecidas Se prioridade for nula est�o se escalonamento com a mesma
* prioridade antiga
*/
getSolicitacaoServicoService().updateTimeAction(escalonamentoDTO.getIdGrupoExecutor(),
(escalonamentoDTO.getIdPrioridade() != null ? escalonamentoDTO.getIdPrioridade() : solicitacaoServicoDTO.getIdPrioridade()),
solicitacaoServicoDTO.getIdSolicitacaoServico(), tc);
/**
* Enviando email de escala��o autom�tica
*/
enviaEmail(ID_MODELO_EMAIL_ESCALACAO_AUTOMATICA, solicitacaoServicoDTO.getIdSolicitacaoServico(), tc);
List<AcordoNivelServicoDTO> listaContratos = acordoNivelServicoDao.findIdEmailByIdSolicitacaoServico(solicitacaoServicoDTO
.getIdSolicitacaoServico());
if (listaContratos != null && !listaContratos.isEmpty())
enviaEmail(listaContratos.get(0).getIdEmail(), solicitacaoServicoDTO.getIdSolicitacaoServico(), tc);
}
}
} else if (regraEscalonamentoDTO.getTipoDataEscalonamento() != null && regraEscalonamentoDTO.getTipoDataEscalonamento().intValue() == 2) {
Date dateCons = null;
OcorrenciaSolicitacaoDTO ocorrEscalacao = ocorrenciaSolicitacaoDao.findUltimoByIdSolicitacaoServicoAndOcorrencia(solicitacaoServicoDTO
.getIdSolicitacaoServico());
if (ocorrSolDto != null) {
if (ocorrEscalacao != null)
ocorrSolDto = ocorrEscalacao;
dateCons = ocorrSolDto.getDataregistro();
String hora = ocorrSolDto.getHoraregistro();
try {
Timestamp timeAux = UtilDatas.strToTimestamp(UtilDatas.dateToSTR(dateCons) + " " + hora + ":00");
if ((dataHoraAtual.getTime() - timeAux.getTime()) > (escalonamentoDTO.getPrazoExecucao() * 60 * 1000)) {
if (escalonamentoDTO.getIdGrupoExecutor() != null) {
/**
* Atualizando a tabela de relacionamento
*/
RelEscalonamentoSolServicoDto dto = new RelEscalonamentoSolServicoDto();
dto.setIdSolicitacaoServico(solicitacaoServicoDTO.getIdSolicitacaoServico());
dto.setIdEscalonamento(escalonamentoDTO.getIdEscalonamento());
relEscalonamentoSolServicoDao.create(dto);
/**
* Realizando o escalonamento da solicita��o com base nas regras estabelecidas Se prioridade for nula est�o se escalonamento com a
* mesma prioridade antiga
*/
getSolicitacaoServicoService()
.updateTimeAction(
escalonamentoDTO.getIdGrupoExecutor(),
(escalonamentoDTO.getIdPrioridade() != null ? escalonamentoDTO.getIdPrioridade() : solicitacaoServicoDTO
.getIdPrioridade()), solicitacaoServicoDTO.getIdSolicitacaoServico(), tc);
/**
* Enviando email de escala��o autom�tica
*/
enviaEmail(ID_MODELO_EMAIL_ESCALACAO_AUTOMATICA, solicitacaoServicoDTO.getIdSolicitacaoServico(), tc);
List<AcordoNivelServicoDTO> listaContratos = acordoNivelServicoDao.findIdEmailByIdSolicitacaoServico(solicitacaoServicoDTO
.getIdSolicitacaoServico());
if (listaContratos != null && !listaContratos.isEmpty())
enviaEmail(listaContratos.get(0).getIdEmail(), solicitacaoServicoDTO.getIdSolicitacaoServico(), tc);
}
}
System.out.println("Finalizando regra de escalonamento...");
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
if (solicitacaoServicoDTO.getTempoAuto() == null || solicitacaoServicoDTO.getTempoAuto().doubleValue() == 0) {
continue;
}
double auxTempo = solicitacaoServicoDTO.getTempoAuto().doubleValue();
auxTempo = auxTempo * 60 * 1000;
Date dateCons = null;
if (ocorrSolDto != null) {
dateCons = ocorrSolDto.getDataregistro();
String hora = ocorrSolDto.getHoraregistro();
try {
Timestamp timeAux = UtilDatas.strToTimestamp(UtilDatas.dateToSTR(dateCons) + " " + hora + ":00");
Timestamp timeNow = UtilDatas.getDataHoraAtual();
long diffTempAux = UtilDatas.calculaDiferencaTempoEmMilisegundos(timeNow, timeAux);
double diffTemp = new Double(diffTempAux);
if (Math.abs(diffTemp) > Math.abs(auxTempo)) {
if (solicitacaoServicoDTO.getIdGrupo1() != null || solicitacaoServicoDTO.getIdPrioridadeAuto1() != null) {
if (solicitacaoServicoDTO.getIdPrioridadeAuto1() != null) {
if (ocorrSolDto.getRegistradopor() != null && ocorrSolDto.getRegistradopor().trim().equalsIgnoreCase("AUTO")) {
if (solicitacaoServicoDTO.getIdPrioridadeAuto1().intValue() >= solicitacaoServicoDTO.getIdPrioridade().intValue()) {
solicitacaoServicoDTO.setIdPrioridadeAuto1(solicitacaoServicoDTO.getIdPrioridade().intValue() - 1);
if (solicitacaoServicoDTO.getIdPrioridadeAuto1().intValue() <= 0) {
solicitacaoServicoDTO.setIdPrioridadeAuto1(1);
}
}
}
}
getSolicitacaoServicoService().updateTimeAction(solicitacaoServicoDTO.getIdGrupo1(), solicitacaoServicoDTO.getIdPrioridadeAuto1(),
solicitacaoServicoDTO.getIdSolicitacaoServico(), tc);
try {
enviaEmail(ID_MODELO_EMAIL_ESCALACAO_AUTOMATICA, solicitacaoServicoDTO.getIdSolicitacaoServico(), tc);
} catch (Exception e) {
}
try {
List<AcordoNivelServicoDTO> listaContratos = acordoNivelServicoDao.findIdEmailByIdSolicitacaoServico(solicitacaoServicoDTO.getIdSolicitacaoServico());
enviaEmail(listaContratos.get(0).getIdEmail(), solicitacaoServicoDTO.getIdSolicitacaoServico(), tc);
} catch (Exception e) {
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
solicitacaoServicoDTO = null;
}
}
}
if(tc.isStarted())
tc.commit();
} catch (Exception e) {
e.printStackTrace();
try {
tc.rollback();
} catch (PersistenceException e1) {
e1.printStackTrace();
}
} finally {
try{
tc.close();
} catch (Exception e){
e.printStackTrace();
}
performanceDataSemaphore.release();
}
try {
Thread.sleep(60000);
} catch (InterruptedException e) {
}
}
}
public void enviaEmail(Integer idModeloEmail, Integer idSolicitacaoServico, TransactionControler tc) throws Exception {
if (idModeloEmail == null || idModeloEmail.intValue() == 0)
return;
String enviaEmail = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.EnviaEmailFluxo, "N");
if (!enviaEmail.equalsIgnoreCase("S"))
return;
String remetente = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.RemetenteNotificacoesSolicitacao, null);
if (remetente == null)
throw new LogicException("Remetente para notifica��es de solicita��o de servi�o n�o foi parametrizado");
String urlSistema = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.URL_Sistema, "");
SolicitacaoServicoDTO solicitacaoAuxDto = new SolicitacaoServicoServiceEjb().restoreAll(idSolicitacaoServico, tc);
solicitacaoAuxDto.setNomeTarefa("Automatic escalation");
String idHashValidacao = CriptoUtils.generateHash("CODED" + solicitacaoAuxDto.getIdSolicitacaoServico(), "MD5");
solicitacaoAuxDto.setHashPesquisaSatisfacao(idHashValidacao);
solicitacaoAuxDto.setUrlSistema(urlSistema);
solicitacaoAuxDto.setLinkPesquisaSatisfacao("<a href=\"" + urlSistema + "/pages/pesquisaSatisfacao/pesquisaSatisfacao.load?idSolicitacaoServico=" + solicitacaoAuxDto.getIdSolicitacaoServico()
+ "&hash=" + idHashValidacao + "\">Clique aqui para fazer a avalia��o do Atendimento</a>");
MensagemEmail mensagem = new MensagemEmail(idModeloEmail, new IDto[] { solicitacaoAuxDto });
try {
mensagem.envia(solicitacaoAuxDto.getEmailcontato(), remetente, remetente);
} catch (Exception e) {
}
}
public void enviaEmailGerente(Integer idModeloEmail, Integer idSolicitacaoServico, TransactionControler tc) throws Exception {
if (idModeloEmail == null || idModeloEmail.intValue() == 0)
return;
String enviaEmail = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.EnviaEmailFluxo, "N");
if (!enviaEmail.equalsIgnoreCase("S"))
return;
String remetente = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.RemetenteNotificacoesSolicitacao, null);
if (remetente == null)
throw new LogicException("Remetente para notifica��es de solicita��o de servi�o n�o foi parametrizado");
String urlSistema = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.URL_Sistema, "");
SolicitacaoServicoDTO solicitacaoAuxDto = new SolicitacaoServicoServiceEjb().restoreAll(idSolicitacaoServico, tc);
solicitacaoAuxDto.setNomeTarefa("Automatic escalation");
String idHashValidacao = CriptoUtils.generateHash("CODED" + solicitacaoAuxDto.getIdSolicitacaoServico(), "MD5");
solicitacaoAuxDto.setHashPesquisaSatisfacao(idHashValidacao);
solicitacaoAuxDto.setUrlSistema(urlSistema);
solicitacaoAuxDto.setLinkPesquisaSatisfacao("<a href=\"" + urlSistema + "/pages/pesquisaSatisfacao/pesquisaSatisfacao.load?idSolicitacaoServico=" + solicitacaoAuxDto.getIdSolicitacaoServico()
+ "&hash=" + idHashValidacao + "\">Clique aqui para fazer a avalia��o do Atendimento</a>");
MensagemEmail mensagem = new MensagemEmail(idModeloEmail, new IDto[] { solicitacaoAuxDto });
try {
// Notifica o gerente
UsuarioDTO gerente = null;
if (!LOGINGERENTE.equalsIgnoreCase("N")) {
gerente = new UsuarioDTO();
UsuarioDao dao = new UsuarioDao();
dao.setTransactionControler(tc);
gerente = dao.restoreByLogin(LOGINGERENTE);
EmpregadoDTO empregado = new EmpregadoDTO();
EmpregadoDao empregadoDao = new EmpregadoDao();
empregadoDao.setTransactionControler(tc);
empregado = empregadoDao.restoreByIdEmpregado(gerente.getIdEmpregado());
if (empregado != null) {
mensagem.envia(empregado.getEmail(), remetente, remetente);
}
gerente = null;
dao = null;
empregado = null;
empregadoDao = null;
}
} catch (Exception e) {
e.printStackTrace();
}
}
public boolean criaProblema(SolicitacaoServicoDTO solicitacaoServicoDTO, TransactionControler tc) throws Exception {
SolicitacaoServicoDao dao = new SolicitacaoServicoDao();
dao.setTransactionControler(tc);
// restaura solicitacao
SolicitacaoServicoDTO solAux = new SolicitacaoServicoDTO();
// SolicitacaoServicoServiceEjb solServiceEjb = new SolicitacaoServicoServiceEjb();
solAux = (SolicitacaoServicoDTO) dao.restore(solicitacaoServicoDTO);
// traz as outras informa��es referentes a JOINS
SolicitacaoServicoDTO solAux2 = new SolicitacaoServicoDTO();
solAux2 = dao.findInfosCriacaoProblemaByIdSolServico(solicitacaoServicoDTO);
UsuarioDao usuarioDao = new UsuarioDao();
usuarioDao.setTransactionControler(tc);
// admin
UsuarioDTO usuarioDto = usuarioDao.restoreByIdEmpregado(1);
List<SolicitacaoServicoDTO> listIdSolicitacaoServico = new ArrayList<SolicitacaoServicoDTO>();
listIdSolicitacaoServico.add(solAux);
solAux.setUsuarioDto(usuarioDto);
ProblemaDTO problemaDto = new ProblemaDTO();
// ProblemaDAO problemaDao = new ProblemaDAO();
// problemaDao.setTransactionControler(tc);
problemaDto.setEnviaEmailCriacao("S");
problemaDto.setEnviaEmailFinalizacao("S");
problemaDto.setEnviaEmailPrazoSolucionarExpirou("S");
problemaDto.setListIdSolicitacaoServico(listIdSolicitacaoServico);
// N�o existe GrupoNivel1 e GrupoAtual na entidade Problema. Verificar DAO da entidade. valdoilo.damasceno
// problemaDto.setIdGrupo(solAux.getIdGrupo());
// problemaDto.setIdGrupoAtual(solAux.getIdGrupoAtual());
// problemaDto.setIdGrupoNivel1(solAux.getIdGrupoNivel1());
problemaDto.setIdContrato(solAux2.getIdContrato());
// Como � o sistema vai usar o id do Admin
problemaDto.setIdCriador(1);
problemaDto.setIdLocalidade(solAux.getIdLocalidade());
problemaDto.setIdOrigemAtendimento(solAux.getIdOrigem());
// problemaDto.setIdResponsavel(solAux.getIdResponsavel());
problemaDto.setIdPrioridade(solAux.getIdPrioridade());
if (solAux.getPrioridade() == null) {
solAux.setPrioridade("3");
}
problemaDto.setPrioridade(Integer.parseInt(solAux.getPrioridade()));
problemaDto.setIdServicoContrato(solAux.getIdServicoContrato());
problemaDto.setIdServico(solAux.getIdServico());
problemaDto.setDescricao(StringEscapeUtils.escapeHtml(solAux.getDescricaoSemFormatacao()));
problemaDto.setTitulo("Problema Criado por Rotina autom�tica");
problemaDto.setTelefoneContato(solAux2.getTelefonecontato());
problemaDto.setUsuarioDto(solAux.getUsuarioDto());
problemaDto.setImpacto(solAux.getImpacto());
problemaDto.setUrgencia(solAux.getUrgencia());
problemaDto.setDataHoraInicio(UtilDatas.getDataHoraAtual());
problemaDto.setNomeContato(solAux2.getNomecontato());
problemaDto.setIdUnidade(solAux.getIdUnidade());
problemaDto.setIdSolicitante(solAux.getIdSolicitante());
problemaDto.setDataHoraSolicitacao(UtilDatas.getDataHoraAtual());
problemaDto.setDataHoraCaptura(UtilDatas.getDataHoraAtual());
// categoria padr�o
problemaDto.setIdCategoriaProblema(1);
problemaDto.setSeveridade("Alta");
problemaDto.setStatus("Registrada");
problemaDto.setEmailContato(solAux2.getEmailcontato());
// problemaDao.create(problemaDto);
ProblemaService problemaService = (ProblemaService) ServiceLocator.getInstance().getService(ProblemaService.class, null);
problemaService.create(problemaDto, tc);
solAux = null;
return true;
}
public void trataSituacaoVencimentoSolicitacao(SolicitacaoServicoDTO solicitacaoServicoDTO, RegraEscalonamentoDTO regraEscalonamentoDTO, SolicitacaoServicoDao solicitacaoServicoDao,
Timestamp dataHoraAtual, OcorrenciaSolicitacaoDTO ocorrSolDto, Integer idModeloEmail, TransactionControler tc) throws Exception {
// trata regra de classifica��o se est� vencendo
if ((solicitacaoServicoDTO.getDataHoraLimite() != null) && ((solicitacaoServicoDTO.getPrazoHH() != 0) || (solicitacaoServicoDTO.getPrazoMM() != 0))
&& ((solicitacaoServicoDTO.getDataHoraLimite().getTime() - dataHoraAtual.getTime()) <= (regraEscalonamentoDTO.getTempoExecucao() * 60 * 1000))) {
double intervaloTempo = regraEscalonamentoDTO.getIntervaloNotificacao().intValue() * 60 * 1000;
Date dateCons = null;
if (ocorrSolDto != null) {
dateCons = ocorrSolDto.getDataregistro();
String hora = ocorrSolDto.getHoraregistro();
Timestamp timeAux = UtilDatas.strToTimestamp(UtilDatas.dateToSTR(dateCons) + " " + hora + ":00");
if ((dataHoraAtual.getTime() - timeAux.getTime()) > intervaloTempo) {
if (regraEscalonamentoDTO.getEnviarEmail() != null && regraEscalonamentoDTO.getEnviarEmail().equals("S")) {
UsuarioDTO usuarioDTO = new UsuarioDTO();
usuarioDTO.setLogin("Autom�tico");
OcorrenciaSolicitacaoServiceEjb.create(solicitacaoServicoDTO, null, "Vencendo", OrigemOcorrencia.OUTROS, CategoriaOcorrencia.Atualizacao, null,
CategoriaOcorrencia.Atualizacao.getDescricao(), usuarioDTO, 0, null, tc);
if (idModeloEmail != null)
enviaEmail(idModeloEmail, solicitacaoServicoDTO.getIdSolicitacaoServico(), tc);
}
}
}
if ((solicitacaoServicoDTO.getDataHoraLimite() != null) && ((solicitacaoServicoDTO.getPrazoHH() != 0) || (solicitacaoServicoDTO.getPrazoMM() != 0))
&& ((solicitacaoServicoDTO.getDataHoraLimite().getTime() - dataHoraAtual.getTime()) <= (regraEscalonamentoDTO.getTempoExecucao() * 60 * 1000))) {
// trata caso o sla esteja vencendo
if (solicitacaoServicoDTO.getVencendo() != null && !solicitacaoServicoDTO.getVencendo().equalsIgnoreCase("S")) {
SolicitacaoServicoDTO solicitacao = new SolicitacaoServicoDTO();
solicitacao.setIdSolicitacaoServico(solicitacaoServicoDTO.getIdSolicitacaoServico());
solicitacao = (SolicitacaoServicoDTO) solicitacaoServicoDao.restore(solicitacao);
solicitacao.setVencendo("S");
solicitacaoServicoDao.updateNotNull(solicitacao);
if (idModeloEmail != null) {
enviaEmailGerente(idModeloEmail, solicitacaoServicoDTO.getIdSolicitacaoServico(), tc);
}
solicitacao = null;
} else if (solicitacaoServicoDTO.getVencendo() == null) {
SolicitacaoServicoDTO solicitacao = new SolicitacaoServicoDTO();
solicitacao.setIdSolicitacaoServico(solicitacaoServicoDTO.getIdSolicitacaoServico());
solicitacao = (SolicitacaoServicoDTO) solicitacaoServicoDao.restore(solicitacao);
solicitacao.setVencendo("S");
solicitacaoServicoDao.updateNotNull(solicitacao);
solicitacao = null;
}
} else {
if (solicitacaoServicoDTO.getVencendo() == null) {
SolicitacaoServicoDTO solicitacao = new SolicitacaoServicoDTO();
solicitacao.setIdSolicitacaoServico(solicitacaoServicoDTO.getIdSolicitacaoServico());
solicitacao = (SolicitacaoServicoDTO) solicitacaoServicoDao.restore(solicitacao);
solicitacao.setVencendo("N");
solicitacaoServicoDao.updateNotNull(solicitacao);
solicitacao = null;
}
// trata caso o sla tenha sido alterado para mais
if (!solicitacaoServicoDTO.getVencendo().equalsIgnoreCase("N")) {
SolicitacaoServicoDTO solicitacao = new SolicitacaoServicoDTO();
solicitacao.setIdSolicitacaoServico(solicitacaoServicoDTO.getIdSolicitacaoServico());
solicitacao = (SolicitacaoServicoDTO) solicitacaoServicoDao.restore(solicitacao);
solicitacao.setVencendo("N");
solicitacaoServicoDao.updateNotNull(solicitacao);
solicitacao = null;
}
}
}
}
public void trataCriacaoAutomaticaDeProblema(SolicitacaoServicoDTO solicitacaoServicoDTO, RegraEscalonamentoDTO regraEscalonamentoDTO, SolicitacaoServicoDao solicitacaoServicoDao,
Timestamp dataHoraAtual, TransactionControler tc) throws Exception {
if (regraEscalonamentoDTO.getPrazoCriarProblema() != null && regraEscalonamentoDTO.getCriaProblema() != null && regraEscalonamentoDTO.getCriaProblema().equalsIgnoreCase("S")) {
if ((dataHoraAtual.getTime() - solicitacaoServicoDTO.getDataHoraSolicitacao().getTime()) >= (regraEscalonamentoDTO.getPrazoCriarProblema() * 60 * 1000)) {
if (solicitacaoServicoDTO.getCriouProblemaAutomatico() == null) {
criaProblema(solicitacaoServicoDTO, tc);
SolicitacaoServicoDTO solicitacao = new SolicitacaoServicoDTO();
solicitacao.setIdSolicitacaoServico(solicitacaoServicoDTO.getIdSolicitacaoServico());
solicitacao = (SolicitacaoServicoDTO) solicitacaoServicoDao.restore(solicitacao);
solicitacao.setCriouProblemaAutomatico("S");
solicitacaoServicoDao.updateNotNull(solicitacao);
solicitacao = null;
}
}
}
}
private SolicitacaoServicoServiceEjb getSolicitacaoServicoService() {
if (solicitacaoServicoService == null) {
solicitacaoServicoService = new SolicitacaoServicoServiceEjb();
}
return solicitacaoServicoService;
}
}