package gcom.cobranca; import gcom.atendimentopublico.ordemservico.OrdemServico; import gcom.cobranca.bean.DadosPesquisaCobrancaDocumentoHelper; import gcom.util.ErroRepositorioException; import gcom.util.HibernateUtil; import gcom.util.Util; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import java.util.Collection; import java.util.Date; import java.util.Iterator; import org.hibernate.Hibernate; import org.hibernate.HibernateException; import org.hibernate.SQLQuery; import org.hibernate.Session; /** * Classe criada para sobrescrever(override) os metodos seguindo o padr�o da base de dados Postgres * * @author Arthur Carvalho * @since 26/11/2010 */ public class RepositorioCobrancaPostgresHBM extends RepositorioCobrancaHBM { @Override public Collection pesquisarDadosCobrancaDocumentoAgrupadoPorDataPrevista( int idCobrancaAtividadeAcaoCronograma) throws ErroRepositorioException { Session session = HibernateUtil.getSession(); Collection retorno = null; String consulta = null; try { //CRC4529 - query alterada por Vivianne Sousa - 30/08/2010 consulta = " select" + " (select osfs.fzst_id" + " from atendimentopublico.ordem_servico_fisc_sit osfs" + " inner join atendimentopublico.ordem_servico orse on osfs.orse_id = orse.orse_id" + " where orse.cbdo_id = cbdo.cbdo_id " + " order by osfs_dtfiscalizacaosituacao limit and <= 1 ) as idFiscalizacaoSit,"//0 + " cbdo.cbdo_icantesapos as indAntesApos,"//1 + " cbdo.cbdo_icacimalimite as indAcimaLimite,"//2 + " casit.cast_id as idCobrancaAcaoSit,"//3 + " cdst.cdst_id as idCobrancaDebitoSit,"//4 + " catg.catg_id as idCategoria,"//5 + " epod.epod_id as idEsferaPoder,"//6 + " cbct.cbct_id as idCobrancaCriterio,"//7 + " greg.greg_id as idGerencia,"//8 + " loca.loca_id as idLocalidade,"//9 + " stcm.stcm_id as idSetor,"//10 + " rota.rota_id as idRota,"//11 + " qdra.qdra_id as idQuadra,"//12 + " qdra.qdra_nnquadra as numeroQuadra,"//13 + " stcm.stcm_cdsetorcomercial as codigoSetor,"//14 + " iper.iper_id as idPerfilImovel,"//15 + " coalesce(last.last_id,imov.last_id) as idLigacaoAguaSit,"//16 + " coalesce(lest.lest_id,imov.lest_id) as idLigacaoEsgotoSit,"//17 + " empr.empr_id as idEmpresa,"//18 + " amen.amen_id as idAtendMotivoEnc,"//19 + " loca.uneg_id as idUnidadeNegocio,"//20 + " cbdo.demf_id as idDocEmissaoForma,"//21 + " count(cbdo.cbdo_id) as qtdeCobrancaDocumento,"//22 + " sum(cbdo.cbdo_vldocumento) as valorCobrancaDoc"//23 + " from" + " cobranca.cobranca_documento cbdo" + " left outer join cadastro.esfera_poder epod on cbdo.epod_id=epod.epod_id" + " left outer join cobranca.cobranca_acao_situacao casit on cbdo.cast_id=casit.cast_id" + " left outer join cobranca.cobranca_debito_situacao cdst on cbdo.cdst_id=cdst.cdst_id" + " left outer join cadastro.categoria catg on cbdo.catg_id=catg.catg_id" + " left outer join cobranca.cobranca_acao_ativ_crg caac on cbdo.caac_id=caac.caac_id" + " left outer join cobranca.cobranca_acao_cronograma cbcr on caac.cbcr_id=cbcr.cbcr_id" + " left outer join cobranca.cobranca_acao cbac on cbcr.cbac_id=cbac.cbac_id" + " left outer join cobranca.cobranca_grupo_crg_mes cbcm on cbcr.cbcm_id=cbcm.cbcm_id" + " left outer join cobranca.cobranca_grupo cbgr on cbcm.cbgr_id=cbgr.cbgr_id" + " left outer join cobranca.cobranca_criterio cbct on cbdo.cbct_id=cbct.cbct_id" + " left outer join cadastro.imovel imov on cbdo.imov_id=imov.imov_id" + " left outer join cadastro.localidade loca on imov.loca_id=loca.loca_id" + " left outer join cadastro.gerencia_regional greg on loca.greg_id=greg.greg_id" + " left outer join cadastro.setor_comercial stcm on imov.stcm_id=stcm.stcm_id" + " left outer join cadastro.quadra qdra on imov.qdra_id=qdra.qdra_id" + " left outer join micromedicao.rota rota on qdra.rota_id=rota.rota_id" + " left outer join cadastro.imovel_perfil iper on imov.iper_id=iper.iper_id" + " left outer join atendimentopublico.ligacao_esgoto_situacao lest on cbdo.lest_id=lest.lest_id" + " left outer join atendimentopublico.ligacao_agua_situacao last on cbdo.last_id=last.last_id" + " left outer join cadastro.empresa empr on cbdo.empr_id=empr.empr_id" + " left outer join atendimentopublico.atend_motivo_encmt amen on cbdo.amen_id=amen.amen_id" + " where" + " caac.caac_id= :idCobrancaAtividadeAcaoCronograma" + " group by" + " idFiscalizacaoSit,cbdo.cbdo_icantesapos ,cbdo.cbdo_icacimalimite ,casit.cast_id ,cdst.cdst_id ,catg.catg_id ," + " cbcm.cbcm_amreferencia ,cbcr.cbcr_id,caac.caac_dtprevista,cbct.cbct_id ,cbgr.cbgr_id ,greg.greg_id ," + " loca.loca_id ,stcm.stcm_id ,rota.rota_id ,qdra.qdra_id ,qdra.qdra_nnquadra ,stcm.stcm_cdsetorcomercial,iper.iper_id ," + " last.last_id ,lest.lest_id ,epod.epod_id ,cbac.cbac_id ,empr.empr_id ,amen.amen_id ,loca.uneg_id ,imov.last_id ,imov.lest_id, cbdo.demf_id" + " order by" + " idFiscalizacaoSit,cbdo.cbdo_icantesapos,cbdo.cbdo_icacimalimite,casit.cast_id,cdst.cdst_id," + " catg.catg_id,epod.epod_id,greg.greg_id,loca.uneg_id,loca.loca_id,stcm.stcm_id,rota.rota_id," + " qdra.qdra_id,qdra.qdra_nnquadra,stcm.stcm_cdsetorcomercial,iper.iper_id,last.last_id,lest.lest_id"; retorno = session.createSQLQuery(consulta) .addScalar("idFiscalizacaoSit", Hibernate.INTEGER) .addScalar("indAntesApos", Hibernate.SHORT) .addScalar("indAcimaLimite", Hibernate.SHORT) .addScalar("idCobrancaAcaoSit", Hibernate.INTEGER) .addScalar("idCobrancaDebitoSit", Hibernate.INTEGER) .addScalar("idCategoria", Hibernate.INTEGER) .addScalar("idEsferaPoder", Hibernate.INTEGER) .addScalar("idCobrancaCriterio", Hibernate.INTEGER) .addScalar("idGerencia", Hibernate.INTEGER) .addScalar("idLocalidade", Hibernate.INTEGER) .addScalar("idSetor", Hibernate.INTEGER) .addScalar("idRota", Hibernate.INTEGER) .addScalar("idQuadra", Hibernate.INTEGER) .addScalar("numeroQuadra", Hibernate.INTEGER) .addScalar("codigoSetor", Hibernate.INTEGER) .addScalar("idPerfilImovel", Hibernate.INTEGER) .addScalar("idLigacaoAguaSit", Hibernate.INTEGER) .addScalar("idLigacaoEsgotoSit", Hibernate.INTEGER) .addScalar("idEmpresa", Hibernate.INTEGER) .addScalar("idAtendMotivoEnc", Hibernate.INTEGER) .addScalar("idUnidadeNegocio", Hibernate.INTEGER) .addScalar("idDocEmissaoForma", Hibernate.INTEGER) .addScalar("qtdeCobrancaDocumento", Hibernate.INTEGER) .addScalar("valorCobrancaDoc", Hibernate.BIG_DECIMAL) .setInteger("idCobrancaAtividadeAcaoCronograma", idCobrancaAtividadeAcaoCronograma) .list(); // consulta = "select new gcom.cobranca.bean.DadosCobrancaDocumentoHelper(fiscSituacao.id," // + "cobrancaDocumento.indicadorAntesApos,cobrancaDocumento.indicadorLimite," // + "cobAcaoSit.id,cobDebSit.id," // + "categ.id,esfPoder.id,cobCrit.id,gerenReg.id,loc.id,setComercial.id,rot.id," // + "quad.id,quad.numeroQuadra,setComercial.codigo," // + "imovPerfil.id, coalesce(ligAguaSit.id, imov.ligacaoAguaSituacao.id)," // + "coalesce(ligEsgSit.id, imov.ligacaoEsgotoSituacao.id),emp.id,moen.id, loc.unidadeNegocio.id,count(cobrancaDocumento.id),sum(cobrancaDocumento.valorDocumento)) " // + "from CobrancaDocumento cobrancaDocumento " // + "left join cobrancaDocumento.fiscalizacaoSituacao fiscSituacao " // + "left join cobrancaDocumento.esferaPoder esfPoder " // + "left join cobrancaDocumento.cobrancaAcaoSituacao cobAcaoSit " // + "left join cobrancaDocumento.cobrancaDebitoSituacao cobDebSit " // + "left join cobrancaDocumento.categoria categ " // + "left join cobrancaDocumento.cobrancaAcaoAtividadeCronograma cobAcaoAtivCron " // + "left join cobAcaoAtivCron.cobrancaAcaoCronograma cobAcaoCronog " // + "left join cobAcaoCronog.cobrancaAcao cobAcao " // + "left join cobAcaoCronog.cobrancaGrupoCronogramaMes cobGrupCronogramaMes " // + "left join cobGrupCronogramaMes.cobrancaGrupo cobGrupo " // + "left join cobrancaDocumento.cobrancaCriterio cobCrit " // + "left join cobrancaDocumento.imovel imov " // + "left join imov.localidade loc " // + "left join loc.gerenciaRegional gerenReg " // + "left join imov.setorComercial setComercial " // + "left join imov.quadra quad " // + "left join quad.rota rot " // + "left join cobrancaDocumento.imovelPerfil imovPerfil " // + "left join cobrancaDocumento.ligacaoEsgotoSituacao ligEsgSit " // + "left join cobrancaDocumento.ligacaoAguaSituacao ligAguaSit " // + "left join cobrancaDocumento.empresa emp " // + "left join cobrancaDocumento.motivoEncerramento moen " // + "where cobAcaoAtivCron.id = :idCobrancaAtividadeAcaoCronograma " // + "group by fiscSituacao.id,cobrancaDocumento.indicadorAntesApos,cobrancaDocumento.indicadorLimite," // + "cobAcaoSit.id,cobDebSit.id,categ.id,cobGrupCronogramaMes.anoMesReferencia,cobAcaoCronog.id," // + "cobAcaoAtivCron.dataPrevista,cobCrit.id,cobGrupo.id,gerenReg.id,loc.id,setComercial.id,rot.id," // + "quad.id,quad.numeroQuadra,setComercial.codigo,imovPerfil.id,ligAguaSit.id,ligEsgSit.id,esfPoder.id," // + "cobAcao.id,emp.id, moen.id, loc.unidadeNegocio.id, imov.ligacaoAguaSituacao.id, imov.ligacaoEsgotoSituacao.id " // + "order by fiscSituacao.id," // + "cobrancaDocumento.indicadorAntesApos,cobrancaDocumento.indicadorLimite," // + "cobAcaoSit.id,cobDebSit.id," // + "categ.id,esfPoder.id,gerenReg.id,loc.unidadeNegocio.id, loc.id,setComercial.id,rot.id," // + "quad.id,quad.numeroQuadra,setComercial.codigo," // + "imovPerfil.id,ligAguaSit.id,ligEsgSit.id "; // // retorno = session.createQuery(consulta).setInteger( // "idCobrancaAtividadeAcaoCronograma", // idCobrancaAtividadeAcaoCronograma).list(); } catch (HibernateException e) { // levanta a exce��o para a pr�xima camada throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { // fecha a sess�o HibernateUtil.closeSession(session); } return retorno; } @Override public Integer pesquisarQuantidadeOrdensServicoEncerradasPorCobrancaAcaoAtividade( Integer idCobrancaAcaoAtividadeCronograma, Integer idCobrancaAcaoAtividadeComando) throws ErroRepositorioException { Integer retorno = 0; Session session = HibernateUtil.getSession(); String where = ""; if (idCobrancaAcaoAtividadeCronograma != null) { where += " AND cd.caac_id = :idCobrancaAcaoAtividadeCronograma "; } if (idCobrancaAcaoAtividadeComando != null) { where += " AND cd.cacm_id = :idCobrancaAcaoAtividadeComando "; } try { String consulta = "SELECT orse_id FROM atendimentopublico.ordem_servico os " + "INNER JOIN cobranca.cobranca_documento cd ON (os.cbdo_id = cd.cbdo_id) " + "WHERE os.orse_cdsituacao <> " + OrdemServico.SITUACAO_PENDENTE + " " + where + " LIMIT 1"; SQLQuery q = session.createSQLQuery(consulta); q.addScalar("orse_id", Hibernate.INTEGER); if (idCobrancaAcaoAtividadeCronograma != null) { q.setInteger("idCobrancaAcaoAtividadeCronograma", idCobrancaAcaoAtividadeCronograma); } if (idCobrancaAcaoAtividadeComando != null) { q.setInteger("idCobrancaAcaoAtividadeComando", idCobrancaAcaoAtividadeComando); } retorno = (Integer) q.uniqueResult(); } catch (HibernateException e) { throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { HibernateUtil.closeSession(session); } return retorno; } @Override public Integer pesquisarQuantidadePagamentosPorDocumentosCobranca( Integer idCobrancaAcaoAtividadeCronograma, Integer idCobrancaAcaoAtividadeComando) throws ErroRepositorioException { Integer retorno = 0; Session session = HibernateUtil.getSession(); String where = ""; if (idCobrancaAcaoAtividadeCronograma != null) { where = "caac_id = :idCobrancaAcaoAtividadeCronograma "; } if (idCobrancaAcaoAtividadeComando != null) { where = " cacm_id = :idCobrancaAcaoAtividadeComando "; } try { String consulta = "SELECT pgmt_id from arrecadacao.pagamento where " + "cbdo_id IN ( SELECT cbdo_id FROM cobranca.cobranca_documento cd WHERE " + where + " ) " + " limit 1"; SQLQuery q = session.createSQLQuery(consulta); q.addScalar("pgmt_id", Hibernate.INTEGER); if (idCobrancaAcaoAtividadeCronograma != null) { q.setInteger("idCobrancaAcaoAtividadeCronograma", idCobrancaAcaoAtividadeCronograma); } if (idCobrancaAcaoAtividadeComando != null) { q.setInteger("idCobrancaAcaoAtividadeComando", idCobrancaAcaoAtividadeComando); } retorno = (Integer) q.uniqueResult(); } catch (HibernateException e) { throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { HibernateUtil.closeSession(session); } return retorno; } @Override public Integer pesquisarQuantidadeComandosSucessores( Integer idCobrancaAcaoAtividadeCronograma, Integer idCobrancaAcaoAtividadeComando) throws ErroRepositorioException { Integer retorno = 0; Session session = HibernateUtil.getSession(); String where = ""; if (idCobrancaAcaoAtividadeCronograma != null) { where = " caac_id = :idCobrancaAcaoAtividadeCronograma "; } if (idCobrancaAcaoAtividadeComando != null) { where = " cacm_id = :idCobrancaAcaoAtividadeComando "; } try { String consulta = "SELECT cd1.cbdo_id as id FROM cobranca.cobranca_documento cd1 " + "WHERE " + where + "AND exists ( " + "SELECT cd2.cbdo_id FROM cobranca.cobranca_documento cd2 " + "WHERE cd1.imov_id = cd2.imov_id AND cd2.cbdo_tmemissao > cd1.cbdo_tmemissao " + "AND cbac_id IN ( " + "SELECT ca.cbac_id FROM cobranca.cobranca_acao ca WHERE cd1.cbac_id = ca.cbac_idacaoprecedente " + ") " + ") LIMIT 1 "; SQLQuery q = session.createSQLQuery(consulta); q.addScalar("id", Hibernate.INTEGER); if (idCobrancaAcaoAtividadeCronograma != null) { q.setInteger("idCobrancaAcaoAtividadeCronograma", idCobrancaAcaoAtividadeCronograma); } if (idCobrancaAcaoAtividadeComando != null) { q.setInteger("idCobrancaAcaoAtividadeComando", idCobrancaAcaoAtividadeComando); } retorno = (Integer) q.uniqueResult(); } catch (HibernateException e) { throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { HibernateUtil.closeSession(session); } return retorno; } @Override public Collection pesquisarDocumentosCobrancaExcedentes(Integer idCAAC, Integer idCACM, int quantidadeParaRemover, Integer idLocalidade) throws ErroRepositorioException { Session session = HibernateUtil.getSession(); String queryConsulta = null; Collection documentos = null; try { queryConsulta = "select cbdo_id as id, cbdo_vldocumento as valor from cobranca.Cobranca_Documento cd where "; if (idCAAC != null){ queryConsulta += " cd.caac_id = " + idCAAC; } else if (idCACM != null){ queryConsulta += " cd.cacm_id = " + idCACM; } if (idLocalidade != null){ queryConsulta += " and cd.loca_id = " + idLocalidade; } queryConsulta += " order by cd.cbdo_vldocumento " + " Limit " + quantidadeParaRemover; documentos = session.createSQLQuery(queryConsulta) .addScalar("id", Hibernate.INTEGER) .addScalar("valor", Hibernate.BIG_DECIMAL) .list(); } catch (HibernateException e) { // levanta a exce��o para a pr�xima camada throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { // fecha a sess�o HibernateUtil.closeSession(session); } return documentos; } @Override /** * Este caso de uso permite gerar o resumo das a��es de cobran�a com a * atividade emitir j� realizada e a atividade encerrar ainda n�o realizada * e realizar a atividade encerrar das a��es que estejam comandadas. * * [UC0478] Gerar Resumo das A��es de Cobran�a do Cronograma * * [SB0004] - Processar Documento de Cobran�a * * Atualizar os COBRANCA_DOCUMENTO * * @author Rafael Santos * @date 19/10/2006 * * @return Date retorno * @throws ErroRepositorioException */ public void atualizarCobrancaDocumento(Collection colecaoCobrancaDocumento) throws ErroRepositorioException { Session session = HibernateUtil.getSession(); Connection con = null; Statement stmt = null; try { con = session.connection(); stmt = con.createStatement(); Iterator iteratorColecaoCobrancaDocumento = colecaoCobrancaDocumento .iterator(); int TAM_BLOCO_ATUALIZACAO = 50; int i = 0; StringBuffer atualizar = new StringBuffer(); while (iteratorColecaoCobrancaDocumento.hasNext()) { DadosPesquisaCobrancaDocumentoHelper cobrancaDocumentoParaAtualizar = (DadosPesquisaCobrancaDocumentoHelper) iteratorColecaoCobrancaDocumento.next(); atualizar.append("update cobranca.cobranca_documento set "); if(cobrancaDocumentoParaAtualizar.getIdSituacaoAcao() != null){ atualizar.append("cast_id = " + cobrancaDocumentoParaAtualizar.getIdSituacaoAcao() + ","); } if (cobrancaDocumentoParaAtualizar.getDataSituacaoAcao() != null) { atualizar.append(" cbdo_dtsituacaoacao = to_date('" + Util.formatarDataComTracoAAAAMMDD(cobrancaDocumentoParaAtualizar.getDataSituacaoAcao())+"','YYYY-MM-DD') , "); } if (cobrancaDocumentoParaAtualizar.getDataSituacaoDebito() != null) { atualizar.append(" cbdo_dtsituacaodebito = to_date('" + Util.formatarDataComTracoAAAAMMDD(cobrancaDocumentoParaAtualizar.getDataSituacaoDebito())+"','YYYY-MM-DD'), "); } else { atualizar.append(" cbdo_dtsituacaodebito = null, "); } if (cobrancaDocumentoParaAtualizar.getIdCategoria() != null){ atualizar.append(" catg_id = " + cobrancaDocumentoParaAtualizar.getIdCategoria() + ", "); } if (cobrancaDocumentoParaAtualizar.getIcAcimaLimite() != null){ atualizar.append(" cbdo_icacimalimite = " + cobrancaDocumentoParaAtualizar.getIcAcimaLimite() + ", "); } if (cobrancaDocumentoParaAtualizar.getIdSituacaoDebito() != null) { atualizar.append(" cdst_id = " + cobrancaDocumentoParaAtualizar.getIdSituacaoDebito() + ", "); } // else { // atualizar.append(" cdst_id = null, "); // } if (cobrancaDocumentoParaAtualizar.getIdFiscalizacao() != null) { atualizar.append(" fzst_id = " + cobrancaDocumentoParaAtualizar.getIdFiscalizacao() + ", "); } // else { // atualizar.append(" fzst_id = null, "); // } if (cobrancaDocumentoParaAtualizar.getIdEsferaPoder() != null ) { atualizar.append(" epod_id = " + cobrancaDocumentoParaAtualizar.getIdEsferaPoder() + ", "); } // else { // atualizar.append(" epod_id = null, "); // } if (cobrancaDocumentoParaAtualizar.getIcAntesDepois() != null) { atualizar.append(" cbdo_icantesapos = " + cobrancaDocumentoParaAtualizar.getIcAntesDepois() + ", "); } // else { // atualizar.append(" cbdo_icantesapos = null, "); // } if (cobrancaDocumentoParaAtualizar.getIdMotivoEncerramento() != null) { atualizar.append(" amen_id = " + cobrancaDocumentoParaAtualizar.getIdMotivoEncerramento() + ", "); } atualizar.append(" cbdo_tmultimaalteracao = '" + Util.getSQLTimesTemp(new Date())+"'"); atualizar.append(" where cbdo_id = " + cobrancaDocumentoParaAtualizar.getIdDocumento() + ""); stmt.addBatch(atualizar.toString()); atualizar = new StringBuffer(""); if ((i > 0 && i % TAM_BLOCO_ATUALIZACAO == 0) || i == (colecaoCobrancaDocumento.size()-1)){ // System.out.println("SQL: " + atualizar.toString()); //stmt.executeUpdate(atualizar.toString()); stmt.executeBatch(); atualizar = new StringBuffer(); session.flush(); } i++; } } catch (Exception e) { e.printStackTrace(); throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { // fecha a sess�o HibernateUtil.closeSession(session); try { if (con != null) con.close(); if (stmt != null) stmt.close(); } catch (SQLException e) { throw new ErroRepositorioException(e, "Erro ao fechar conex�es"); } } } }