package com.engine.salary.service.impl; import com.engine.core.impl.Service; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryformula.po.FormulaVar; import com.engine.salary.service.FormulaRunService; import org.apache.commons.jexl3.*; import java.util.List; public class FormulaRunServiceImpl extends Service implements FormulaRunService { @Override public Object run(ExpressFormula expressFormula, List formulaVars, DataCollectionEmployee simpleEmployee) { String formula = expressFormula.getFormula(); JexlBuilder jexlBuilder = new JexlBuilder(); // 创建Jexl表达式引擎 JexlEngine jexlEngine = jexlBuilder.create(); // 创建Jexl表达式解析器 JexlScript jexlScript = jexlEngine.createScript(formula); // 创建Jexl表达式变量上下文 JexlContext jexlContext = new MapContext(); formulaVars.forEach(v->{ jexlContext.set(v.getFieldId(),v.getContent()); }); // 执行Jexl表达式,得到结果 Object execute = jexlScript.execute(jexlContext); return execute; } }