AverageSpeedHandler.java 3.65 KB
package com.bsth.handler;

import com.bsth.StartCommand;
import com.bsth.entity.result.AverageSpeed;
import com.bsth.service.ScheduleRealInfoService;
import com.bsth.util.DBUtils_jdsas;
import com.bsth.util.DateUtils;
import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;


/**
 * @ClassName: MileageCalculationHandler.java
 * @Description: TODO(营运公里处理程序)
 * @author: YouRuiFeng
 * @date: 2017-8-14 下午2:06:22
 * 
 */
@Component
public class AverageSpeedHandler {
	
	@Autowired
    ScheduleRealInfoService scheduleRealInfoService;
	
	@Autowired
    JdbcTemplate jdbcTemplate;
	
	Logger logger = LoggerFactory.getLogger(this.getClass());
	
	public void calc() {
    	try {
	        DateTime dt = DateTime.now();
	        dt = dt.plusDays(-1);//凌晨两点计算前一天的
	        String rq = dt.toString("yyyy-MM");
//	        String rqs = "2021-";
//	        for(int i=1;i<3;i++){
//	        	String rq = rqs+(i<10? "0"+i:i);
//				logger.info("开始计算报表: " + rq);
//				List<AverageSpeed> oMList = scheduleRealInfoService.averageSpeed(rq);
//				logger.info("报表计算完成: " + rq);
//				save(oMList);
//				logger.info("数据保存完成: " + rq);
//			}

//	        String rq = "2017-04";
	        if(!rq.equals(StartCommand.RQ)){

				logger.info("开始计算报表: " + rq);
				List<AverageSpeed> oMList = scheduleRealInfoService.averageSpeed(rq);
				logger.info("报表计算完成: " + rq);
				save(oMList);
				StartCommand.RQ = rq;
				logger.info("数据保存完成: " + rq);
			}

    	} catch (Exception e) {
            logger.error("", e);
        } 
	}
	
	 private void save(final List<AverageSpeed> list) {

		 Connection conn = null;
		 PreparedStatement ps = null;
//		 ResultSet rs = null;
		try {
			conn = DBUtils_jdsas.getConnection();
			conn.setAutoCommit(false);

			String sql = "insert into calc_average_speed(company_id, branche_company_id, company_name, branche_company_name, line_code, line_name, " +
					"plan_speed,real_speed,rq,rq_str,create_date) " +
					"  VALUES(?,?,?,?,?,?,?,?,?,?,?)";

			ps = conn.prepareStatement(sql);

			for (int i=0; i<list.size(); i++) {
				AverageSpeed averageSpeed = list.get(i);
				ps.setString(1, averageSpeed.getCompanyId());
				ps.setString(2, averageSpeed.getBrancheCompanyId());
				ps.setString(3, averageSpeed.getCompanyName());
				ps.setString(4, averageSpeed.getBrancheCompanyName());
				ps.setString(5, averageSpeed.getLineCode());
				ps.setString(6, averageSpeed.getLineName());
				ps.setFloat(7, averageSpeed.getPlanSpeed());
				ps.setFloat(8, averageSpeed.getRealSpeed());
				ps.setDate(9, new java.sql.Date(averageSpeed.getRq().getTime()));
				ps.setString(10, averageSpeed.getRqStr());
				ps.setDate(11, new java.sql.Date(DateUtils.getTimestamp()));
				ps.addBatch();
				// 1w条记录插入一次
				if (i % 10000 == 0){
					ps.executeBatch();
					conn.commit();
				}
			}
			// 最后插入不足1w条的数据
			ps.executeBatch();
			conn.commit();
		} catch (Exception e) {
			e.printStackTrace();
//			throw new RuntimeException(e);
			logger.error("", e);
		}finally{
			if(ps!=null){
				try {
					ps.close();
				} catch (SQLException e) {
					e.printStackTrace();
					logger.error("", e);
				}
			}
			if(conn!=null){
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
					logger.error("", e);
				}
			}
		}
	}
}