ScheduleRefreshThread.java 2.65 KB
package com.bsth.data.schedule.thread;

import com.bsth.data.LineConfigData;
import com.bsth.data.directive.DayOfDirectives;
import com.bsth.data.gpsdata_v2.cache.GpsCacheData;
import com.bsth.data.pilot80.PilotReport;
import com.bsth.data.schedule.DayOfSchedule;
import com.bsth.data.schedule.f_a_l.FirstAndLastHandler;
import com.bsth.entity.realcontrol.LineConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Collection;
import java.util.Set;

/**
 * 
 * @ClassName: ScheduleRefreshThread
 * @Description: TODO(班次刷新线程,用于在营运开始时间切换到当日排班)
 * @author PanZhao
 * @date 2016年8月17日 下午1:23:34
 *
 */
@Component
public class ScheduleRefreshThread extends Thread{

	@Autowired
	DayOfSchedule dayOfSchedule;

	@Autowired
	LineConfigData lineConfs;
	
	@Autowired
	DayOfDirectives dayOfDirectives;
	
	@Autowired
	PilotReport pilotReport;
	
	Logger logger = LoggerFactory.getLogger(ScheduleRefreshThread.class);
	
	@Override
	public void run() {
		try {
			Collection<LineConfig> confs = lineConfs.getAll();
			
			String currSchDate, oldSchDate;
			String lineCode = null;
			String lineName = null;
			for(LineConfig conf : confs){
				try{
					lineName = conf.getLine().getName();
					lineCode = conf.getLine().getLineCode();
					oldSchDate = dayOfSchedule.getCurrSchDate().get(lineCode);
					currSchDate = dayOfSchedule.calcSchDate(lineCode);

					if(oldSchDate == null || !oldSchDate.equals(currSchDate)){

						try{
							Set<String> cars = dayOfSchedule.findCarByLineCode(lineCode);
							for(String car : cars){
								GpsCacheData.remove(car);
								dayOfSchedule.resetRepairReport(car);
							}
							//清除驾驶员上报数据
							pilotReport.clear(lineCode);
							//清除指令数据 指令数据,直接定时全部清空
							//dayOfDirectives.clear(lineCode);
						}catch (Exception e){
							logger.error("清理 60 和 80出现问题", e);
						}

						//重载排班数据
						dayOfSchedule.reloadSch(lineCode, currSchDate, false);
						logger.info(lineName + "翻班完成, " + currSchDate + " -班次数量:" + dayOfSchedule.findByLineCode(lineCode).size());
					}
				}catch (Exception e){
					logger.error("班次更新失败!! -" + lineCode, e);
				}
			}

			//按公司编码索引数据
			dayOfSchedule.groupByGsbm();

			//首末班入库(给网关用的数据)
			FirstAndLastHandler.saveAll();
		} catch (Exception e) {
			logger.error("", e);
		}
	}
}