package br.com.centralit.citcorpore.rh.integracao; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collection; import java.util.List; import br.com.centralit.citcorpore.rh.bean.CandidatoDTO; 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.integracao.Order; import br.com.citframework.util.Constantes; import br.com.citframework.util.SQLConfig; /** * @author thiago.borges * */ public class CandidatoDao extends CrudDaoDefaultImpl { public CandidatoDao() { super(Constantes.getValue("DATABASE_ALIAS"), null); } @Override public Collection find(final IDto arg0) throws PersistenceException { return null; } @Override public Collection<Field> getFields() { final Collection<Field> listFields = new ArrayList<>(); listFields.add(new Field("IDCANDIDATO", "idCandidato", true, true, false, false)); listFields.add(new Field("NOME", "nome", false, false, false, false)); listFields.add(new Field("CPF", "cpf", false, false, false, false)); listFields.add(new Field("EMAIL", "email", false, false, false, false)); listFields.add(new Field("SITUACAO", "situacao", false, false, false, false)); listFields.add(new Field("TIPO", "tipo", false, false, false, false)); listFields.add(new Field("SENHA", "senha", false, false, false, false)); listFields.add(new Field("DATAINICIO", "dataInicio", false, false, false, false)); listFields.add(new Field("DATAFIM", "dataFim", false, false, false, false)); listFields.add(new Field("AUTENTICADO", "autenticado", false, false, false, false)); listFields.add(new Field("HASHID", "hashID", false, false, false, false)); listFields.add(new Field("IDEMPREGADO", "idEmpregado", false, false, false, false)); return listFields; } @Override public String getTableName() { return "RH_CANDIDATO"; } @Override public Collection list() throws PersistenceException { final List list = new ArrayList(); list.add(new Order("nome")); return super.list(list); } @Override public Class getBean() { return CandidatoDTO.class; } /** * Retorna lista de status de candidato. * * @param obj * @return * @throws Exception */ public boolean consultarCandidatosAtivos(final CandidatoDTO obj) throws PersistenceException { final List parametro = new ArrayList(); List list = new ArrayList(); String sql = "select idcandidato From " + this.getTableName() + " where cpf = ? and dataFim is null "; if (obj.getIdCandidato() != null) { sql += " and idcandidato <> " + obj.getIdCandidato(); } parametro.add(obj.getCpf()); list = this.execSQL(sql, parametro.toArray()); if (list != null && !list.isEmpty()) { return true; } return false; } public boolean validaInsert(final CandidatoDTO obj) { return false; } public Collection findByNome(final CandidatoDTO candidatoDTO) throws PersistenceException { final List condicao = new ArrayList(); final List ordenacao = new ArrayList(); condicao.add(new Condition("nome", "=", candidatoDTO.getNome())); ordenacao.add(new Order("nome")); condicao.add(new Condition(Condition.AND, "dataFim", "is", null)); return super.findByCondition(condicao, ordenacao); } public Collection<CandidatoDTO> seCandidatoJaCadastrado(final CandidatoDTO candidatoDTO) throws PersistenceException { final List parametro = new ArrayList(); List list = new ArrayList(); String sql = ""; sql = " select lower(nome) from rh_candidato where nome = lower(?) "; parametro.add(candidatoDTO.getNome().trim().toLowerCase()); list = this.execSQL(sql, parametro.toArray()); return list; } public Collection<CandidatoDTO> listarAtivos() throws PersistenceException { final List condicao = new ArrayList(); final List ordenacao = new ArrayList(); ordenacao.add(new Order("nome")); condicao.add(new Condition("dataFim", "is", null)); return super.findByCondition(condicao, ordenacao); } /** * Metodos para Iniciativa 74 */ /** * @param id * - idCurriculo * @return - CandidatoDTO - cole��o de candidatos na primeira posi��o * * @author david.silva */ public CandidatoDTO restoreByID(final Integer id) throws PersistenceException { final List ordem = new ArrayList(); ordem.add(new Order("idCandidato")); ordem.add(new Order("nome")); final CandidatoDTO candidatoDto = new CandidatoDTO(); candidatoDto.setIdCandidato(id); final List col = (List) super.find(candidatoDto, ordem); if (col == null || col.size() == 0) { return null; } return (CandidatoDTO) col.get(0); } public CandidatoDTO findByCpfCurriculo(final String cpf) throws PersistenceException { final List ordem = new ArrayList(); ordem.add(new Order("idCandidato")); ordem.add(new Order("nome")); final CandidatoDTO candidatoDto = new CandidatoDTO(); candidatoDto.setCpf(cpf); final List col = (List) super.find(candidatoDto, ordem); if (col == null || col.size() == 0) { return null; } return (CandidatoDTO) col.get(0); } public Collection findListTodosCandidatos() throws PersistenceException { final String sql = "SELECT nome, cpf, idcandidato, email, situacao, tipo FROM rh_candidato ORDER BY nome ASC;"; List lista = new ArrayList(); lista = this.execSQL(sql, null); final List listRetorno = new ArrayList(); listRetorno.add("nome"); listRetorno.add("cpf"); listRetorno.add("idCandidato"); listRetorno.add("email"); listRetorno.add("situacao"); listRetorno.add("tipo"); final List result = engine.listConvertion(this.getBean(), lista, listRetorno); return result; } public Collection findByIdCandidatoJoinIdHistorico(final Integer idCandidato) throws PersistenceException { final List parametro = new ArrayList(); final List fields = new ArrayList(); List list = new ArrayList(); final StringBuilder sql = new StringBuilder(); sql.append("select idHistoricoFuncional from rh_historicofuncional h "); sql.append("inner join rh_candidato c ON c.idcandidato = h.idcandidato "); sql.append("where c.idcandidato = ?"); parametro.add(idCandidato); list = this.execSQL(sql.toString(), parametro.toArray()); fields.add("idHistoricoFuncional"); if (list != null && !list.isEmpty()) { return this.listConvertion(this.getBean(), list, fields); } else { return null; } } public Collection findByCPF(final String cpf) throws PersistenceException { final List condicao = new ArrayList(); final List ordenacao = new ArrayList(); condicao.add(new Condition("cpf", "=", cpf)); condicao.add(new Condition(Condition.AND, "dataFim", "is", null)); ordenacao.add(new Order("nome")); return super.findByCondition(condicao, ordenacao); } public Collection findByNome(final String nome) throws PersistenceException { final String sql = "SELECT nome, cpf, idcandidato, email, situacao, tipo FROM rh_candidato WHERE UPPER(nome) LIKE UPPER('%" + nome + "%');"; List lista = new ArrayList(); lista = this.execSQL(sql, null); final List listRetorno = new ArrayList(); listRetorno.add("nome"); listRetorno.add("cpf"); listRetorno.add("idCandidato"); listRetorno.add("email"); listRetorno.add("situacao"); listRetorno.add("tipo"); final List result = engine.listConvertion(this.getBean(), lista, listRetorno); return result; } public Collection<CandidatoDTO> recuperaColecaoCandidatos(final CandidatoDTO candidatoDto, Integer pgAtual, final Integer qtdPaginacao) throws PersistenceException { final List parametro = new ArrayList(); final List listRetorno = new ArrayList(); final StringBuilder sql = new StringBuilder(); if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.SQLSERVER)) { sql.append(" ;WITH TabelaTemporaria AS ( "); } if (candidatoDto.getCandidatoNaListaNegra() != null && candidatoDto.getCandidatoNaListaNegra().equalsIgnoreCase("S")) { sql.append("SELECT distinct l.idcandidato, c.nome, c.cpf, c.email, c.situacao, c.tipo, c.email "); sql.append("FROM rh_candidato c "); sql.append("INNER JOIN rh_historicofuncional hf "); sql.append("on hf.idcandidato = c.idcandidato "); sql.append("INNER JOIN rh_listanegra l "); sql.append("on c.idcandidato = l.idcandidato "); sql.append("AND l.datafim IS NULL "); } else { sql.append(" SELECT distinct c.idcandidato, c.nome, c.cpf, c.email, c.situacao, c.tipo, c.email "); sql.append(" FROM rh_candidato c "); sql.append(" INNER JOIN rh_historicofuncional hf "); sql.append(" on c.idcandidato = hf.idcandidato "); } if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.SQLSERVER)) { sql.append(" , ROW_NUMBER() OVER (ORDER BY idhistoricofuncional) AS Row "); } if (candidatoDto.getNome() != null && !candidatoDto.getNome().equalsIgnoreCase("")) { sql.append(" AND c.nome like ? "); parametro.add("%" + candidatoDto.getNome() + "%"); } if (candidatoDto.getCpf() != null && !candidatoDto.getCpf().equalsIgnoreCase("")) { sql.append(" AND c.cpf = ? "); parametro.add(candidatoDto.getCpf()); } if (candidatoDto.getTipo() != null && !candidatoDto.getTipo().equalsIgnoreCase("")) { sql.append(" AND c.tipo = ? "); parametro.add(candidatoDto.getTipo()); } if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.MYSQL)) { sql.append(" ORDER BY c.idcandidato "); final Integer pgTotal = pgAtual * qtdPaginacao; pgAtual = pgTotal - qtdPaginacao; sql.append(" LIMIT " + pgAtual + ", " + qtdPaginacao); } if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.POSTGRESQL)) { sql.append(" ORDER BY c.idcandidato"); final Integer pgTotal = pgAtual * qtdPaginacao; pgAtual = pgTotal - qtdPaginacao; sql.append(" LIMIT " + qtdPaginacao + " OFFSET " + pgAtual); } 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; } final int intInicio = pgAtual; final int intLimite = quantidadePaginator2; sqlOracle = this.paginacaoOracle(sql.toString(), intInicio, intLimite); } List lista = new ArrayList(); if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.ORACLE)) { lista = this.execSQL(sqlOracle, parametro.toArray()); } else { lista = this.execSQL(sql.toString(), parametro.toArray()); } listRetorno.add("idCandidato"); listRetorno.add("nome"); listRetorno.add("cpf"); listRetorno.add("email"); listRetorno.add("situacao"); listRetorno.add("tipo"); return engine.listConvertion(this.getBean(), lista, listRetorno); } public String paginacaoOracle(String strSQL, final int intInicio, final int intLimite) { strSQL = strSQL + " order by idcandidato "; return "SELECT * FROM " + "(SELECT PAGING.*, ROWNUM PAGING_RN FROM" + " (" + strSQL + ") PAGING WHERE (ROWNUM <= " + intLimite + "))" + " WHERE (PAGING_RN >= " + intInicio + ") "; } public Integer calculaTotalPaginas(final Integer itensPorPagina, final CandidatoDTO candidatoDto) throws PersistenceException { final List parametro = new ArrayList(); final StringBuilder sql = new StringBuilder(); if (candidatoDto.getCandidatoNaListaNegra() != null && candidatoDto.getCandidatoNaListaNegra().equalsIgnoreCase("S")) { sql.append("SELECT COUNT(*) "); sql.append("FROM rh_candidato c "); sql.append("INNER JOIN rh_listanegra l "); sql.append("on c.idcandidato = l.idcandidato "); sql.append("AND l.datafim IS NULL "); } else { sql.append("SELECT COUNT(*) "); sql.append("FROM rh_candidato c "); sql.append("INNER JOIN rh_historicofuncional hf "); sql.append("on hf.idcandidato = c.idcandidato "); } if (candidatoDto.getNome() != null && !candidatoDto.getNome().equalsIgnoreCase("")) { sql.append(" AND c.nome like ? "); parametro.add("%" + candidatoDto.getNome() + "%"); } if (candidatoDto.getCpf() != null && !candidatoDto.getCpf().equalsIgnoreCase("")) { sql.append(" AND c.cpf = ? "); parametro.add(candidatoDto.getCpf()); } if (candidatoDto.getTipo() != null && !candidatoDto.getTipo().equalsIgnoreCase("")) { sql.append(" AND c.tipo = ? "); parametro.add(candidatoDto.getTipo()); } List lista = new ArrayList(); lista = this.execSQL(sql.toString(), parametro.toArray()); Long totalLinhaLong = 0l; Long totalPagina = 0l; Integer total = 0; BigDecimal totalLinhaBigDecimal; Integer totalLinhaInteger; final int intLimite = itensPorPagina; if (lista != null) { final 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 CandidatoDTO findByEmail(final String email) throws PersistenceException { final List parametro = new ArrayList(); final List listRetorno = new ArrayList(); final StringBuilder sql = new StringBuilder(); sql.append(" SELECT C.NOME, C.CPF, C.IDCANDIDATO, "); sql.append(" C.EMAIL, C.SITUACAO, C.TIPO, C.HASHID, C.AUTENTICADO, C.DATAINICIO, C.SENHA "); sql.append(" FROM RH_CANDIDATO C "); sql.append(" WHERE C.EMAIL = ? AND C.DATAFIM is NULL "); parametro.add(email); listRetorno.add("nome"); listRetorno.add("cpf"); listRetorno.add("idCandidato"); listRetorno.add("email"); listRetorno.add("situacao"); listRetorno.add("tipo"); listRetorno.add("hashID"); listRetorno.add("autenticado"); listRetorno.add("dataInicio"); listRetorno.add("senha"); List lista = new ArrayList(); lista = this.execSQL(sql.toString(), parametro.toArray()); if (lista != null && lista.size() > 0) { final List result = engine.listConvertion(this.getBean(), lista, listRetorno); return (CandidatoDTO) result.get(0); } else { return null; } } public CandidatoDTO restoreByCpf(final String cpf) throws PersistenceException { final List parametro = new ArrayList(); final List listRetorno = new ArrayList(); final StringBuilder sql = new StringBuilder(); sql.append(" SELECT C.NOME, C.CPF, C.IDCANDIDATO, "); sql.append(" C.EMAIL, C.SITUACAO, C.TIPO, C.HASHID, C.AUTENTICADO, C.DATAINICIO, C.SENHA "); sql.append(" FROM RH_CANDIDATO C "); sql.append(" WHERE C.CPF = ? AND C.DATAFIM is NULL "); parametro.add(cpf); listRetorno.add("nome"); listRetorno.add("cpf"); listRetorno.add("idCandidato"); listRetorno.add("email"); listRetorno.add("situacao"); listRetorno.add("tipo"); listRetorno.add("hashID"); listRetorno.add("autenticado"); listRetorno.add("dataInicio"); listRetorno.add("senha"); List lista = new ArrayList(); lista = this.execSQL(sql.toString(), parametro.toArray()); final List result = engine.listConvertion(this.getBean(), lista, listRetorno); if (result != null && !result.isEmpty()) { return (CandidatoDTO) result.get(0); } return null; } public CandidatoDTO findByHashID(final String nome) throws PersistenceException { final List parametro = new ArrayList(); final List listRetorno = new ArrayList(); final StringBuilder sql = new StringBuilder(); sql.append(" SELECT C.NOME, C.CPF, C.IDCANDIDATO, "); sql.append(" C.EMAIL, C.SITUACAO, C.TIPO, C.HASHID, C.AUTENTICADO, C.DATAINICIO, C.SENHA "); sql.append(" FROM RH_CANDIDATO C "); sql.append(" WHERE C.HASHID = ? AND C.DATAFIM is NULL "); parametro.add(nome); listRetorno.add("nome"); listRetorno.add("cpf"); listRetorno.add("idCandidato"); listRetorno.add("email"); listRetorno.add("situacao"); listRetorno.add("tipo"); listRetorno.add("hashID"); listRetorno.add("autenticado"); listRetorno.add("dataInicio"); listRetorno.add("senha"); List lista = new ArrayList(); lista = this.execSQL(sql.toString(), parametro.toArray()); if (lista != null && lista.size() > 0) { final List result = engine.listConvertion(this.getBean(), lista, listRetorno); return (CandidatoDTO) result.get(0); } else { return null; } } public CandidatoDTO restoreByIdEmpregado(final Integer idEmpregado) throws PersistenceException { final List parametro = new ArrayList(); final List listRetorno = new ArrayList(); final StringBuilder sql = new StringBuilder(); sql.append(" SELECT C.NOME, C.CPF, C.IDCANDIDATO, "); sql.append(" C.EMAIL, C.SITUACAO, C.TIPO, C.HASHID, C.AUTENTICADO, C.DATAINICIO, C.SENHA, C.IDEMPREGADO "); sql.append(" FROM RH_CANDIDATO C "); sql.append(" WHERE C.IDEMPREGADO = ? AND C.DATAFIM is NULL "); parametro.add(idEmpregado); listRetorno.add("nome"); listRetorno.add("cpf"); listRetorno.add("idCandidato"); listRetorno.add("email"); listRetorno.add("situacao"); listRetorno.add("tipo"); listRetorno.add("hashID"); listRetorno.add("autenticado"); listRetorno.add("dataInicio"); listRetorno.add("senha"); listRetorno.add("idEmpregado"); List lista = new ArrayList(); lista = this.execSQL(sql.toString(), parametro.toArray()); final List result = engine.listConvertion(this.getBean(), lista, listRetorno); if (result != null && !result.isEmpty()) { return (CandidatoDTO) result.get(0); } return null; } @Override public void updateNotNull(final IDto obj) throws PersistenceException { super.updateNotNull(obj); } }