diff --git a/pom.xml b/pom.xml index bc9a02aed..c60010a53 100644 --- a/pom.xml +++ b/pom.xml @@ -1,9 +1,9 @@ - - 4.0.0 - br.com.rjconsultores - ModelWeb - 1.0.36 + + 4.0.0 + br.com.rjconsultores + ModelWeb + 1.0.37 rj-releases diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/RemessaCNABBancosHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/RemessaCNABBancosHibernateDAO.java index 0eec9c6e0..49de51213 100644 --- a/src/com/rjconsultores/ventaboletos/dao/hibernate/RemessaCNABBancosHibernateDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/RemessaCNABBancosHibernateDAO.java @@ -75,6 +75,10 @@ import com.rjconsultores.ventaboletos.utilerias.CustomEnum; @SuppressWarnings({"unchecked"}) public class RemessaCNABBancosHibernateDAO extends GenericHibernateDAO implements RemessaCNABBancosDAO{ + private static final String DATA_ATE = "dataAte"; + private static final String DATA_DE = "dataDe"; + private static final String EMPRESA_ID = "empresaId"; + private static final String ZERO_ESQUERDA = "00000000"; private static Logger log = Logger.getLogger(RemessaCNABBancosHibernateDAO.class); @Autowired @@ -85,8 +89,7 @@ public class RemessaCNABBancosHibernateDAO extends GenericHibernateDAO list = query.list(); @@ -203,7 +206,7 @@ public class RemessaCNABBancosHibernateDAO extends GenericHibernateDAO list = query.list(); @@ -523,11 +526,11 @@ public class RemessaCNABBancosHibernateDAO extends GenericHibernateDAO list = query.list(); @@ -704,10 +707,10 @@ public class RemessaCNABBancosHibernateDAO extends GenericHibernateDAO list = query.list(); @@ -896,10 +899,10 @@ public class RemessaCNABBancosHibernateDAO extends GenericHibernateDAO list = query.list(); @@ -994,14 +997,14 @@ public class RemessaCNABBancosHibernateDAO extends GenericHibernateDAO list = query.list(); @@ -1267,9 +1291,9 @@ public class RemessaCNABBancosHibernateDAO extends GenericHibernateDAO list = query.list(); @@ -1453,9 +1477,9 @@ public class RemessaCNABBancosHibernateDAO extends GenericHibernateDAO list = query.list(); @@ -1720,7 +1744,7 @@ public class RemessaCNABBancosHibernateDAO extends GenericHibernateDAO implements SapDAO { - - @Autowired - public SapHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) { - setSessionFactory(factory); - } - - @Autowired - @Qualifier("dataSourceWrite") - DataSource scoDs; - - @Override - @Transactional - public List obtenerTodosParaRemessa(Empresa empresa, Date dataDe, Date dataAte, String status) { - return obtenerTodosParaRemessa(empresa, dataDe, dataAte, status, null); - } - - @Override - @Transactional - public List obtenerTodosParaRemessa(Empresa empresa, Date dataDe, Date dataAte, String status, PuntoVenta puntoVenta) { - - StringBuilder sb = new StringBuilder(); - sb.append(" SELECT "); - sb.append(" fc.fechamentocntcorrente_id, "); - sb.append(" to_char(fc.fecfechamento, 'yyyy-mm-DD'), "); - sb.append(" fc.total, "); - sb.append(" es.cveestado, "); - sb.append(" pv.numpuntoventa, "); - sb.append(" pv.numdocpuntoventa, "); - sb.append(" pv.nombpuntoventa, "); - sb.append(" fc.empresa_id, "); - sb.append(" emp.nombempresa, "); - sb.append(" fc.indintegradosap, "); - sb.append(" to_char(fc.fecfechamento, 'yyyy'), "); - sb.append(" to_char(fc.fecfechamento, 'mm'), "); - sb.append(" CASE to_char(fc.fecfechamento, 'D') "); - sb.append(" WHEN '6' THEN to_char(fc.fecfechamento+3, 'yyyy-mm-DD') "); - sb.append(" WHEN '7' THEN to_char(fc.fecfechamento+2, 'yyyy-mm-DD') "); - sb.append(" ELSE to_char(fc.fecfechamento+1, 'yyyy-mm-DD') END as feclancamento "); - sb.append(" FROM "); - sb.append(" fechamento_cntcorrente fc "); - sb.append(" INNER JOIN punto_venta pv ON pv.puntoventa_id = fc.puntoventa_id AND pv.activo = 1 "); - sb.append(" INNER JOIN empresa emp ON emp.empresa_id = fc.empresa_id AND emp.activo = 1 "); - sb.append(" INNER JOIN FECHAMENTO_PARAMPTOVTA fp ON fp.PUNTOVENTA_ID = fc.puntoventa_id AND fp.activo =1 "); - sb.append(" AND fp.empresa_id = fc.empresa_id AND fp.TIPOPAGAMENTO = 'B'" ); - sb.append(" LEFT JOIN ciudad ci ON ci.ciudad_id = emp.ciudad_id AND ci.activo = 1 "); - sb.append(" LEFT JOIN plaza pl ON pl.plaza_id = ci.plaza_id AND pl.activo = 1 "); - sb.append(" LEFT JOIN estado es ON es.estado_id = ci.estado_id AND es.activo = 1 "); - sb.append(" WHERE "); - sb.append(" fc.activo = 1 "); - sb.append(" AND fc.fecfechamento BETWEEN :dataDe AND :dataAte "); - - if( empresa != null ) { - sb.append(" AND fc.EMPRESA_ID = :empresaId "); - } - - if( puntoVenta != null ) { - sb.append(" AND pv.puntoventa_id = :puntoVentaId "); - } - - if(status != null && !status.isEmpty()){ - sb.append(" AND fc.indintegradosap in ("+status+")"); - } - - sb.append(" ORDER BY "); - sb.append(" pv.nombpuntoventa, fc.fecfechamento "); - - Query query = getSession().createSQLQuery(sb.toString()); - - if( empresa != null ) { - query.setInteger("empresaId", empresa.getEmpresaId()); - } - - if( puntoVenta != null ) { - query.setInteger("puntoVentaId", puntoVenta.getPuntoventaId()); - } - - if(dataDe != null && dataAte != null){ - query.setDate("dataDe", DateUtil.normalizarToFecha(dataDe)); - query.setDate("dataAte", DateUtil.normalizarToFecha(dataAte)); - } - - query.setMaxResults(100); - - List list = query.list(); - List retorno = new ArrayList(); - - for(Object[] tupla : list){ - - FechamentoCntCorrenteVO fcc = new FechamentoCntCorrenteVO(); - fcc.setFechamentocntcorrenteId( Long.valueOf(tupla[0].toString())); - fcc.setFecfechamento( tupla[1].toString() ); - fcc.setTotal( (BigDecimal)tupla[2] ); - fcc.setUfEmpresa(tupla[3].toString()); - fcc.setNumPuntoVenta(tupla[4].toString()); - - try { - String cnpj = tupla[5].toString().replaceAll("[^0-9]", ""); - fcc.setCnpjPuntoVenta(cnpj); - }catch (Exception e) { - throw new RuntimeException( "CNPJ fora do padrao no ponto de venda: "+tupla[6] ); - } - fcc.setNombpuntoventa(tupla[6].toString()); - - fcc.setEmpresaId( Integer.valueOf( tupla[7].toString() )); - fcc.setNombEmpresa( tupla[8].toString()); - - fcc.setIntegradoSap( StatusIntegracaoSap.getStatusIntegracaoSap( tupla[9]==null?0:Integer.valueOf(tupla[9].toString()) )); - - fcc.setAnofechamento(tupla[10].toString()); - fcc.setMesfechamento(tupla[11].toString()); - fcc.setFeclancamento(tupla[12].toString()); - - //empresa enviada nula apenas no processo automatico - if(empresa == null) { - fcc.setEnviar(true); - } - - retorno.add(fcc); - } - - return retorno; - } - - @Override - @Transactional - public synchronized boolean atualizaFechamento(Long fechamentocntcorrenteId, int status) throws Exception { - - if(fechamentocntcorrenteId == null ) { - return false; - } - - //é feito update manualmente porque o hibernate utiliza sco_read e nao tem permissao de escrita no banco - try(Connection con = scoDs.getConnection(); - Statement stmt = con.createStatement()){ - stmt.addBatch("UPDATE FECHAMENTO_CNTCORRENTE SET INDINTEGRADOSAP = "+ status - +" WHERE FECHAMENTOCNTCORRENTE_ID = " + fechamentocntcorrenteId); - - stmt.executeBatch(); - } - - return Boolean.TRUE; - } - +package com.rjconsultores.ventaboletos.dao.hibernate; + +import java.math.BigDecimal; +import java.sql.Connection; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import javax.sql.DataSource; + +import org.hibernate.Query; +import org.hibernate.SessionFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import com.rjconsultores.ventaboletos.dao.SapDAO; +import com.rjconsultores.ventaboletos.entidad.Empresa; +import com.rjconsultores.ventaboletos.entidad.FechamentoCntcorrente; +import com.rjconsultores.ventaboletos.entidad.PuntoVenta; +import com.rjconsultores.ventaboletos.enums.StatusIntegracaoSap; +import com.rjconsultores.ventaboletos.exception.BusinessRuntimeException; +import com.rjconsultores.ventaboletos.utilerias.DateUtil; +import com.rjconsultores.ventaboletos.vo.integracao.FechamentoCntCorrenteVO; + +@Repository("sapDAO") +public class SapHibernateDAO extends GenericHibernateDAO implements SapDAO { + + @Autowired + public SapHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) { + setSessionFactory(factory); + } + + @Autowired + @Qualifier("dataSourceWrite") + DataSource scoDs; + + @Override + @Transactional + public List obtenerTodosParaRemessa(Empresa empresa, Date dataDe, Date dataAte, String status) { + return obtenerTodosParaRemessa(empresa, dataDe, dataAte, status, null); + } + + @Override + @Transactional + public List obtenerTodosParaRemessa(Empresa empresa, Date dataDe, Date dataAte, String status, PuntoVenta puntoVenta) { + + StringBuilder sb = new StringBuilder(); + sb.append(" SELECT "); + sb.append(" fc.fechamentocntcorrente_id, "); + sb.append(" to_char(fc.fecfechamento, 'yyyy-mm-DD'), "); + sb.append(" fc.total, "); + sb.append(" es.cveestado, "); + sb.append(" pv.numpuntoventa, "); + sb.append(" pv.numdocpuntoventa, "); + sb.append(" pv.nombpuntoventa, "); + sb.append(" fc.empresa_id, "); + sb.append(" emp.nombempresa, "); + sb.append(" fc.indintegradosap, "); + sb.append(" to_char(fc.fecfechamento, 'yyyy'), "); + sb.append(" to_char(fc.fecfechamento, 'mm'), "); + sb.append(" CASE to_char(fc.fecfechamento, 'D') "); + sb.append(" WHEN '6' THEN to_char(fc.fecfechamento+3, 'yyyy-mm-DD') "); + sb.append(" WHEN '7' THEN to_char(fc.fecfechamento+2, 'yyyy-mm-DD') "); + sb.append(" ELSE to_char(fc.fecfechamento+1, 'yyyy-mm-DD') END as feclancamento "); + sb.append(" FROM "); + sb.append(" fechamento_cntcorrente fc "); + sb.append(" INNER JOIN punto_venta pv ON pv.puntoventa_id = fc.puntoventa_id AND pv.activo = 1 "); + sb.append(" INNER JOIN empresa emp ON emp.empresa_id = fc.empresa_id AND emp.activo = 1 "); + sb.append(" INNER JOIN FECHAMENTO_PARAMPTOVTA fp ON fp.PUNTOVENTA_ID = fc.puntoventa_id AND fp.activo =1 "); + sb.append(" AND fp.empresa_id = fc.empresa_id AND fp.TIPOPAGAMENTO = 'B'" ); + sb.append(" LEFT JOIN ciudad ci ON ci.ciudad_id = emp.ciudad_id AND ci.activo = 1 "); + sb.append(" LEFT JOIN plaza pl ON pl.plaza_id = ci.plaza_id AND pl.activo = 1 "); + sb.append(" LEFT JOIN estado es ON es.estado_id = ci.estado_id AND es.activo = 1 "); + sb.append(" WHERE "); + sb.append(" fc.activo = 1 "); + sb.append(" AND fc.fecfechamento BETWEEN :dataDe AND :dataAte "); + + if( empresa != null ) { + sb.append(" AND fc.EMPRESA_ID = :empresaId "); + } + + if( puntoVenta != null ) { + sb.append(" AND pv.puntoventa_id = :puntoVentaId "); + } + + if(status != null && !status.isEmpty()){ + sb.append(" AND fc.indintegradosap in ("+status+")"); + } + + sb.append(" ORDER BY "); + sb.append(" pv.nombpuntoventa, fc.fecfechamento "); + + Query query = getSession().createSQLQuery(sb.toString()); + + if( empresa != null ) { + query.setInteger("empresaId", empresa.getEmpresaId()); + } + + if( puntoVenta != null ) { + query.setInteger("puntoVentaId", puntoVenta.getPuntoventaId()); + } + + if(dataDe != null && dataAte != null){ + query.setDate("dataDe", DateUtil.normalizarToFecha(dataDe)); + query.setDate("dataAte", DateUtil.normalizarToFecha(dataAte)); + } + + query.setMaxResults(100); + + @SuppressWarnings("unchecked") + List list = query.list(); + List retorno = new ArrayList<>(); + + for(Object[] tupla : list){ + + FechamentoCntCorrenteVO fcc = new FechamentoCntCorrenteVO(); + fcc.setFechamentocntcorrenteId( Long.valueOf(tupla[0].toString())); + fcc.setFecfechamento( tupla[1].toString() ); + fcc.setTotal( (BigDecimal)tupla[2] ); + fcc.setUfEmpresa(tupla[3].toString()); + fcc.setNumPuntoVenta(tupla[4].toString()); + + try { + String cnpj = tupla[5].toString().replaceAll("\\D", ""); + fcc.setCnpjPuntoVenta(cnpj); + }catch (Exception e) { + throw new BusinessRuntimeException( "CNPJ fora do padrao no ponto de venda: %s ", tupla[6] ); + } + fcc.setNombpuntoventa(tupla[6].toString()); + + fcc.setEmpresaId( Integer.valueOf( tupla[7].toString() )); + fcc.setNombEmpresa( tupla[8].toString()); + + fcc.setIntegradoSap( StatusIntegracaoSap.getStatusIntegracaoSap( tupla[9]==null?0:Integer.valueOf(tupla[9].toString()) )); + + fcc.setAnofechamento(tupla[10].toString()); + fcc.setMesfechamento(tupla[11].toString()); + fcc.setFeclancamento(tupla[12].toString()); + + //empresa enviada nula apenas no processo automatico + if(empresa == null) { + fcc.setEnviar(true); + } + + retorno.add(fcc); + } + + return retorno; + } + + @Override + @Transactional + public synchronized boolean atualizaFechamento(Long fechamentocntcorrenteId, int status) throws Exception { + + if(fechamentocntcorrenteId == null ) { + return false; + } + + //é feito update manualmente porque o hibernate utiliza sco_read e nao tem permissao de escrita no banco + try(Connection con = scoDs.getConnection(); + Statement stmt = con.createStatement()){ + stmt.addBatch("UPDATE FECHAMENTO_CNTCORRENTE SET INDINTEGRADOSAP = "+ status + +" WHERE FECHAMENTOCNTCORRENTE_ID = " + fechamentocntcorrenteId); + + stmt.executeBatch(); + } + + return Boolean.TRUE; + } + } \ No newline at end of file diff --git a/src/com/rjconsultores/ventaboletos/exception/BusinessRuntimeException.java b/src/com/rjconsultores/ventaboletos/exception/BusinessRuntimeException.java new file mode 100644 index 000000000..2d9b0417e --- /dev/null +++ b/src/com/rjconsultores/ventaboletos/exception/BusinessRuntimeException.java @@ -0,0 +1,30 @@ +package com.rjconsultores.ventaboletos.exception; + +import java.text.MessageFormat; + +import org.zkoss.util.resource.Labels; + +public class BusinessRuntimeException extends RuntimeException { + + /** + * + */ + private static final long serialVersionUID = 1L; + /** + * + * @param message + * - La clave del archivo de traducción + */ + public BusinessRuntimeException(String message) { + super(Labels.getLabel(message) == null ? message :Labels.getLabel(message)); + } + + /** + * + * @param message- La clave del archivo de traducción + * @param oMsg - Los parametros de la mensage + */ + public BusinessRuntimeException(String message,Object oMsg) { + super(new MessageFormat(Labels.getLabel(message)).format(oMsg)); + } +} diff --git a/src/com/rjconsultores/ventaboletos/service/impl/SapServiceImpl.java b/src/com/rjconsultores/ventaboletos/service/impl/SapServiceImpl.java index dc43ec9b8..4fdb202af 100644 --- a/src/com/rjconsultores/ventaboletos/service/impl/SapServiceImpl.java +++ b/src/com/rjconsultores/ventaboletos/service/impl/SapServiceImpl.java @@ -16,6 +16,7 @@ import com.rjconsultores.ventaboletos.entidad.Empresa; import com.rjconsultores.ventaboletos.entidad.FechamentoCntcorrente; import com.rjconsultores.ventaboletos.entidad.PuntoVenta; import com.rjconsultores.ventaboletos.enums.StatusIntegracaoSap; +import com.rjconsultores.ventaboletos.exception.BusinessRuntimeException; import com.rjconsultores.ventaboletos.rest.IntegracaoSapRest; import com.rjconsultores.ventaboletos.service.SapService; import com.rjconsultores.ventaboletos.utilerias.DateUtil; @@ -74,43 +75,39 @@ public class SapServiceImpl implements SapService{ } @Override - public int remessa(List fechamentos, boolean processoManual) throws Exception { - try { - int contador = 0; - IntegracaoSapRest integracaoSapRest = IntegracaoSapRest.getInstance(); - String credenciais = buscaConstante(INTEGRACAO_SAP_CREDENCIAL); - String url = buscaConstante(INTEGRACAO_SAP_URL); + public int remessa(List fechamentos, boolean processoManual) throws BusinessRuntimeException, Exception { + int contador = 0; + IntegracaoSapRest integracaoSapRest = IntegracaoSapRest.getInstance(); + String credenciais = buscaConstante(INTEGRACAO_SAP_CREDENCIAL); + String url = buscaConstante(INTEGRACAO_SAP_URL); - for (FechamentoCntCorrenteVO fechamentoCntcorrente : fechamentos) { - if( fechamentoCntcorrente.isEnviar()) { - log.debug("Enviando fechamento:"+ fechamentoCntcorrente.getFechamentocntcorrenteId()); - JSONObject integrado = integracaoSapRest.enviarIntegracaoSap(fechamentoCntcorrente, url, credenciais); - - if(integrado == null) { - atualizaFechamento(fechamentoCntcorrente.getFechamentocntcorrenteId(), StatusIntegracaoSap.NAO_ENVIADO.ordinal()); - log.error("Erro no envio/retorno da requisicao para integracao SAP do fechamentoID: "+fechamentoCntcorrente.getFechamentocntcorrenteId()); - if(processoManual) { - throw new RuntimeException("Erro no envio/retorno da requisicao para integracao SAP do fechamentoID: "+fechamentoCntcorrente.getFechamentocntcorrenteId()); - } - }else if(integrado.getString("Integration").equals("S")) { - atualizaFechamento(fechamentoCntcorrente.getFechamentocntcorrenteId(), StatusIntegracaoSap.INTEGRADO.ordinal()); - contador++; - }else if(integrado.getString("Integration").equals("E")) { - atualizaFechamento(fechamentoCntcorrente.getFechamentocntcorrenteId(), StatusIntegracaoSap.RECUSADO.ordinal()); - log.warn("Retorno enviado pelo SAP: \r\n"+integrado.getString("Message")); - if(processoManual) { - throw new RuntimeException("Fechamento: "+fechamentoCntcorrente.getFechamentocntcorrenteId()+"\r\nRetorno enviado pelo SAP: \r\n"+integrado.getString("Message")); - } - } - } + for (FechamentoCntCorrenteVO fechamentoCntcorrente : fechamentos) { + if( fechamentoCntcorrente.isEnviar()) { + log.debug("Enviando fechamento:"+ fechamentoCntcorrente.getFechamentocntcorrenteId()); + JSONObject integrado = integracaoSapRest.enviarIntegracaoSap(fechamentoCntcorrente, url, credenciais); + + if(integrado == null) { + atualizaFechamento(fechamentoCntcorrente.getFechamentocntcorrenteId(), StatusIntegracaoSap.NAO_ENVIADO.ordinal()); + log.error("Erro no envio/retorno da requisicao para integracao SAP do fechamentoID: "+fechamentoCntcorrente.getFechamentocntcorrenteId()); + tratarProcessoManual(processoManual, "Erro no envio/retorno da requisicao para integracao SAP do fechamentoID: %s", fechamentoCntcorrente); + }else if(integrado.getString("Integration").equals("S")) { + atualizaFechamento(fechamentoCntcorrente.getFechamentocntcorrenteId(), StatusIntegracaoSap.INTEGRADO.ordinal()); + contador++; + }else if(integrado.getString("Integration").equals("E")) { + atualizaFechamento(fechamentoCntcorrente.getFechamentocntcorrenteId(), StatusIntegracaoSap.RECUSADO.ordinal()); + log.warn("Retorno enviado pelo SAP: \r\n"+integrado.getString("Message")); + tratarProcessoManual(processoManual, "Fechamento: "+fechamentoCntcorrente.getFechamentocntcorrenteId()+"\r\nRetorno enviado pelo SAP: \r\n"+integrado.getString("Message"), fechamentoCntcorrente); + } } - - return contador; - }catch(RuntimeException re){ - throw re; - }catch(Exception e){ - throw e; - } + } + + return contador; + } + + private void tratarProcessoManual(boolean processoManual, String mensagem, FechamentoCntCorrenteVO fechamentoCntcorrente) { + if(processoManual) { + throw new BusinessRuntimeException( mensagem, fechamentoCntcorrente.getFechamentocntcorrenteId()); + } } private boolean atualizaFechamento(Long fechamentocntcorrenteId, int status) throws Exception { @@ -121,7 +118,7 @@ public class SapServiceImpl implements SapService{ Constante constante = constanteDAO.buscarPorNomeConstante(constanteString); if( constante == null || constante.getValorconstante() == null || constante.getValorconstante().isEmpty() ) { - throw new RuntimeException("Constante "+constanteString+" n�o cadastrada"); + throw new BusinessRuntimeException("Constante %s não cadastrada", constanteString); } return constante.getValorconstante(); diff --git a/src/com/rjconsultores/ventaboletos/vo/integracao/FechamentoCntCorrenteVO.java b/src/com/rjconsultores/ventaboletos/vo/integracao/FechamentoCntCorrenteVO.java index cdabae248..3906c91ca 100644 --- a/src/com/rjconsultores/ventaboletos/vo/integracao/FechamentoCntCorrenteVO.java +++ b/src/com/rjconsultores/ventaboletos/vo/integracao/FechamentoCntCorrenteVO.java @@ -138,7 +138,7 @@ public class FechamentoCntCorrenteVO { this.anofechamento = anofechamento; } - public Boolean isEnviar() { + public boolean isEnviar() { return enviar; }