package br.com.centralit.citcorpore.integracao; import java.sql.Date; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import br.com.centralit.citcorpore.bean.RequisicaoProdutoDTO; import br.com.centralit.citcorpore.util.CITCorporeUtil; import br.com.centralit.citcorpore.util.Enumerados.SituacaoSolicitacaoServico; import br.com.citframework.dto.IDto; import br.com.citframework.excecao.LogicException; import br.com.citframework.excecao.PersistenceException; import br.com.citframework.integracao.CrudDaoDefaultImpl; import br.com.citframework.integracao.Field; import br.com.citframework.util.Constantes; import br.com.citframework.util.SQLConfig; import br.com.citframework.util.UtilDatas; public class RequisicaoProdutoDao extends CrudDaoDefaultImpl { public RequisicaoProdutoDao() { super(Constantes.getValue("DATABASE_ALIAS"), null); } public Collection<Field> getFields() { Collection<Field> listFields = new ArrayList<>(); listFields.add(new Field("idSolicitacaoServico" ,"idSolicitacaoServico", true, false, false, false)); listFields.add(new Field("idProjeto" ,"idProjeto", false, false, false, false)); listFields.add(new Field("idCentroCusto" ,"idCentroCusto", false, false, false, false)); listFields.add(new Field("finalidade" ,"finalidade", false, false, false, false)); listFields.add(new Field("idEnderecoEntrega" ,"idEnderecoEntrega", false, false, false, false)); listFields.add(new Field("rejeitada" ,"rejeitada", false, false, false, false)); listFields.add(new Field("exigeNovaAprovacao" ,"exigeNovaAprovacao", false, false, false, false)); listFields.add(new Field("itemAlterado" ,"itemAlterado", false, false, false, false)); return listFields; } public String getTableName() { return this.getOwner() + "RequisicaoProduto"; } public Collection list() throws PersistenceException { return null; } public Class getBean() { return RequisicaoProdutoDTO.class; } public Collection find(IDto arg0) throws PersistenceException { return null; } /** * Adicionado par�metros para adicionar limite na consulta * * @param seLimita - Se existe limite para listagem * @param limite - Quantidade m�xima de elementos da listagem * @return * @author thyen.chang */ private String getSQLRestoreAll(boolean seLimita, String limite) { StringBuilder sql = new StringBuilder(); sql.append("SELECT "); if ((seLimita)&&(CITCorporeUtil.SGBD_PRINCIPAL.trim().toUpperCase().equalsIgnoreCase(SQLConfig.SQLSERVER))) sql.append("TOP "+ limite +" "); sql.append("sol.idSolicitacaoServico, sol.idbaseconhecimento, sol.idServicoContrato, sol.idSolicitante, "); sql.append(" sol.idItemConfiguracao, sol.idItemConfiguracaoFilho, sol.idtipodemandaservico, sol.idcontatosolicitacaoservico, "); sql.append(" sol.idOrigem, sol.idResponsavel, sol.idTipoProblema, sol.idPrioridade, sol.idUnidade, sol.idFaseAtual, "); sql.append(" sol.idGrupoAtual, sol.dataHoraSolicitacao, sol.dataHoraLimite, sol.atendimentoPresencial, sol.prazoHH, "); sql.append(" sol.prazoMM, sol.descricao, sol.resposta, sol.dataHoraInicio, sol.dataHoraFim, sol.situacao, "); sql.append(" sol.idSolicitacaoPai, sol.detalhamentoCausa, sol.idCausaIncidente, sol.idCategoriaSolucao, "); sql.append(" sol.seqreabertura, sol.enviaEmailCriacao, sol.enviaEmailFinalizacao, sol.enviaEmailAcoes, "); sql.append(" sol.idgruponivel1, sol.solucaoTemporaria, sol.houveMudanca, sol.slaACombinar, sol.prazohhAnterior, "); sql.append(" sol.prazommAnterior, sol.idCalendario, sol.tempoDecorridoHH, sol.tempoDecorridoMM, sol.dataHoraSuspensao, "); sql.append(" sol.dataHoraReativacao, sol.impacto, sol.urgencia, sol.dataHoraCaptura, sol.tempoCapturaHH, sol.tempoCapturaMM, "); sql.append(" sol.tempoAtrasoHH, sol.tempoAtrasoMM, sol.tempoAtendimentoHH, sol.tempoAtendimentoMM, sol.idacordonivelservico, "); sql.append(" s.idservico, s.nomeServico, td.idTipoDemandaServico, td.nomeTipoDemandaServico, c.idContrato, c.numero, e1.nome, u1.nome, "); sql.append(" e2.nome, u2.nome, oa.descricao, p.nomeprioridade, fs.nomefase, "); sql.append(" g1.sigla, g2.sigla, cs.nomecontato, cs.emailcontato, cs.telefonecontato, cs.localizacaofisica ,cs.idlocalidade, "); sql.append(" rp.idCentroCusto, cc.nomeCentroResultado, rp.idProjeto, proj.nomeProjeto, rp.finalidade, rp.idEnderecoEntrega, rp.rejeitada, rp.exigeNovaAprovacao, rp.itemAlterado "); sql.append(" FROM requisicaoproduto rp "); sql.append(" INNER JOIN solicitacaoservico sol ON sol.idsolicitacaoservico = rp.idsolicitacaoservico "); sql.append(" INNER JOIN centroresultado cc ON cc.idcentroresultado = rp.idCentroCusto "); sql.append(" INNER JOIN projetos proj ON proj.idprojeto = rp.idProjeto "); sql.append(" LEFT JOIN servicocontrato sc ON sc.idservicocontrato = sol.idservicocontrato "); sql.append(" LEFT JOIN contratos c ON c.idcontrato = sc.idcontrato "); sql.append(" LEFT JOIN servico s ON s.idservico = sc.idservico "); sql.append(" LEFT JOIN tipodemandaservico td ON td.idtipodemandaservico = s.idtipodemandaservico "); sql.append(" LEFT JOIN empregados e1 ON e1.idempregado = sol.idsolicitante "); sql.append(" LEFT JOIN unidade u1 ON u1.idunidade = e1.idunidade "); sql.append(" LEFT JOIN usuario usu ON usu.idusuario = sol.idresponsavel "); sql.append(" LEFT JOIN empregados e2 ON e2.idempregado = usu.idempregado "); sql.append(" LEFT JOIN unidade u2 ON u2.idunidade = e2.idunidade "); sql.append(" LEFT JOIN origematendimento oa ON oa.idorigem = sol.idorigem "); sql.append(" LEFT JOIN prioridade p ON p.idprioridade = sol.idprioridade "); sql.append(" LEFT JOIN faseservico fs ON fs.idfase = sol.idfaseatual "); sql.append(" LEFT JOIN grupo g1 ON g1.idgrupo = sol.idgrupoatual "); sql.append(" LEFT JOIN grupo g2 ON g2.idgrupo = sol.idgruponivel1 "); sql.append(" LEFT JOIN contatosolicitacaoservico cs ON cs.idcontatosolicitacaoservico = sol.idcontatosolicitacaoservico "); sql.append(" WHERE "); if ((seLimita)&&(CITCorporeUtil.SGBD_PRINCIPAL.trim().toUpperCase().equalsIgnoreCase(SQLConfig.ORACLE))) sql.append("ROWNUM <= " + limite + " AND "); sql.append("1 = 1 "); return sql.toString(); } private List getColunasRestoreAll() { List listRetorno = new ArrayList(); listRetorno.add("idSolicitacaoServico"); listRetorno.add("idbaseconhecimento"); listRetorno.add("idServicoContrato"); listRetorno.add("idSolicitante"); listRetorno.add("idItemConfiguracao"); listRetorno.add("idItemConfiguracaoFilho"); listRetorno.add("idTipodemandaServico"); listRetorno.add("idContatoSolicitacaoServico"); listRetorno.add("idOrigem"); listRetorno.add("idResponsavel"); listRetorno.add("idTipoProblema"); listRetorno.add("idPrioridade"); listRetorno.add("idUnidade"); listRetorno.add("idFaseAtual"); listRetorno.add("idGrupoAtual"); listRetorno.add("dataHoraSolicitacao"); listRetorno.add("dataHoraLimite"); listRetorno.add("atendimentoPresencial"); listRetorno.add("prazoHH"); listRetorno.add("prazoMM"); listRetorno.add("descricao"); listRetorno.add("resposta"); listRetorno.add("dataHoraInicio"); listRetorno.add("dataHoraFim"); listRetorno.add("situacao"); listRetorno.add("idSolicitacaoPai"); listRetorno.add("detalhamentoCausa"); listRetorno.add("idCausaIncidente"); listRetorno.add("idCategoriaSolucao"); listRetorno.add("seqReabertura"); listRetorno.add("enviaEmailCriacao"); listRetorno.add("enviaEmailFinalizacao"); listRetorno.add("enviaEmailAcoes"); listRetorno.add("idGrupoNivel1"); listRetorno.add("solucaoTemporaria"); listRetorno.add("houveMudanca"); listRetorno.add("slaACombinar"); listRetorno.add("prazohhAnterior"); listRetorno.add("prazommAnterior"); listRetorno.add("idCalendario"); listRetorno.add("tempoDecorridoHH"); listRetorno.add("tempoDecorridoMM"); listRetorno.add("dataHoraSuspensao"); listRetorno.add("dataHoraReativacao"); listRetorno.add("impacto"); listRetorno.add("urgencia"); listRetorno.add("dataHoraCaptura"); listRetorno.add("tempoCapturaHH"); listRetorno.add("tempoCapturaMM"); listRetorno.add("tempoAtrasoHH"); listRetorno.add("tempoAtrasoMM"); listRetorno.add("tempoAtendimentoHH"); listRetorno.add("tempoAtendimentoMM"); listRetorno.add("idAcordoNivelServico"); listRetorno.add("idServico"); listRetorno.add("servico"); listRetorno.add("idTipoDemandaServico"); listRetorno.add("demanda"); listRetorno.add("idContrato"); listRetorno.add("contrato"); listRetorno.add("solicitante"); listRetorno.add("nomeUnidadeSolicitante"); listRetorno.add("responsavel"); listRetorno.add("nomeUnidadeResponsavel"); listRetorno.add("origem"); listRetorno.add("prioridade"); listRetorno.add("faseAtual"); listRetorno.add("grupoAtual"); listRetorno.add("grupoNivel1"); listRetorno.add("nomecontato"); listRetorno.add("emailcontato"); listRetorno.add("telefonecontato"); listRetorno.add("observacao"); listRetorno.add("idLocalidade"); listRetorno.add("idCentroCusto"); listRetorno.add("centroCusto"); listRetorno.add("idProjeto"); listRetorno.add("projeto"); listRetorno.add("finalidade"); listRetorno.add("idEnderecoEntrega"); listRetorno.add("rejeitada"); listRetorno.add("exigeNovaAprovacao"); listRetorno.add("itemAlterado"); return listRetorno; } public Collection<RequisicaoProdutoDTO> consultaRequisicoesPorCCusto(HashMap parametros) throws PersistenceException { List parametrosBusca = new ArrayList(); boolean seLimita = !(parametros.get("PARAM.topList").equals("*")); String idEnderecoEntregaStr = (String) parametros.get("PARAM.idEnderecoEntrega"); if (idEnderecoEntregaStr == null || idEnderecoEntregaStr.trim().length() == 0) idEnderecoEntregaStr = "-1"; String idUnidadeStr = (String) parametros.get("PARAM.idUnidade"); if (idUnidadeStr == null || idUnidadeStr.trim().length() == 0) idUnidadeStr = "-1"; String numeroStr = (String) parametros.get("PARAM.numero"); if (numeroStr == null || numeroStr.trim().length() == 0) numeroStr = "-1"; String idServicoStr = (String) parametros.get("PARAM.idServico"); if (idServicoStr == null || idServicoStr.trim().length() == 0) idServicoStr = "-1"; String situacao = (String) parametros.get("PARAM.situacao"); if (situacao == null || situacao.trim().length() == 0) situacao = "*"; parametrosBusca.add(Integer.parseInt((String) parametros.get("PARAM.idContrato"))); parametrosBusca.add(Integer.parseInt((String) parametros.get("PARAM.idContrato"))); parametrosBusca.add(situacao); parametrosBusca.add(situacao); parametrosBusca.add(Integer.parseInt((String) parametros.get("PARAM.idPrioridade"))); parametrosBusca.add(Integer.parseInt((String) parametros.get("PARAM.idPrioridade"))); parametrosBusca.add(Integer.parseInt(idServicoStr)); parametrosBusca.add(Integer.parseInt(idServicoStr)); parametrosBusca.add(Integer.parseInt(idUnidadeStr)); parametrosBusca.add(Integer.parseInt(idUnidadeStr)); parametrosBusca.add(Integer.parseInt((String) parametros.get("PARAM.idOrigem"))); parametrosBusca.add(Integer.parseInt((String) parametros.get("PARAM.idOrigem"))); parametrosBusca.add(Integer.parseInt((String) parametros.get("PARAM.idCentroCusto"))); parametrosBusca.add(Integer.parseInt((String) parametros.get("PARAM.idCentroCusto"))); parametrosBusca.add(Integer.parseInt((String) parametros.get("PARAM.idProjeto"))); parametrosBusca.add(Integer.parseInt((String) parametros.get("PARAM.idProjeto"))); parametrosBusca.add(Integer.parseInt(idEnderecoEntregaStr)); parametrosBusca.add(Integer.parseInt(idEnderecoEntregaStr)); parametrosBusca.add(Integer.parseInt(numeroStr)); parametrosBusca.add(Integer.parseInt(numeroStr)); StringBuilder sql = new StringBuilder(); sql.append(getSQLRestoreAll(seLimita, parametros.get("PARAM.topList").toString())); sql.append("AND (c.idcontrato = ? OR ? = -1) ") .append("AND (sol.situacao = ? OR ? = '*') ") .append("AND (sol.idprioridade = ? OR ? = -1) ") .append("AND (s.idservico = ? OR ? = -1) ") .append("AND (sol.idunidade = ? OR ? = -1) ") .append("AND (sol.idorigem = ? OR ? = -1) ") .append("AND (rp.idCentroCusto = ? OR ? = -1) ") .append("AND (rp.idProjeto = ? OR ? = -1) ") .append("AND (rp.idEnderecoEntrega = ? OR ? = -1) ") .append("AND (rp.idSolicitacaoServico = ? OR ? = -1) "); Date dataInicial = null; if (parametros.get("PARAM.dataInicial") != null && !"".equals(parametros.get("PARAM.dataInicial"))) { try { dataInicial = UtilDatas.strToSQLDate(parametros.get("PARAM.dataInicial").toString()); } catch (LogicException e) { e.printStackTrace(); } sql.append("AND (sol.datahorasolicitacao >= ?) "); parametrosBusca.add(dataInicial); } Date dataFinal = null; if (parametros.get("PARAM.dataFinal") != null && !"".equals(parametros.get("PARAM.dataFinal"))) { try { dataFinal = UtilDatas.strToSQLDate(parametros.get("PARAM.dataFinal").toString()); } catch (LogicException e) { e.printStackTrace(); } sql.append("AND (sol.datahorasolicitacao <= ?) "); parametrosBusca.add(dataFinal); } sql.append("ORDER BY cc.nomeCentroResultado, sol.datahorasolicitacao "); //Se o banco for Postgres ou MySQL, limita a consulta if((seLimita) && ((CITCorporeUtil.SGBD_PRINCIPAL.trim().toUpperCase().equalsIgnoreCase(SQLConfig.POSTGRESQL))||(CITCorporeUtil.SGBD_PRINCIPAL.trim().toUpperCase().equalsIgnoreCase(SQLConfig.MYSQL))) ) sql.append("LIMIT " + parametros.get("PARAM.topList").toString() + " "); List lista = this.execSQL(sql.toString(), parametrosBusca.toArray()); return this.engine.listConvertion(RequisicaoProdutoDTO.class, lista, getColunasRestoreAll()); } public Collection<RequisicaoProdutoDTO> consultaRequisicoesPorUnidade(HashMap parametros) throws PersistenceException { List parametrosBusca = new ArrayList(); parametrosBusca.add(parametros.get("PARAM.dataInicial")); parametrosBusca.add(parametros.get("PARAM.dataFinal")); parametrosBusca.add(Integer.parseInt((String) parametros.get("PARAM.idContrato"))); parametrosBusca.add(Integer.parseInt((String) parametros.get("PARAM.idContrato"))); parametrosBusca.add(parametros.get("PARAM.situacao")); parametrosBusca.add(parametros.get("PARAM.situacao")); parametrosBusca.add(Integer.parseInt((String) parametros.get("PARAM.idPrioridade"))); parametrosBusca.add(Integer.parseInt((String) parametros.get("PARAM.idPrioridade"))); parametrosBusca.add(Integer.parseInt((String) parametros.get("PARAM.idServico"))); parametrosBusca.add(Integer.parseInt((String) parametros.get("PARAM.idServico"))); parametrosBusca.add(Integer.parseInt((String) parametros.get("PARAM.idUnidade"))); parametrosBusca.add(Integer.parseInt((String) parametros.get("PARAM.idUnidade"))); parametrosBusca.add(Integer.parseInt((String) parametros.get("PARAM.idOrigem"))); parametrosBusca.add(Integer.parseInt((String) parametros.get("PARAM.idOrigem"))); parametrosBusca.add(Integer.parseInt((String) parametros.get("PARAM.idCentroCusto"))); parametrosBusca.add(Integer.parseInt((String) parametros.get("PARAM.idCentroCusto"))); parametrosBusca.add(Integer.parseInt((String) parametros.get("PARAM.idProjeto"))); parametrosBusca.add(Integer.parseInt((String) parametros.get("PARAM.idProjeto"))); StringBuilder sql = new StringBuilder(); sql.append(getSQLRestoreAll(false, "")); sql.append("AND (sol.datahorasolicitacao BETWEEN ? AND ?) ") .append("AND (c.idcontrato = ? OR ? = -1) ") .append("AND (sol.situacao = ? OR ? = '*') ") .append("AND (sol.idprioridade = ? OR ? = -1) ") .append("AND (s.idservico = ? OR ? = -1) ") .append("AND (sol.idunidade = ? OR ? = -1) ") .append("AND (sol.idorigem = ? OR ? = -1) ") .append("AND (rp.idCentroCusto = ? OR ? = -1) ") .append("AND (rp.idProjeto = ? OR ? = -1) ") .append("ORDER BY u1.nome, sol.datahorasolicitacao "); List lista = this.execSQL(sql.toString(), parametrosBusca.toArray()); return this.engine.listConvertion(RequisicaoProdutoDTO.class, lista, getColunasRestoreAll()); } @Override public IDto restore(IDto obj) throws PersistenceException { RequisicaoProdutoDTO requisicaoDto = (RequisicaoProdutoDTO) obj; List parametro = new ArrayList(); parametro.add(requisicaoDto.getIdSolicitacaoServico()); String sql = getSQLRestoreAll(false, ""); sql += " AND rp.idsolicitacaoservico = ? "; List lista = this.execSQL(sql.toString(), parametro.toArray()); if (lista != null && !lista.isEmpty()) { List listaResult = this.engine.listConvertion(RequisicaoProdutoDTO.class, lista, getColunasRestoreAll()); return (RequisicaoProdutoDTO) listaResult.get(0); } else { return null; } } public Collection findByIdCentroCusto(Integer idCentroCusto) throws PersistenceException { List parametro = new ArrayList(); parametro.add(idCentroCusto); String sql = getSQLRestoreAll(false, ""); sql += " AND rp.idCentroCusto = ? "; List lista = this.execSQL(sql.toString(), parametro.toArray()); return this.engine.listConvertion(RequisicaoProdutoDTO.class, lista, getColunasRestoreAll()); } public Collection consultaRequisicoesEmAndamento() throws PersistenceException { List parametro = new ArrayList(); parametro.add(SituacaoSolicitacaoServico.EmAndamento.name()); parametro.add(SituacaoSolicitacaoServico.Reaberta.name()); parametro.add(SituacaoSolicitacaoServico.Resolvida.name()); String sql = getSQLRestoreAll(false, ""); sql += " AND (sol.situacao = ? OR sol.situacao = ? OR sol.situacao = ?)"; List lista = this.execSQL(sql.toString(), parametro.toArray()); return this.engine.listConvertion(RequisicaoProdutoDTO.class, lista, getColunasRestoreAll()); } }