ScheduleComparator.java 2.58 KB
package com.bsth.data.schedule;

import com.bsth.entity.realcontrol.ScheduleRealInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;

/**
 * @author PanZhao
 * @ClassName: ScheduleComparator
 * @Description: TODO(实际班次排序器)
 * @date 2016年8月15日 下午1:53:28
 */
public class ScheduleComparator {
	
/*	public static class FCNO implements Comparator<ScheduleRealInfo>{
		@Override
		public int compare(ScheduleRealInfo s1, ScheduleRealInfo s2) {
			return s1.getFcno() - s2.getFcno();
		}
	}*/


    static Map<String, Integer> bcTypeOrderMap = new HashMap<>();

    static {
        bcTypeOrderMap.put("out", 0);
        bcTypeOrderMap.put("normal", 1);
        bcTypeOrderMap.put("region", 2);
        bcTypeOrderMap.put("major", 3);
        bcTypeOrderMap.put("venting", 4);
        bcTypeOrderMap.put("ldks", 5);
        bcTypeOrderMap.put("in", 6);
    }

    public static class FCSJ implements Comparator<ScheduleRealInfo> {

        @Override
        public int compare(ScheduleRealInfo s1, ScheduleRealInfo s2) {
            int diff = (int) (s1.getFcsjT() - s2.getFcsjT());
            return diff != 0 ? diff : typeOrder(s1.getBcType()) - typeOrder(s2.getBcType());
        }
    }

    private static int typeOrder(String bcType) {
        return bcTypeOrderMap.get(bcType) != null ? bcTypeOrderMap.get(bcType) : 0;
    }

    public static class DFSJ implements Comparator<ScheduleRealInfo> {

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

        @Override
        public int compare(ScheduleRealInfo s1, ScheduleRealInfo s2) {
            try {
                int diff;
                if (!s2.isSflj() && !s1.isSflj()) {
                    diff = (int) (s1.getFcsjT() - s2.getFcsjT());

                } else {
                    diff = (int) (s1.getDfsjT() - s2.getDfsjT());
                }

                return diff != 0 ? diff : typeOrder(s1.getBcType()) - typeOrder(s2.getBcType());

            } catch (Exception e) {
                logger.error("排序异常", e);
                return s1.getDfsjT() - s2.getDfsjT() > 0 ? 1 : -1;
            }
        }
    }

    public static class DFSJ2 implements Comparator<ScheduleRealInfo> {


        @Override
        public int compare(ScheduleRealInfo s1, ScheduleRealInfo s2) {
            int diff = (int) (s1.getDfsjT() - s2.getDfsjT());
            return diff != 0 ? diff : typeOrder(s1.getBcType()) - typeOrder(s2.getBcType());
        }
    }
}