package br.com.centralit.citcorpore.integracao; import java.sql.Date; import java.sql.Timestamp; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import br.com.centralit.citcorpore.bean.HistoricoSolicitacaoServicoDTO; import br.com.centralit.citcorpore.bean.RelatorioCargaHorariaDTO; import br.com.centralit.citcorpore.bean.SolicitacaoServicoDTO; import br.com.centralit.citcorpore.util.CITCorporeUtil; import br.com.citframework.dto.IDto; 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; @SuppressWarnings({ "rawtypes", "unchecked" }) public class HistoricoSolicitacaoServicoDao extends CrudDaoDefaultImpl { public HistoricoSolicitacaoServicoDao() { super(Constantes.getValue("DATABASE_ALIAS"), null); // TODO Auto-generated constructor stub } /** * */ @Override public Collection find(IDto obj) throws PersistenceException { return null; } @Override public Collection<Field> getFields() { Collection<Field> listFields = new ArrayList<>(); listFields.add(new Field("idHistoricoSolicitacao", "idHistoricoSolicitacao", true, true, false, false)); listFields.add(new Field("idSolicitacaoServico", "idSolicitacaoServico", false, false, false, false)); listFields.add(new Field("idResponsavelAtual", "idResponsavelAtual", false, false, false, false)); listFields.add(new Field("idGrupo", "idGrupo", false, false, false, false)); listFields.add(new Field("idOcorrencia", "idOcorrencia", false, false, false, false)); listFields.add(new Field("dataCriacao", "dataCriacao", false, false, false, false)); listFields.add(new Field("dataFinal", "dataFinal", false, false, false, false)); listFields.add(new Field("horasTrabalhadas", "horasTrabalhadas", false, false, false, false)); listFields.add(new Field("idServicoContrato", "idServicoContrato", false, false, false, false)); listFields.add(new Field("idCalendario", "idCalendario", false, false, false, false)); listFields.add(new Field("status", "status", false, false, false, false)); return listFields; } @Override public String getTableName() { return "HistoricoSolicitacaoServico"; } @Override public Class getBean() { return HistoricoSolicitacaoServicoDTO.class; } @Override public Collection list() throws PersistenceException { return null; } public boolean findHistoricoSolicitacao(Integer idSolicitacaoServico) throws Exception { StringBuilder sql = new StringBuilder(); List parametro = new ArrayList(); List list = new ArrayList(); sql.append("SELECT idHistoricoSolicitacao "); sql.append("FROM " + getTableName() + " "); sql.append("WHERE idSolicitacaoServico = ? "); sql.append("AND datafinal is null "); parametro.add(idSolicitacaoServico); list = this.execSQL(sql.toString(), parametro.toArray()); List listRetorno = new ArrayList(); listRetorno.add("idServicoContratoContrato"); List result = this.engine.listConvertion(getBean(), list, listRetorno); if (result == null || result.size() == 0) { return true; } else { return false; } } public Collection<HistoricoSolicitacaoServicoDTO> restoreHistoricoServico(Integer idSolicitacaoServico)throws Exception { StringBuilder sql = new StringBuilder(); List parametro = new ArrayList(); List list = new ArrayList(); sql.append("SELECT idHistoricoSolicitacao,idSolicitacaoServico,idResponsavelAtual,idGrupo,idOcorrencia,dataCriacao,dataFinal,horasTrabalhadas,idServicoContrato,idCalendario,status "); sql.append("FROM " + getTableName() + " "); sql.append("WHERE idSolicitacaoServico = ? "); sql.append("AND datafinal is null "); parametro.add(idSolicitacaoServico); list = this.execSQL(sql.toString(), parametro.toArray()); List listRetorno = new ArrayList(); listRetorno.add("idHistoricoSolicitacao"); listRetorno.add("idSolicitacaoServico"); listRetorno.add("idResponsavelAtual"); listRetorno.add("idGrupo"); listRetorno.add("idOcorrencia"); listRetorno.add("dataCriacao"); listRetorno.add("datafinal"); listRetorno.add("horasTrabalhadas"); listRetorno.add("idServicoContrato"); listRetorno.add("idCalendario"); listRetorno.add("status"); List result = this.engine.listConvertion(getBean(), list, listRetorno); if (result != null && !result.isEmpty()) { return result; }else{ return null; } } public Collection<HistoricoSolicitacaoServicoDTO> findResponsavelAtual(Integer idSolicitacaoServico)throws Exception { StringBuilder sql = new StringBuilder(); List parametro = new ArrayList(); List list = new ArrayList(); sql.append("SELECT bpm_itemtrabalhofluxo.idresponsavelatual "); sql.append("FROM solicitacaoservico solicitacaoservico "); sql.append("INNER JOIN execucaosolicitacao execucaosolicitacao "); sql.append("ON execucaosolicitacao.idsolicitacaoservico = solicitacaoservico.idsolicitacaoservico "); sql.append("INNER JOIN bpm_itemtrabalhofluxo bpm_itemtrabalhofluxo "); sql.append("ON bpm_itemtrabalhofluxo.idinstancia = execucaosolicitacao.idinstanciafluxo "); sql.append("WHERE solicitacaoservico.idsolicitacaoservico = ? "); sql.append("AND bpm_itemtrabalhofluxo.datahorafinalizacao is null "); sql.append("AND bpm_itemtrabalhofluxo.idresponsavelatual is not null "); parametro.add(idSolicitacaoServico); list = this.execSQL(sql.toString(), parametro.toArray()); List listRetorno = new ArrayList(); listRetorno.add("idResponsavelAtual"); List result = this.engine.listConvertion(getBean(), list, listRetorno); if (result != null && !result.isEmpty()) { return result; }else{ return null; } } public Collection<RelatorioCargaHorariaDTO> imprimirCargaHorariaUsuario(SolicitacaoServicoDTO solicitacaoServicoDTO)throws Exception { StringBuilder sql = new StringBuilder(); List parametro = new ArrayList(); List list = new ArrayList(); sql.append("SELECT usuario.nome as nomeUsuario, sum(historicosolicitacaoservico.horastrabalhadas) AS soma "); sql.append("FROM historicosolicitacaoservico "); sql.append("INNER JOIN usuario "); sql.append("ON usuario.idusuario = historicosolicitacaoservico.idresponsavelatual "); sql.append("inner join servicocontrato on historicosolicitacaoservico.idservicocontrato = servicocontrato.idservicocontrato "); sql.append("inner join contratos on servicocontrato.idcontrato = contratos.idcontrato "); if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.ORACLE)) { sql.append("WHERE to_char(historicosolicitacaoservico.datacriacao, 'YYYY-MM-DD') BETWEEN ? AND ? "); }else{ sql.append("WHERE historicosolicitacaoservico.datacriacao BETWEEN ? AND ? "); } if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.ORACLE)) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); parametro.add(formatter.format(solicitacaoServicoDTO.getDataInicio())); parametro.add(formatter.format(solicitacaoServicoDTO.getDataFim())); } else { parametro.add(solicitacaoServicoDTO.getDataInicio()); parametro.add(transformaHoraFinal(solicitacaoServicoDTO.getDataFim())); } if (solicitacaoServicoDTO.getIdGrupoAtual()!= null) { sql.append("AND historicosolicitacaoservico.idgrupo = ? "); parametro.add(solicitacaoServicoDTO.getIdGrupoAtual()); } if (solicitacaoServicoDTO.getIdContrato()!= null) { sql.append("AND contratos.idcontrato = ? "); parametro.add(solicitacaoServicoDTO.getIdContrato()); } sql.append("GROUP BY historicosolicitacaoservico.idresponsavelatual,usuario.nome "); sql.append("ORDER BY usuario.nome "); list = this.execSQL(sql.toString(), parametro.toArray()); List listRetorno = new ArrayList(); listRetorno.add("nomeUsuario"); listRetorno.add("soma"); List result = this.engine.listConvertion(RelatorioCargaHorariaDTO.class, list, listRetorno); if (result != null && !result.isEmpty()) { return result; }else{ return null; } } public Collection<RelatorioCargaHorariaDTO> imprimirCargaHorariaGrupo(SolicitacaoServicoDTO solicitacaoServicoDTO)throws Exception { StringBuilder sql = new StringBuilder(); List parametro = new ArrayList(); List list = new ArrayList(); sql.append("SELECT grupo.nome AS nomeGrupo,Sum(historicosolicitacaoservico.horastrabalhadas) AS soma "); sql.append("FROM historicosolicitacaoservico "); sql.append(" INNER JOIN grupo "); sql.append(" ON grupo.idgrupo = historicosolicitacaoservico.idgrupo "); sql.append("inner join servicocontrato on historicosolicitacaoservico.idservicocontrato = servicocontrato.idservicocontrato "); sql.append("inner join contratos on servicocontrato.idcontrato = contratos.idcontrato "); if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.ORACLE)) { sql.append("WHERE to_char(historicosolicitacaoservico.datacriacao, 'YYYY-MM-DD') BETWEEN ? AND ? "); }else{ sql.append("WHERE historicosolicitacaoservico.datacriacao BETWEEN ? AND ? "); } if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.ORACLE)) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); parametro.add(formatter.format(solicitacaoServicoDTO.getDataInicio())); parametro.add(formatter.format(solicitacaoServicoDTO.getDataFim())); } else { parametro.add(solicitacaoServicoDTO.getDataInicio()); parametro.add(transformaHoraFinal(solicitacaoServicoDTO.getDataFim())); } if (solicitacaoServicoDTO.getIdGrupoAtual()!= null) { sql.append("AND historicosolicitacaoservico.idgrupo = ? "); parametro.add(solicitacaoServicoDTO.getIdGrupoAtual()); } if (solicitacaoServicoDTO.getIdContrato()!= null) { sql.append("AND contratos.idcontrato = ? "); parametro.add(solicitacaoServicoDTO.getIdContrato()); } sql.append("GROUP BY grupo.idgrupo, grupo.nome "); sql.append("ORDER BY grupo.nome,grupo.idgrupo "); list = this.execSQL(sql.toString(), parametro.toArray()); List listRetorno = new ArrayList(); listRetorno.add("nomeGrupo"); listRetorno.add("soma"); List result = this.engine.listConvertion(RelatorioCargaHorariaDTO.class, list, listRetorno); if (result != null && !result.isEmpty()) { return result; }else{ return null; } } private Timestamp transformaHoraFinal(Date data) throws ParseException { String dataHora = data + " 23:59:59"; String pattern = "yyyy-MM-dd hh:mm:ss"; SimpleDateFormat sdf = new SimpleDateFormat(pattern); java.util.Date d = sdf.parse(dataHora); java.sql.Timestamp sqlDate = new java.sql.Timestamp(d.getTime()); return sqlDate; } public Collection<SolicitacaoServicoDTO> imprimirSolicitacaoEncaminhada(SolicitacaoServicoDTO solicitacaoServicoDTO)throws Exception { StringBuilder sql = new StringBuilder(); List parametro = new ArrayList(); List list = new ArrayList(); /** * Verifica se h� limite para listagem * * @author thyen.chang */ boolean seLimita = solicitacaoServicoDTO.getTopList() != 0; sql.append("SELECT distinct "); /** * Limita listagem no SQLServer * * @author thyen.chang */ if ((seLimita)&&(CITCorporeUtil.SGBD_PRINCIPAL.trim().toUpperCase().equalsIgnoreCase(SQLConfig.SQLSERVER))){ sql.append("TOP "+solicitacaoServicoDTO.getTopList().toString()+" "); } sql.append("execucaosolicitacao.idsolicitacaoservico,UPPER(servico.nomeservico),UPPER(solicitacaoservico.situacao)," + "bpm_atribuicaofluxo.idgrupo,bpm_itemtrabalhofluxo.idresponsavelatual "); sql.append("FROM bpm_atribuicaofluxo bpm_atribuicaofluxo "); sql.append("INNER JOIN bpm_itemtrabalhofluxo bpm_itemtrabalhofluxo "); sql.append("ON bpm_itemtrabalhofluxo.iditemtrabalho = bpm_atribuicaofluxo.iditemtrabalho "); sql.append("INNER JOIN bpm_instanciafluxo bpm_instanciafluxo "); sql.append("ON bpm_instanciafluxo.idinstancia = bpm_itemtrabalhofluxo.idinstancia "); sql.append("INNER JOIN execucaosolicitacao execucaosolicitacao "); sql.append("on execucaosolicitacao.idinstanciafluxo = bpm_itemtrabalhofluxo.idinstancia "); sql.append("INNER JOIN usuario usuario "); sql.append("ON usuario.idusuario = bpm_itemtrabalhofluxo.idresponsavelatual "); sql.append("INNER JOIN grupo grupo "); sql.append("ON grupo.idgrupo = bpm_atribuicaofluxo.idgrupo "); sql.append("INNER JOIN ocorrenciasolicitacao ocorrenciasolicitacao "); sql.append("ON ocorrenciasolicitacao.iditemtrabalho = bpm_itemtrabalhofluxo.iditemtrabalho "); sql.append("INNER JOIN bpm_elementofluxo bpm_elementofluxo "); sql.append("ON bpm_elementofluxo.idelemento = bpm_itemtrabalhofluxo.idelemento "); sql.append("INNER JOIN solicitacaoservico solicitacaoservico "); sql.append("ON solicitacaoservico.idsolicitacaoservico = ocorrenciasolicitacao.idsolicitacaoservico "); sql.append("INNER JOIN servicocontrato servicocontrato "); sql.append("ON servicocontrato.idservicocontrato = solicitacaoservico.idservicocontrato "); sql.append("INNER JOIN servico servico "); sql.append("ON servico.idservico = servicocontrato.idservico "); if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.ORACLE)) { sql.append("WHERE "); /** * Limita consulta no Oracle * * @author thyen.chang */ if ((seLimita)&&(CITCorporeUtil.SGBD_PRINCIPAL.trim().toUpperCase().equalsIgnoreCase(SQLConfig.ORACLE))){ sql.append("ROWNUM <= ? AND "); parametro.add(solicitacaoServicoDTO.getTopList()); } sql.append("to_char(solicitacaoservico.datahorasolicitacao, 'YYYY-MM-DD') BETWEEN ? AND ? "); }else{ sql.append("WHERE solicitacaoservico.datahorasolicitacao BETWEEN ? AND ? "); } if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.ORACLE)) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); parametro.add(formatter.format(solicitacaoServicoDTO.getDataInicio())); parametro.add(formatter.format(solicitacaoServicoDTO.getDataFim())); } else { parametro.add(solicitacaoServicoDTO.getDataInicio()); parametro.add(transformaHoraFinal(solicitacaoServicoDTO.getDataFim())); } if (solicitacaoServicoDTO.getIdGrupoAtual()!= null) { sql.append("AND bpm_atribuicaofluxo.idgrupo = ? "); parametro.add(solicitacaoServicoDTO.getIdGrupoAtual()); } if (solicitacaoServicoDTO.getIdSolicitacaoServico() != null) { sql.append("AND execucaosolicitacao.idsolicitacaoservico = ? "); parametro.add(solicitacaoServicoDTO.getIdSolicitacaoServico()); } if (solicitacaoServicoDTO.getIdContrato() != null) { sql.append("AND servicocontrato.idcontrato = ? "); parametro.add(solicitacaoServicoDTO.getIdContrato()); } if (solicitacaoServicoDTO.getIdResponsavel() != null) { sql.append("AND bpm_itemtrabalhofluxo.idresponsavelatual = ? "); parametro.add(solicitacaoServicoDTO.getIdResponsavel()); } sql.append("AND bpm_itemtrabalhofluxo.idresponsavelatual is not null "); sql.append("AND bpm_itemtrabalhofluxo.idinstancia is not null "); sql.append("AND bpm_atribuicaofluxo.tipo <> 'Acompanhamento' "); /** * Limita listagem no Postgre e MySQL * * @author thyen.chang */ if((seLimita) && ((CITCorporeUtil.SGBD_PRINCIPAL.trim().toUpperCase().equalsIgnoreCase(SQLConfig.POSTGRESQL))||(CITCorporeUtil.SGBD_PRINCIPAL.trim().toUpperCase().equalsIgnoreCase(SQLConfig.MYSQL))) ){ sql.append(" LIMIT ? "); parametro.add(solicitacaoServicoDTO.getTopList()); } list = this.execSQL(sql.toString(), parametro.toArray()); List listRetorno = new ArrayList(); listRetorno.add("idSolicitacaoServico"); listRetorno.add("nomeServico"); listRetorno.add("situacao"); listRetorno.add("idGrupoAtual"); listRetorno.add("idResponsavel"); List result = this.engine.listConvertion(SolicitacaoServicoDTO.class, list, listRetorno); if (result != null && !result.isEmpty()) { return result; }else{ return Collections.emptyList(); } } public Collection<SolicitacaoServicoDTO> imprimirSolicitacaoEncaminhadaFilhas(SolicitacaoServicoDTO solicitacaoServicoDTO)throws Exception { StringBuilder sql = new StringBuilder(); List parametro = new ArrayList(); List list = new ArrayList(); sql.append("SELECT execucaosolicitacao.idsolicitacaoservico,UPPER(servico.nomeservico), UPPER(grupo.nome) as grupoAtual," + " UPPER(usuario.nome) as nomeSolicitante," + " UPPER(ocorrenciasolicitacao.descricao) as nomeElementoFluxo,UPPER (solicitacaoservico.situacao)," + "ocorrenciasolicitacao.dataregistro,ocorrenciasolicitacao.horaregistro,ocorrenciasolicitacao.dadossolicitacao," + "ocorrenciasolicitacao.idocorrencia,ocorrenciasolicitacao.descricao "); sql.append("FROM bpm_atribuicaofluxo bpm_atribuicaofluxo "); sql.append("INNER JOIN bpm_itemtrabalhofluxo bpm_itemtrabalhofluxo "); sql.append("ON bpm_itemtrabalhofluxo.iditemtrabalho = bpm_atribuicaofluxo.iditemtrabalho "); sql.append("INNER JOIN bpm_instanciafluxo bpm_instanciafluxo "); sql.append("ON bpm_instanciafluxo.idinstancia = bpm_itemtrabalhofluxo.idinstancia "); sql.append("INNER JOIN execucaosolicitacao execucaosolicitacao "); sql.append("on execucaosolicitacao.idinstanciafluxo = bpm_itemtrabalhofluxo.idinstancia "); sql.append("INNER JOIN usuario usuario "); sql.append("ON usuario.idusuario = bpm_itemtrabalhofluxo.idresponsavelatual "); sql.append("INNER JOIN grupo grupo "); sql.append("ON grupo.idgrupo = bpm_atribuicaofluxo.idgrupo "); sql.append("INNER JOIN ocorrenciasolicitacao ocorrenciasolicitacao "); sql.append("ON ocorrenciasolicitacao.iditemtrabalho = bpm_itemtrabalhofluxo.iditemtrabalho "); sql.append("INNER JOIN bpm_elementofluxo bpm_elementofluxo "); sql.append("ON bpm_elementofluxo.idelemento = bpm_itemtrabalhofluxo.idelemento "); sql.append("INNER JOIN solicitacaoservico solicitacaoservico "); sql.append("ON solicitacaoservico.idsolicitacaoservico = ocorrenciasolicitacao.idsolicitacaoservico "); sql.append("INNER JOIN servicocontrato servicocontrato "); sql.append("ON servicocontrato.idservicocontrato = solicitacaoservico.idservicocontrato "); sql.append("INNER JOIN servico servico "); sql.append("ON servico.idservico = servicocontrato.idservico "); sql.append("WHERE execucaosolicitacao.idsolicitacaoservico is not null and bpm_atribuicaofluxo.tipo <> 'Acompanhamento' "); if (solicitacaoServicoDTO.getIdGrupoAtual()!= null) { sql.append("AND bpm_atribuicaofluxo.idgrupo = ? "); parametro.add(solicitacaoServicoDTO.getIdGrupoAtual()); } if (solicitacaoServicoDTO.getIdSolicitacaoServico() != null) { sql.append("AND execucaosolicitacao.idsolicitacaoservico = ? "); parametro.add(solicitacaoServicoDTO.getIdSolicitacaoServico()); } if (solicitacaoServicoDTO.getIdContrato() != null) { sql.append("AND servicocontrato.idcontrato = ? "); parametro.add(solicitacaoServicoDTO.getIdContrato()); } if (solicitacaoServicoDTO.getIdResponsavel() != null) { sql.append("AND bpm_itemtrabalhofluxo.idresponsavelatual = ? "); parametro.add(solicitacaoServicoDTO.getIdResponsavel()); } sql.append("AND bpm_itemtrabalhofluxo.idresponsavelatual is not null "); sql.append("AND bpm_itemtrabalhofluxo.idinstancia is not null "); list = this.execSQL(sql.toString(), parametro.toArray()); List listRetorno = new ArrayList(); listRetorno.add("idSolicitacaoServico"); listRetorno.add("nomeServico"); listRetorno.add("grupoAtual"); listRetorno.add("nomeSolicitante"); listRetorno.add("nomeElementoFluxo"); listRetorno.add("situacao"); listRetorno.add("dataRegistro"); listRetorno.add("horaRegistro"); listRetorno.add("dadosSolicitacao"); listRetorno.add("idOcorrencia"); listRetorno.add("descricao"); List result = this.engine.listConvertion(SolicitacaoServicoDTO.class, list, listRetorno); if (result != null && !result.isEmpty()) { return result; }else{ return Collections.emptyList(); } } }