SorterEnum.java

package com.mycim.valueobject.consts;

import com.mycim.framework.utils.lang.collections.ListUtils;
import com.mycim.valueobject.wip.LotStatus;

import java.util.List;

/**
 * @author yibing.liu
 * @version 1.0
 * @date 2021/06/29
 */
public interface SorterEnum {

    static <E> E getListFirst(List<E> list) {
        return list.get(0);
    }

    enum Type {
        /**
         * 离线
         */
        OFFLINE("OFFLINE"),
        /**
         * 在线
         */
        INLINE("INLINE");

        private String name;

        Type(String name) {
            this.name = name;
        }

        public String getName() {
            return name;
        }
    }

    /**
     * 状态
     */
    enum Status {
        /**
         * 创建
         */
        CREATE("CREATE"),
        /**
         * 完成
         */
        FINISH("FINISH"),
        /**
         * 取消
         */
        CANCEL("CANCEL"),
        /**
         * 调度
         */
        DISPATCH("DISPATCH");

        private String status;

        Status(String status) {
            this.status = status;
        }

        public String getStatus() {
            return status;
        }
    }

    /**
     * Job 类型
     */
    enum JobType {
        /**
         * 普通交换
         */
        NORMAL_EXCHANGE("NORMAL_EXCHANGE"),
        /**
         * 特殊交换
         */
        SPECIAL_EXCHANGE("SPECIAL_EXCHANGE"),
        /**
         * Monitor交换
         */
        MONITOR_EXCHANGE("MONITOR_EXCHANGE"),
        /**
         * 永久分批
         */
        SPLIT("SPLIT"),
        /**
         * 临时分批
         */
        TEMP_SPLIT("TEMPORARY"),
        /**
         * 创建测机批次分批
         */
        CREATE_MONITOR("CREATE_MONITOR"),
        /**
         * RunCard
         */
        RUN_CARD("RUN_CARD"),
        /**
         * 合批
         */
        MERGE("MERGE"),
        /**
         * Monitor 合并
         */
        MONITOR_MERGE("MONITOR_MERGE"),
        /**
         * check T7CODE
         */
        OFFLINE_CHECK_T7CODE("OFFLINE_CHECK_T7CODE"),

        /**
         * 读取 materialId
         */
        OFFLINE_READ_MATERIALID("OFFLINE_READ_MATERIALID");

        private String jobType;

        JobType(String jobType) {
            this.jobType = jobType;
        }

        public String getJobType() {
            return jobType;
        }
    }

    class Constant {
        public static final String SOURCE_CARRIER_ID = "sourceCarrierId";

        public static final String TARGET_CARRIER_ID = "targetCarrierId";

        public static final String TARGET_CARRIER_ID2 = "targetCarrierId2";

        public static final String EQUIPMENT_ID = "equipmentId";

        public static final String EQUIPMENT_RRN = "equipmentRrn";

        public static final String BLANK = " ";

        public static final String CREATE = "CREATE";

        public static final String FINISH = "FINISH";

        public static final String CANCEL = "CANCEL";

        public static final String NORMAL_EXCHANGE = "NORMAL_EXCHANGE";

        public static final String SPECIAL_EXCHANGE = "SPECIAL_EXCHANGE";

        public static final String MONITOR_EXCHANGE = "MONITOR_EXCHANGE";

        public static final String TEMP_SPLIT = "TEMPORARY";

        public static final String RUN_CARD = "RUN_CARD";

        public static final String CREATE_MONITOR = "CREATE_MONITOR";

        public static final String MERGE = "MERGE";

        public static final String MONITOR_MERGE = "MONITOR_MERGE";

        public static final String CREATE_SORTER = "CREATE_SORTER";

        public static final String CANCEL_SORTER = "CANCEL_SORTER";

        public static final String SYN_MONITOR_SORTER  = "SYN_MONITOR_SORTER";

        public static final String MANUAL_END_SORTER = "MANUAL_END_SORTER";

        public static final String AUTO_END_SORTER = "AUTO_END_SORTER";

        public static final String MANUAL_AUTO_MONITOR_SORTER = "MANUAL_MONITOR_SORTER";

        public static final String SORT_MARK = "sortMark";

        public static final String CN = "CN";

        public static final String POSITION = "position";

        public static final String OLD_POSITION = "oldPosition";

        public static final String EXCHANGE = "EXCHANGE";

        public static final String EXCHANGE_2PORT = "EXCHANGE_2PORT";

        public static final String SPLIT = "SPLIT";

        public static final String SPLIT_3PORT = "SPLIT_3PORT";

        public static final String SRC_MERGE = "SRC_MERGE";

        public static final String SRC_SPLIT = "SRC_SPLIT";

        public static final String SRC_EXCHANGE = "SRC_EXCHANGE";

        public static final String SRC_SPECIAL_EXCHANGE = "SRC_SPECIAL_EXCHANGE";

        public static final String AUTO_MONITOR = "AUTO_MONITOR";

        public static final String AUTO_MONITOR_MERGE = "AUTO_MONITOR_MERGE";

        public static final String PILOT_SPLIT = "PILOT_SPLIT";

        public static final String SAPPHIRE = "SAPPHIRE";

        public static final String DUMMY = "DUMMY";

        public static final String GLASS = "GLASS";

        public static final String FLIP_SIDE = "FLIP_SIDE";

        public static final String A_SIDE = "A";

        public static final String B_SIDE = "B";

        public static final Object RESULT_MESSAGE = "resultMessage";

        public static final List<String> SRC_CODE = ListUtils.newArrayList(SRC_SPLIT, SRC_MERGE);

        public static final String BY_SORTER = " By Sorter ";

        public static final String READ_T7CODE = " INLINE READ T7CODE ";

        public static final String OFFLINE_CHECK_T7CODE = "OFFLINE_CHECK_T7CODE";

        public static final String OFFLINE_READ_MATERIALID = "OFFLINE_READ_MATERIALID";

        public static String parseTextType(String jobType, String language) {
            boolean flag = CN.equals(language);
            switch (jobType) {
                case NORMAL_EXCHANGE:
                    return flag ? "普通交换晶舟" : "Normal Exchange";
                case SPECIAL_EXCHANGE:
                    return flag ? "特殊交换晶舟" : "Special Exchange";
                case MONITOR_EXCHANGE:
                    return flag ? "Monitor交换晶舟" : "Monitor Exchange";
                case SPLIT:
                    return flag ? "永久分批" : "Split";
                case TEMP_SPLIT:
                    return flag ? "临时分批" : "Temp Split";
                case CREATE_MONITOR:
                    return flag ? "创建测机批次" : "Create Monitor";
                case RUN_CARD:
                    return "RunCard";
                case MERGE:
                    return flag ? "合批" : "Merge";
                case MONITOR_MERGE:
                    return flag ? "Monitor合批" : "Monitor Merge";
                case CREATE:
                    return flag ? "新建" : "Create";
                case FINISH:
                    return flag ? "已完成" : "Finished";
                case CANCEL:
                    return flag ? "已取消" : "Cancelled";
                case FLIP_SIDE:
                    return flag ? "翻面" : "Flip Side";
                case READ_T7CODE:
                    return flag ? "INLINE读取客户T7CODE" : "INLINE READ T7CODE";
                case OFFLINE_CHECK_T7CODE:
                    return "OFFLINE_CHECK_T7CODE";
                case OFFLINE_READ_MATERIALID:
                    return flag ? "OFFLINE 读取 material Id" : "OFFLINE_READ_MATERIALID";
                default:
                    return jobType;
            }
        }

        public static String getOpposite(String flipType) {
            return A_SIDE.equalsIgnoreCase(flipType) ? B_SIDE : A_SIDE;
        }

    }

    class HardCode {
        public static final String TERMINATE = "TERMINATE";

        public static final String TERM = "TERM";

        public static final String NO_QTY = "NOQTY";

        public static final String SUCCESS = "Success!";

        public static final String FALSE = "FALSE";

        public static final String FALSE_LOW = "false";

        public static final String TRUE_LOW = "true";

        public static final String MINUS_ONE = "-1";

        public static final String PERMANENT = "permanent";

        public static final String ASSEMBLY_NEED_KEY = "1";

        public static final String S = "S";

        public static final String ZERO_STR = "0";

        public static final String SORT_HEAD = "Sort Job ";

    }

    class WorkFlow {
        public static final String AUTO_SORT_WORK_FLOW_ID   = "EXECUTE_SORT_JOB_AUTO";
        public static final String SORT_MOVE_OUT_STD        = "MOVEOUT_SORTER_STD";
    }

    class Check {
        static final List<String> TARGET_CARRIER_MAY_BE_EMPTY = ListUtils.newArrayList(Constant.SPLIT,
                                                                                       Constant.EXCHANGE,
                                                                                       Constant.SPECIAL_EXCHANGE,
                                                                                       Constant.SRC_EXCHANGE,
                                                                                       Constant.SRC_SPECIAL_EXCHANGE);

        static final List<String> NEED_CHECK_TARGET_CARRIER = ListUtils.newArrayList(Constant.MERGE,
                                                                                     Constant.SPLIT_3PORT,
                                                                                     Constant.SRC_SPLIT,
                                                                                     Constant.SRC_MERGE);

        static final List<String> ONE_TO_N_TYPE = ListUtils.newArrayList(Constant.AUTO_MONITOR,
                                                                         Constant.AUTO_MONITOR_MERGE,
                                                                         Constant.SRC_SPLIT);

        static final List<String> AUTO_MONITOR_TYPE = ListUtils.newArrayList(Constant.AUTO_MONITOR,
                                                                             Constant.AUTO_MONITOR_MERGE);

        static final List<String> SRC_EXCHANGE = ListUtils.newArrayList(Constant.SRC_EXCHANGE,
                                                                        Constant.SRC_SPECIAL_EXCHANGE);

        static final List<String> NORMAL_EXCHANGE = ListUtils.newArrayList(Constant.EXCHANGE,
                                                                        Constant.SRC_EXCHANGE);

        static final List<String> SPECIAL_EXCHANGE = ListUtils.newArrayList(Constant.SPECIAL_EXCHANGE,
                                                                        Constant.SRC_SPECIAL_EXCHANGE);

        static final List<String> PROD_LOT_EXCHANGE = ListUtils.newArrayList(Constant.EXCHANGE,
                                                                        Constant.SPECIAL_EXCHANGE);



        public static boolean needCheckTargetCarrier(String type) {
            return NEED_CHECK_TARGET_CARRIER.contains(type);
        }

        public static boolean targetCarrierMayBeEmpty(String type) {
            return TARGET_CARRIER_MAY_BE_EMPTY.contains(type);
        }

        public static boolean isFlip(String type) {
            return Constant.FLIP_SIDE.equalsIgnoreCase(type);
        }

        public static boolean isReadT7Code(String type) {
            return Constant.READ_T7CODE.equalsIgnoreCase(type);
        }

        public static boolean isOneToN(String type) {
            return ONE_TO_N_TYPE.contains(type);
        }

        public static boolean isAutoMonitorType(String type) {
            return AUTO_MONITOR_TYPE.contains(type);
        }

        public static boolean isOffLineCheckT7Code(String type) {
            return Constant.OFFLINE_CHECK_T7CODE.equalsIgnoreCase(type);
        }

        public static boolean isSpecialStatusForRcSortJob(String type, String lotStatus) {
            return (Constant.OFFLINE_CHECK_T7CODE.equalsIgnoreCase(type) || isSrcExchange(type))
                    && LotStatus.isRunCardSpecialStatus(lotStatus);
        }


        public static boolean isSrcExchange(String type) {
            return SRC_EXCHANGE.contains(type);
        }

        public static boolean isOfflineReadMaterialId(String type) {
            return Constant.OFFLINE_READ_MATERIALID.equalsIgnoreCase(type);
        }

        public static boolean isNormalExchange(String type){ return NORMAL_EXCHANGE.contains(type); }

        public static boolean isSpecialExchange(String type){ return SPECIAL_EXCHANGE.contains(type); }

        public static boolean isProdLotExchange(String type){ return PROD_LOT_EXCHANGE.contains(type); }

    }

}