diff --git a/src/com/rjconsultores/ventaboletos/dao/TarifaOficialDAO.java b/src/com/rjconsultores/ventaboletos/dao/TarifaOficialDAO.java index 2cf7fb21c..a538e68f8 100644 --- a/src/com/rjconsultores/ventaboletos/dao/TarifaOficialDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/TarifaOficialDAO.java @@ -8,6 +8,7 @@ public interface TarifaOficialDAO { /** * See {@link TarifaOficialService#gerarTarifaANTT(Ruta)} * @param ruta + * @return TODO */ - public void gerarTarifaANTT(Ruta ruta); + public Integer gerarTarifaANTT(Ruta ruta); } diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/TarifaOficialHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/TarifaOficialHibernateDAO.java index fa10358f0..e7461b989 100644 --- a/src/com/rjconsultores/ventaboletos/dao/hibernate/TarifaOficialHibernateDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/TarifaOficialHibernateDAO.java @@ -6,76 +6,30 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Repository; import com.rjconsultores.ventaboletos.dao.TarifaOficialDAO; +import com.rjconsultores.ventaboletos.dao.sqlbuilder.SQLBuilder; import com.rjconsultores.ventaboletos.entidad.Ruta; import com.rjconsultores.ventaboletos.entidad.TarifaOficial; @Repository("tarifaOficialDAO") public class TarifaOficialHibernateDAO extends GenericHibernateDAO implements TarifaOficialDAO { + @Autowired + private SQLBuilder sqlBuilder; + @Autowired public TarifaOficialHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) { setSessionFactory(factory); } @Override - public void gerarTarifaANTT(Ruta ruta) { - StringBuilder sb = new StringBuilder(""); - sb.append("INSERT INTO TarifaOficial ( "); - sb.append(" tarifaOficialId, "); - sb.append(" precio, "); - sb.append(" precioredabierto, "); - sb.append(" tramoId, "); - sb.append(" marcaId, "); - sb.append(" claseservicio_id, "); - sb.append(" PRECIOORIGINAL, "); - sb.append(" MONEDA_ID, "); - sb.append(" VIGENCIATARIFA_ID, "); - sb.append(" STATUSTARIFA, "); - sb.append(" IMPORTETAXAEMBARQUE, "); - sb.append(" IMPORTEPEDAGIO, "); - sb.append(" IMPORTEOUTROS, "); - sb.append(" IMPORTESEGURO, "); - sb.append(" ORGAOCONCEDENTE_ID, "); - sb.append(" RUTA_ID, "); - sb.append(" ACTIVO, "); - sb.append(" FECMODIF, "); - sb.append(" USUARIO_ID, "); - sb.append(" ORIGEN_ID, "); - sb.append(" DESTINO_ID "); - sb.append(" ) "); - /* - * select - * - * TARIFA_OFICIAL_SEQ.NEXTVAL, ROUND( coalesce(ct1.coeficiente,0) * - * coalesce(tc.kmcoeficiente1,0) + coalesce(ct2.coeficiente,0) * - * coalesce(tc.kmcoeficiente2,0) + coalesce(ct3.coeficiente,0) * - * coalesce(tc.kmcoeficiente3,0),2), null, t.tramo_id, mc.marca_id, - * r.CLASESERVICIO_ID, null, m.moneda_id, null, 'A', null, null, null, - * null, oc.orgaoconcedente_id, r.ruta_id, 1, sysdate, 999, - * po.parada_id, pd.parada_id - * - * from ruta_combinacion rc inner join ruta r on r.ruta_id = rc.ruta_id - * inner join orgao_tramo tc on tc.tramo_id = rc.tramo_id inner join - * orgao_concedente oc on oc.orgaoconcedente_id = tc.orgaoconcedente_id - * and oc.orgaoconcedente_id =r.orgaoconcedente_id inner join - * coeficiente_tarifa ct1 on ct1.coeficientetarifa_id = - * tc.coeficientetarifa1_id left join coeficiente_tarifa ct2 on - * ct2.coeficientetarifa_id = tc.coeficientetarifa2_id left join - * coeficiente_tarifa ct3 on ct3.coeficientetarifa_id = - * tc.coeficientetarifa3_id inner join tramo t on t.tramo_id = - * rc.tramo_id inner join parada po on po.parada_id = t.origen_id inner - * join parada pd on pd.parada_id = t.destino_id inner join - * MARCA_CLASESERVICIO mc on mc.CLASESERVICIO_ID = r.CLASESERVICIO_ID, - * moneda m - * - * where rc.activo = 1 and r.activo = 1 and m.moneda_id = 1 and - * oc.orgaoconcedente_id = 3 and (t.tramo_id, mc.marca_id, - * r.CLASESERVICIO_ID, m.moneda_id, oc.orgaoconcedente_id, r.ruta_id) - * not in (select - * tao.tramo_id,tao.marca_id,tao.CLASESERVICIO_ID,tao.moneda_id - * ,tao.orgaoconcedente_id, tao.ruta_id from tarifa_oficial tao where - * tao.activo = 1) - */ + public Integer gerarTarifaANTT(Ruta ruta) { + Integer rutaId = (ruta == null)?null:ruta.getRutaId(); + + String sql = sqlBuilder.getSQLTarifaOficial1(rutaId); + + int qtd = getSession().createSQLQuery(sql).executeUpdate(); + + return qtd; } } diff --git a/src/com/rjconsultores/ventaboletos/dao/sqlbuilder/SQLBuilder.java b/src/com/rjconsultores/ventaboletos/dao/sqlbuilder/SQLBuilder.java new file mode 100644 index 000000000..80980cf5b --- /dev/null +++ b/src/com/rjconsultores/ventaboletos/dao/sqlbuilder/SQLBuilder.java @@ -0,0 +1,19 @@ +package com.rjconsultores.ventaboletos.dao.sqlbuilder; + + +/** + * Interface que indica quais são os SQL nativos da aplicação. + * + * Cada método representa um SQL nativo que deve ser implementado de acordo com a base de dados. + * + * O padrão para a clase é retornar o SQL nativo para o conjunto de parametros + * + * + * @author gleimar + * + */ +public interface SQLBuilder { + + public String getSQLTarifaOficial1(Integer codRuta); + +} diff --git a/src/com/rjconsultores/ventaboletos/dao/sqlbuilder/SQLFactory.java b/src/com/rjconsultores/ventaboletos/dao/sqlbuilder/SQLFactory.java new file mode 100644 index 000000000..63a45ae30 --- /dev/null +++ b/src/com/rjconsultores/ventaboletos/dao/sqlbuilder/SQLFactory.java @@ -0,0 +1,24 @@ +package com.rjconsultores.ventaboletos.dao.sqlbuilder; + +import org.apache.log4j.Logger; + +import com.rjconsultores.ventaboletos.dao.sqlbuilder.impl.SQLBuilderOracle; +import com.rjconsultores.ventaboletos.dao.sqlbuilder.impl.SQLBuilderSQLServer; +import com.rjconsultores.ventaboletos.dao.util.DBUtil; + +public class SQLFactory { + private static Logger log = Logger.getLogger(SQLFactory.class); + + public SQLBuilder getBuilder() { + if (DBUtil.getInstance().isOracle()) { + return new SQLBuilderOracle(); + } + if (DBUtil.getInstance().isSQLServer()) { + return new SQLBuilderSQLServer(); + } + + log.error("Não foi identificado a base de dados"); + + return new SQLBuilderOracle(); + } +} diff --git a/src/com/rjconsultores/ventaboletos/dao/sqlbuilder/impl/SQLBuilderOracle.java b/src/com/rjconsultores/ventaboletos/dao/sqlbuilder/impl/SQLBuilderOracle.java new file mode 100644 index 000000000..132f6ca96 --- /dev/null +++ b/src/com/rjconsultores/ventaboletos/dao/sqlbuilder/impl/SQLBuilderOracle.java @@ -0,0 +1,96 @@ +package com.rjconsultores.ventaboletos.dao.sqlbuilder.impl; + +import com.rjconsultores.ventaboletos.dao.sqlbuilder.SQLBuilder; + +public class SQLBuilderOracle implements SQLBuilder { + + @Override + public String getSQLTarifaOficial1(Integer codRuta) { + StringBuilder sb = new StringBuilder(); + sb.append("INSERT "); + sb.append("INTO "); + sb.append(" TARIFA_OFICIAL "); + sb.append(" ( "); + sb.append(" TARIFAOFICIAL_ID, "); + sb.append(" PRECIO, "); + sb.append(" PRECIOREDABIERTO, "); + sb.append(" TRAMO_ID, "); + sb.append(" MARCA_ID, "); + sb.append(" CLASESERVICIO_ID, "); + sb.append(" PRECIOORIGINAL, "); + sb.append(" MONEDA_ID, "); + sb.append(" VIGENCIATARIFA_ID, "); + sb.append(" STATUSTARIFA, "); + sb.append(" IMPORTETAXAEMBARQUE, "); + sb.append(" IMPORTEPEDAGIO, "); + sb.append(" IMPORTEOUTROS, "); + sb.append(" IMPORTESEGURO, "); + sb.append(" ORGAOCONCEDENTE_ID, "); + sb.append(" RUTA_ID, "); + sb.append(" ACTIVO, "); + sb.append(" FECMODIF, "); + sb.append(" USUARIO_ID, "); + sb.append(" ORIGEN_ID, "); + sb.append(" DESTINO_ID "); + sb.append(" ) "); + sb.append(" select "); + sb.append(" "); + sb.append(" TARIFA_OFICIAL_SEQ.NEXTVAL, "); + sb.append(" ROUND( "); + sb.append(" coalesce(ct1.coeficiente,0) * coalesce(tc.kmcoeficiente1,0) + "); + sb.append(" coalesce(ct2.coeficiente,0) * coalesce(tc.kmcoeficiente2,0) + "); + sb.append(" coalesce(ct3.coeficiente,0) * coalesce(tc.kmcoeficiente3,0),2), "); + sb.append(" null, "); + sb.append(" t.tramo_id, "); + sb.append(" mc.marca_id, "); + sb.append(" r.CLASESERVICIO_ID, "); + sb.append(" null, "); + sb.append(" m.moneda_id, "); + sb.append(" null, "); + sb.append(" 'A', "); + sb.append(" null, "); + sb.append(" null, "); + sb.append(" null, "); + sb.append(" null, "); + sb.append(" oc.orgaoconcedente_id, "); + sb.append(" r.ruta_id, "); + sb.append(" 1, "); + sb.append(" sysdate, "); + sb.append(" 999, "); + sb.append(" po.parada_id, "); + sb.append(" pd.parada_id "); + sb.append(" "); + sb.append("from "); + sb.append(" ruta_combinacion rc "); + sb.append(" inner join ruta r on r.ruta_id = rc.ruta_id "); + sb.append(" inner join orgao_tramo tc on tc.tramo_id = rc.tramo_id "); + sb.append(" inner join orgao_concedente oc on oc.orgaoconcedente_id = tc.orgaoconcedente_id and oc.orgaoconcedente_id =r.orgaoconcedente_id "); + sb.append(" inner join coeficiente_tarifa ct1 on ct1.coeficientetarifa_id = tc.coeficientetarifa1_id "); + sb.append(" left join coeficiente_tarifa ct2 on ct2.coeficientetarifa_id = tc.coeficientetarifa2_id "); + sb.append(" left join coeficiente_tarifa ct3 on ct3.coeficientetarifa_id = tc.coeficientetarifa3_id "); + sb.append(" inner join tramo t on t.tramo_id = rc.tramo_id "); + sb.append(" inner join parada po on po.parada_id = t.origen_id "); + sb.append(" inner join parada pd on pd.parada_id = t.destino_id "); + sb.append(" inner join MARCA_CLASESERVICIO mc on mc.CLASESERVICIO_ID = r.CLASESERVICIO_ID, "); + sb.append(" moneda m "); + sb.append(" "); + sb.append("where "); + sb.append(" rc.activo = 1 "); + if (codRuta != null) { + sb.append(" and r.ruta_id = ").append(codRuta); + } + sb.append(" and r.activo = 1 "); + sb.append(" and m.moneda_id = 1 "); + sb.append(" and oc.orgaoconcedente_id = 3 "); + sb.append(" and "); + sb.append(" (t.tramo_id, "); + sb.append(" mc.marca_id, "); + sb.append(" r.CLASESERVICIO_ID, "); + sb.append(" m.moneda_id, "); + sb.append(" oc.orgaoconcedente_id, "); + sb.append(" r.ruta_id) not in (select tao.tramo_id,tao.marca_id,tao.CLASESERVICIO_ID,tao.moneda_id,tao.orgaoconcedente_id, tao.ruta_id from tarifa_oficial tao where tao.activo = 1) "); + + return sb.toString(); + } + +} \ No newline at end of file diff --git a/src/com/rjconsultores/ventaboletos/dao/sqlbuilder/impl/SQLBuilderSQLServer.java b/src/com/rjconsultores/ventaboletos/dao/sqlbuilder/impl/SQLBuilderSQLServer.java new file mode 100644 index 000000000..3248ad73c --- /dev/null +++ b/src/com/rjconsultores/ventaboletos/dao/sqlbuilder/impl/SQLBuilderSQLServer.java @@ -0,0 +1,11 @@ +package com.rjconsultores.ventaboletos.dao.sqlbuilder.impl; + +import com.rjconsultores.ventaboletos.dao.sqlbuilder.SQLBuilder; + +public class SQLBuilderSQLServer implements SQLBuilder { + + @Override + public String getSQLTarifaOficial1(Integer codRuta) { + throw new RuntimeException("SQL getSQLTarifaOficial1 não implementado"); + } +} diff --git a/src/com/rjconsultores/ventaboletos/dao/util/DBUtil.java b/src/com/rjconsultores/ventaboletos/dao/util/DBUtil.java new file mode 100644 index 000000000..a9906aa63 --- /dev/null +++ b/src/com/rjconsultores/ventaboletos/dao/util/DBUtil.java @@ -0,0 +1,58 @@ +package com.rjconsultores.ventaboletos.dao.util; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + +import org.apache.log4j.Logger; +import org.springframework.core.io.ClassPathResource; + +public class DBUtil { + + private static Logger log = Logger.getLogger(DBUtil.class); + private static DBUtil INSTANCE; + private static Properties p; + + public static DBUtil getInstance(){ + if (INSTANCE == null){ + INSTANCE = new DBUtil(); + } + return INSTANCE; + } + + private DBUtil() { + p = new Properties(); + InputStream is; + try { + is = new ClassPathResource("/com/rjconsultores/ventaboletos/web/cliente/conf/database.properties").getInputStream(); + + p.load(is); + is.close(); + } catch (IOException e) { + log.error("Erro ao carregar o properties do banco de dados", e); + } + } + + public boolean isOracle() { + return p.getProperty("database.dialect").toUpperCase().contains("ORACLE"); + } + + public boolean isSQLServer() { + return p.getProperty("database.dialect").toUpperCase().contains("SQLSERVER"); + } + +// private String getDefaultSchema(){ +// return p.getProperty("database.default_schema").toUpperCase(); +// } + +// public String agregarDefaulSchema(String objBaseDados){ +// String [] array = objBaseDados.split("\\."); +// +// if (array.length == 1){ +// return getDefaultSchema() + "." + array[0]; +// }else if (array.length == 2){ +// return getDefaultSchema() + "." + array[1]; +// } +// return objBaseDados; +// } +} diff --git a/src/com/rjconsultores/ventaboletos/service/TarifaOficialService.java b/src/com/rjconsultores/ventaboletos/service/TarifaOficialService.java index bb1d17fb3..4fa717fa7 100644 --- a/src/com/rjconsultores/ventaboletos/service/TarifaOficialService.java +++ b/src/com/rjconsultores/ventaboletos/service/TarifaOficialService.java @@ -7,23 +7,24 @@ public interface TarifaOficialService { /** * Gera as tarifas de acordo o cálculo da ANTT.
* - * Se o parametro ruta não for informado, será gerado tarifas para todas as rutas da ANTT.
+ * Se o parametro ruta não for informado, será gerado tarifas para todas as + * rutas da ANTT.
* * Obs.: Essa operção apenas gera tarifas que ainda não estão geradas
* * @param ruta + * @return A quantidade de registros afetadas */ - public void gerarTarifaANTT(Ruta ruta); - - + public Integer gerarTarifaANTT(Ruta ruta); + /** * Atualiza as tarifas de acordo o cálculo da ANTT
* - * Se o parametro ruta não for informado, será atualizado as tarifas para todas as rutas da ANTT.
+ * Se o parametro ruta não for informado, será atualizado as tarifas para + * todas as rutas da ANTT.
* * @param ruta */ public void atualizarTarifaANTT(Ruta ruta); - - + } diff --git a/src/com/rjconsultores/ventaboletos/service/impl/TarifaOficialServiceImpl.java b/src/com/rjconsultores/ventaboletos/service/impl/TarifaOficialServiceImpl.java index d43ad95d2..fd58b42a1 100644 --- a/src/com/rjconsultores/ventaboletos/service/impl/TarifaOficialServiceImpl.java +++ b/src/com/rjconsultores/ventaboletos/service/impl/TarifaOficialServiceImpl.java @@ -1,17 +1,23 @@ package com.rjconsultores.ventaboletos.service.impl; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.rjconsultores.ventaboletos.dao.TarifaOficialDAO; import com.rjconsultores.ventaboletos.entidad.Ruta; import com.rjconsultores.ventaboletos.service.TarifaOficialService; @Service("tarifaOficialService") public class TarifaOficialServiceImpl implements TarifaOficialService { + @Autowired + private TarifaOficialDAO tarifaOficialDAO; + @Override - public void gerarTarifaANTT(Ruta ruta) { - // TODO Auto-generated method stub - + @Transactional + public Integer gerarTarifaANTT(Ruta ruta) { + return tarifaOficialDAO.gerarTarifaANTT(ruta); } @Override