gleimar 2012-08-17 18:07:02 +00:00
parent 03d6b330ce
commit c33cdd46a6
9 changed files with 239 additions and 69 deletions

View File

@ -8,6 +8,7 @@ public interface TarifaOficialDAO {
/** /**
* See {@link TarifaOficialService#gerarTarifaANTT(Ruta)} * See {@link TarifaOficialService#gerarTarifaANTT(Ruta)}
* @param ruta * @param ruta
* @return TODO
*/ */
public void gerarTarifaANTT(Ruta ruta); public Integer gerarTarifaANTT(Ruta ruta);
} }

View File

@ -6,76 +6,30 @@ import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import com.rjconsultores.ventaboletos.dao.TarifaOficialDAO; import com.rjconsultores.ventaboletos.dao.TarifaOficialDAO;
import com.rjconsultores.ventaboletos.dao.sqlbuilder.SQLBuilder;
import com.rjconsultores.ventaboletos.entidad.Ruta; import com.rjconsultores.ventaboletos.entidad.Ruta;
import com.rjconsultores.ventaboletos.entidad.TarifaOficial; import com.rjconsultores.ventaboletos.entidad.TarifaOficial;
@Repository("tarifaOficialDAO") @Repository("tarifaOficialDAO")
public class TarifaOficialHibernateDAO extends GenericHibernateDAO<TarifaOficial, Integer> implements TarifaOficialDAO { public class TarifaOficialHibernateDAO extends GenericHibernateDAO<TarifaOficial, Integer> implements TarifaOficialDAO {
@Autowired
private SQLBuilder sqlBuilder;
@Autowired @Autowired
public TarifaOficialHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) { public TarifaOficialHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) {
setSessionFactory(factory); setSessionFactory(factory);
} }
@Override @Override
public void gerarTarifaANTT(Ruta ruta) { public Integer gerarTarifaANTT(Ruta ruta) {
StringBuilder sb = new StringBuilder(""); Integer rutaId = (ruta == null)?null:ruta.getRutaId();
sb.append("INSERT INTO TarifaOficial ( ");
sb.append(" tarifaOficialId, "); String sql = sqlBuilder.getSQLTarifaOficial1(rutaId);
sb.append(" precio, ");
sb.append(" precioredabierto, "); int qtd = getSession().createSQLQuery(sql).executeUpdate();
sb.append(" tramoId, ");
sb.append(" marcaId, "); return qtd;
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)
*/
} }
} }

View File

@ -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);
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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");
}
}

View File

@ -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;
// }
}

View File

@ -7,23 +7,24 @@ public interface TarifaOficialService {
/** /**
* Gera as tarifas de acordo o cálculo da ANTT.<br/> * Gera as tarifas de acordo o cálculo da ANTT.<br/>
* *
* Se o parametro ruta não for informado, será gerado tarifas para todas as rutas da ANTT.<br/> * Se o parametro ruta não for informado, será gerado tarifas para todas as
* rutas da ANTT.<br/>
* *
* Obs.: Essa operção apenas gera tarifas que ainda não estão geradas<br/> * Obs.: Essa operção apenas gera tarifas que ainda não estão geradas<br/>
* *
* @param ruta * @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<br/> * Atualiza as tarifas de acordo o cálculo da ANTT<br/>
* *
* Se o parametro ruta não for informado, será atualizado as tarifas para todas as rutas da ANTT.<br/> * Se o parametro ruta não for informado, será atualizado as tarifas para
* todas as rutas da ANTT.<br/>
* *
* @param ruta * @param ruta
*/ */
public void atualizarTarifaANTT(Ruta ruta); public void atualizarTarifaANTT(Ruta ruta);
} }

View File

@ -1,17 +1,23 @@
package com.rjconsultores.ventaboletos.service.impl; package com.rjconsultores.ventaboletos.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; 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.entidad.Ruta;
import com.rjconsultores.ventaboletos.service.TarifaOficialService; import com.rjconsultores.ventaboletos.service.TarifaOficialService;
@Service("tarifaOficialService") @Service("tarifaOficialService")
public class TarifaOficialServiceImpl implements TarifaOficialService { public class TarifaOficialServiceImpl implements TarifaOficialService {
@Autowired
private TarifaOficialDAO tarifaOficialDAO;
@Override @Override
public void gerarTarifaANTT(Ruta ruta) { @Transactional
// TODO Auto-generated method stub public Integer gerarTarifaANTT(Ruta ruta) {
return tarifaOficialDAO.gerarTarifaANTT(ruta);
} }
@Override @Override