GpsArrivalDataBuffer.java 2.02 KB
package com.bsth.vehicle.gpsdata.buffer;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.bsth.vehicle.common.CommonMapped;
import com.bsth.vehicle.gpsdata.entity.ArrivalInfo;
import com.google.common.collect.ArrayListMultimap;

/**
 * 
 * @ClassName: GpsArrivalDataBuffer
 * @Description: TODO(GPS到离站数据缓存)
 * @author PanZhao
 * @date 2016年6月27日 下午1:08:35
 *
 */
public class GpsArrivalDataBuffer {

	/**
	 * 车辆 时间戳排序的实际进出站
	 */
	public static ArrayListMultimap<String, ArrivalInfo> allMap;
	

	/**
	 * 车辆 和 进出站链表索引
	 */
	public static Map<String, Integer> markMap;

	/**
	 * 时间戳标记,从数据库增量查询时起始时间
	 */
	public static Long markTime;

	public static List<ArrivalInfo> pops(String nbbm) {
		Integer mark = null;
		if (!markMap.containsKey(nbbm))
			mark = 0;
		else
			mark = markMap.get(nbbm);

		List<ArrivalInfo> all = allMap.get(nbbm);
		int size = all.size();
		if(size == 0)
			return new ArrayList<>(0);
		
		List<ArrivalInfo> rs = all.subList(mark, size);
		markMap.put(nbbm, size);
		return rs;
	}

	static {
		allMap = ArrayListMultimap.create();
		markMap = new HashMap<>();
	}

	/**
	 * 
	 * @Title: putAll @Description: TODO(将增量数据添加到缓存) @param @param list
	 * 设定文件 @return void 返回类型 @throws
	 */
	public static void putAll(List<ArrivalInfo> list) {
		// 按时间戳排序
		Collections.sort(list, new Comparator<ArrivalInfo>() {
			@Override
			public int compare(ArrivalInfo o1, ArrivalInfo o2) {
				return (int) (o1.getTs() - o2.getTs());
			}
		});

		int len = list.size();
		ArrivalInfo arrival;
		String nbbm;
		for (int i = 0; i < len; i++) {
			arrival = list.get(i);
			nbbm = CommonMapped.vehicDeviceBiMap.get(arrival.getDeviceId());

			if (null != nbbm)
				allMap.put(nbbm, arrival);
		}
	}
}