BasicData.java 8.33 KB
package com.bsth.data;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

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

import com.bsth.Application;
import com.bsth.entity.CarPark;
import com.bsth.entity.Cars;
import com.bsth.entity.Line;
import com.bsth.entity.Personnel;
import com.bsth.entity.Station;
import com.bsth.entity.StationRoute;
import com.bsth.entity.schedule.CarConfigInfo;
import com.bsth.repository.CarParkRepository;
import com.bsth.repository.CarsRepository;
import com.bsth.repository.LineRepository;
import com.bsth.repository.PersonnelRepository;
import com.bsth.repository.StationRepository;
import com.bsth.repository.StationRouteRepository;
import com.bsth.repository.schedule.CarConfigInfoRepository;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import com.google.common.collect.TreeMultimap;

/**
 * 
 * @ClassName: BasicData
 * @Description: TODO(基础的映射数据)
 * @author PanZhao
 * @date 2016年8月10日 下午3:27:45
 *
 */
@Component
public class BasicData implements CommandLineRunner{
	
	//设备号和车辆自编号 (K: 设备编码 ,V:车辆自编号)
	public static BiMap<String, String> deviceId2NbbmMap;

	//车辆自编号和公司代码对照 (K: 车辆自编号 ,V:公司代码)
	public static Map<String, String> nbbm2CompanyCodeMap;

	//站点编码和名称对照,包括停车场 (K: 站点编码 ,V:站点名称)
	public static Map<String, String> stationCode2NameMap;
	
	//车辆和线路对照
	public static Map<String, Line> nbbm2LineMap;

	//线路和用户对照 用于webSocket定向推送消息(用户进入线调时写入数据)
	public static TreeMultimap<String, String> lineCode2SocketUserMap = TreeMultimap.create();

	//线路ID和code 对照
	public static BiMap<Integer, String> lineId2CodeMap;
	
	//线路编码和名称对照
	public static Map<String, String> lineCode2NameMap;
	
	//线路编码_站点编码 == 0|1  上下行
	public static Map<String, Integer> lineStationUpDownMap;
	
	//停车场
	public static List<String> parkCodeList;
	
	//线路ID和shangHaiLinecode 对照
	public static Map<Integer, String> lineId2ShangHaiCodeMap;
	
	//线路Code和shangHaiLinecode 对照
	public static Map<String, String> lineCode2ShangHaiCodeMap;
	
	//驾驶员工号 和 personnel 对象映射
	public static Map<String, Personnel> jsyMap;
	//售票员工号 和 personnel 对象映射
	public static Map<String, Personnel> spyMap;
	//全量员工 工号和姓名对照
	public static Map<String, String> allPerson;
	
	
	static Logger logger = LoggerFactory.getLogger(BasicData.class);
	
	@Autowired
	BasicDataLoader dataLoader;
	
	@Override
	public void run(String... arg0) throws Exception {
		Application.mainServices.scheduleWithFixedDelay(dataLoader, 0, 1, TimeUnit.HOURS);
	}
	
	
	@Component
	public static class BasicDataLoader extends Thread{
		
		@Autowired
		CarsRepository carsRepository;
		
		@Autowired
		StationRepository stationRepository;
		
		@Autowired
		CarParkRepository carParkRepository;
		
		@Autowired
		CarConfigInfoRepository carConfigInfoRepository;
		
		@Autowired
		LineRepository lineRepository;
		
		@Autowired
		StationRouteRepository stationRouteRepository;
		
		@Autowired
		PersonnelRepository personnelRepository;
		
		
		@Override
		public void run() {
			loadAllData();
		}

		/**
		 * @Title: loadAllData 
		 * @Description: TODO(加载所有数据) 
		 */
		public int loadAllData(){
			try{
				//设备信息
				loadDeviceInfo();
				//站点信息
				loadStationInfo();
				//线路信息
				loadLineInfo();
				//车辆和线路映射信息
				loadNbbm2LineInfo();
				//站点路由信息
				loadStationRouteInfo();
				//人员信息
				loadPersonnelInfo();
				logger.info("加载基础数据成功!," );
			}catch(Exception e){
				logger.error("加载基础数据时出现异常," , e);
			}
			return 0;
		}
		
		
		private void loadStationRouteInfo() {
			Iterator<StationRoute> iterator = stationRouteRepository.findAllEffective().iterator();
			Map<String, Integer> map = new HashMap<>();
			StationRoute route;
			
			while(iterator.hasNext()){
				route = iterator.next();
				map.put(route.getLineCode() + "_" + route.getStationCode(), route.getDirections());
			}
			lineStationUpDownMap = map;
		}

		/**
		 * @Title: loadDeviceInfo 
		 * @Description: TODO(加载设备相关信息) 
		 */
		public void loadDeviceInfo(){
			BiMap<String, String> deviceId2Nbbm = HashBiMap.create();
			//车辆和公司代码对照
			Map<String, String> nbbm2CompanyCode = new HashMap<>();
			Iterator<Cars> carIterator = carsRepository.findAll().iterator();
			Cars car;
			while(carIterator.hasNext()){
				car = carIterator.next();
				deviceId2Nbbm.put(car.getEquipmentCode(), car.getInsideCode());
				nbbm2CompanyCode.put(car.getInsideCode(), car.getBusinessCode());
			}
			
			deviceId2NbbmMap = deviceId2Nbbm;
			nbbm2CompanyCodeMap = nbbm2CompanyCode;
		}
		
		/**
		 * @Title: loadStationInfo 
		 * @Description: TODO(加载站点信息) 
		 */
		public void loadStationInfo(){
			Map<String, String> stationCode2Name = new HashMap<>();
			Iterator<Station> iterator = stationRepository.findAll().iterator();
			//站点
			Station station;
			while(iterator.hasNext()){
				station = iterator.next();
				stationCode2Name.put(station.getStationCod(), station.getStationName());
			}
			//停车场
			Iterator<CarPark> iterator2 = carParkRepository.findAll().iterator();
			
			List<String> parkCodes = new ArrayList<>(); 
			
			CarPark carPark;
			while(iterator2.hasNext()){
				carPark = iterator2.next();
				stationCode2Name.put(carPark.getParkCode(), carPark.getParkName());
				
				parkCodes.add(carPark.getParkCode());
			}
			parkCodeList = parkCodes;
			stationCode2NameMap = stationCode2Name;
		}
		
		/**
		 * @Title: loadNbbm2LineInfo 
		 * @Description: TODO(车辆和线路对照) 
		 */
		public void loadNbbm2LineInfo(){
			Iterator<CarConfigInfo> allIterator = carConfigInfoRepository.findAll().iterator();
			Map<String, Line> ccMap = new HashMap<>();
			
			CarConfigInfo cci;
			while(allIterator.hasNext()){
				cci = allIterator.next();
				ccMap.put(cci.getCl().getInsideCode(), cci.getXl());
			}
			nbbm2LineMap = ccMap;
		}
		
		/**
		 * @Title: loadLineInfo 
		 * @Description: TODO(加载线路相关信息) 
		 */
		public void loadLineInfo(){
			Iterator<Line> iterator = lineRepository.findAll().iterator();
			
			Line line;
			BiMap<Integer, String> biMap = HashBiMap.create();
			Map<String, String> code2name = new HashMap<>();
			Map<Integer, String> id2SHcode = new HashMap<Integer, String>();
			Map<String, String> code2SHcode = new HashMap<String, String>();
			
			while(iterator.hasNext()){
				line = iterator.next();
				biMap.put(line.getId(), line.getLineCode());
				code2name.put(line.getLineCode(), line.getName());
				id2SHcode.put(line.getId(),line.getShanghaiLinecode());
				code2SHcode.put(line.getLineCode(), line.getShanghaiLinecode());
			}
			
			lineId2CodeMap = biMap;
			lineCode2NameMap = code2name;
			lineId2ShangHaiCodeMap = id2SHcode;
			lineCode2ShangHaiCodeMap = code2SHcode;
		}
		
		/**
		 * 
		 * @Title: loadPersonnelInfo 
		 * @Description: TODO(加载人员信息) 
		 */
		public void loadPersonnelInfo() {
			Iterator<Personnel> iterator = personnelRepository.findAll().iterator();
			
			Map<String, Personnel> jsyTempMap=new HashMap<>()
					, spyTempMap=new HashMap<>();
			Map<String, String> allPersonMap=new HashMap<>();
			
			Personnel p;
			
			while(iterator.hasNext()){
				p = iterator.next();
				
				if(p.getPosts() != null){
					if(p.getPosts().equals("1"))
						jsyTempMap.put(p.getJobCode(), p);
					else if(p.getPosts().equals("2"))
						spyTempMap.put(p.getJobCode(), p);
				}
				
				allPersonMap.put(p.getJobCode(), p.getPersonnelName());
			}
			
			jsyMap=jsyTempMap;
			spyMap=spyTempMap;
			allPerson=allPersonMap;
		}
	}
}