package br.com.centralit.bpm.integracao; import java.util.ArrayList; import java.util.Collection; import java.util.List; import br.com.centralit.bpm.dto.GrupoBpmDTO; import br.com.centralit.bpm.dto.TarefaFluxoDTO; import br.com.centralit.bpm.util.Enumerados.SituacaoItemTrabalho; import br.com.centralit.bpm.util.Enumerados.TipoAtribuicao; import br.com.citframework.dto.IDto; import br.com.citframework.excecao.PersistenceException; import br.com.citframework.integracao.Condition; public class TarefaFluxoDao extends ItemTrabalhoFluxoDao { @Override public Class<?> getBean() { return TarefaFluxoDTO.class; } public Collection<TarefaFluxoDTO> findByIdResponsavel(final Integer idResponsavel) throws PersistenceException { final List<Condition> condicao = new ArrayList<>(); condicao.add(new Condition("idResponsavelAtual", "=", idResponsavel)); condicao.add(new Condition("situacao", "<>", SituacaoItemTrabalho.Executado.name())); return super.findByCondition(condicao, null); } @Override public void updateNotNull(final IDto obj) throws PersistenceException { super.updateNotNull(obj); } /** * Retorna as Tarefas do Fluxo dispon�veis para o Usu�rio logado de acordo com o seu ID ou os Grupos em que est� inserido. * * Altera��o realizada em 15.01.2015 para as tarefas do tipo Delega��o fossem retornadas caso n�o haja nenhuma do tipo Autom�tica ou Acompanhamento. * * @param idUsuario * - Identificador �nico do Usu�rio. * @param listGrupoBpmDTO * - Lista de Grupos do Usu�rio. * @param idTarefa * - Identificador �nico da tarefa. * @return List<TarefaFluxoDTO> * @throws PersistenceException * @author valdoilo.damasceno * */ public List<TarefaFluxoDTO> findDisponiveisByIdUsuarioAndGruposBpm(final Integer idUsuario, final Collection<GrupoBpmDTO> listGrupoBpmDTO, final Integer idTarefa) throws PersistenceException { final List<Object> parametros = new ArrayList<>(); final StringBuilder sql = new StringBuilder(); sql.append("SELECT DISTINCT i.iditemtrabalho, "); sql.append(" i.idinstancia, "); sql.append(" i.idelemento, "); sql.append(" i.idresponsavelatual, "); sql.append(" i.datahoracriacao, "); sql.append(" i.datahorainicio, "); sql.append(" i.datahorafinalizacao, "); sql.append(" i.datahoraexecucao, "); sql.append(" i.situacao, "); sql.append(" a.tipo, "); sql.append(" instancia.idfluxo "); sql.append("FROM bpm_atribuicaofluxo a "); sql.append(" INNER JOIN bpm_itemtrabalhofluxo i "); sql.append(" ON a.iditemtrabalho = i.iditemtrabalho "); sql.append(" INNER JOIN bpm_instanciafluxo instancia "); sql.append(" ON i.idinstancia = instancia.idinstancia "); sql.append("WHERE i.situacao NOT IN ( ?, ? ) "); parametros.add(SituacaoItemTrabalho.Executado.name()); parametros.add(SituacaoItemTrabalho.Cancelado.name()); /* Incluido por Carlos Santos em 06.11.2013 */ if (idTarefa != null) { sql.append(" AND i.idItemTrabalho = ? "); parametros.add(idTarefa); } sql.append(" AND ( a.idusuario = ?"); parametros.add(idUsuario); if (listGrupoBpmDTO != null && !listGrupoBpmDTO.isEmpty()) { sql.append(" OR a.idgrupo IN ( "); int i = 0; for (final GrupoBpmDTO grupoBpmDto : listGrupoBpmDTO) { if (i > 0) { sql.append(","); } sql.append("?"); parametros.add(grupoBpmDto.getIdGrupo()); i++; } sql.append(" ) "); } sql.append(" OR i.idresponsavelatual = ? ) "); parametros.add(idUsuario); sql.append(" AND a.tipo = ? "); parametros.add(TipoAtribuicao.Automatica.name()); sql.append(" UNION ALL "); sql.append("SELECT DISTINCT i.iditemtrabalho, "); sql.append(" i.idinstancia, "); sql.append(" i.idelemento, "); sql.append(" i.idresponsavelatual, "); sql.append(" i.datahoracriacao, "); sql.append(" i.datahorainicio, "); sql.append(" i.datahorafinalizacao, "); sql.append(" i.datahoraexecucao, "); sql.append(" i.situacao, "); sql.append(" a.tipo, "); sql.append(" instancia.idfluxo "); sql.append(" FROM bpm_atribuicaofluxo a "); sql.append(" INNER JOIN bpm_itemtrabalhofluxo i "); sql.append(" ON a.iditemtrabalho = i.iditemtrabalho "); sql.append(" INNER JOIN bpm_instanciafluxo instancia "); sql.append(" ON i.idinstancia = instancia.idinstancia "); sql.append(" WHERE i.situacao NOT IN ( ?, ? ) "); parametros.add(SituacaoItemTrabalho.Executado.name()); parametros.add(SituacaoItemTrabalho.Cancelado.name()); /* Incluido por Carlos Santos em 06.11.2013 */ if (idTarefa != null) { sql.append(" AND i.idItemTrabalho = ? "); parametros.add(idTarefa); } sql.append(" AND ( a.idusuario = ? "); parametros.add(idUsuario); if (listGrupoBpmDTO != null && !listGrupoBpmDTO.isEmpty()) { sql.append(" OR a.idgrupo IN ( "); int i = 0; for (final GrupoBpmDTO grupoBpmDto : listGrupoBpmDTO) { if (i > 0) { sql.append(","); } sql.append("?"); parametros.add(grupoBpmDto.getIdGrupo()); i++; } sql.append(" ) "); } sql.append(" OR i.idresponsavelatual = ? ) "); parametros.add(idUsuario); sql.append(" AND a.tipo = ? "); parametros.add(TipoAtribuicao.Acompanhamento.name()); sql.append(" AND a.iditemtrabalho NOT IN (SELECT i.iditemtrabalho "); sql.append(" FROM "); sql.append(" bpm_atribuicaofluxo a "); sql.append(" INNER JOIN bpm_itemtrabalhofluxo i "); sql.append(" ON a.iditemtrabalho = "); sql.append(" i.iditemtrabalho "); sql.append(" INNER JOIN bpm_instanciafluxo "); sql.append(" instancia "); sql.append(" ON i.idinstancia = "); sql.append(" instancia.idinstancia "); sql.append(" WHERE "); sql.append(" i.situacao NOT IN ( ?, ? ) "); parametros.add(SituacaoItemTrabalho.Executado.name()); parametros.add(SituacaoItemTrabalho.Cancelado.name()); /* Incluido por Carlos Santos em 06.11.2013 */ if (idTarefa != null) { sql.append(" AND i.idItemTrabalho = ? "); parametros.add(idTarefa); } sql.append(" AND ( a.idusuario = ? "); parametros.add(idUsuario); if (listGrupoBpmDTO != null && !listGrupoBpmDTO.isEmpty()) { sql.append(" OR a.idgrupo IN ( "); int i = 0; for (final GrupoBpmDTO grupoBpmDto : listGrupoBpmDTO) { if (i > 0) { sql.append(","); } sql.append("?"); parametros.add(grupoBpmDto.getIdGrupo()); i++; } sql.append(" ) "); } sql.append(" OR i.idresponsavelatual = ? "); parametros.add(idUsuario); sql.append(" ) "); sql.append(" AND a.tipo = ? ) "); parametros.add(TipoAtribuicao.Automatica.name()); sql.append(" UNION ALL "); sql.append(" SELECT DISTINCT i.iditemtrabalho, "); sql.append(" i.idinstancia, "); sql.append(" i.idelemento, "); sql.append(" i.idresponsavelatual, "); sql.append(" i.datahoracriacao, "); sql.append(" i.datahorainicio, "); sql.append(" i.datahorafinalizacao, "); sql.append(" i.datahoraexecucao, "); sql.append(" i.situacao, "); sql.append(" a.tipo, "); sql.append(" instancia.idfluxo "); sql.append(" FROM bpm_atribuicaofluxo a "); sql.append(" INNER JOIN bpm_itemtrabalhofluxo i "); sql.append(" ON a.iditemtrabalho = i.iditemtrabalho "); sql.append(" INNER JOIN bpm_instanciafluxo instancia "); sql.append(" ON i.idinstancia = instancia.idinstancia "); sql.append(" WHERE i.situacao NOT IN ( ?, ? ) "); parametros.add(SituacaoItemTrabalho.Executado.name()); parametros.add(SituacaoItemTrabalho.Cancelado.name()); /* Incluido por Carlos Santos em 06.11.2013 */ if (idTarefa != null) { sql.append(" AND i.idItemTrabalho = ? "); parametros.add(idTarefa); } sql.append(" AND ( a.idusuario = ? "); parametros.add(idUsuario); if (listGrupoBpmDTO != null && !listGrupoBpmDTO.isEmpty()) { sql.append(" OR a.idgrupo IN ( "); int i = 0; for (final GrupoBpmDTO grupoBpmDto : listGrupoBpmDTO) { if (i > 0) { sql.append(","); } sql.append("?"); parametros.add(grupoBpmDto.getIdGrupo()); i++; } sql.append(" ) "); } sql.append(" OR i.idresponsavelatual = ? ) "); parametros.add(idUsuario); sql.append(" AND a.tipo = ? "); parametros.add(TipoAtribuicao.Delegacao.name()); sql.append(" AND a.iditemtrabalho NOT IN (SELECT i.iditemtrabalho "); sql.append(" FROM "); sql.append(" bpm_atribuicaofluxo a "); sql.append(" INNER JOIN bpm_itemtrabalhofluxo i "); sql.append(" ON a.iditemtrabalho = "); sql.append(" i.iditemtrabalho "); sql.append(" INNER JOIN bpm_instanciafluxo "); sql.append(" instancia "); sql.append(" ON i.idinstancia = "); sql.append(" instancia.idinstancia "); sql.append(" WHERE "); sql.append(" i.situacao NOT IN ( ?, ? ) "); parametros.add(SituacaoItemTrabalho.Executado.name()); parametros.add(SituacaoItemTrabalho.Cancelado.name()); /* Incluido por Carlos Santos em 06.11.2013 */ if (idTarefa != null) { sql.append(" AND i.idItemTrabalho = ? "); parametros.add(idTarefa); } sql.append(" AND ( a.idusuario = ? "); parametros.add(idUsuario); if (listGrupoBpmDTO != null && !listGrupoBpmDTO.isEmpty()) { sql.append(" OR a.idgrupo IN ( "); int i = 0; for (final GrupoBpmDTO grupoBpmDto : listGrupoBpmDTO) { if (i > 0) { sql.append(","); } sql.append("?"); parametros.add(grupoBpmDto.getIdGrupo()); i++; } sql.append(" ) "); } sql.append(" OR i.idresponsavelatual = ? "); parametros.add(idUsuario); sql.append(" ) "); sql.append(" AND ( a.tipo = ? OR a.tipo = ? ) "); parametros.add(TipoAtribuicao.Automatica.name()); parametros.add(TipoAtribuicao.Acompanhamento.name()); sql.append(" )"); final List<?> lista = this.execSQL(sql.toString(), parametros.toArray()); final List<String> listRetorno = new ArrayList(this.getListNamesFieldClass()); listRetorno.add("tipoAtribuicao"); listRetorno.add("idFluxo"); return engine.listConvertion(this.getBean(), lista, listRetorno); } /** * @param idUsuario * @param listGrupoBpmDTO * @param idTarefa * @return * @throws PersistenceException * @author Thiago.borges */ public List<TarefaFluxoDTO> findDisponiveisByIdTarefaEstado(final Integer idSolicictacaoServico, final String estado) throws PersistenceException { final List<Object> parametros = new ArrayList<>(); final List<String> fields = new ArrayList<>(); final StringBuilder sql = new StringBuilder(); sql.append(" select i.iditemtrabalho from bpm_itemtrabalhofluxo i "); sql.append(" inner join execucaosolicitacao ex on ex.idinstanciafluxo = i.idinstancia "); sql.append(" inner join bpm_elementofluxo bef on bef.idelemento = i.idelemento "); sql.append(" where ex.idsolicitacaoservico = ? and (i.situacao = 'disponivel' or i.situacao = 'Criado') "); sql.append(" and bef.nome = ? "); parametros.add(idSolicictacaoServico); parametros.add(estado); final List<?> list = this.execSQL(sql.toString(), parametros.toArray()); fields.add("idItemTrabalho"); final List<TarefaFluxoDTO> listTarefaFluxoDto = this.listConvertion(TarefaFluxoDTO.class, list, fields); final List<TarefaFluxoDTO> listTarefaFluxoAux = new ArrayList<TarefaFluxoDTO>(); if (listTarefaFluxoDto != null && !listTarefaFluxoDto.isEmpty()) { for (final TarefaFluxoDTO dto : listTarefaFluxoDto) { listTarefaFluxoAux.add((TarefaFluxoDTO) this.restore(dto)); } } return listTarefaFluxoAux; } }