package br.com.citframework.integracao; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.List; import br.com.centralit.citcorpore.util.CITCorporeUtil; import br.com.citframework.dto.IDto; import br.com.citframework.dto.LogDados; import br.com.citframework.dto.Usuario; import br.com.citframework.excecao.PersistenceException; import br.com.citframework.util.Constantes; import br.com.citframework.util.SQLConfig; import br.com.citframework.util.UtilDatas; @SuppressWarnings({"rawtypes", "unchecked"}) public class LogDadosDao extends CrudDaoDefaultImpl { private static final String TABLE_NAME = "logdados"; @Override public synchronized IDto create(final IDto obj) throws PersistenceException { LogDados logDados = new LogDados(); if (obj != null) { logDados = (LogDados) obj; final StringBuilder sql = new StringBuilder(); final List parametro = new ArrayList<>(); sql.append("INSERT INTO logdados (dtatualizacao, operacao, dados, idusuario, localorigem, nometabela, datalog) VALUES (?, ?, ?, ?, ?, ?, ?)"); parametro.add(UtilDatas.getDataAtual()); parametro.add(logDados.getOperacao()); parametro.add(logDados.getDados()); parametro.add(logDados.getIdUsuario()); parametro.add(logDados.getLocalOrigem()); parametro.add(logDados.getNomeTabela()); parametro.add(logDados.getDataLog()); this.execUpdate(sql.toString(), parametro.toArray()); } return logDados; } @Override public synchronized IDto createWithID(final IDto obj) throws PersistenceException { return super.createWithID(obj); } private static final Integer LIMIT = 50; public LogDadosDao(final Usuario usuario) { super(Constantes.getValue("DATABASE_ALIAS"), usuario); } @Override public Collection find(final IDto dto) throws PersistenceException { return null; } @Override public Collection<Field> getFields() { final List<Field> lista = new ArrayList<>(); lista.add(new Field("idlog", "idlog", true, true, false, false)); lista.add(new Field("dtAtualizacao", "dtAtualizacao", false, false, false, false)); lista.add(new Field("operacao", "operacao", false, false, false, false)); lista.add(new Field("dados", "dados", false, false, false, false)); lista.add(new Field("idUsuario", "idUsuario", false, false, false, false)); lista.add(new Field("localOrigem", "localOrigem", false, false, false, false)); lista.add(new Field("nomeTabela", "nomeTabela", false, false, false, false)); lista.add(new Field("dataLog", "dataLog", false, false, false, false)); return lista; } @Override public String getTableName() { return TABLE_NAME; } @Override public Collection list() throws PersistenceException { final List<Order> ordenacao = new ArrayList<>(); ordenacao.add(new Order("dtAtualizacao")); return this.list(ordenacao); } public Collection<LogDados> listAllLogs() throws Exception { final StringBuilder sql = new StringBuilder(); final List parametro = new ArrayList<>(); final List fields = new ArrayList<>(); List list = new ArrayList<>(); String orderBy = ""; orderBy = "order by idlog DESC "; if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.SQLSERVER)) { sql.append(" select nome, nometabela, operacao, dados, datalog from (select ROW_NUMBER() OVER(" + orderBy + ") as RowNum, "); sql.append(" usuario.nome, logdados.nometabela, logdados.operacao, logdados.dados, logdados.datalog " + "FROM " + this.getTableName() + " "); sql.append(" logdados INNER JOIN usuario usuario ON usuario.idUsuario = logdados.idUsuario " + "WHERE dtAtualizacao BETWEEN ? AND ? "); sql.append(") as table2 where table2.RowNum between 0 and " + LIMIT + " "); } else { sql.append("SELECT usuario.nome, logdados.nometabela, logdados.operacao, logdados.dados, logdados.datalog " + "FROM " + this.getTableName() + " logdados INNER JOIN usuario usuario ON usuario.idUsuario = logdados.idUsuario " + "WHERE dtAtualizacao BETWEEN ? AND ? "); } if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.ORACLE)) { sql.append(" AND ROWNUM <= " + LIMIT + " " + orderBy + ""); } else { if (!CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.SQLSERVER)) { sql.append(" " + orderBy + " LIMIT " + LIMIT); } } list = this.execSQL(sql.toString(), parametro.toArray()); fields.add("nomeUsuario"); fields.add("nomeTabela"); fields.add("operacao"); fields.add("dados"); fields.add("dataLog"); if (list != null && !list.isEmpty()) { return this.listConvertion(this.getBean(), list, fields); } else { return null; } } public Collection<LogDados> listLogs(final LogDados log) throws Exception { final List parametro = new ArrayList<>(); final List fields = new ArrayList<>(); List list = new ArrayList<>(); final StringBuilder sql = new StringBuilder(); String orderBy = ""; orderBy = "order by idlog DESC "; if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.SQLSERVER)) { sql.append(" select nome, nometabela, operacao, dados, datalog from (select ROW_NUMBER() OVER(" + orderBy + ") as RowNum, "); sql.append(" usuario.nome, logdados.nometabela, logdados.operacao, logdados.dados, logdados.datalog " + "FROM " + this.getTableName() + " "); sql.append(" logdados INNER JOIN usuario usuario ON usuario.idUsuario = logdados.idUsuario " + "WHERE dtAtualizacao BETWEEN ? AND ? "); if (log.getIdUsuario() != null && !log.getIdUsuario().equals("")) { sql.append(" AND logdados.idUsuario = " + log.getIdUsuario()); } sql.append(") as table2 where table2.RowNum between 0 and " + LIMIT + " "); } else { sql.append("SELECT usuario.nome, logdados.nometabela, logdados.operacao, logdados.dados, logdados.datalog " + "FROM " + this.getTableName() + " logdados INNER JOIN usuario usuario ON usuario.idUsuario = logdados.idUsuario " + "WHERE dtAtualizacao BETWEEN ? AND ? "); } if (log.getNomeTabela() != null && !log.getNomeTabela().equals("")) { sql.append(" AND upper(nomeTabela) = '" + log.getNomeTabela().trim() + "'"); } if (!CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.SQLSERVER)) { if (log.getIdUsuario() != null) { sql.append(" AND logdados.idUsuario = " + log.getIdUsuario()); } } if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.ORACLE)) { sql.append(" AND ROWNUM <= " + LIMIT + " " + orderBy + ""); } else { if (!CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.SQLSERVER)) { sql.append(" " + orderBy + " LIMIT " + LIMIT); } } parametro.add(log.getDataInicio()); if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.ORACLE)) { parametro.add(log.getDataFim()); } else { // As linhas abaixo foram necessarias para a hora nao ser considerada String no banco de dados PostgreSQL. final String DATA = log.getDataFim().toString() + " 23:59:59"; final String pattern = "yyyy-MM-dd hh:mm:ss"; final SimpleDateFormat sdf = new SimpleDateFormat(pattern); final java.util.Date d = sdf.parse(DATA); final java.sql.Timestamp sqlDate = new java.sql.Timestamp(d.getTime()); parametro.add(sqlDate); } list = this.execSQL(sql.toString(), parametro.toArray()); fields.add("nomeUsuario"); fields.add("nomeTabela"); fields.add("operacao"); fields.add("dados"); fields.add("dataLog"); if (list != null && !list.isEmpty()) { return this.listConvertion(this.getBean(), list, fields); } else { return null; } } public Collection<LogDados> listNomeTabela() throws Exception { final List parametro = new ArrayList<>(); final List fields = new ArrayList<>(); List list = new ArrayList<>(); final StringBuilder sql = new StringBuilder(); if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.ORACLE)) { sql.append("SELECT DISTINCT UPPER(NOMETABELA) FROM " + this.getTableName() + " ORDER BY UPPER(NOMETABELA)"); } else { sql.append("SELECT DISTINCT UPPER(nometabela) FROM " + this.getTableName() + " ORDER BY UPPER(nomeTabela) ASC"); } list = this.execSQL(sql.toString(), parametro.toArray()); fields.add("nomeTabela"); if (list != null && !list.isEmpty()) { return this.listConvertion(this.getBean(), list, fields); } else { return null; } } @Override public Class<LogDados> getBean() { return LogDados.class; } }