package cn.iocoder.yudao.module.iot.enums.rule; import cn.hutool.core.util.ArrayUtil; import cn.iocoder.yudao.framework.common.core.ArrayValuable; import lombok.Getter; import lombok.RequiredArgsConstructor; import java.util.Arrays; /** * IoT 场景触发条件的操作符枚举 * * @author 芋道源码 */ @RequiredArgsConstructor @Getter public enum IotSceneRuleConditionOperatorEnum implements ArrayValuable { EQUALS("=", "#source == #value"), NOT_EQUALS("!=", "!(#source == #value)"), GREATER_THAN(">", "#source > #value"), GREATER_THAN_OR_EQUALS(">=", "#source >= #value"), LESS_THAN("<", "#source < #value"), LESS_THAN_OR_EQUALS("<=", "#source <= #value"), IN("in", "#values.contains(#source)"), NOT_IN("not in", "!(#values.contains(#source))"), BETWEEN("between", "(#source >= #values.get(0)) && (#source <= #values.get(1))"), NOT_BETWEEN("not between", "(#source < #values.get(0)) || (#source > #values.get(1))"), LIKE("like", "#source.contains(#value)"), // 字符串匹配 NOT_NULL("not null", "#source != null && #source.length() > 0"), // 非空 // ========== 特殊:不放在字典里 ========== DATE_TIME_GREATER_THAN("date_time_>", "#source > #value"), // 在时间之后:时间戳 DATE_TIME_LESS_THAN("date_time_<", "#source < #value"), // 在时间之前:时间戳 DATE_TIME_BETWEEN("date_time_between", // 在时间之间:时间戳 "(#source >= #values.get(0)) && (#source <= #values.get(1))"), TIME_GREATER_THAN("time_>", "#source.isAfter(#value)"), // 在当日时间之后:HH:mm:ss TIME_LESS_THAN("time_<", "#source.isBefore(#value)"), // 在当日时间之前:HH:mm:ss TIME_BETWEEN("time_between", // 在当日时间之间:HH:mm:ss "(#source >= #values.get(0)) && (#source <= #values.get(1))"), ; private final String operator; private final String springExpression; public static final String[] ARRAYS = Arrays.stream(values()).map(IotSceneRuleConditionOperatorEnum::getOperator).toArray(String[]::new); /** * Spring 表达式 - 原始值 */ public static final String SPRING_EXPRESSION_SOURCE = "source"; /** * Spring 表达式 - 目标值 */ public static final String SPRING_EXPRESSION_VALUE = "value"; /** * Spring 表达式 - 目标值数组 */ public static final String SPRING_EXPRESSION_VALUE_LIST = "values"; public static IotSceneRuleConditionOperatorEnum operatorOf(String operator) { return ArrayUtil.firstMatch(item -> item.getOperator().equals(operator), values()); } @Override public String[] array() { return ARRAYS; } }