SignalHandle.java 1.75 KB
package com.bsth.data.gpsdata.arrival;

import com.bsth.data.gpsdata.GpsEntity;
import com.bsth.data.gpsdata.arrival.entity.StationRoute;
import com.bsth.data.gpsdata.arrival.utils.CircleQueue;
import com.bsth.data.gpsdata.arrival.utils.GeoUtils;
import com.bsth.entity.realcontrol.ScheduleRealInfo;

import java.util.List;

/**
 * Created by panzhao on 2016/12/27.
 */
public abstract class SignalHandle {

    public abstract boolean handle(GpsEntity gps, CircleQueue<GpsEntity> prevs);

    protected boolean isNotEmpty(CircleQueue<GpsEntity> prevs) {
        return prevs != null && prevs.size() > 0 && prevs.getTail() != null;
    }

    /**
     * 是不是异常信号
     *
     * @param gps
     * @return
     */
    protected boolean isAbnormal(GpsEntity gps) {
        return gps.getLat() == 0 || gps.getLon() == 0;
    }

    /**
     * 连续异常信号个数统计
     *
     * @param prevs
     * @return
     */
    protected int abnormalCount(CircleQueue<GpsEntity> prevs) {
        int count = 0;

        if (!isNotEmpty(prevs))
            return count;

        GpsEntity[] array = (GpsEntity[]) prevs.getQueue();
        GpsEntity gps;
        for (int i = array.length - 1; i > 0; i--) {
            gps = array[i];

            if (isAbnormal(gps))
                count++;
            else
                break;
        }

        return count;
    }

    protected void transformUpdown(GpsEntity gps, ScheduleRealInfo sch){
        int updown = Integer.parseInt(sch.getXlDir());
        List<StationRoute> srs = GeoCacheData.getStationRoute(sch.getXlBm(), updown);
        StationRoute station = GeoUtils.gpsInStation(gps, srs);
        if (station != null) {
            gps.setUpDown(updown);
            gps.setStopNo(station.getCode());
        }
    }
}