1.修改测试用例,增加包含条件
This commit is contained in:
parent
8774482141
commit
1ab545e294
|
@ -38,15 +38,18 @@ public enum MathOperatorEnum {
|
|||
not("$not", "!", "Logical", "非"),
|
||||
$match("$match", "match", "Logical", "匹配"),
|
||||
|
||||
// 特殊运算符
|
||||
contains("contains", "CollUtil.contains(StrUtil.split(\"{}\", \",\"), '{}')", "Special", "包含"),
|
||||
|
||||
;
|
||||
|
||||
private String operator;
|
||||
private final String operator;
|
||||
|
||||
private String actual;
|
||||
private final String actual;
|
||||
|
||||
private String type;
|
||||
private final String type;
|
||||
|
||||
private String desc;
|
||||
private final String desc;
|
||||
|
||||
public static MathOperatorEnum fromOperator(String operator) {
|
||||
for (MathOperatorEnum operatorEnum : MathOperatorEnum.values()) {
|
||||
|
@ -73,4 +76,8 @@ public enum MathOperatorEnum {
|
|||
public boolean isLogical() {
|
||||
return StrUtil.equals(this.getType(), "Logical");
|
||||
}
|
||||
|
||||
public boolean isSpecial() {
|
||||
return StrUtil.equals(this.getType(), "Special");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.wezone.drools.utils;
|
|||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.lang.Console;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONArray;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
|
@ -19,7 +20,7 @@ public class ConditionParser {
|
|||
public static String parseCondition(JSONArray jsonArray) {
|
||||
StringBuffer stringBuffer = new StringBuffer();
|
||||
for (int i = 0; i < jsonArray.size(); i++) {
|
||||
// Console.log("object = ", JSONUtil.toJsonStr(jsonArray.get(i)));
|
||||
Console.log("object = ", JSONUtil.toJsonStr(jsonArray.get(i)));
|
||||
JSONObject o = jsonArray.getJSONObject(i);
|
||||
|
||||
for (Map.Entry<String, Object> kv : o.entrySet()) {
|
||||
|
@ -60,6 +61,13 @@ public class ConditionParser {
|
|||
|
||||
if (operatorEnum.isLogical()) {
|
||||
stringJoiner.add("(").add(parseCondition(jsonArray)).add(") ");
|
||||
} else if (operatorEnum.isSpecial()) {
|
||||
String leftValue = sValues.getStr(0);
|
||||
String rightValue = sValues.getStr(1);
|
||||
JSONArray objects = JSONUtil.parseArray(rightValue);
|
||||
String join = CollUtil.join(objects, ",");
|
||||
String format = StrUtil.format(MathOperatorEnum.contains.getActual(), join, leftValue);
|
||||
stringJoiner.add("(").add(format).add(") ");
|
||||
} else {
|
||||
String leftValue = sValues.getStr(0);
|
||||
String rightValue = sValues.getStr(1);
|
||||
|
|
|
@ -2,16 +2,18 @@ package com.wezone.drools.test;
|
|||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.lang.Console;
|
||||
import cn.hutool.core.util.ArrayUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONArray;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.googlecode.aviator.AviatorEvaluator;
|
||||
import com.wezone.drools.enums.MathOperatorEnum;
|
||||
import com.wezone.drools.utils.ConditionParser;
|
||||
import org.assertj.core.util.Lists;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.StringJoiner;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 条件测试用例
|
||||
|
@ -21,8 +23,9 @@ public class ConditionTest {
|
|||
@Test
|
||||
public void test1() {
|
||||
String condition = "[{\"$or\":[{\"$eq\":[\"1\",\"2\"]}]},{\"$or\":[{\"$eq\":[\"2\",\"2\"]}]}]";
|
||||
|
||||
System.out.println(condition);
|
||||
JSONArray jsonArray = JSONUtil.parseArray(condition);
|
||||
System.out.println(JSONUtil.toJsonStr(jsonArray));
|
||||
|
||||
String conditionResult = ConditionParser.parseCondition(jsonArray);
|
||||
|
||||
|
@ -35,8 +38,9 @@ public class ConditionTest {
|
|||
@Test
|
||||
public void test2() {
|
||||
String condition = "[{\"$or\":[{\"$and\":[{\"$eq\":[\"2\",\"2\"]},{\"$eq\":[\"2\",\"3\"]}]}]},{\"$or\":[{\"$eq\":[\"2\",\"2\"]}]}]";
|
||||
|
||||
System.out.println(condition);
|
||||
JSONArray jsonArray = JSONUtil.parseArray(condition);
|
||||
System.out.println(JSONUtil.toJsonStr(jsonArray));
|
||||
|
||||
String conditionResult = ConditionParser.parseCondition(jsonArray);
|
||||
|
||||
|
@ -46,4 +50,39 @@ public class ConditionTest {
|
|||
Console.log("{} = {}", conditionResult.toString(), executeB);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test3() throws IllegalAccessException, NoSuchMethodException {
|
||||
AviatorEvaluator.addStaticFunctions("CollUtil", CollUtil.class);
|
||||
AviatorEvaluator.addStaticFunctions("StrUtil", StrUtil.class);
|
||||
|
||||
List<String> sectionClassificationList = Lists.newArrayList("汇差", "手续费", "成本科目");
|
||||
System.out.println(sectionClassificationList);
|
||||
JSONArray objects = JSONUtil.parseArray(sectionClassificationList.toString());
|
||||
System.out.println(objects);
|
||||
String str = "成本科目";
|
||||
String join = CollUtil.join(objects, ",");
|
||||
String format = StrUtil.format(MathOperatorEnum.contains.getActual(), join, str);
|
||||
System.out.println(format);
|
||||
Object executeA = AviatorEvaluator.execute(format);
|
||||
System.out.println(executeA);
|
||||
|
||||
}
|
||||
@Test
|
||||
public void test4() throws IllegalAccessException, NoSuchMethodException {
|
||||
String condition = "[{\"$or\":[{\"$eq\":[\"1\",\"2\"]}]},{\"$or\":[{\"contains\":[\"成本科目\",[\"汇差\",\"手续费\",\"成本科目\"]]}]}]";
|
||||
System.out.println(condition);
|
||||
JSONArray jsonArray = JSONUtil.parseArray(condition);
|
||||
System.out.println(JSONUtil.toJsonStr(jsonArray));
|
||||
|
||||
String conditionResult = ConditionParser.parseCondition(jsonArray);
|
||||
|
||||
Console.log("condition template = {}", conditionResult);
|
||||
AviatorEvaluator.addStaticFunctions("CollUtil", CollUtil.class);
|
||||
AviatorEvaluator.addStaticFunctions("StrUtil", StrUtil.class);
|
||||
Object executeB = AviatorEvaluator.execute(conditionResult);
|
||||
Console.log("{} = {}", conditionResult, executeB);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue