1.修改测试用例,增加包含条件

This commit is contained in:
chenweilong 2022-12-05 15:03:06 +08:00
parent 8774482141
commit 1ab545e294
3 changed files with 64 additions and 10 deletions

View File

@ -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");
}
}

View File

@ -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);

View File

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