weaver-hrm-salary/src/com/engine/salary/service/impl/FormulaRunServiceImpl.java

38 lines
1.4 KiB
Java
Raw Normal View History

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;
}
}