1.修改测试用例,增加包含条件
This commit is contained in:
parent
8774482141
commit
1ab545e294
|
@ -38,15 +38,18 @@ public enum MathOperatorEnum {
|
||||||
not("$not", "!", "Logical", "非"),
|
not("$not", "!", "Logical", "非"),
|
||||||
$match("$match", "match", "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) {
|
public static MathOperatorEnum fromOperator(String operator) {
|
||||||
for (MathOperatorEnum operatorEnum : MathOperatorEnum.values()) {
|
for (MathOperatorEnum operatorEnum : MathOperatorEnum.values()) {
|
||||||
|
@ -73,4 +76,8 @@ public enum MathOperatorEnum {
|
||||||
public boolean isLogical() {
|
public boolean isLogical() {
|
||||||
return StrUtil.equals(this.getType(), "Logical");
|
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.collection.CollUtil;
|
||||||
import cn.hutool.core.lang.Console;
|
import cn.hutool.core.lang.Console;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.json.JSONArray;
|
import cn.hutool.json.JSONArray;
|
||||||
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONObject;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
|
@ -19,7 +20,7 @@ public class ConditionParser {
|
||||||
public static String parseCondition(JSONArray jsonArray) {
|
public static String parseCondition(JSONArray jsonArray) {
|
||||||
StringBuffer stringBuffer = new StringBuffer();
|
StringBuffer stringBuffer = new StringBuffer();
|
||||||
for (int i = 0; i < jsonArray.size(); i++) {
|
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);
|
JSONObject o = jsonArray.getJSONObject(i);
|
||||||
|
|
||||||
for (Map.Entry<String, Object> kv : o.entrySet()) {
|
for (Map.Entry<String, Object> kv : o.entrySet()) {
|
||||||
|
@ -60,6 +61,13 @@ public class ConditionParser {
|
||||||
|
|
||||||
if (operatorEnum.isLogical()) {
|
if (operatorEnum.isLogical()) {
|
||||||
stringJoiner.add("(").add(parseCondition(jsonArray)).add(") ");
|
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 {
|
} else {
|
||||||
String leftValue = sValues.getStr(0);
|
String leftValue = sValues.getStr(0);
|
||||||
String rightValue = sValues.getStr(1);
|
String rightValue = sValues.getStr(1);
|
||||||
|
|
|
@ -2,16 +2,18 @@ package com.wezone.drools.test;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.lang.Console;
|
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.JSONArray;
|
||||||
import cn.hutool.json.JSONObject;
|
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
import com.googlecode.aviator.AviatorEvaluator;
|
import com.googlecode.aviator.AviatorEvaluator;
|
||||||
import com.wezone.drools.enums.MathOperatorEnum;
|
import com.wezone.drools.enums.MathOperatorEnum;
|
||||||
import com.wezone.drools.utils.ConditionParser;
|
import com.wezone.drools.utils.ConditionParser;
|
||||||
|
import org.assertj.core.util.Lists;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import java.util.Set;
|
import java.util.Collection;
|
||||||
import java.util.StringJoiner;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 条件测试用例
|
* 条件测试用例
|
||||||
|
@ -21,8 +23,9 @@ public class ConditionTest {
|
||||||
@Test
|
@Test
|
||||||
public void test1() {
|
public void test1() {
|
||||||
String condition = "[{\"$or\":[{\"$eq\":[\"1\",\"2\"]}]},{\"$or\":[{\"$eq\":[\"2\",\"2\"]}]}]";
|
String condition = "[{\"$or\":[{\"$eq\":[\"1\",\"2\"]}]},{\"$or\":[{\"$eq\":[\"2\",\"2\"]}]}]";
|
||||||
|
System.out.println(condition);
|
||||||
JSONArray jsonArray = JSONUtil.parseArray(condition);
|
JSONArray jsonArray = JSONUtil.parseArray(condition);
|
||||||
|
System.out.println(JSONUtil.toJsonStr(jsonArray));
|
||||||
|
|
||||||
String conditionResult = ConditionParser.parseCondition(jsonArray);
|
String conditionResult = ConditionParser.parseCondition(jsonArray);
|
||||||
|
|
||||||
|
@ -35,8 +38,9 @@ public class ConditionTest {
|
||||||
@Test
|
@Test
|
||||||
public void test2() {
|
public void test2() {
|
||||||
String condition = "[{\"$or\":[{\"$and\":[{\"$eq\":[\"2\",\"2\"]},{\"$eq\":[\"2\",\"3\"]}]}]},{\"$or\":[{\"$eq\":[\"2\",\"2\"]}]}]";
|
String condition = "[{\"$or\":[{\"$and\":[{\"$eq\":[\"2\",\"2\"]},{\"$eq\":[\"2\",\"3\"]}]}]},{\"$or\":[{\"$eq\":[\"2\",\"2\"]}]}]";
|
||||||
|
System.out.println(condition);
|
||||||
JSONArray jsonArray = JSONUtil.parseArray(condition);
|
JSONArray jsonArray = JSONUtil.parseArray(condition);
|
||||||
|
System.out.println(JSONUtil.toJsonStr(jsonArray));
|
||||||
|
|
||||||
String conditionResult = ConditionParser.parseCondition(jsonArray);
|
String conditionResult = ConditionParser.parseCondition(jsonArray);
|
||||||
|
|
||||||
|
@ -46,4 +50,39 @@ public class ConditionTest {
|
||||||
Console.log("{} = {}", conditionResult.toString(), executeB);
|
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