办理人表达式扩展
2024/12/3小于 1 分钟
办理人表达式扩展
提示
- 当内置的办理人变量不满足业务需求时,可进行扩展
 
条件表达式扩展
1、表达式公共接口
ExpressionStrategy接口,是表达式策略类接口,抽离公共方法
- 1、
getType(): 表达式策略类型,也是表达式的前缀 - 2、
isIntercept(): 执行表达式之前,是否截取表达式前缀,然后在进行执行,默认不截取 - 3、
eval(): 执行表达式 - 4、
setExpression(): 设置新增的表达式,方便扩展 
/**
 * 表达式策略类接口
 *
 * @author warm
 */
public interface ExpressionStrategy<T> {
    /**
     * 获取策略类型
     *
     * @return 类型
     */
    String getType();
    /**
     * 当选择截取,并且希望拼接上某些字符串,在进行截取
     *
     * @return 类型
     */
    default String interceptStr() {
        return "";
    }
    /**
     * 执行表达式
     *
     * @param expression 表达式
     * @param variable   流程变量
     * @return 执行结果
     */
    T eval(String expression, Map<String, Object> variable);
    /**
     * 设置表达式
     * @param expressionStrategy 表达式
     */
    void setExpression(ExpressionStrategy<T> expressionStrategy);
}2、注册表达式实现类
- 通过这个方法进行注册ExpressionUtil.setExpression
 
ExpressionUtil.setExpression(new ExpressionStrategyEq());3、办理人表达式
- 扩展需要实现
VariableStrategy接口, 实现getType和preEval方法 
3.1、办理人表达式接口
/**
 * 办理人表达式策略接口
 *
 * @author warm
 */
public interface VariableStrategy extends ExpressionStrategy<List<String>> {
    /**
     * 办理人表达式策略实现类集合
     */
    List<ExpressionStrategy<List<String>>> expressionStrategyList = new ArrayList<>();
    default void setExpression(ExpressionStrategy<List<String>> expressionStrategy) {
        expressionStrategyList.add(expressionStrategy);
    }
    Object preEval(String expression, Map<String, Object> variable);
    @Override
    default List<String> eval(String expression, Map<String, Object> variable) {
        return afterEval(preEval(expression, variable));
    }
    default List<String> afterEval(Object o) {
        if (ObjectUtil.isNotNull(o)) {
            if (o instanceof List) {
                return StreamUtils.toList((List<?>) o, Object::toString);
            }
            if (o instanceof Object[]) {
                return Arrays.stream((Object[]) o).map(Object::toString).collect(Collectors.toList());
            }
            return Collections.singletonList(o.toString());
        }
        return null;
    }
}3.2、办理人表达式实现类
/**
 * 默认办理人表达式策略: @@default@@|${flag}
 *
 * @author warm
 */
public class DefaultVariableStrategy implements VariableStrategy {
    @Override
    public String getType() {
        return "$";
    }
    @Override
    public Object preEval(String expression, Map<String, Object> variable) {
        String result = expression.replace("${", "").replace("}", "");
        return variable.get(result);
    }
}

