2022-04-15 13:54:47 +08:00
|
|
|
|
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<FormulaVar> formulaVars, DataCollectionEmployee simpleEmployee) {
|
|
|
|
|
|
|
2022-04-16 16:49:22 +08:00
|
|
|
|
/*
|
|
|
|
|
|
公式内容以如下显示方式存储
|
|
|
|
|
|
{薪资项目.输入项1}+{薪资项目.输入项2}
|
|
|
|
|
|
*/
|
2022-04-15 13:54:47 +08:00
|
|
|
|
String formula = expressFormula.getFormula();
|
|
|
|
|
|
|
2022-04-16 16:49:22 +08:00
|
|
|
|
|
2022-04-15 13:54:47 +08:00
|
|
|
|
JexlBuilder jexlBuilder = new JexlBuilder();
|
|
|
|
|
|
// 创建Jexl表达式引擎
|
|
|
|
|
|
JexlEngine jexlEngine = jexlBuilder.create();
|
|
|
|
|
|
// 创建Jexl表达式解析器
|
|
|
|
|
|
JexlScript jexlScript = jexlEngine.createScript(formula);
|
|
|
|
|
|
// 创建Jexl表达式变量上下文
|
|
|
|
|
|
JexlContext jexlContext = new MapContext();
|
2022-04-16 16:49:22 +08:00
|
|
|
|
formulaVars.forEach(v -> {
|
|
|
|
|
|
jexlContext.set(v.getFieldId(), v.getContent());
|
2022-04-15 13:54:47 +08:00
|
|
|
|
});
|
|
|
|
|
|
// 执行Jexl表达式,得到结果
|
|
|
|
|
|
Object execute = jexlScript.execute(jexlContext);
|
|
|
|
|
|
return execute;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|