package br.com.centralit.citcorpore.integracao; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collection; import java.util.List; import br.com.centralit.citcorpore.bean.GrupoEmpregadoDTO; import br.com.centralit.citcorpore.bean.RelatorioGruposUsuarioDTO; import br.com.centralit.citcorpore.util.CITCorporeUtil; 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.util.Constantes; import br.com.citframework.util.SQLConfig; @SuppressWarnings({ "unchecked", "rawtypes" }) public class GrupoEmpregadoDao extends CrudDaoDefaultImpl { public GrupoEmpregadoDao() { super(Constantes.getValue("DATABASE_ALIAS"), null); } public Class getBean() { return GrupoEmpregadoDTO.class; } public Collection<Field> getFields() { Collection<Field> listFields = new ArrayList<>(); listFields.add(new Field("idGrupo", "idGrupo", true, false, false, false)); listFields.add(new Field("idEmpregado", "idEmpregado", true, false, false, false)); listFields.add(new Field("enviaEmail", "enviaEmail", true, false, false, false)); return listFields; } public String getTableName() { return "GRUPOSEMPREGADOS"; } public Collection find(IDto obj) throws PersistenceException { return null; } public Collection list() throws PersistenceException { return null; } public void deleteByIdEmpregado(Integer idEmpregado) throws PersistenceException { List lstCondicao = new ArrayList(); lstCondicao.add(new Condition(Condition.AND, "idEmpregado", "=", idEmpregado)); super.deleteByCondition(lstCondicao); } public void deleteByIdGrupo(Integer idGrupo) throws PersistenceException { List lstCondicao = new ArrayList(); lstCondicao.add(new Condition("idGrupo", "=", idGrupo)); super.deleteByCondition(lstCondicao); } /** * Deleta GrupoEmpregado por idGrupo e idEmpregado. * * @param idGrupo * @param idEmpregado * @throws Exception */ public void deleteByIdGrupoAndEmpregado(Integer idGrupo, Integer idEmpregado) throws PersistenceException { List lstCondicao = new ArrayList(); lstCondicao.add(new Condition("idGrupo", "=", idGrupo)); lstCondicao.add(new Condition(Condition.AND, "idEmpregado", "=", idEmpregado)); super.deleteByCondition(lstCondicao); } public Collection findByIdEmpregado(Integer idEmpregado) throws PersistenceException { Object[] objs = new Object[] { idEmpregado }; String sql = "SELECT G.idGrupo, G.sigla, GE.idEmpregado FROM gruposempregados GE INNER JOIN grupo G ON G.idGrupo = GE.idGrupo WHERE GE.idEmpregado = ? "; List lista = this.execSQL(sql, objs); List listRetorno = new ArrayList(); listRetorno.add("idGrupo"); listRetorno.add("sigla"); listRetorno.add("idEmpregado"); return this.engine.listConvertion(getBean(), lista, listRetorno); } public Collection findAtivosByIdEmpregado(Integer idEmpregado) throws PersistenceException { Object[] objs = new Object[] { idEmpregado }; String sql = "SELECT G.idGrupo, G.sigla, GE.idEmpregado FROM GruposEmpregados GE INNER JOIN Grupo G ON G.idGrupo = GE.idGrupo WHERE G.dataFim IS NULL AND GE.idEmpregado = ? "; List lista = this.execSQL(sql, objs); List listRetorno = new ArrayList(); listRetorno.add("idGrupo"); listRetorno.add("sigla"); listRetorno.add("idEmpregado"); return this.engine.listConvertion(getBean(), lista, listRetorno); } public Collection<GrupoEmpregadoDTO> findByIdGrupo(Integer idGrupo) throws PersistenceException { Object[] objs = new Object[] { idGrupo }; StringBuilder sql = new StringBuilder(); String orderBy = ""; if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.SQLSERVER)) { orderBy = "ORDER BY LTRIM(RTRIM(EM.NOME))"; } else { orderBy = "ORDER BY TRIM(EM.NOME)"; } sql.append("SELECT G.idGrupo, G.sigla, GE.idEmpregado FROM GruposEmpregados GE INNER JOIN Grupo G ON G.idGrupo = GE.idGrupo " + "INNER JOIN EMPREGADOS EM ON GE.IDEMPREGADO = EM.IDEMPREGADO WHERE GE.idGrupo = ? " + orderBy + " "); List lista = this.execSQL(sql.toString(), objs); List listRetorno = new ArrayList(); listRetorno.add("idGrupo"); listRetorno.add("sigla"); listRetorno.add("idEmpregado"); if (lista != null && !lista.isEmpty()) { return this.engine.listConvertion(getBean(), lista, listRetorno); } else { return null; } } /** * Retorna Lista de GrupoEmpregadoDTO com informa��es do Grupo e Empregados. * * @param idGrupo * - Identificador �nico do Grupo. * @return listGrupoEmpregadoDTO - Lista de GrupoEmpregadoDTO com informa��es do empregado. * @throws PersistenceException * @author valdoilo.damasceno */ public Collection<GrupoEmpregadoDTO> findGrupoAndEmpregadoByIdGrupo(Integer idGrupo) throws PersistenceException { List camposRetorno = new ArrayList(); List parametros = new ArrayList(); StringBuilder orderBy = new StringBuilder(); StringBuilder sql = new StringBuilder(); parametros.add(idGrupo); camposRetorno.add("idGrupo"); camposRetorno.add("sigla"); camposRetorno.add("idEmpregado"); camposRetorno.add("nomeEmpregado"); camposRetorno.add("enviaEmail"); if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.SQLSERVER)) { orderBy.append(" ORDER BY LTRIM(RTRIM(empregado.nome)) "); } else { orderBy.append(" ORDER BY TRIM(empregado.nome)"); } sql.append("SELECT grupo.idgrupo, grupo.sigla, empregado.idempregado, empregado.nome, grupoemp.enviaemail "); sql.append(" FROM gruposempregados grupoemp "); sql.append(" INNER JOIN empregados empregado ON empregado.idempregado = grupoemp.idempregado "); sql.append(" INNER JOIN grupo grupo ON grupo.idgrupo = grupoemp.idgrupo "); sql.append(" WHERE grupo.idgrupo = ? AND empregado.datafim IS NULL "); sql.append(orderBy.toString()); List list = this.execSQL(sql.toString(), parametros.toArray()); return this.engine.listConvertion(this.getBean(), list, camposRetorno); } public Collection<GrupoEmpregadoDTO> findUsariosGrupo() throws PersistenceException { Object[] objs = new Object[] {}; String sql; if (CITCorporeUtil.SGBD_PRINCIPAL.equalsIgnoreCase("SQLSERVER")) { sql = " select em.idEmpregado from GruposEmpregados gp inner join empregados em on gp.idempregado = em.idempregado " + " where idgrupo in (select idgrupo from Grupo where servicedesk = 'S' and datafim is null) " + " group by em.idEmpregado, em.nome order by RTRIM(LTRIM(em.nome))"; } else { sql = "select em.idEmpregado " + "from GruposEmpregados gp " + "inner join empregados em " + "on gp.idempregado = em.idempregado " + "where idgrupo in (select idgrupo from Grupo where servicedesk = 'S' and datafim is null) " + "group by em.idEmpregado, em.nome " + "order by trim(em.nome) "; } List lista = this.execSQL(sql, objs); List listRetorno = new ArrayList(); listRetorno.add("idEmpregado"); if (lista != null && !lista.isEmpty()) { return this.engine.listConvertion(getBean(), lista, listRetorno); } else { return null; } } /** * Retorna GrupoEmpregado do Tipo HelpDesk de acordo com o ID Contrato informado. * * @param idContrato * - Identificador do contrato. * @return Collection<GrupoEmpregadoDTO> * @throws PersistenceException * @author valdoilo.damasceno */ public Collection<GrupoEmpregadoDTO> findGrupoEmpregadoHelpDeskByIdContrato(Integer idContrato) throws PersistenceException { if (idContrato != null) { Object[] parametros = new Object[] { idContrato }; StringBuilder sql = new StringBuilder(); if (CITCorporeUtil.SGBD_PRINCIPAL.equalsIgnoreCase("SQLSERVER")) { sql.append("select em.idempregado from gruposempregados gp inner join empregados em on gp.idempregado = em.idempregado where idgrupo in ( "); sql.append("select grupo.idgrupo from grupo inner join contratosgrupos on grupo.idgrupo = contratosgrupos.idgrupo where servicedesk = 'S' and datafim is null and idcontrato = ?)"); sql.append("group by em.idempregado, em.nome order by RTRIM(LTRIM(em.nome))"); } else { sql.append("select em.idempregado from gruposempregados gp inner join empregados em on gp.idempregado = em.idempregado where idgrupo in ( "); sql.append("select grupo.idgrupo from grupo inner join contratosgrupos on grupo.idgrupo = contratosgrupos.idgrupo where servicedesk = 'S' and datafim is null and idcontrato = ?)"); sql.append("group by em.idempregado, em.nome order by trim(em.nome)"); } List lista = null; lista = this.execSQL(sql.toString(), parametros); List listRetorno = new ArrayList(); listRetorno.add("idEmpregado"); if (lista != null && !lista.isEmpty()) { return this.engine.listConvertion(getBean(), lista, listRetorno); } else { return null; } } else { return null; } } public Collection<RelatorioGruposUsuarioDTO> listaRelatorioGruposUsuario(Integer idColaborador) throws PersistenceException { List listRetorno = new ArrayList(); List param = new ArrayList(); List lista = new ArrayList(); StringBuilder sql = new StringBuilder(); sql.append(" SELECT em.nome as nomeColaborador, gr.idgrupo as idGrupo,gr.nome as nomeGrupo "); sql.append(" FROM gruposempregados gre "); sql.append(" inner join grupo gr on gre.idgrupo = gr.idgrupo "); sql.append(" inner join empregados em on gre.idempregado=em.idempregado "); if (idColaborador != null) { sql.append(" where em.idempregado = ? "); } sql.append(" order by em.idempregado, idgrupo "); if (idColaborador != null) { param.add(idColaborador); } if (param != null) { lista = this.execSQL(sql.toString(), param.toArray()); } listRetorno.add("nomeColaborador"); listRetorno.add("idGrupo"); listRetorno.add("nomeGrupo"); if (lista != null && !lista.isEmpty()) { Collection<RelatorioGruposUsuarioDTO> listResultado = this.engine.listConvertion(RelatorioGruposUsuarioDTO.class, lista, listRetorno); return listResultado; } return null; } public Collection findByIdEmpregadoNome(Integer idEmpregado) throws PersistenceException { Object[] objs = new Object[] { idEmpregado }; String sql = "SELECT G.idGrupo, G.nome as sigla, GE.idEmpregado " + " FROM gruposempregados GE INNER JOIN grupo G ON G.idGrupo = GE.idGrupo " + " WHERE GE.idEmpregado = ? order by sigla "; List lista = this.execSQL(sql, objs); List listRetorno = new ArrayList(); listRetorno.add("idGrupo"); listRetorno.add("sigla"); listRetorno.add("idEmpregado"); return this.engine.listConvertion(getBean(), lista, listRetorno); } /** * M�todo respons�vel por verificar se h� alguma solicita��o de servi�o em andamento neste grupo que esteja vinculada ao empregado a ser excluido do grupo * * @param idGrupo * @param idEmpregado * @return * @throws PersistenceException */ public Collection<GrupoEmpregadoDTO> verificacaoResponsavelPorSolicitacao(Integer idGrupo, Integer idEmpregado) throws PersistenceException { Object[] objs = new Object[] { idGrupo, idEmpregado, idGrupo }; List listRetorno = new ArrayList(); List lista = new ArrayList(); StringBuilder sql = new StringBuilder(); sql.append("SELECT atr.idGrupo, it.idresponsavelatual, us.nome as nomeEmpregado FROM gruposempregados ge "); sql.append(" INNER JOIN bpm_itemtrabalhofluxo it ON it.idresponsavelatual = ge.idempregado "); sql.append(" INNER JOIN execucaosolicitacao ex ON ex.idinstanciafluxo = it.idinstancia "); sql.append(" INNER JOIN bpm_atribuicaofluxo atr ON atr.iditemtrabalho = it.iditemtrabalho "); sql.append(" INNER JOIN usuario us ON us.idempregado = ge.idempregado "); sql.append(" WHERE it.situacao <> 'Executado' AND it.situacao <> 'Cancelado'"); sql.append(" AND it.idresponsavelatual IS NOT NULL AND atr.tipo = 'Automatica' AND atr.idgrupo = ? AND it.idresponsavelatual = ? AND ge.idGrupo = ?;"); lista = this.execSQL(sql.toString(), objs); listRetorno.add("idGrupo"); listRetorno.add("idEmpregado"); listRetorno.add("nomeEmpregado"); return this.engine.listConvertion(getBean(), lista, listRetorno); } public Integer calculaTotalPaginas(Integer itensPorPagina, Integer idGrupo) throws PersistenceException { List parametro = new ArrayList(); StringBuilder sql = new StringBuilder(); sql.append(" select COUNT(*) "); sql.append(" from gruposempregados "); sql.append(" where idgrupo = ? "); parametro.add(idGrupo); List lista = new ArrayList(); lista = this.execSQL(sql.toString(), parametro.toArray()); Long totalLinhaLong = 0l; Long totalPagina = 0l; Integer total = 0; BigDecimal totalLinhaBigDecimal; Integer totalLinhaInteger; int intLimite = itensPorPagina; if(lista != null){ Object[] totalLinha = (Object[]) lista.get(0); if(totalLinha != null && totalLinha.length > 0){ if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.POSTGRESQL) || CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.MYSQL)) { totalLinhaLong = (Long) totalLinha[0]; } if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.ORACLE)) { totalLinhaBigDecimal = (BigDecimal) totalLinha[0]; totalLinhaLong = totalLinhaBigDecimal.longValue(); } if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.SQLSERVER)) { totalLinhaInteger = (Integer) totalLinha[0]; totalLinhaLong = Long.valueOf(totalLinhaInteger); } } } if (totalLinhaLong > 0) { totalPagina = (totalLinhaLong / intLimite); if(totalLinhaLong % intLimite != 0){ totalPagina = totalPagina + 1; } } total = Integer.valueOf(totalPagina.toString()); return total; } public Collection<GrupoEmpregadoDTO> paginacaoGrupoEmpregado(Integer idGrupo, Integer pgAtual, Integer qtdPaginacao) throws PersistenceException { List parametro = new ArrayList(); List listRetorno = new ArrayList(); StringBuilder sql = new StringBuilder(); if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.SQLSERVER)) { sql.append(" ;WITH TabelaTemporaria AS ( "); } sql.append(" SELECT grupo.idgrupo, grupo.sigla, empregado.idempregado, empregado.nome, grupoemp.enviaemail "); if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.SQLSERVER)) { sql.append(" , ROW_NUMBER() OVER (ORDER BY empregado.nome) AS Row "); } sql.append(" FROM gruposempregados grupoemp "); sql.append(" INNER JOIN empregados empregado ON grupoemp.idempregado = empregado.idempregado "); sql.append(" INNER JOIN grupo grupo ON grupoemp.idgrupo = grupo.idgrupo "); sql.append(" WHERE grupoemp.idgrupo = ? AND empregado.datafim IS NULL "); parametro.add(idGrupo); if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.POSTGRESQL)) { sql.append(" ORDER BY empregado.nome"); Integer pgTotal = pgAtual * qtdPaginacao; pgAtual = pgTotal - qtdPaginacao; sql.append(" LIMIT " + qtdPaginacao + " OFFSET " +pgAtual); } if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.MYSQL)){ sql.append(" ORDER BY empregado.nome"); Integer pgTotal = pgAtual * qtdPaginacao; pgAtual = pgTotal - qtdPaginacao; sql.append(" LIMIT " +pgAtual+ ", "+qtdPaginacao); } if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.SQLSERVER)){ Integer quantidadePaginator2 = new Integer(0); if (pgAtual > 0) { quantidadePaginator2 = qtdPaginacao * pgAtual; pgAtual = (pgAtual * qtdPaginacao) - qtdPaginacao; }else{ quantidadePaginator2 = qtdPaginacao; pgAtual = 0; } sql.append(" ) SELECT * FROM TabelaTemporaria WHERE Row> "+pgAtual+" and Row<"+(quantidadePaginator2+1)+" "); } String sqlOracle = ""; if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.ORACLE)){ Integer quantidadePaginator2 = new Integer(0); if (pgAtual > 1) { quantidadePaginator2 = qtdPaginacao * pgAtual; pgAtual = (pgAtual * qtdPaginacao) - qtdPaginacao; pgAtual = pgAtual + 1; }else{ quantidadePaginator2 = qtdPaginacao; pgAtual = 0; } int intInicio = pgAtual; int intLimite = quantidadePaginator2; sqlOracle = paginacaoOracle(sql.toString(), intInicio, intLimite); } List lista = new ArrayList(); if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.ORACLE)){ lista = this.execSQL(sqlOracle, parametro.toArray()); }else{ /* Desenvolvedor: Euler Data: 28/10/2013 Hor�rio: 10h57min ID Citsmart: 120393 Motivo/Coment�rio: Loop infinito ao selecionar um grupo sem empregados */ lista = this.execSQL(sql.toString(), parametro.toArray()); } listRetorno.add("idGrupo"); listRetorno.add("sigla"); listRetorno.add("idEmpregado"); listRetorno.add("nomeEmpregado"); listRetorno.add("enviaEmail"); List result = this.engine.listConvertion(getBean(), lista, listRetorno); return (result == null ? new ArrayList<GrupoEmpregadoDTO>() : result); } public String paginacaoOracle(String strSQL, int intInicio, int intLimite) { strSQL = strSQL + " order by empregado.nome "; return "SELECT * FROM (SELECT PAGING.*, ROWNUM PAGING_RN FROM" + " (" + strSQL + ") PAGING WHERE (ROWNUM <= " + intLimite + "))" + " WHERE (PAGING_RN >= " + intInicio + ") "; } /** * Metodo que valida na tabela gruposempregados a existencia de registro com os parametros informados * * @param idEmpregado * @param idGrupo * * @return TRUE: Existe registro com os parametros informados || FALSE: N�o existe registro com os parametros informados * * @throws PersistenceException */ public boolean grupoempregado (Integer idEmpregado, Integer idGrupo) throws PersistenceException { List lista = new ArrayList(); List param = new ArrayList(); StringBuilder sql = new StringBuilder(" select * from gruposempregados ge where ge.idempregado=? and ge.idgrupo=? "); param.add(idEmpregado); param.add(idGrupo); lista = this.execSQL(sql.toString(), param.toArray()); if (lista != null && !lista.isEmpty()) return true; else return false; } public Collection<GrupoEmpregadoDTO> findEmpregado(Integer idGrupo, Integer idEmpregado) throws PersistenceException { List param = new ArrayList(); StringBuilder sql = new StringBuilder(); sql.append("SELECT * FROM GruposEmpregados GE WHERE GE.idGrupo = ? and idEmpregado = ?"); param.add(idGrupo); param.add(idEmpregado); List lista = this.execSQL(sql.toString(), param.toArray()); List listRetorno = new ArrayList(); listRetorno.add("idGrupo"); listRetorno.add("idEmpregado"); listRetorno.add("enviaemail"); if (lista != null && !lista.isEmpty()) { return this.engine.listConvertion(getBean(), lista, listRetorno); } else { return null; } } }