ReportCalculationHandler.java 7.39 KB
package com.bsth.handler;

import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

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.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
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 com.bsth.entity.result.RevisedReport;
import com.bsth.service.ScheduleRealInfoService;



/**
 * @ClassName: MileageCalculationHandler.java
 * @Description: TODO(营运公里处理程序)
 * @author: YouRuiFeng
 * @date: 2017-8-14 下午2:06:22
 * 
 */
@Component
public class ReportCalculationHandler {
	
	@Autowired
    ScheduleRealInfoService scheduleRealInfoService;
	
	@Autowired
    JdbcTemplate jdbcTemplate;
	
	Logger logger = LoggerFactory.getLogger(this.getClass());
	
	public void calc() {
    	try {
	        DateTime dt = DateTime.now();
	        dt = dt.plusDays(-2);//计算两天前的数据
			String rq = dt.toString("yyyy-MM-dd");
			logger.info("开始计算报表: " + rq);
			List<RevisedReport> oMList = scheduleRealInfoService.mileageCorrectionTj(rq);
			logger.info("报表计算完成: " + rq);
			save(oMList);

			/*List<String> list = new ArrayList<>();
			list.add("2019-10-31");
			list.add("2019-11-30");
			list.add("2019-12-29");
			list.add("2019-12-30");
			list.add("2019-12-31");

			for (String rq:list) {
				logger.info("开始计算报表: " + rq);
				List<RevisedReport> oMList = scheduleRealInfoService.mileageCorrectionTj(rq);
				logger.info("报表计算完成: " + rq);
				save(oMList);
			}*/

			/*for(int i = 11; i<13; i++){
				int dateSum = 0;
				switch(i){
					case 12:dateSum = 22; break;
					case 4: case 6: case 9: case 11:dateSum = 30; break;
					case 2: dateSum = 28;*//*
					case 1: case 3: case 5: case 7: case 8: case 10: case 12:dateSum = 31; break;
					case 4: case 6: case 9: case 11:dateSum = 30; break;
					case 2: dateSum = 28;*//*
				}

				String yy = i<10 ? "0"+i : i+"";
				for(int j = 1; j<=dateSum; j++){
					String dd = j<10 ? "0"+j : j+"";
					String rq = "2020-"+yy+"-"+dd;
					Date date1 = new Date();
					Date date2 = new Date(120,Integer.parseInt(yy)-1,Integer.parseInt("14"));

					if((date1.getTime() - 2*24*3600*1000) >= date2.getTime()){

						logger.info("开始计算报表: " + rq);
						List<RevisedReport> oMList = scheduleRealInfoService.mileageCorrectionTj(rq);
						logger.info("报表计算完成: " + rq);
						save(oMList);
					}
				}
			}*/
    	} catch (Exception e) {
            logger.error("", e);
        } 
	}
	
	 private void save(final List<RevisedReport> list) {
	        //编程式事务
	        DataSourceTransactionManager tran = new DataSourceTransactionManager(jdbcTemplate.getDataSource());
	        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
	        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
	        TransactionStatus status = tran.getTransaction(def);
	        
	        String sqlMileage = "insert into calc_mileage(company_id, sub_company_id, company_name, sub_company_name, line_code, line_name, " +
	        		"zyygl, sjyygl, sjksgl, sddfgl, zddfgl, wqwxhgl, bfwxhgl, pygl, ljgl, zrwgl, other, rq, remarks, create_date) " +
	        		"  VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
	       
	        try {
	            jdbcTemplate.batchUpdate(sqlMileage, new BatchPreparedStatementSetter() {
	                @Override
	                public void setValues(PreparedStatement ps, int i) throws SQLException {
	                	RevisedReport report = list.get(i);
	                    ps.setString(1, report.getCompanyId());
	                    ps.setString(2, report.getSubCompanyId());
	                    ps.setString(3, report.getCompanyName());
	                    ps.setString(4, report.getSubCompanyName());
	                    ps.setString(5, report.getLineCode());
	                    ps.setString(6, report.getLineName());
	                    ps.setDouble(7, report.getZgl());
	                    ps.setDouble(8, report.getSjyygl());
	                    ps.setDouble(9, report.getSjksgl());
	                    ps.setDouble(10, report.getSddfgl());
	                    ps.setDouble(11, report.getZddfgl());
	                    ps.setDouble(12, report.getWqwxhgl());
	                    ps.setDouble(13, report.getBfwxhgl());
	                    ps.setDouble(14, report.getPygl());
	                    ps.setDouble(15, report.getLjgl());
	                    ps.setDouble(16, report.getZrwgl());
	                    ps.setString(17, report.getOther());
	                    ps.setString(18, report.getRq());
	                    ps.setString(19, report.getRemarks());
	                    ps.setDate(20, new java.sql.Date(report.getCreateDate().getTime()));
	                }

	                @Override
	                public int getBatchSize() {
	                    return list.size();
	                }
	            }); 
	            
		        String sqlSchedule = "insert into calc_schedule(company_id, sub_company_id, company_name, sub_company_name, line_code, line_name, " +
		        		"zyybc, sjyybc, sjksbc, sddfbc, zddfbc, wqwxhbc, bfwxhbc, pybc, ljbc, zrwbc, other, rq, remarks, create_date) " +
		        		"  VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
	            
	            jdbcTemplate.batchUpdate(sqlSchedule, new BatchPreparedStatementSetter() {
	                @Override
	                public void setValues(PreparedStatement ps, int i) throws SQLException {
	                	RevisedReport report = list.get(i);
	                    ps.setString(1, report.getCompanyId());
	                    ps.setString(2, report.getSubCompanyId());
	                    ps.setString(3, report.getCompanyName());
	                    ps.setString(4, report.getSubCompanyName());
	                    ps.setString(5, report.getLineCode());
	                    ps.setString(6, report.getLineName());
	                    ps.setInt(7, report.getZbc());
	                    ps.setInt(8, report.getSjyybc());
	                    ps.setInt(9, report.getSjksbc());
	                    ps.setInt(10, report.getSddfbc());
	                    ps.setInt(11, report.getZddfbc());
	                    ps.setInt(12, report.getWqwxhbc());
	                    ps.setInt(13, report.getBfwxhbc());
	                    ps.setInt(14, report.getPybc());
	                    ps.setInt(15, report.getLjbc());
	                    ps.setInt(16, report.getZrwbc());
	                    ps.setString(17, report.getOther());
	                    ps.setString(18, report.getRq());
	                    ps.setString(19, report.getRemarks());
	                    ps.setDate(20, new java.sql.Date(report.getCreateDate().getTime()));
	                }

	                @Override
	                public int getBatchSize() {
	                    return list.size();
	                }
	            });

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