package gcom.integracao; import gcom.atendimentopublico.ordemservico.OrdemServicoMovimento; import gcom.cadastro.imovel.PavimentoCalcada; import gcom.cadastro.imovel.PavimentoRua; import gcom.integracao.upa.OrdensServico; import gcom.util.ErroRepositorioException; import gcom.util.HibernateUtil; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.Iterator; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.StatelessSession; import org.hibernate.exception.ConstraintViolationException; public class RepositorioIntegracaoHBM implements IRepositorioIntegracao { private static IRepositorioIntegracao instancia; /** * Construtor da classe RepositorioFaturamentoHBM */ private RepositorioIntegracaoHBM() { } /** * Retorna o valor de instance * * @return O valor de instance */ public static IRepositorioIntegracao getInstancia() { if (instancia == null) { instancia = new RepositorioIntegracaoHBM(); } return instancia; } public Collection pesquisarOrdemServicoMovimentoParaEnvioSAM() throws ErroRepositorioException { // obt�m a sess�o Session session = HibernateUtil.getSession(); Collection retorno = new ArrayList(); try { retorno = session .createQuery( "select osmv from OrdemServicoMovimento osmv " + " left join fetch osmv.imovel imov" + " left join fetch imov.setorComercial " + " left join fetch imov.quadra " + " where osmv.indicadorMovimento = 1 " + "and osmv.unidadeOrganizacionalExecutora is not null ") // + "and osmv.dataGeracao between :data1 and :data2 ") //.setTimestamp("data1", Util.formatarDataInicial(new Date())) //.setTimestamp("data2", Util.formatarDataFinal(new Date())) .list(); } catch (HibernateException e) { e.printStackTrace(); // 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; } public void exportarOrdemServicoMovimentos( Collection ordensServicoParaExportacao) throws ErroRepositorioException { StatelessSession session = HibernateUtil .getStatelessSessionIntegracaoSAM(); if (ordensServicoParaExportacao != null && !ordensServicoParaExportacao.isEmpty()) { Iterator it = ordensServicoParaExportacao.iterator(); try { while (it.hasNext()) { Object obj = it.next(); try { //System.out.println("INSERINDO: " + i + "-" + obj.getClass().getSimpleName()); session.insert(obj); } catch (ConstraintViolationException exception) { //N�o fazer nada pois o registro j� est� inserido no banco da SAM //System.out.println("entrou!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); } } } catch (HibernateException e) { // levanta a exce��o para a pr�xima camada throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { HibernateUtil.closeSession(session); } } } public Collection pesquisarOrdensServicoParaRecebimentoUPA() throws ErroRepositorioException { // obt�m a sess�o Session session = HibernateUtil.getSession(); Collection retorno = new ArrayList(); try { retorno = session .createQuery( "select os from OrdemServicoMovimento os inner join fetch os.atendimentoMotivoEncerramento" + " left join fetch os.unidadeOrganizacionalExecutora unidExecutora " + " left join fetch unidExecutora.unidadeRepavimentadora unidPavimentadora " + " left join fetch unidPavimentadora.empresa " + " left join fetch os.servicoTipo " + " left join fetch os.registroAtendimento " + " left join fetch os.pavimentoRua " + " where os.indicadorMovimento = 2 and os.atendimentoMotivoEncerramento.id is not null") .list(); } catch (HibernateException e) { e.printStackTrace(); // 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; } public void importarOrdensServico(Collection ordensServicoParaImportacao) throws ErroRepositorioException { Session session = HibernateUtil.getSession(); if (ordensServicoParaImportacao != null && !ordensServicoParaImportacao.isEmpty()) { Iterator it = ordensServicoParaImportacao.iterator(); try { while (it.hasNext()) { OrdensServico ordensServico = (OrdensServico) it.next(); String consulta = "update OrdemServicoMovimento set " + "unidadeOrganizacionalExecutora = :osUnidadeExecutora," + "loginUsuario = :osUsuarioExecutora," + "dataExecucao = :osDataEncerramento, " + "servicoTipo =:servicoId, "; if (ordensServico.getOsPavimentoRua() != null) { consulta = consulta + " pavimentoRua =:osPavimentoRua,"; } if (ordensServico.getOsPavimentoCalcada() != null) { consulta = consulta + "pavimentoCalcada =:osPavimentoCalcada,"; } consulta = consulta + "areaPavimentoRua =:osAreaPavimentoRua," + "areaPavimentoCalcada =:osAreaPavimentoCalcada," + "parecer =:osParecerEncerramento," + "dataTramite =:dataTramite, " + " atendimentoMotivoEncerramento =:motivoEncerramento where id = :id"; Query query = session .createQuery(consulta) .setInteger("motivoEncerramento", ordensServico.getOsMotivoEncerramento()) .setTimestamp("dataTramite", new Date()) .setInteger("osUnidadeExecutora", ordensServico.getOsUnidadeExecutora()) .setString("osUsuarioExecutora", ordensServico.getOsUsuarioExecutora()) .setTimestamp("osDataEncerramento", ordensServico.getOsDataEncerramento()) .setInteger("servicoId", ordensServico.getServicoId()) .setBigDecimal( "osAreaPavimentoRua", ordensServico.getOsAreaPvtoRua() == null ? null : new BigDecimal(ordensServico .getOsAreaPvtoRua())) .setBigDecimal( "osAreaPavimentoCalcada", ordensServico.getOsAreaPvtoCalcada() == null ? null : new BigDecimal(ordensServico .getOsAreaPvtoCalcada())) .setString( "osParecerEncerramento", ordensServico.getOsParecerEncerramento() == null ? "" : ordensServico .getOsParecerEncerramento()) .setInteger("id", ordensServico.getId()); if (ordensServico.getOsPavimentoRua() != null) { query.setParameter("osPavimentoRua", new PavimentoRua(ordensServico.getOsPavimentoRua())); } if (ordensServico.getOsPavimentoCalcada() != null) { query.setParameter("osPavimentoCalcada", new PavimentoCalcada(ordensServico.getOsPavimentoCalcada())); } query.executeUpdate(); // Caso exista dados de Pavimento - atualizar // ORDEM_SERVICO_PAVIMENTO if (ordensServico.getOsAreaPvtoCalcada() != null || ordensServico.getOsAreaPvtoRua() != null) { session .createQuery( "update OrdemServicoPavimento set" + " pavimentoRuaRetorno =:osPavimentoRua," + " pavimentoCalcadaRetorno =:osPavimentoCalcada," + " areaPavimentoRuaRetorno =:osAreaPavimentoRua," + " areaPavimentoCalcadaRetorno =:osAreaPavimentoCalcada where ordemServico =:ordemServicoId") .setInteger("ordemServicoId", ordensServico.getId()) .setParameter("osPavimentoRua", ordensServico.getOsPavimentoRua() == null ? null : new PavimentoRua(ordensServico.getOsPavimentoRua()) ) .setBigDecimal( "osAreaPavimentoRua", ordensServico.getOsAreaPvtoRua() == null ? null : new BigDecimal(ordensServico .getOsAreaPvtoRua())) .setParameter("osPavimentoCalcada", ordensServico.getOsPavimentoCalcada() == null ? null : new PavimentoCalcada(ordensServico.getOsPavimentoCalcada())) .setBigDecimal( "osAreaPavimentoCalcada", ordensServico.getOsAreaPvtoCalcada() == null ? null : new BigDecimal(ordensServico .getOsAreaPvtoCalcada())) .executeUpdate(); } //System.out.println(resultado); } } catch (HibernateException e) { // levanta a exce��o para a pr�xima camada throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { HibernateUtil.closeSession(session); } } } public void atualizarIndicadorMovimentoOrdemServicoMovimento( OrdemServicoMovimento movimento) throws ErroRepositorioException { // obt�m a sess�o Session session = HibernateUtil.getSession(); try { session.update(movimento); session.flush(); } catch (HibernateException e) { e.printStackTrace(); // levanta a exce��o para a pr�xima camada throw new ErroRepositorioException(e, "Erro no Hibernate: "); } finally { // fecha a sess�o HibernateUtil.closeSession(session); } } public Object[] pesquisarHorarioProcessoIntegracaoUPA() throws ErroRepositorioException { Session session = HibernateUtil.getSession(); Object[] retorno; try { retorno = (Object[]) session .createQuery( "select horaInicioProcesso, intervaloHorasProcesso from SistemaParametro") .uniqueResult(); } catch (HibernateException e) { e.printStackTrace(); // 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; } }