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

import com.bsth.Application;
import com.bsth.data.gpsdata.arrival.GeoCacheData;
import com.bsth.data.pinyin.PersionPinYinBuffer;
import com.bsth.entity.*;
import com.bsth.entity.schedule.CarConfigInfo;
import com.bsth.repository.*;
import com.bsth.repository.schedule.CarConfigInfoRepository;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;

import java.util.*;
import java.util.concurrent.TimeUnit;

/**
 * @author PanZhao
 * @ClassName: BasicData
 * @Description: TODO(基础的映射数据)
 * @date 2016年8月10日 下午3:27:45
 */
@Component
public class BasicData implements CommandLineRunner {

    //公司代码和公司名对照(K: 公司编码,V:公司名)
    public static Map<String, String> businessCodeNameMap;

    //分公司公司代码和分公司公司名对照(K: 公司编码_分公司编码,V:分公司公司名)
    public static Map<String, String> businessFgsCodeNameMap;

    //设备号和车辆自编号 (K: 设备编码 ,V:车辆自编号)
    public static BiMap<String, String> deviceId2NbbmMap;

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

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

    //车辆和线路对照
    public static Map<String, Line> nbbm2LineMap;

    //线路ID和code 对照
    public static BiMap<Integer, String> lineId2CodeMap;

    //线路编码和名称对照
    public static Map<String, String> lineCode2NameMap;

    //停车场
    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;*/
    //所以员工和personnerl 对象映射
    public static Map<String, Personnel> perMap;
    //全量员工 工号和姓名对照
    public static Map<String, String> allPerson;

    //站点名和运管处编号 对照
    public static Map<String, Integer> stationName2YgcNumber;


    static Logger logger = LoggerFactory.getLogger(BasicData.class);

    @Autowired
    BasicDataLoader dataLoader;

    @Override
    public void run(String... arg0) throws Exception {
        Application.mainServices.scheduleWithFixedDelay(dataLoader, 2, 2, TimeUnit.HOURS);
    }

    public static String getStationNameByCode(String code, String prefix){
        String name = stationCode2NameMap.get(code);
        return name != null? name: stationCode2NameMap.get(prefix + code);
    }

    @Autowired
    JdbcTemplate jdbcTemplate;
    public Map<String, String> getNbbm2PlateNo(){
        List<Map<String, Object>> list = jdbcTemplate.queryForList("select CAR_CODE,CAR_PLATE from bsth_c_cars where CAR_CODE is not null and CAR_PLATE is not null");

        Map<String, String> rs = new HashMap<>();
        for(Map<String, Object> map : list){
            rs.put(map.get("CAR_CODE").toString(), map.get("CAR_PLATE").toString());
        }
        return rs;
    }

    @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;

        @Autowired
        BusinessRepository businessRepository;

        @Autowired
        GeoCacheData geoCacheData;

        @Autowired
        Station2ParkBuffer station2ParkBuffer;

        @Autowired
        PersionPinYinBuffer persionPinYinBuffer;


        @Override
        public void run() {
            loadAllData();
        }

        /**
         * @Title: loadAllData
         * @Description: TODO(加载所有数据)
         */
        public int loadAllData() {
            try {
                //设备信息
                loadDeviceInfo();
                //站点信息
                loadStationInfo();
                //线路信息
                loadLineInfo();
                //车辆和线路映射信息
                loadNbbm2LineInfo();
                //人员信息
                loadPersonnelInfo();
                //公司信息
                loadBusinessInfo();

                geoCacheData.loadData();
                station2ParkBuffer.saveAll();
                logger.info("加载基础数据成功!,");
                //人员拼音转换
                persionPinYinBuffer.refresh();
            } catch (Exception e) {
                logger.error("加载基础数据时出现异常,", e);
            }
            return 0;
        }

        /**
         * loadBusinessInfo
         * (公司代码公司名对照)
         */
        public void loadBusinessInfo() {
            Map<String, String> businessMap = new HashMap<String, String>();
            Map<String, String> businessFgsMap = new HashMap<String, String>();
            Iterator<Business> busIter = businessRepository.findAll().iterator();
            Business t;
            while (busIter.hasNext()) {
                t = busIter.next();
                businessMap.put(t.getBusinessCode(), t.getBusinessName());
                businessFgsMap.put(t.getBusinessCode() + "_" + t.getUpCode(), t.getBusinessName());
            }
            businessCodeNameMap = businessMap;
            businessFgsCodeNameMap = businessFgsMap;
        }

        /**
         * @Title: loadDeviceInfo
         * @Description: TODO(加载设备相关信息)
         */
        public void loadDeviceInfo() {
            BiMap<String, String> deviceId2Nbbm = HashBiMap.create();
            //车辆和公司代码对照
            Map<String, String> nbbm2CompanyCode = new HashMap<>();
            
            //车辆自编号和拍照号对照
            Map<String, String> nbbmCompanyPlate = 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());
                nbbmCompanyPlate.put(car.getInsideCode(), car.getCarPlate());
            }

            deviceId2NbbmMap = deviceId2Nbbm;
            nbbm2CompanyCodeMap = nbbm2CompanyCode;
            nbbmCompanyPlateMap =nbbmCompanyPlate;
        }

        /**
         * @Title: loadStationInfo
         * @Description: TODO(加载站点信息)
         */
        public void loadStationInfo() {
            Map<String, String> stationCode2Name = new HashMap<>();
            Iterator<StationRoute> iterator = stationRouteRepository.findAll().iterator();
            StationRoute sroute;
            while (iterator.hasNext()) {
                sroute = iterator.next();
                stationCode2Name.put(sroute.getLineCode() + "_" + sroute.getDirections() + "_" + sroute.getStationCode(), sroute.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>();
            Map<String, Integer> tempStationName2YgcNumber = new HashMap<String, Integer>();

            /**
             * 加载运管处的站点及序号
             * 上行从1开始,下行顺序续编
             */
            List<Map<String, String>> ygcLines = stationRouteRepository.findAllLineWithYgc();
            if(ygcLines != null && ygcLines.size() > 0){
                int size = ygcLines.size();
                Map<String, String> tempMap ;
                int num = 1;
                String key;
                String lineCode = "";
                for (int i = 0; i < size; i ++){
                    tempMap = ygcLines.get(i);
                    if(lineCode.equals("")){
                        lineCode = tempMap.get("lineCode");
                    }else if(!lineCode.equals(tempMap.get("lineCode"))){
                        num = 1;
                        lineCode = tempMap.get("lineCode");
                    }
                    key = tempMap.get("lineCode") + "_"+String.valueOf(tempMap.get("directions"))
                            + "_"+tempMap.get("stationCode")+ "_"+tempMap.get("stationMark");
                    tempStationName2YgcNumber.put(key,num++);
                }
            }

            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;
            stationName2YgcNumber = tempStationName2YgcNumber;
        }

        /**
         * @Title: loadPersonnelInfo
         * @Description: TODO(加载人员信息)
         */
        public void loadPersonnelInfo() {
            Iterator<Personnel> iterator = personnelRepository.findAll().iterator();

            Map<String, Personnel> /*jsyTempMap = new HashMap<>(), spyTempMap = new HashMap<>(),*/perTempMap=new HashMap<>();
            Map<String, String> allPersonMap = new HashMap<>();

            Personnel p;
            String jobCode;
            while (iterator.hasNext()) {
                p = iterator.next();

                jobCode = p.getJobCode();
                if (StringUtils.isEmpty(jobCode))
                    continue;

                /*if (p.getPosts() != null) {
                    if (p.getPosts().equals("1"))
                        jsyTempMap.put(jobCode, p);
                    else if (p.getPosts().equals("2"))
                        spyTempMap.put(jobCode, p);
                }*/
                
                perTempMap.put(jobCode, p);
                
                allPersonMap.put(jobCode, p.getPersonnelName());
            }

            //jsyMap = jsyTempMap;
            //spyMap = spyTempMap;
            allPerson = allPersonMap;
            perMap = perTempMap;
        }
    }
}