EmasUtil.java

package com.mycim.utils;

import com.fa.sesa.threadlocal.LocalContext;
import com.fa.sesa.threadlocal.LocalContextNames;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.collections.MapUtils;
import com.mycim.framework.utils.lang.time.DateUtils;

import java.util.Date;
import java.util.Map;

/**
 * 提供 NEW EMAS 计算是否超时,触发日期
 *
 * @author kangzhang
 * @version 1.0.0
 * @date 2021/6/23
 **/
public class EmasUtil {

    public static final String RUN_MODE_MANUAL = "MANUAL";

    public static final String RUN_MODE_EAP = "EAP";

    public static final String RUN_TYPE_RUNCARDMOVEIN = "RUNCARDMOVEIN";

    public static final String RUN_TYPE_RUNCARDMOVEOUT = "RUNCARDMOVEOUT";

    public static final String RUN_TYPE_MOVEIN = "MOVEIN";

    public static final String RUN_TYPE_MOVEOUT = "MOVEOUT";

    public static final String LOTHISTORY_TYPE_RUNCARD = "RUNCARD";

    public static final String RUN_TYPE_AUTOMONITORMOVEIN = "AUTOMONITORMOVEIN";

    public static final String RUN_TYPE_AUTOMONITORMOVEOUT = "AUTOMONITORMOVEOUT";

    public static final String getRunMode() {
        if (StringUtils.equals(LocalContext.get(LocalContextNames.TRANS_MODULE_KEY), WipUtils.MANUAL)) {
            return RUN_MODE_MANUAL;
        } else if (StringUtils.equals(LocalContext.get(LocalContextNames.TRANS_MODULE_KEY), WipUtils.AUTO)) {
            return RUN_MODE_EAP;
        } else {
            return StringUtils.EMPTY;
        }
    }

    public static Date getTriggeringTimeByTime(Map<String, Object> eventInfo) {
        return getTriggeringTime(eventInfo, 0D);
    }

    public static Date getTriggeringTimeByPM(Map<String, Object> eventInfo, Double bufferTime) {
        return getTriggeringTime(eventInfo, bufferTime);
    }

    public static Date getTriggeringTimeByBatch(Map<String, Object> eventInfo, Double bufferTime) {
        return getTriggeringTime(eventInfo, bufferTime);
    }

    private static Date getTriggeringTime(Map<String, Object> eventInfo, Double bufferTime) {
        String delayOperationTimeStr = MapUtils.getString(eventInfo, "delayOperationTime");
        String createTimeStr = MapUtils.getString(eventInfo, "createTime");
        Date delayOperationTime;
        Double delayTime = MapUtils.getDouble(eventInfo, "delayTime", 0D);
        if (StringUtils.isNotBlank(delayOperationTimeStr)){
            delayOperationTime = DateUtils.parse(delayOperationTimeStr, DateUtils.DATE_FORMAT4DATE);
            return new Date(
                    (long) (delayOperationTime.getTime() + delayTime * 60 * 60 * 1000));
        } else {
            delayOperationTime = DateUtils.parse(createTimeStr, DateUtils.DATE_FORMAT4DATE);
            return new Date(
                    (long) (delayOperationTime.getTime() + bufferTime * 60 * 60 * 1000 + delayTime * 60 * 60 * 1000));
        }
    }

    public static boolean checkOverTimeByPM(Map<String, Object> eventInfo, Double bufferTime) {
        return checkOverTime(getTriggeringTimeByPM(eventInfo, bufferTime));
    }

    public static boolean checkOverTimeByTime(Map<String, Object> eventInfo) {
        return checkOverTime(getTriggeringTimeByTime(eventInfo));
    }

    private static boolean checkOverTime(Date checkDate) {
        Date sysDate = new Date(System.currentTimeMillis());
        return sysDate.after(checkDate);
    }

    /**
     * 转义正则特殊字符 ($()*+.[]?\^{},|)
     *
     * @param keyword
     * @return
     */
    public static String escapeExprSpecialWord(String keyword) {
        if (StringUtils.isNotBlank(keyword)) {
            String[] fbsArr = {"\\", "$", "(", ")", "+", "[", "]", "?", "^", "{", "}", "|"};
            for (String key : fbsArr) {
                if (keyword.contains(key)) {
                    keyword = keyword.replace(key, "\\" + key);
                }
            }
        }
        return keyword;
    }

    public static Date getTriggeringTimeByCount(Map<String, Object> event, Double bufferTime) {
        return getTriggeringTime(event, bufferTime);
    }

    public static boolean checkOverTimeByCount(Map<String, Object> event, Double bufferTime) {
        return checkOverTime(getTriggeringTimeByCount(event, bufferTime));
    }

    public class CheckType {
        public static final String PM = "ByPM";

        public static final String COUNT = "ByCount";

        public static final String TIME = "ByTime";

        public static final String BATCH = "ByBatch";

        public class CycleType {
            public static final String BY_HOUR = "ByHour";

        }

    }

    public class Status {
        public static final String ONGOING = "Ongoing";

        public static final String CLOSE = "Close";

        public static final String SPECIAL_CLOSE = "specialClose";

        public static final String ENABLE_FLAG_ON = "T";

        public static final String ENABLE_FLAG_OFF = "F";

    }

}