FirstScheduleIssuedThread.java 2.05 KB
package com.bsth.vehicle.directive.thread;

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.entity.realcontrol.ScheduleRealInfo;
import com.bsth.service.realcontrol.buffer.ScheduleBuffer;
import com.bsth.vehicle.common.CommonMapped;
import com.bsth.vehicle.directive.service.DirectiveService;
import com.bsth.vehicle.gpsdata.buffer.GpsRealDataBuffer;
import com.bsth.vehicle.gpsdata.entity.GpsRealData;
import com.google.common.collect.BiMap;

/**
 * 
 * @ClassName: ScheduleIssuedThread 
 * @Description: TODO(首班调度指令下发线程) 
 * @author PanZhao
 * @date 2016年6月29日 下午11:09:39 
 *
 */
@Component
public class FirstScheduleIssuedThread extends Thread{

	@Autowired
	DirectiveService directiveService;
	
	//最多提前一小时开始尝试切换首班车营运状态
	final static long space = 1000 * 60 * 60 ;
	
	Logger logger = LoggerFactory.getLogger(this.getClass());
	
	@Override
	public void run() {
		
		Set<String> keys = ScheduleBuffer.carSchListMap.keySet();
		List<ScheduleRealInfo> list;
		BiMap<String, String> nbbmToDeviceMap = CommonMapped.vehicDeviceBiMap.inverse();
		
		Long t = System.currentTimeMillis();
		ScheduleRealInfo sch;
		
		GpsRealData gps;
		for(String nbbm : keys){
			gps = GpsRealDataBuffer.findByDeviceId(nbbmToDeviceMap.get(nbbm));
			//如果设备在线
			if(null != gps && gps.isOnline()){
				list = ScheduleBuffer.carSchListMap.get(nbbm);
				
				if(list.size() == 0)
					continue;
				
				sch = list.get(0);
				
				if(sch.getOpDirectiveState() == null
						&& sch.getStatus() == 0
						&& Math.abs(sch.getDfsjT() - t) < space){
					
					logger.info("切换首班运营状态, " + sch.getClZbh());
					//切换营运状态
					directiveService.send60Operation(sch.getClZbh()
							, 0, Integer.parseInt(sch.getXlDir())
							, sch, null);
				}
			}
		}
	}
}