FirstScheduleCheckThread.java 2.59 KB
package com.bsth.data.directive;

import java.util.List;
import java.util.Set;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.bsth.data.match.Arrival2Schedule;
import com.bsth.data.match.ExpectArrivalEnd;
import com.bsth.data.schedule.DayOfSchedule;
import com.bsth.entity.realcontrol.ScheduleRealInfo;
import com.bsth.service.directive.DirectiveService;

/**
 * 
 * @ClassName: FirstScheduleCheckThread 
 * @Description: TODO(首班出场检测) 
 * @author PanZhao 
 * @date 2016年8月27日 上午1:25:21 
 *
 */
@Component
public class FirstScheduleCheckThread extends Thread{

	@Autowired
	DayOfSchedule dayOfSchedule;
	
	@Autowired
	DirectiveService directiveService;
	
	Logger logger = LoggerFactory.getLogger(this.getClass());
	
	//提前半小时下发指令
	private final static long THREE_MINUTES = 1000 * 60 * 30L;
	
	@Override
	public void run() {
		try{
			Set<String> cars = dayOfSchedule.allCar();
			
			long t = System.currentTimeMillis();
			List<ScheduleRealInfo> schList;
			ScheduleRealInfo first;
			for(String car : cars){

				schList = dayOfSchedule.findByNbbm(car);
				
				if(null == schList || schList.size() == 0)
					continue;
				
				first = schList.get(0);
				
				if(null != first.getBcType() 
						&& first.getBcType().equals("out")){
					
					//没有计划里程的出场班次,出场既是首发站,发送下一班次的营运指令
					if(first.getJhlc() == null && first.getXlDir().equals(schList.get(1).getXlDir()))
						first = schList.get(1);
					
					//为首班补发指令
					if(first.getDirectiveState() == -1
							&& Math.abs(first.getDfsjT() - t) < THREE_MINUTES){
						
						directiveService.send60Dispatch(first, dayOfSchedule.doneSum(first.getClZbh()), "定补@系统");
						//期望完成出场班次时间
						long endTime;
						
						if(first.getZdsj() != null)
							endTime=first.getZdsjT() - 60000;
						else
							endTime=schList.get(1).getDfsjT() - 60000;
						
						ExpectArrivalEnd ead = new ExpectArrivalEnd()
									,ead2 = new ExpectArrivalEnd();
						ead.setNbbm(car);
						ead.setEndStation(first.getQdzCode());
						ead.setEndTime(endTime);
						
						ead2.setNbbm(car);
						ead2.setEndStation(first.getZdzCode());
						ead2.setEndTime(endTime);
						
						Arrival2Schedule.addExpect(car, ead);
						Arrival2Schedule.addExpect(car, ead2);
					}
				}
			}
		}catch(Exception e){
			logger.error("", e);
		}
	}
}