SignalHandle.java 2.42 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;
    }

    protected boolean isDriftSignal(GpsEntity gps) {
        return gps.getLat() == 0 || gps.getLon() == 0;
    }

    /**
     * 是不是异常信号
     *
     * @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;
     * <p>
     * if (!isNotEmpty(prevs))
     * return count;
     * <p>
     * GpsEntity[] array = (GpsEntity[]) prevs.getQueue();
     * GpsEntity gps;
     * for (int i = array.length - 1; i > 0; i--) {
     * gps = array[i];
     * <p>
     * if (isAbnormal(gps))
     * count++;
     * else
     * break;
     * }
     * <p>
     * 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());
        }
    }

    /**
     * 是否是从异常状态恢复的第一个信号
     *
     * @param gps
     * @param prevs
     * @return
     */
    protected boolean abnormalRecovery(GpsEntity gps, CircleQueue<GpsEntity> prevs) {
        if (prevs == null || prevs.size() == 0)
            return false;

        GpsEntity prev = prevs.getTail();
        //从漂移状态恢复
        if (isDriftSignal(prev)
                && !isDriftSignal(gps)) {
            return true;
        }

        return false;
    }
}