ScheduleCacheData.java 2.75 KB
package com.bsth.data.schedule;

import com.alibaba.fastjson.JSONArray;
import com.bsth.data.geo.GeoCacheData;
import com.bsth.data.schedule.entity.ScheduleRealInfo;
import com.bsth.entity.StationRoute;
import com.bsth.util.ConfigUtil;
import com.bsth.util.HttpClientUtils;
import com.bsth.util.RsRequestUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 班次数据缓存
 */
@Component
public class ScheduleCacheData {

    /**
     * K: 车辆自编号
     */
    private static Map<String, ScheduleRealInfo> schMap;
    private static String dataUrl;


    static {
        dataUrl = ConfigUtil.get("control.data.server.url") + "/rest/schedule_real/execs";
        schMap = new HashMap<>();
    }

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

    public static ScheduleRealInfo get(String nbbm) {
        return schMap.get(nbbm);
    }

    @Component
    public class RefreshScheduleCacheThread implements Runnable {

        @Override
        public void run() {
            try {
                StringBuilder sb = HttpClientUtils.get(dataUrl + RsRequestUtils.getParams());
                List<ScheduleRealInfo> list = JSONArray.parseArray(sb.toString(), ScheduleRealInfo.class);

                Map<String, ScheduleRealInfo> map = new HashMap<>(list.size());

                StationRoute s1, s2, s3;
                for (ScheduleRealInfo sch : list) {

                    s1 = GeoCacheData.findByName(sch.getXlBm(), sch.getXlDir(), sch.getQdzName());
                    s2 = GeoCacheData.findByName(sch.getXlBm(), sch.getXlDir(), sch.getZdzName());

                    if (null != s1){
                        sch.setQdzCode(s1.getStationCode());
                        sch.setQdzNo(s1.getSerialNo());
                    }

                    if (null != s2){
                        sch.setZdzCode(s2.getStationCode());
                        sch.setZdzNo(s2.getSerialNo());
                    }

                    if ("major".equals(sch.getBcType())) {
                        s3 = GeoCacheData.findByName(sch.getXlBm(), sch.getXlDir(), sch.getMajorStationName());

                        if(null != s3){
                            sch.setQdzCode(s3.getStationCode());
                            sch.setQdzNo(s3.getSerialNo());
                        }

                    }

                    map.put(sch.getClZbh(), sch);
                }

                if (map.size() > 0)
                    schMap = map;
            } catch (Exception e) {
                logger.error("", e);
            }
        }
    }
}