package br.com.centralit.citcorpore.negocio; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import br.com.centralit.bpm.dto.ObjetoInstanciaFluxoDTO; import br.com.centralit.bpm.dto.TarefaFluxoDTO; import br.com.centralit.bpm.integracao.ObjetoInstanciaFluxoDao; import br.com.centralit.bpm.integracao.TarefaFluxoDao; import br.com.centralit.citcorpore.bean.ExecucaoMudancaDTO; import br.com.centralit.citcorpore.bean.RequisicaoMudancaDTO; import br.com.centralit.citcorpore.bean.UsuarioDTO; import br.com.centralit.citcorpore.bpm.negocio.ExecucaoMudanca; import br.com.centralit.citcorpore.integracao.ExecucaoMudancaDao; import br.com.centralit.citcorpore.metainfo.bean.CamposObjetoNegocioDTO; import br.com.centralit.citcorpore.metainfo.bean.GrupoVisaoCamposNegocioDTO; import br.com.centralit.citcorpore.metainfo.bean.ObjetoNegocioDTO; import br.com.centralit.citcorpore.metainfo.integracao.ObjetoNegocioDao; import br.com.citframework.dto.Usuario; import br.com.citframework.excecao.PersistenceException; import br.com.citframework.integracao.TransactionControler; import br.com.citframework.integracao.TransactionControlerImpl; import br.com.citframework.service.CrudServiceImpl; import com.google.gson.Gson; @SuppressWarnings({"unchecked", "rawtypes", "unused"}) public class ExecucaoMudancaServiceEjb extends CrudServiceImpl implements ExecucaoMudancaService { private ExecucaoMudancaDao dao; @Override protected ExecucaoMudancaDao getDao() { if (dao == null) { dao = new ExecucaoMudancaDao(); } return dao; } @Override public List<TarefaFluxoDTO> recuperaTarefas(final String loginUsuario) throws Exception { return new ExecucaoMudanca().recuperaTarefas(loginUsuario); } @Override public TarefaFluxoDTO recuperaTarefa(final String loginUsuario, final Integer idTarefa) throws Exception { TarefaFluxoDTO result = null; final List<TarefaFluxoDTO> lstTarefas = this.recuperaTarefas(loginUsuario); if (!lstTarefas.isEmpty()) { for (final TarefaFluxoDTO tarefaDto : lstTarefas) { if (tarefaDto.getIdItemTrabalho().intValue() == idTarefa.intValue()) { result = tarefaDto; break; } } } return result; } @Override public void delegaTarefa(final String loginUsuario, final Integer idTarefa, final String usuarioDestino, final String grupoDestino) throws Exception { if (idTarefa == null) { return; } final TarefaFluxoDTO tarefaDto = this.recuperaTarefa(idTarefa); final ExecucaoMudancaDTO execucaoMudancaDto = this.getDao().findByIdInstanciaFluxo(tarefaDto.getIdInstancia()); final RequisicaoMudancaDTO solicitacaoDto = new RequisicaoMudancaServiceEjb().restoreAll(execucaoMudancaDto.getIdRequisicaoMudanca()); final TransactionControler tc = new TransactionControlerImpl(this.getDao().getAliasDB()); try { tc.start(); final ExecucaoMudanca execucaoSolicitacao = new ExecucaoMudanca(tc); execucaoSolicitacao.delega(loginUsuario, solicitacaoDto, idTarefa, usuarioDestino, grupoDestino); tc.commit(); } catch (final Exception e) { this.rollbackTransaction(tc, e); } finally { try { tc.close(); } catch (final PersistenceException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public TarefaFluxoDTO recuperaTarefa(final Integer idTarefa) throws Exception { final TarefaFluxoDao tarefaFluxoDao = new TarefaFluxoDao(); final TarefaFluxoDTO tarefaFluxoDto = new TarefaFluxoDTO(); tarefaFluxoDto.setIdItemTrabalho(idTarefa); return (TarefaFluxoDTO) tarefaFluxoDao.restore(tarefaFluxoDto); } @Override public void trataCamposTarefa(final Map<String, String> params, final Collection<CamposObjetoNegocioDTO> colCampos, final Map<String, Object> map, final String principal) throws Exception { if (colCampos == null) { return; } final Gson gson = new Gson(); final ObjetoNegocioDao objetoNegocioDao = new ObjetoNegocioDao(); final HashMap<Integer, ObjetoNegocioDTO> mapObjetos = new HashMap(); for (final CamposObjetoNegocioDTO campoDto : colCampos) { final String value = params.get(campoDto.getNome()); if (value == null) { return; } String nomeTabelaBD = ""; if (campoDto.getNomeTabelaDB() != null) { nomeTabelaBD = campoDto.getNomeTabelaDB(); nomeTabelaBD = campoDto.getNomeTabelaDB().toLowerCase(); } else if (campoDto.getIdObjetoNegocio() != null) { ObjetoNegocioDTO objetoNegocioDto = mapObjetos.get(campoDto.getIdObjetoNegocio()); if (objetoNegocioDto == null) { objetoNegocioDto = new ObjetoNegocioDTO(); objetoNegocioDto.setIdObjetoNegocio(campoDto.getIdObjetoNegocio()); objetoNegocioDto = (ObjetoNegocioDTO) objetoNegocioDao.restore(objetoNegocioDto); if (objetoNegocioDto != null) { mapObjetos.put(campoDto.getIdObjetoNegocio(), objetoNegocioDto); } } if (objetoNegocioDto != null) { nomeTabelaBD = objetoNegocioDto.getNomeTabelaDB(); } } final ObjetoInstanciaFluxoDTO objetoInstanciaDto = new ObjetoInstanciaFluxoDTO(); objetoInstanciaDto.setIdObjetoNegocio(campoDto.getIdObjetoNegocio()); objetoInstanciaDto.setObjetoPrincipal(principal); objetoInstanciaDto.setCampoChave(campoDto.getPk()); objetoInstanciaDto.setNomeObjeto(campoDto.getNome().toLowerCase()); objetoInstanciaDto.setNomeTabelaBD(nomeTabelaBD); objetoInstanciaDto.setNomeCampoBD(campoDto.getNomeDB()); objetoInstanciaDto.setTipoCampoBD(campoDto.getTipoDB()); objetoInstanciaDto.setNomeClasse(String.class.getName()); objetoInstanciaDto.setValor(gson.toJson(value)); map.put(objetoInstanciaDto.getNomeObjeto(), objetoInstanciaDto); } } @Override public Collection<GrupoVisaoCamposNegocioDTO> findCamposTarefa(final Integer idTarefa) throws Exception { final TarefaFluxoDTO tarefaDto = this.recuperaTarefa(idTarefa); if (tarefaDto == null) { return null; } Collection<GrupoVisaoCamposNegocioDTO> result = null; result = new ArrayList(); final Collection<ObjetoInstanciaFluxoDTO> colCampos = new ObjetoInstanciaFluxoDao().findByIdTarefa(idTarefa); if (colCampos != null) { final Gson gson = new Gson(); for (final ObjetoInstanciaFluxoDTO campoTarefaDto : colCampos) { if (campoTarefaDto.getObjetoPrincipal().equalsIgnoreCase("S") && campoTarefaDto.getCampoChave().equalsIgnoreCase("S")) { final GrupoVisaoCamposNegocioDTO grupoCampoDto = new GrupoVisaoCamposNegocioDTO(); final CamposObjetoNegocioDTO campoDto = new CamposObjetoNegocioDTO(); campoDto.setIdObjetoNegocio(campoTarefaDto.getIdObjetoNegocio()); campoDto.setNome(campoTarefaDto.getNomeObjeto()); campoDto.setNomeDB(campoTarefaDto.getNomeCampoBD()); campoDto.setPk("S"); campoDto.setValue(gson.fromJson(campoTarefaDto.getValor(), String.class)); campoDto.setTipoDB(campoTarefaDto.getTipoCampoBD()); grupoCampoDto.setCamposObjetoNegocioDto(campoDto); result.add(grupoCampoDto); } } } else { final ExecucaoMudancaDTO execucaoMudancaDto = this.getDao().findByIdInstanciaFluxo(tarefaDto.getIdInstancia()); if (execucaoMudancaDto != null) { final ObjetoNegocioDTO objetoNegocioDto = new ObjetoNegocioDao().findByNomeObjetoNegocio("RequisicaoMudanca"); if (objetoNegocioDto == null) { return null; } final GrupoVisaoCamposNegocioDTO grupoCampoDto = new GrupoVisaoCamposNegocioDTO(); final CamposObjetoNegocioDTO campoDto = new CamposObjetoNegocioDTO(); campoDto.setNome("IDREQUISICAOMUDANCA"); campoDto.setNomeDB("IDREQUISICAOMUDANCA"); campoDto.setIdObjetoNegocio(objetoNegocioDto.getIdObjetoNegocio()); campoDto.setPk("S"); campoDto.setValue(execucaoMudancaDto.getIdRequisicaoMudanca()); grupoCampoDto.setCamposObjetoNegocioDto(campoDto); result.add(grupoCampoDto); } } return result; } @Override public void registraMudanca(final RequisicaoMudancaDTO requisicaoMudancaDto, final TransactionControler tc, final Usuario usuario) throws Exception { final ExecucaoMudanca execucaoMudanca = new ExecucaoMudanca(requisicaoMudancaDto, tc, usuario); execucaoMudanca.inicia(); } public void registraMudanca(final RequisicaoMudancaDTO requisicaoMudancaDto, final TransactionControler tc, final UsuarioDTO usuarioDto) throws Exception { if (usuario == null) { usuario = new Usuario(); } usuario.setLocale(usuarioDto.getLocale()); final ExecucaoMudanca execucaoMudanca = new ExecucaoMudanca(requisicaoMudancaDto, tc, usuario); execucaoMudanca.inicia(); } @Override public void executa(final UsuarioDTO usuarioDto, final TransactionControler tc, final Integer idFluxo, final Integer idTarefa, final String acaoFluxo, final HashMap<String, String> params, final Collection<CamposObjetoNegocioDTO> colCamposTodosPrincipal, final Collection<CamposObjetoNegocioDTO> colCamposTodosVinc) throws Exception { final HashMap<String, Object> map = new HashMap(); this.trataCamposTarefa(params, colCamposTodosPrincipal, map, "S"); this.trataCamposTarefa(params, colCamposTodosVinc, map, "N"); final Integer idSolicitacao = new Integer((String) map.get("IDREQUISICAOMUDANCA")); final RequisicaoMudancaDTO requisicaoMudancaDto = new RequisicaoMudancaServiceEjb().restoreAll(idSolicitacao, tc); new ExecucaoMudanca(tc).executa(usuarioDto.getLogin(), requisicaoMudancaDto, idTarefa, acaoFluxo, map); } @Override public void executa(final RequisicaoMudancaDTO requisicaoMudancaDto, final Integer idTarefa, final String acaoFluxo, final TransactionControler tc) throws Exception { if (requisicaoMudancaDto.getAcaoFluxo() != null) { requisicaoMudancaDto.getAcaoFluxo(); } final HashMap<String, Object> objetos = new HashMap(); final RequisicaoMudancaDTO mudancaAuxDto = new RequisicaoMudancaServiceEjb().restoreAll(requisicaoMudancaDto.getIdRequisicaoMudanca(), tc); new ExecucaoMudanca(tc).executa(requisicaoMudancaDto.getUsuarioDto().getLogin(), mudancaAuxDto, idTarefa, acaoFluxo, objetos); } public void direcionaAtendimento(final RequisicaoMudancaDTO requisicaoMudancaDto, final TransactionControler tc) throws Exception { if (requisicaoMudancaDto.getIdGrupoAtual() == null) { return; } final RequisicaoMudancaDTO mudancaAuxDto = new RequisicaoMudancaServiceEjb().restoreAll(requisicaoMudancaDto.getIdRequisicaoMudanca(), tc); if (mudancaAuxDto == null) { throw new Exception(this.i18nMessage("requisicaoMudanca.problemaRecuperacao")); } if (mudancaAuxDto.getNomeGrupoAtual() == null || mudancaAuxDto.getNomeGrupoAtual().length() == 0) { throw new Exception(this.i18nMessage("requisicaoMudanca.grupoNaoEncontrado")); } new ExecucaoMudanca(mudancaAuxDto, tc, usuario).direcionaAtendimento(requisicaoMudancaDto.getUsuarioDto().getLogin(), mudancaAuxDto, mudancaAuxDto.getNomeGrupoAtual()); } public void direcionaAtendimentoAutomatico(final RequisicaoMudancaDTO requisicaoMudancaDto, final TransactionControler tc) throws Exception { if (requisicaoMudancaDto.getIdGrupoAtual() == null) { return; } final RequisicaoMudancaDTO mudancaAuxDto = new RequisicaoMudancaServiceEjb().restoreAll(requisicaoMudancaDto.getIdRequisicaoMudanca(), tc); if (mudancaAuxDto != null && mudancaAuxDto.getIdResponsavel() == null) { mudancaAuxDto.setIdResponsavel(mudancaAuxDto.getIdProprietario()); } if (mudancaAuxDto == null) { throw new Exception(this.i18nMessage("requisicaoMudanca.problemaRecuperacao")); } if (mudancaAuxDto.getNomeGrupoAtual() == null || mudancaAuxDto.getNomeGrupoAtual().length() == 0) { throw new Exception(this.i18nMessage("requisicaoMudanca.grupoNaoEncontrado")); } new ExecucaoMudanca(mudancaAuxDto, tc, usuario).direcionaAtendimento("admin", mudancaAuxDto, mudancaAuxDto.getNomeGrupoAtual()); } @Override public void executa(final UsuarioDTO usuarioDto, final Integer idTarefa, final String acaoFluxo) throws Exception { final TarefaFluxoDTO tarefaDto = this.recuperaTarefa(idTarefa); if (tarefaDto == null) { return; } final ExecucaoMudancaDTO execucaoMudancaDto = this.getDao().findByIdInstanciaFluxo(tarefaDto.getIdInstancia()); if (execucaoMudancaDto == null) { return; } final RequisicaoMudancaDTO requisicaoMudancaDto = new RequisicaoMudancaDTO(); requisicaoMudancaDto.setIdRequisicaoMudanca(execucaoMudancaDto.getIdRequisicaoMudanca()); requisicaoMudancaDto.setUsuarioDto(usuarioDto); final TransactionControlerImpl tc = new TransactionControlerImpl(this.getDao().getAliasDB()); this.executa(requisicaoMudancaDto, idTarefa, acaoFluxo, tc); try { if (tc != null) { tc.close(); } } catch (final Exception e) { e.printStackTrace(); } } public void suspende(final UsuarioDTO usuarioDto, final RequisicaoMudancaDTO requisicaoMudancaDto, final TransactionControler tc) throws Exception { if (usuario == null) { usuario = new Usuario(); } usuario.setLocale(usuarioDto.getLocale()); final ExecucaoMudanca execucaoMudanca = new ExecucaoMudanca(requisicaoMudancaDto, tc, usuario); execucaoMudanca.suspende(usuarioDto.getLogin()); } public void encerra(final UsuarioDTO usuarioDto, final RequisicaoMudancaDTO requisicaoMudancaDto, final TransactionControler tc) throws Exception { if (usuario == null) { usuario = new Usuario(); } usuario.setLocale(usuarioDto.getLocale()); final ExecucaoMudanca execucaoMudanca = new ExecucaoMudanca(requisicaoMudancaDto, tc, usuario); execucaoMudanca.encerra(); } public void reativa(final UsuarioDTO usuarioDto, final RequisicaoMudancaDTO requisicaoMudancaDto, final TransactionControler tc) throws Exception { if (usuario == null) { usuario = new Usuario(); } usuario.setLocale(usuarioDto.getLocale()); final ExecucaoMudanca execucaoMudanca = new ExecucaoMudanca(requisicaoMudancaDto, tc, usuario); execucaoMudanca.reativa(usuarioDto.getLogin()); } }