package br.com.centralit.bpm.integracao; import java.util.ArrayList; import java.util.Collection; import java.util.List; import br.com.centralit.bpm.dto.AtribuicaoFluxoDTO; import br.com.centralit.bpm.dto.GrupoBpmDTO; 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; import br.com.citframework.integracao.CrudDaoDefaultImpl; import br.com.citframework.integracao.Field; import br.com.citframework.integracao.Order; import br.com.citframework.util.Constantes; public class AtribuicaoFluxoDao extends CrudDaoDefaultImpl { private static final String TABLE_NAME = "bpm_atribuicaofluxo"; private static final String SQL_RESTORE = "SELECT A.idAtribuicao, A.idItemTrabalho, A.tipo, A.idUsuario, A.idGrupo, A.dataHora FROM Bpm_AtribuicaoFluxo A INNER JOIN Bpm_ItemTrabalhoFluxo I ON A.idItemTrabalho = I.idItemTrabalho "; public AtribuicaoFluxoDao() { super(Constantes.getValue("DATABASE_ALIAS"), null); } private List<String> getListaDeCampos() { final List<String> listRetorno = new ArrayList<>(); listRetorno.add("idAtribuicao"); listRetorno.add("idItemTrabalho"); listRetorno.add("tipo"); listRetorno.add("idUsuario"); listRetorno.add("idGrupo"); listRetorno.add("dataHora"); return listRetorno; } @Override public Collection<Field> getFields() { final Collection<Field> listFields = new ArrayList<>(); listFields.add(new Field("idAtribuicao", "idAtribuicao", true, true, false, false)); listFields.add(new Field("idItemTrabalho", "idItemTrabalho", false, false, false, false)); listFields.add(new Field("tipo", "tipo", false, false, false, false)); listFields.add(new Field("idUsuario", "idUsuario", false, false, false, false)); listFields.add(new Field("idGrupo", "idGrupo", false, false, false, false)); listFields.add(new Field("dataHora", "dataHora", false, false, false, false)); return listFields; } @Override public String getTableName() { return TABLE_NAME; } @Override public Collection<AtribuicaoFluxoDTO> list() throws PersistenceException { return null; } @Override public Class<AtribuicaoFluxoDTO> getBean() { return AtribuicaoFluxoDTO.class; } @Override public Collection<AtribuicaoFluxoDTO> find(final IDto arg0) throws PersistenceException { return null; } public Collection<AtribuicaoFluxoDTO> findDisponiveis(final Integer idUsuario, final Collection<GrupoBpmDTO> grupos) throws PersistenceException { String sql = SQL_RESTORE + " WHERE I.situacao <> ? AND I.situacao <> ? AND (A.idUsuario = ? "; if (grupos != null && !grupos.isEmpty()) { sql += " OR A.idGrupo IN ("; int i = 0; for (final GrupoBpmDTO grupoBpmDto : grupos) { if (i > 0) { sql += ","; } sql += grupoBpmDto.getIdGrupo(); i++; } sql += ") "; } sql += " OR I.idResponsavelAtual = ? )"; final List<?> lista = this.execSQL(sql, new Object[] {SituacaoItemTrabalho.Executado.name(), SituacaoItemTrabalho.Cancelado.name(), idUsuario, idUsuario}); return engine.listConvertion(this.getBean(), lista, this.getListaDeCampos()); } public Collection<AtribuicaoFluxoDTO> findDisponiveisByIdUsuario(final Integer idUsuario) throws PersistenceException { final String sql = SQL_RESTORE + " WHERE I.situacao <> ? AND I.situacao <> ? AND A.idUsuario = ? ORDER BY A.dataHora"; final List<?> lista = this.execSQL(sql, new Object[] {SituacaoItemTrabalho.Executado.name(), SituacaoItemTrabalho.Cancelado.name(), idUsuario}); return engine.listConvertion(this.getBean(), lista, this.getListaDeCampos()); } public Collection<AtribuicaoFluxoDTO> findDisponiveisByIdGrupo(final Integer idGrupo) throws Exception { final String sql = SQL_RESTORE + " WHERE I.situacao <> ? AND I.situacao <> ? AND idGrupo = ? ORDER BY A.dataHora"; final List<?> lista = this.execSQL(sql, new Object[] {SituacaoItemTrabalho.Executado.name(), SituacaoItemTrabalho.Cancelado.name(), idGrupo}); return engine.listConvertion(this.getBean(), lista, this.getListaDeCampos()); } public Collection<AtribuicaoFluxoDTO> findByDisponiveisByIdInstancia(final Integer idInstancia) throws PersistenceException { final String sql = SQL_RESTORE + " WHERE I.situacao <> ? AND I.situacao <> ? AND I.idInstancia = ? ORDER BY A.dataHora"; final List<?> lista = this.execSQL(sql, new Object[] {SituacaoItemTrabalho.Executado.name(), SituacaoItemTrabalho.Cancelado.name(), idInstancia}); return engine.listConvertion(this.getBean(), lista, this.getListaDeCampos()); } public Collection<AtribuicaoFluxoDTO> findByDisponiveisByIdItemTrabalho(final Integer idItemTrabalho) throws PersistenceException { final String sql = SQL_RESTORE + " WHERE I.situacao <> ? AND I.situacao <> ? AND I.idItemTrabalho = ? ORDER BY A.dataHora"; final List<?> lista = this.execSQL(sql, new Object[] {SituacaoItemTrabalho.Executado.name(), SituacaoItemTrabalho.Cancelado.name(), idItemTrabalho}); return engine.listConvertion(this.getBean(), lista, this.getListaDeCampos()); } public Collection<AtribuicaoFluxoDTO> findByIdUsuario(final Integer idUsuario) throws PersistenceException { final List<Condition> condicao = new ArrayList<>(); final List<Order> ordenacao = new ArrayList<>(); condicao.add(new Condition("idUsuario", "=", idUsuario)); ordenacao.add(new Order("idAtribuicao")); return super.findByCondition(condicao, ordenacao); } public Collection<AtribuicaoFluxoDTO> findByIdGrupo(final Integer idGrupo) throws PersistenceException { final List<Condition> condicao = new ArrayList<>(); final List<Order> ordenacao = new ArrayList<>(); condicao.add(new Condition("idGrupo", "=", idGrupo)); ordenacao.add(new Order("idAtribuicao")); return super.findByCondition(condicao, ordenacao); } public Collection<AtribuicaoFluxoDTO> findByIdItemTrabalhoAndTipo(final Integer idItemTrabalho, final String tipo) throws PersistenceException { final List<Condition> condicao = new ArrayList<>(); final List<Order> ordenacao = new ArrayList<>(); condicao.add(new Condition("idItemTrabalho", "=", idItemTrabalho)); condicao.add(new Condition("tipo", "=", tipo)); ordenacao.add(new Order("idAtribuicao")); return super.findByCondition(condicao, ordenacao); } public Collection<AtribuicaoFluxoDTO> findByIdItemTrabalhoAndIdUsuario(final Integer idItemTrabalho, final Integer idUsuario, final TipoAtribuicao tipo) throws PersistenceException { final List<Condition> condicao = new ArrayList<>(); final List<Order> ordenacao = new ArrayList<>(); condicao.add(new Condition("idItemTrabalho", "=", idItemTrabalho)); condicao.add(new Condition("tipo", "=", tipo.name())); condicao.add(new Condition("idUsuario", "=", idUsuario)); ordenacao.add(new Order("idAtribuicao")); return super.findByCondition(condicao, ordenacao); } public void deleteDelegacao(final Integer idItemTrabalho) throws PersistenceException { final List<Condition> condicao = new ArrayList<>(); condicao.add(new Condition("idItemTrabalho", "=", idItemTrabalho)); condicao.add(new Condition("tipo", "=", TipoAtribuicao.Delegacao.name())); super.deleteByCondition(condicao); } /** * * Consulta na tabela a existencia de registros cadastrados com os itens do parametro * * @param idItemTrabalho * @param idUsuario * @param tipo * @return * @throws PersistenceException */ public Collection<AtribuicaoFluxoDTO> findByIdItemTrabalhoAndIdUsuarioAndTipo(final Integer idItemTrabalho, final Integer idUsuario, final String tipo) throws PersistenceException { final List<Condition> condicao = new ArrayList<>(); condicao.add(new Condition("idItemTrabalho", "=", idItemTrabalho)); condicao.add(new Condition("idUsuario", "=", idUsuario)); condicao.add(new Condition("tipo", "=", tipo)); final List<Order> ordenacao = new ArrayList<>(); ordenacao.add(new Order("idAtribuicao")); return super.findByCondition(condicao, ordenacao); } public Collection<AtribuicaoFluxoDTO> findByDisponiveisByIdInstanciaAndIdUsuario(final Integer idInstancia, final Integer idUsuario) throws PersistenceException { final String sql = SQL_RESTORE + " WHERE I.situacao <> ? AND I.situacao <> ? AND I.idInstancia = ? AND A.idUsuario = ? ORDER BY A.dataHora"; final List<?> lista = this.execSQL(sql, new Object[] {SituacaoItemTrabalho.Executado.name(), SituacaoItemTrabalho.Cancelado.name(), idInstancia, idUsuario}); return engine.listConvertion(this.getBean(), lista, this.getListaDeCampos()); } }