mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
增加QLExpress支持
This commit is contained in:
parent
c12102e89b
commit
896ef4f701
@ -10,6 +10,7 @@
|
|||||||
* 【core 】 AnnotationUtil类支持Lambda获取某注解属性值(pr#827@Gitee)
|
* 【core 】 AnnotationUtil类支持Lambda获取某注解属性值(pr#827@Gitee)
|
||||||
* 【core 】 CharUtil.isBlank添加Hangul Filler字符(issue#I5UGSQ@Gitee)
|
* 【core 】 CharUtil.isBlank添加Hangul Filler字符(issue#I5UGSQ@Gitee)
|
||||||
* 【poi 】 优化合并单元格读取(issue#I5UJZ1@Gitee)
|
* 【poi 】 优化合并单元格读取(issue#I5UJZ1@Gitee)
|
||||||
|
* 【extra 】 增加QLExpress支持(issue#2653@Github)
|
||||||
|
|
||||||
### 🐞Bug修复
|
### 🐞Bug修复
|
||||||
* 【poi 】 修复ExcelReader读取只有标题行报错问题(issue#I5U1JA@Gitee)
|
* 【poi 】 修复ExcelReader读取只有标题行报错问题(issue#I5U1JA@Gitee)
|
||||||
|
@ -453,7 +453,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework</groupId>
|
<groupId>org.springframework</groupId>
|
||||||
<artifactId>spring-expression</artifactId>
|
<artifactId>spring-expression</artifactId>
|
||||||
<version>5.3.20</version>
|
<version>5.3.23</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
<optional>true</optional>
|
<optional>true</optional>
|
||||||
</dependency>
|
</dependency>
|
||||||
@ -464,6 +464,13 @@
|
|||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
<optional>true</optional>
|
<optional>true</optional>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.alibaba</groupId>
|
||||||
|
<artifactId>QLExpress</artifactId>
|
||||||
|
<version>3.3.0</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
<optional>true</optional>
|
||||||
|
</dependency>
|
||||||
<!-- 表达式引擎可选依赖 end -->
|
<!-- 表达式引擎可选依赖 end -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.commons</groupId>
|
<groupId>org.apache.commons</groupId>
|
||||||
|
@ -0,0 +1,38 @@
|
|||||||
|
package cn.hutool.extra.expression.engine.qlexpress;
|
||||||
|
|
||||||
|
import cn.hutool.extra.expression.ExpressionEngine;
|
||||||
|
import cn.hutool.extra.expression.ExpressionException;
|
||||||
|
import com.ql.util.express.DefaultContext;
|
||||||
|
import com.ql.util.express.ExpressRunner;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* QLExpress引擎封装<br>
|
||||||
|
* 见:https://github.com/alibaba/QLExpress
|
||||||
|
*
|
||||||
|
* @author looly
|
||||||
|
* @since 5.8.9
|
||||||
|
*/
|
||||||
|
public class QLExpressEngine implements ExpressionEngine {
|
||||||
|
|
||||||
|
private final ExpressRunner engine;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构造
|
||||||
|
*/
|
||||||
|
public QLExpressEngine() {
|
||||||
|
engine = new ExpressRunner();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object eval(final String expression, final Map<String, Object> context) {
|
||||||
|
final DefaultContext<String, Object> defaultContext = new DefaultContext<>();
|
||||||
|
defaultContext.putAll(context);
|
||||||
|
try {
|
||||||
|
return engine.execute(expression, defaultContext, null, true, false);
|
||||||
|
} catch (final Exception e) {
|
||||||
|
throw new ExpressionException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
/**
|
||||||
|
* QLExpress引擎封装<br>
|
||||||
|
* 见:https://github.com/alibaba/QLExpress
|
||||||
|
*
|
||||||
|
* @author looly
|
||||||
|
*/
|
||||||
|
package cn.hutool.extra.expression.engine.qlexpress;
|
@ -3,4 +3,5 @@ cn.hutool.extra.expression.engine.jexl.JexlEngine
|
|||||||
cn.hutool.extra.expression.engine.mvel.MvelEngine
|
cn.hutool.extra.expression.engine.mvel.MvelEngine
|
||||||
cn.hutool.extra.expression.engine.jfireel.JfireELEngine
|
cn.hutool.extra.expression.engine.jfireel.JfireELEngine
|
||||||
cn.hutool.extra.expression.engine.spel.SpELEngine
|
cn.hutool.extra.expression.engine.spel.SpELEngine
|
||||||
cn.hutool.extra.expression.engine.rhino.RhinoEngine
|
cn.hutool.extra.expression.engine.rhino.RhinoEngine
|
||||||
|
cn.hutool.extra.expression.engine.qlexpress.QLExpressEngine
|
||||||
|
@ -4,6 +4,7 @@ import cn.hutool.core.lang.Dict;
|
|||||||
import cn.hutool.extra.expression.engine.jexl.JexlEngine;
|
import cn.hutool.extra.expression.engine.jexl.JexlEngine;
|
||||||
import cn.hutool.extra.expression.engine.jfireel.JfireELEngine;
|
import cn.hutool.extra.expression.engine.jfireel.JfireELEngine;
|
||||||
import cn.hutool.extra.expression.engine.mvel.MvelEngine;
|
import cn.hutool.extra.expression.engine.mvel.MvelEngine;
|
||||||
|
import cn.hutool.extra.expression.engine.qlexpress.QLExpressEngine;
|
||||||
import cn.hutool.extra.expression.engine.rhino.RhinoEngine;
|
import cn.hutool.extra.expression.engine.rhino.RhinoEngine;
|
||||||
import cn.hutool.extra.expression.engine.spel.SpELEngine;
|
import cn.hutool.extra.expression.engine.spel.SpELEngine;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
@ -26,7 +27,7 @@ public class ExpressionUtilTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void jexlTest(){
|
public void jexlTest(){
|
||||||
ExpressionEngine engine = new JexlEngine();
|
final ExpressionEngine engine = new JexlEngine();
|
||||||
|
|
||||||
final Dict dict = Dict.create()
|
final Dict dict = Dict.create()
|
||||||
.set("a", 100.3)
|
.set("a", 100.3)
|
||||||
@ -38,18 +39,18 @@ public class ExpressionUtilTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void jexlScriptTest(){
|
public void jexlScriptTest(){
|
||||||
ExpressionEngine engine = new JexlEngine();
|
final ExpressionEngine engine = new JexlEngine();
|
||||||
|
|
||||||
String exps2="if(a>0){return 100;}";
|
final String exps2="if(a>0){return 100;}";
|
||||||
Map<String,Object> map2=new HashMap<>();
|
final Map<String,Object> map2=new HashMap<>();
|
||||||
map2.put("a", 1);
|
map2.put("a", 1);
|
||||||
Object eval1 = engine.eval(exps2, map2);
|
final Object eval1 = engine.eval(exps2, map2);
|
||||||
Assert.assertEquals(100, eval1);
|
Assert.assertEquals(100, eval1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void mvelTest(){
|
public void mvelTest(){
|
||||||
ExpressionEngine engine = new MvelEngine();
|
final ExpressionEngine engine = new MvelEngine();
|
||||||
|
|
||||||
final Dict dict = Dict.create()
|
final Dict dict = Dict.create()
|
||||||
.set("a", 100.3)
|
.set("a", 100.3)
|
||||||
@ -61,7 +62,7 @@ public class ExpressionUtilTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void jfireELTest(){
|
public void jfireELTest(){
|
||||||
ExpressionEngine engine = new JfireELEngine();
|
final ExpressionEngine engine = new JfireELEngine();
|
||||||
|
|
||||||
final Dict dict = Dict.create()
|
final Dict dict = Dict.create()
|
||||||
.set("a", 100.3)
|
.set("a", 100.3)
|
||||||
@ -73,7 +74,7 @@ public class ExpressionUtilTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void spELTest(){
|
public void spELTest(){
|
||||||
ExpressionEngine engine = new SpELEngine();
|
final ExpressionEngine engine = new SpELEngine();
|
||||||
|
|
||||||
final Dict dict = Dict.create()
|
final Dict dict = Dict.create()
|
||||||
.set("a", 100.3)
|
.set("a", 100.3)
|
||||||
@ -85,7 +86,7 @@ public class ExpressionUtilTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void rhinoTest(){
|
public void rhinoTest(){
|
||||||
ExpressionEngine engine = new RhinoEngine();
|
final ExpressionEngine engine = new RhinoEngine();
|
||||||
|
|
||||||
final Dict dict = Dict.create()
|
final Dict dict = Dict.create()
|
||||||
.set("a", 100.3)
|
.set("a", 100.3)
|
||||||
@ -95,4 +96,16 @@ public class ExpressionUtilTest {
|
|||||||
Assert.assertEquals(-143.8, (double)eval, 0);
|
Assert.assertEquals(-143.8, (double)eval, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void qlExpressTest(){
|
||||||
|
final ExpressionEngine engine = new QLExpressEngine();
|
||||||
|
|
||||||
|
final Dict dict = Dict.of()
|
||||||
|
.set("a", 100.3)
|
||||||
|
.set("b", 45)
|
||||||
|
.set("c", -199.100);
|
||||||
|
final Object eval = engine.eval("a-(b-c)", dict);
|
||||||
|
Assert.assertEquals(-143.8, (double)eval, 0);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user