From 13c94e4a8e9d483255c29b51d3e420bbc07eb66f Mon Sep 17 00:00:00 2001 From: tharcisio Date: Mon, 18 Jul 2016 22:11:54 +0000 Subject: [PATCH] =?UTF-8?q?fixed=20bug=20#7674:=20Corre=C3=A7=C3=A3o=20no?= =?UTF-8?q?=20c=C3=A1lculo=20de=20ped=C3=A1gio=20adc.:=20adicionado=20icms?= =?UTF-8?q?=20ao=20c=C3=A1lculo=20de=20ped=C3=A1gio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Model/trunk/modelWeb@58025 d1611594-4594-4d17-8e1d-87c2c4800839 --- .../hibernate/CalcularPeajeHibernateDAO.java | 518 ++++++++---------- 1 file changed, 227 insertions(+), 291 deletions(-) diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/CalcularPeajeHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/CalcularPeajeHibernateDAO.java index 4ce5cddd7..e340f01f3 100644 --- a/src/com/rjconsultores/ventaboletos/dao/hibernate/CalcularPeajeHibernateDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/CalcularPeajeHibernateDAO.java @@ -1,98 +1,121 @@ package com.rjconsultores.ventaboletos.dao.hibernate; import java.math.BigDecimal; +import java.math.RoundingMode; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; +import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Calendar; import java.util.Date; import java.util.List; - 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 com.rjconsultores.ventaboletos.constantes.Constantes; import com.rjconsultores.ventaboletos.dao.CalcularPeajeDAO; +import com.rjconsultores.ventaboletos.entidad.CasetaPeaje; +import com.rjconsultores.ventaboletos.entidad.EmpresaImposto; +import com.rjconsultores.ventaboletos.entidad.Estado; import com.rjconsultores.ventaboletos.entidad.OrgaoConcedente; +import com.rjconsultores.ventaboletos.entidad.Parada; +import com.rjconsultores.ventaboletos.entidad.Peaje; import com.rjconsultores.ventaboletos.entidad.Ruta; +import com.rjconsultores.ventaboletos.entidad.RutaCaseta; +import com.rjconsultores.ventaboletos.entidad.RutaEmpresa; +import com.rjconsultores.ventaboletos.entidad.RutaSecuencia; +import com.rjconsultores.ventaboletos.entidad.Tramo; +import com.rjconsultores.ventaboletos.exception.BusinessException; import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado; @Repository("calcularPeajeDAO") -public class CalcularPeajeHibernateDAO extends GenericHibernateDAO implements CalcularPeajeDAO{ - +public class CalcularPeajeHibernateDAO extends GenericHibernateDAO + implements CalcularPeajeDAO { + @Autowired public CalcularPeajeHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) { setSessionFactory(factory); } - + @Override - public List buscarRutaWithCasetaPeajeFromOrgao(OrgaoConcedente oc){ - - StringBuilder sql = new StringBuilder(); - sql.append(" select distinct r from Ruta r , RutaCaseta rc , RutaSecuencia rs , CasetaPeaje cp "); - sql.append(" where rc.rutaSecuencia.rutasecuenciaId = rs.rutasecuenciaId "); - sql.append(" and rc.casetaPeaje.casetaPeajeId = cp.casetaPeajeId "); - sql.append(" and rs.ruta.rutaId = r.rutaId "); - if(oc != null && oc.getOrgaoConcedenteId() != null){ - sql.append(" and r.orgaoConcedente.orgaoConcedenteId = :orgaoConcedenteId "); + public List buscarRutaWithCasetaPeajeFromOrgao(OrgaoConcedente oc) { + StringBuilder sql = new StringBuilder() + .append("select distinct r ") + .append("from Ruta r, RutaCaseta rc, RutaSecuencia rs, CasetaPeaje cp ") + .append("where rc.rutaSecuencia.rutasecuenciaId = rs.rutasecuenciaId ") + .append(" and rc.casetaPeaje.casetaPeajeId = cp.casetaPeajeId ") + .append(" and rs.ruta.rutaId = r.rutaId "); + if (oc != null && oc.getOrgaoConcedenteId() != null) { + sql.append(" and r.orgaoConcedente.orgaoConcedenteId = :orgaoConcedenteId "); } - sql.append(" order by r.descruta "); - + Query query = getSession().createQuery(sql.toString()); - - if(oc != null && oc.getOrgaoConcedenteId() != null){ + if (oc != null && oc.getOrgaoConcedenteId() != null) { query.setInteger("orgaoConcedenteId", oc.getOrgaoConcedenteId()); } - return (List)query.list(); + + return query.list(); } - + @Override - public List buscarCasetasPeajeWithinTramo(Ruta ruta){ - - StringBuilder sql = new StringBuilder(); - - sql.append(" with temp_table as ( "); - sql.append(" select tra.origen_id as orig , tra.DESTINO_ID as dest, tra.tramo_id as tra, tra.desctramo as traDesc, tra.origen_id as traorig, "); - sql.append(" tra.destino_id as tradest, tra.via_id as travia, tra.cantkmreal as tracantkm, "); - sql.append(" tra.cantkmpagoconductor as tracantkmpago, tra.activo as traactivo, tra.fecmodif as trafecmodif, tra.usuario_id as trausuario "); - sql.append(" from RUTA_COMBINACION rcom inner join ruta r on r.RUTA_ID = rcom.RUTA_ID "); - sql.append(" inner join ORGAO_CONCEDENTE oc on oc.ORGAOCONCEDENTE_ID = r.ORGAOCONCEDENTE_ID "); - sql.append(" inner join tramo tra on tra.tramo_id = rcom.tramo_id "); - sql.append(" where r.RUTA_ID = :rutaId "); - sql.append(" ) , "); //select * from temp_table - sql.append(" "); - sql.append(" myTable as ( "); - sql.append(" select rseq3.numsecuencia as origen_tramo_inicial_seq , rseq4.numsecuencia as destino_tramo_final_seq , T.tramo_id as ttramo, t2.tramo_id as tt2tramo , tt.tra as traComb, tt.orig as ttorig, tt.dest as ttdest, "); - sql.append(" tt.tradesc as traCombdesc, tt.traorig as traComborig, tt.tradest as traCombdest, tt.travia as tracombvia, tt.tracantkm as tracombcantkm, "); - sql.append(" tt.tracantkmpago as tracombcantkmpago, tt.traactivo as tracombactivo, tt.trafecmodif as tracombfecmodif, tt.trausuario as tracombusuario "); - sql.append(" from ruta_secuencia rseq3 "); - sql.append(" inner join tramo t on t.tramo_id = rseq3.tramo_id and rseq3.ruta_id = :rutaId "); - sql.append(" INNER JOIN ruta_secuencia rseq4 ON rseq3.ruta_id = rseq4.ruta_id "); - sql.append(" INNER JOIN TRAMO T2 ON T2.TRAMO_ID = rseq4.tramo_id and rseq4.ruta_id = :rutaId "); - sql.append(" inner join temp_table tt on t.ORIGEN_ID = tt.orig and T2.DESTINO_ID = tt.dest "); -// sql.append(" -- and t.ORIGEN_ID = 19231 "); -// sql.append(" -- AND T2.DESTINO_ID = 21708 "); - sql.append(" ) , "); - sql.append(" "); //select * from myTable - sql.append(" caseta_tramo_da_ruta as ( "); - sql.append(" select rcas.rutacaseta_id as rutacasetaid, rcas.rutasecuencia_id as rutasecuenciaId, rcas.casetaPeaje_Id, rseq.numSecuencia as numSecuencia, rseq.tramo_id as tramoid, rseq2.numSecuencia as numSecuencia2, "); - sql.append(" casp.casetaPeaje_id as casetaPeajeid, casp.desccaseta as desccaseta, casp.importeida as importeida, casp.importevuelta as importevuelta, casp.activo as caspActivo, "); - sql.append(" casp.fecmodif as caspfecmodif, casp.usuario_id as caspusuario "); - sql.append(" from RUTA_CASETA rcas inner join RUTA_SECUENCIA rseq on rcas.RUTASECUENCIA_ID = rseq.RUTASECUENCIA_ID "); - sql.append(" inner join RUTA_SECUENCIA rseq2 on rseq2.TRAMO_ID = rseq.TRAMO_ID "); - sql.append(" inner join tramo tra on tra.tramo_id = rseq.TRAMO_ID and rseq.ruta_id = :rutaId "); - sql.append(" inner join caseta_peaje casp on casp.casetapeaje_id = rcas.casetapeaje_id "); - sql.append(" ) "); - sql.append(" select distinct "); - sql.append(" origen_tramo_inicial_seq, destino_tramo_final_seq, ttramo, tt2tramo, traComb, ttorig, ttdest, traCombdesc, traComborig, traCombdest, tracombvia, tracombcantkm, tracombcantkmpago, tracombactivo, tracombfecmodif, tracombusuario, rutacasetaid, rutasecuenciaId, casetaPeaje_Id, tramoid, casetaPeajeid, desccaseta, importeida, importevuelta, caspActivo, caspfecmodif, caspusuario "); - sql.append(" from myTable my inner join caseta_tramo_da_ruta ctr on ctr.numSecuencia between my.origen_tramo_inicial_seq and my.destino_tramo_final_seq order by tracomb "); - - + public List buscarCasetasPeajeWithinTramo(Ruta ruta) { + StringBuilder sql = new StringBuilder() + .append("with tramo_tmp as ( ") + .append(" select t.origen_id as orig, t.destino_id as dest, t.tramo_id as tra, ") + .append(" t.desctramo as tradesc, t.origen_id as traorig, t.destino_id as tradest, ") + .append(" t.via_id as travia, t.cantkmreal as tracantkm, t.cantkmpagoconductor as tracantkmpago, ") + .append(" t.activo as traactivo, t.fecmodif as trafecmodif, t.usuario_id as trausuario ") + .append(" from ruta_combinacion rcom ") + .append(" inner join ruta r on r.ruta_id = rcom.ruta_id ") + .append(" inner join orgao_concedente oc on oc.orgaoconcedente_id = r.orgaoconcedente_id ") + .append(" inner join tramo t on t.tramo_id = rcom.tramo_id ") + .append(" where r.ruta_id = :rutaId ") + .append("), mytable as ( ") + .append(" select eiorig.icms as icms_orig, eidest.icms as icms_dest, ") + .append(" rseqorig.numsecuencia as origen_tramo_inicial_seq, rseqdest.numsecuencia as destino_tramo_final_seq, ") + .append(" torig.tramo_id as tramo_orig, tdest.tramo_id as tramo_dest, ") + .append(" tt.tra as tracomb, tt.orig as ttorig, tt.dest as ttdest, ") + .append(" tt.tradesc as tracombdesc, tt.traorig as tracomborig, tt.tradest as tracombdest, ") + .append(" tt.travia as tracombvia, tt.tracantkm as tracombcantkm, tt.tracantkmpago as tracombcantkmpago, ") + .append(" tt.traactivo as tracombactivo, tt.trafecmodif as tracombfecmodif, tt.trausuario as tracombusuario ") + .append(" from ruta_secuencia rseqorig ") + .append(" inner join tramo torig on torig.tramo_id = rseqorig.tramo_id and rseqorig.ruta_id = :rutaId ") + .append(" inner join ruta_secuencia rseqdest on rseqorig.ruta_id = rseqdest.ruta_id ") + .append(" inner join tramo tdest on tdest.tramo_id = rseqdest.tramo_id and rseqdest.ruta_id = :rutaId ") + .append(" inner join ruta_empresa re on re.ruta_id = :rutaId ") + .append(" inner join empresa e on re.empresa_id = e.empresa_id ") + .append(" inner join parada porig on torig.origen_id = porig.parada_id ") + .append(" inner join ciudad corig on corig.ciudad_id = porig.ciudad_id ") + .append(" inner join estado eorig on eorig.estado_id = corig.estado_id ") + .append(" inner join empresa_imposto eiorig on eiorig.empresa_id = e.empresa_id and eiorig.estado_id = eorig.estado_id ") + .append(" inner join parada pdest on tdest.destino_id = pdest.parada_id ") + .append(" inner join ciudad cdest on cdest.ciudad_id = pdest.ciudad_id ") + .append(" inner join estado edest on edest.estado_id = cdest.estado_id ") + .append(" inner join empresa_imposto eidest on eidest.empresa_id = e.empresa_id and eidest.estado_id = edest.estado_id ") + .append(" inner join tramo_tmp tt on torig.origen_id = tt.orig and tdest.destino_id = tt.dest " ) + .append("), caseta_tramo_da_ruta as ( ") + .append(" select rcas.rutacaseta_id as rutacasetaid, rcas.rutasecuencia_id as rutasecuenciaid, rcas.casetapeaje_id, ") + .append(" rseq1.numsecuencia as numsecuencia, rseq1.tramo_id as tramoid, rseq2.numsecuencia as numsecuencia2, ") + .append(" casp.casetapeaje_id as casetapeajeid, casp.desccaseta as desccaseta, casp.importeida as importeida, ") + .append(" casp.importevuelta as importevuelta, casp.activo as caspactivo, casp.fecmodif as caspfecmodif, ") + .append(" casp.usuario_id as caspusuario ") + .append(" from ruta_caseta rcas ") + .append(" inner join ruta_secuencia rseq1 on rcas.rutasecuencia_id = rseq1.rutasecuencia_id ") + .append(" inner join ruta_secuencia rseq2 on rseq2.tramo_id = rseq1.tramo_id ") + .append(" inner join tramo tra on tra.tramo_id = rseq1.tramo_id and rseq1.ruta_id = :rutaId ") + .append(" inner join caseta_peaje casp on casp.casetapeaje_id = rcas.casetapeaje_id ") + .append(") ") + .append("select distinct origen_tramo_inicial_seq, destino_tramo_final_seq, tramo_orig, tramo_dest, tracomb, ttorig, ttdest, ") + .append(" tracombdesc, tracomborig, tracombdest, tracombvia, tracombcantkm, tracombcantkmpago, tracombactivo, ") + .append(" tracombfecmodif, tracombusuario, rutacasetaid, rutasecuenciaid, casetapeaje_id, tramoid, casetapeajeid, ") + .append(" desccaseta, importeida, importevuelta, caspactivo, caspfecmodif, caspusuario, icms_orig, icms_dest ") + .append("from mytable my ") + .append(" inner join caseta_tramo_da_ruta ctr on ctr.numsecuencia between my.origen_tramo_inicial_seq and my.destino_tramo_final_seq ") + .append(" order by tracomb "); + Query query = getSession().createSQLQuery(sql.toString()); query.setInteger("rutaId", ruta.getRutaId()); query.setInteger("rutaId", ruta.getRutaId()); @@ -100,148 +123,54 @@ public class CalcularPeajeHibernateDAO extends GenericHibernateDAO(); } - - public int[] gerarSQLInserirPeajes(List lsRuta, OrgaoConcedente orgao){ - - int[] retorno = {}; - //pra cada ruta obter as combinacoes de tramos, cada tramo com sua lista de casetaPeaje - - - StringBuilder updateSQL = new StringBuilder(); - updateSQL.append(" update PEAJE set activo = 0 where ORGAOCONCEDENTE_ID = ").append(orgao.getOrgaoConcedenteId()).append(" "); - - List lsSql = new ArrayList(); - - for(Ruta r : lsRuta){ - List lsObj = buscarCasetasPeajeWithinTramo(r); - if(null != lsObj && 0 != lsObj.size()){ - - for(Object oArr : lsObj){ - StringBuilder insertSQL = new StringBuilder(); - - Object o[] = (Object[])oArr; - - PeajeVO pvo = new PeajeVO(); -// pvo.setPeajeId(o[]); - pvo.setRutaId(r.getRutaId()); - pvo.setOrigenId(Integer.parseInt(""+o[8])); - pvo.setDestinoId(Integer.parseInt(""+o[9])); - pvo.setOrgaoId(orgao.getOrgaoConcedenteId()); - pvo.setCasetaPeajeId(Integer.parseInt(""+o[20]));// - pvo.setCantAsientos(r.getCantAsientos()); - pvo.setCantEixos(r.getCantEixos()); - if(r.getIndSentidoIda()){ - pvo.setImportePeaje(BigDecimal.valueOf(Double.parseDouble(""+o[22])));// - }else{ - pvo.setImportePeaje(BigDecimal.valueOf(Double.parseDouble(""+o[23])));// - } - pvo.setIndicePeaje(orgao.getIndicePeaje()); - pvo.setActivo(1); - pvo.setFecmodif(Calendar.getInstance().getTime()); - pvo.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId()); - - Integer qtdEixos = r.getCantEixos(); - Integer cantAsientos = r.getCantAsientos(); - BigDecimal indice = orgao.getIndicePeaje(); - BigDecimal pedagioPuro = pvo.getImportePeaje(); - BigDecimal pedagioCalculado = BigDecimal.valueOf(0); - if(Constantes.ORGAOS_CONCEDENTES_CALCULO_ARTESP.contains(orgao.getOrgaoConcedenteId())){ // 21 = artesp - if(qtdEixos == null ){ - int[] x ={-3,r.getRutaId()}; - return x;}else{ - if(indice == null){ - int[] x ={-2,orgao.getOrgaoConcedenteId()}; - return x; - } - } - pedagioCalculado = BigDecimal.valueOf(((pedagioPuro.doubleValue() * qtdEixos) / indice.doubleValue())); - }else if(Constantes.ORGAOS_CONCEDENTES_CALCULO_ANTT.contains(orgao.getOrgaoConcedenteId())){// 3 = antt - if(qtdEixos == null || cantAsientos == null ){ - int[] x ={-1,r.getRutaId()}; - return x;}else{ - if(indice == null){ - int[] x ={-2,orgao.getOrgaoConcedenteId()}; - return x; - } - } - pedagioCalculado = BigDecimal.valueOf(((pedagioPuro.doubleValue() * qtdEixos) / ( indice.doubleValue() * cantAsientos))); - } - - - pvo.setImportePeaje(pedagioCalculado); - - - insertSQL.append(" insert into PEAJE ( PEAJE_ID , RUTA_ID , ORIGEN_ID , DESTINO_ID , ORGAOCONCEDENTE_ID , CASETAPEAJE_ID ,"); - insertSQL.append(" CANTASIENTOS , CANTEIXOS , IMPORTEPEAJE , INDICEPEAJE , ACTIVO , FECMODIF , USUARIO_ID ) "); - insertSQL.append(" values "); - insertSQL.append(" ( PEAJE_SEQ.NEXTVAL , "); - insertSQL.append(pvo.getRutaId()).append(" , "); - insertSQL.append(pvo.getOrigenId()).append(" , "); - insertSQL.append(pvo.getDestinoId()).append(" , "); - insertSQL.append(pvo.getOrgaoId()).append(" , "); - insertSQL.append(pvo.getCasetaPeajeId()).append(" , "); - insertSQL.append(pvo.getCantAsientos()).append(" , "); - insertSQL.append(pvo.getCantEixos()).append(" , "); - insertSQL.append(pvo.getImportePeaje()).append(" , "); - insertSQL.append(pvo.getIndicePeaje()).append(" , "); - insertSQL.append(pvo.getActivo()).append(" , "); - - Calendar calendar = Calendar.getInstance(); - calendar.setTime(pvo.getFecmodif()); - StringBuilder minhaData = new StringBuilder().append("TO_DATE('").append(calendar.get(Calendar.YEAR)).append("/"); - minhaData.append(String.format("%02d",calendar.get(Calendar.MONTH)+1)).append("/"); - minhaData.append(String.format("%02d",calendar.get(Calendar.DAY_OF_MONTH))).append(" "); - minhaData.append(String.format("%02d",calendar.get(Calendar.HOUR_OF_DAY))).append(":"); - minhaData.append(String.format("%02d",calendar.get(Calendar.MINUTE))).append(":"); - minhaData.append(String.format("%02d",calendar.get(Calendar.SECOND))).append("', 'yyyy/mm/dd hh24:mi:ss')"); - insertSQL.append(minhaData).append(" , "); //TO_DATE('2003/05/03 21:02:44', 'yyyy/mm/dd hh24:mi:ss') - - insertSQL.append(pvo.getUsuarioId()).append(" ) "); - - lsSql.add(insertSQL.toString()); - //------------------------------------------- existia um if(arredondamento) -// if (trechoPracaPedagio.getSentido().equals("0")) {//IDA // esse trecho veio do calculo da artesp e NAO da antt -// va = (tp_ida * linhaEixo.getQuantidadeEixos()) / divisor; -// } else { -// va = (tp_volta * linhaEixo.getQuantidadeEixos()) / divisor; -// } - //--------------------- -// // calculo IDA // esse veio da antt , e estava dentro -// va = ((tp_ida * qtdEixos) / (lot * iap)); // de um if desnecessário pois o corpo do true ou false -// //arredondamento para cima ou para baixo com 3 casas decimais // faziam a mesma coisa -// BigDecimal bd = new BigDecimal(va); -// bd = bd.setScale(3, BigDecimal.ROUND_HALF_UP); -// va = bd.doubleValue(); - } - } - } - - Connection con = getSession().connection(); - - try { - Statement stmt = con.createStatement(); - con.setAutoCommit(false); - stmt.addBatch(updateSQL.toString()); - for(String x : lsSql){ - stmt.addBatch(x); - } - retorno = stmt.executeBatch(); - con.commit(); - - } catch (SQLException e) { - e.printStackTrace(); - } - return retorno; + // pra cada ruta obter as combinacoes de tramos, cada tramo com sua lista de casetaPeaje + public int[] gerarSQLInserirPeajes(List lsRuta, OrgaoConcedente orgao) { + List batchSql = new ArrayList(); + for (Ruta ruta : lsRuta) { + + List lsObj = buscarCasetasPeajeWithinTramo(ruta); + if (null != lsObj) { + + int i = 0; + for (Object arrObj : lsObj) { + PeajeVO pvo = PeajeVO.create(ruta, orgao, (Object[]) arrObj); + batchSql.add(pvo.toInsertQuery()); + } + } + } + + StringBuilder updateSql = new StringBuilder() + .append("update peaje set activo = 0 ") + .append("where orgaoconcedente_id = ") + .append(orgao.getOrgaoConcedenteId()); + + int[] result = {}; + Connection con = getSession().connection(); + try { + Statement stmt = con.createStatement(); + con.setAutoCommit(false); + stmt.addBatch(updateSql.toString()); + for (String sql : batchSql) { + stmt.addBatch(sql); + } + result = stmt.executeBatch(); + con.commit(); + } + catch (SQLException e) { + e.printStackTrace(); + } + + return result; } - - private class PeajeVO { - private Integer peajeId; + + private static class PeajeVO { + + private static final int LOW_PRECISION = 2; + private static final int HIGH_PRECISION = 10; + private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + private Integer rutaId; private Integer origenId; private Integer destinoId; @@ -255,109 +184,116 @@ public class CalcularPeajeHibernateDAO extends GenericHibernateDAO