EnableRouteVersionHandler.java 5.08 KB
package com.bsth.data.line_version;

import com.bsth.data.line_version.dto.EvSectionRoute;
import com.bsth.data.line_version.dto.EvStationRoute;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Component;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;

import java.util.ArrayList;
import java.util.List;

/**
 * 启用线路路由版本
 * Created by panzhao on 2017/12/28.
 */
@Component
public class EnableRouteVersionHandler {

    @Autowired
    JdbcTemplate jdbcTemplate;

    @Autowired
    NamedParameterJdbcTemplate namedParameterJdbcTemplate;

    Logger logger = LoggerFactory.getLogger(this.getClass());

    public void enable(String lineCode, int version){
        //编程式事务
        DataSourceTransactionManager tran = new DataSourceTransactionManager(jdbcTemplate.getDataSource());
        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
        TransactionStatus status = tran.getTransaction(def);


        try{
            enableStation(lineCode, version);
            enableRoad(lineCode, version);

            //将当前版本变为历史版本
            String sql = "update bsth_c_line_versions set status=0, end_date=SYSDATE(),update_date=SYSDATE() where line_code=" + lineCode + " and status=1";
            jdbcTemplate.update(sql);
            //将待更新版本变为启用版本
            sql = "update bsth_c_line_versions set status=1,update_date=SYSDATE() where line_code=" + lineCode + " and  versions="+version;
            jdbcTemplate.update(sql);

            tran.commit(status);
        }catch (Exception e){
            tran.rollback(status);
            logger.error("", e);
        }
    }

    /**
     * 启用新版本站点
     * @param lineCode
     * @param version
     */
    public void enableStation(String lineCode, int version){
        //删除当前站点路由表数据
        String sql = "delete from bsth_c_stationroute where line_code=" + lineCode;
        jdbcTemplate.update(sql);

        //将新版本数据插入当前表
        sql = "select * from bsth_c_ls_stationroute where line_code=" + lineCode + " and versions=" + version;
        List<EvStationRoute> list = jdbcTemplate.query(sql, BeanPropertyRowMapper.newInstance(EvStationRoute.class));

        List<BeanPropertySqlParameterSource> sourceList = new ArrayList<>();
        for(EvStationRoute s : list){
            sourceList.add(new BeanPropertySqlParameterSource(s));
        }

        sql = "insert into bsth_c_stationroute(id,line,station,station_name,station_route_code,line_code,station_code,station_mark,out_station_nmber,directions,distances,to_time,first_time,end_time,descriptions,destroy,versions,create_date,update_date) " +
                " values(:id,:line,:station,:stationName,:stationRouteCode,:lineCode,:stationCode,:stationMark,:outStationNmber,:directions,:distances,:toTime,:firstTime,:endTime,:descriptions,:destroy,:versions,SYSDATE(),SYSDATE())";
        BeanPropertySqlParameterSource[] beanSources  =  sourceList.toArray(new BeanPropertySqlParameterSource[sourceList.size()]);
        namedParameterJdbcTemplate.batchUpdate(sql, beanSources);
    }

    /**
     * 启用新版本路段
     * @param lineCode
     * @param version
     */
    public void enableRoad(String lineCode, int version){
        //删除当前路段路由表数据
        String sql = "delete from bsth_c_sectionroute where line_code=" + lineCode;
        jdbcTemplate.update(sql);

        //将新版本数据插入当前表
        sql = "select * from bsth_c_ls_sectionroute where line_code=" + lineCode + " and versions=" + version;
        List<EvSectionRoute> list = jdbcTemplate.query(sql, BeanPropertyRowMapper.newInstance(EvSectionRoute.class));

        List<BeanPropertySqlParameterSource> sourceList = new ArrayList<>();
        for(EvSectionRoute s : list){
            sourceList.add(new BeanPropertySqlParameterSource(s));
        }

        sql = "insert into bsth_c_sectionroute(id,line_code,section_code,sectionroute_code,directions,line,section,descriptions,create_by,create_date,update_by,update_date,versions,destroy,is_roade_speed) " +
                " values(:id,:lineCode,:sectionCode,:sectionrouteCode,:directions,:line,:section,:descriptions,:createBy,SYSDATE(),:updateBy,SYSDATE(),:versions,:destroy,:isRoadeSpeed)";
        BeanPropertySqlParameterSource[] beanSources  =  sourceList.toArray(new BeanPropertySqlParameterSource[sourceList.size()]);
        namedParameterJdbcTemplate.batchUpdate(sql, beanSources);
    }
}