From 654d08e951b6af10a8b571f18e010f3e14020fc8 Mon Sep 17 00:00:00 2001 From: linsm Date: Thu, 30 Jun 2022 14:50:49 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=84=E5=88=99=E6=A0=B7=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 38 +++++ pom.xml | 137 ++++++++++++++++++ .../wezone/drools/DroolsDemoApplication.java | 14 ++ .../wezone/drools/enums/MathOperatorEnum.java | 72 +++++++++ .../drools/utils/ConditionConstants.java | 6 + .../wezone/drools/utils/ConditionParser.java | 11 ++ src/main/resources/application.yml | 5 + .../com/wezone/drools/test/ConditionTest.java | 72 +++++++++ 8 files changed, 355 insertions(+) create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 src/main/java/com/wezone/drools/DroolsDemoApplication.java create mode 100644 src/main/java/com/wezone/drools/enums/MathOperatorEnum.java create mode 100644 src/main/java/com/wezone/drools/utils/ConditionConstants.java create mode 100644 src/main/java/com/wezone/drools/utils/ConditionParser.java create mode 100644 src/main/resources/application.yml create mode 100644 src/test/java/com/wezone/drools/test/ConditionTest.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5ff6309 --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..e8ae31c --- /dev/null +++ b/pom.xml @@ -0,0 +1,137 @@ + + + 4.0.0 + + com.we-zone.drools + drools-demo + 1.0-SNAPSHOT + + + 8 + 8 + 2.7.1 + 7.10.0.Final + 5.8.4 + + + + + + org.springframework.boot + spring-boot-starter-parent + pom + ${springboot.version} + import + + + + + + + + org.springframework.boot + spring-boot-starter-web + + + mysql + mysql-connector-java + + + org.springframework.boot + spring-boot-starter-test + + + + org.apache.commons + commons-lang3 + 3.3.2 + + + + org.projectlombok + lombok + provided + + + + cn.hutool + hutool-all + ${hutool.version} + + + + com.googlecode.aviator + aviator + 5.2.7 + + + + org.kie + kie-spring + ${drools.version} + + + org.springframework + spring-tx + + + org.springframework + spring-beans + + + org.springframework + spring-core + + + org.springframework + spring-context + + + + + + + org.drools + drools-compiler + ${drools.version} + + + org.drools + drools-templates + ${drools.version} + + + + + ${project.artifactId} + + + src/main/java + + **/*.xml + + false + + + src/main/resources + + **/*.* + + false + + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.3.2 + + 1.8 + 1.8 + + + + + \ No newline at end of file diff --git a/src/main/java/com/wezone/drools/DroolsDemoApplication.java b/src/main/java/com/wezone/drools/DroolsDemoApplication.java new file mode 100644 index 0000000..9bf9e99 --- /dev/null +++ b/src/main/java/com/wezone/drools/DroolsDemoApplication.java @@ -0,0 +1,14 @@ +package com.wezone.drools; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class DroolsDemoApplication { + + public static void main(String[] args) { + SpringApplication.run(DroolsDemoApplication.class, args); + } + + +} diff --git a/src/main/java/com/wezone/drools/enums/MathOperatorEnum.java b/src/main/java/com/wezone/drools/enums/MathOperatorEnum.java new file mode 100644 index 0000000..2bfb357 --- /dev/null +++ b/src/main/java/com/wezone/drools/enums/MathOperatorEnum.java @@ -0,0 +1,72 @@ +package com.wezone.drools.enums; + + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +/** + * 数学-运算符枚举 + */ +@Getter +@AllArgsConstructor +@ToString +public enum MathOperatorEnum { + // 条件运算符 + eq("$eq", "==", "Conditional", "等于"), + eq2("==", "==", "Conditional", "等于"), + eqs("$eqs", "===", "Conditional", "相等(严格)"), + eqs2("===", "===", "Conditional", "相等(严格)"), + ne("$ne", "!=", "Conditional", "不等于"), + ne2("!=", "!=", "Conditional", "不等于"), + nes("$nes", "!=", "Conditional", "不等于"), + nes2("!==", "!==", "Conditional", "不等于(严格)"), + lt("$lt", "<", "Conditional", "小于"), + lt2("<", "<", "Conditional", "小于"), + lte("$lte", "<=", "Conditional", "小于等于"), + lte2("<=", "<=", "Conditional", "小于等于"), + gt("$gt", ">", "Conditional", "大于"), + gt2(">", ">", "Conditional", "大于"), + gte("$gte", ">=", "Conditional", "大于等于"), + gte2(">=", ">=", "Conditional", "大于等于"), + + // 逻辑运算符 + and("$and", "&&", "Logical", "且"), + or("$or", "||", "Logical", "或"), + not("$not", "!", "Logical", "非"), + $match("$match", "match", "Logical", "匹配"), + + ; + + private String operator; + + private String actual; + + private String type; + + private String desc; + + public static MathOperatorEnum fromOperator(String operator) { + for (MathOperatorEnum operatorEnum : MathOperatorEnum.values()) { + if (ObjectUtil.equals(operatorEnum.getOperator(), operator)) { + return operatorEnum; + } + } + throw new IllegalArgumentException("数据运算符不匹配"); + } + + public static boolean isLogical(String operator) { + boolean isLogical = false; + for (MathOperatorEnum operatorEnum : MathOperatorEnum.values()) { + if (ObjectUtil.equals(operatorEnum.getOperator(), operator)) { + if(StrUtil.equals(operatorEnum.getType(), "Logical")) { + isLogical = true; + break; + } + } + } + return isLogical; + } +} diff --git a/src/main/java/com/wezone/drools/utils/ConditionConstants.java b/src/main/java/com/wezone/drools/utils/ConditionConstants.java new file mode 100644 index 0000000..60342a7 --- /dev/null +++ b/src/main/java/com/wezone/drools/utils/ConditionConstants.java @@ -0,0 +1,6 @@ +package com.wezone.drools.utils; + +public interface ConditionConstants { + + +} diff --git a/src/main/java/com/wezone/drools/utils/ConditionParser.java b/src/main/java/com/wezone/drools/utils/ConditionParser.java new file mode 100644 index 0000000..057eb16 --- /dev/null +++ b/src/main/java/com/wezone/drools/utils/ConditionParser.java @@ -0,0 +1,11 @@ +package com.wezone.drools.utils; + +/** + * 条件格式化 + */ +public class ConditionParser { + + + + +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..0c8aec5 --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,5 @@ +server: + port: 8080 +spring: + application: + name: drools-springboot \ No newline at end of file diff --git a/src/test/java/com/wezone/drools/test/ConditionTest.java b/src/test/java/com/wezone/drools/test/ConditionTest.java new file mode 100644 index 0000000..2fe0779 --- /dev/null +++ b/src/test/java/com/wezone/drools/test/ConditionTest.java @@ -0,0 +1,72 @@ +package com.wezone.drools.test; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Console; +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 org.junit.jupiter.api.Test; + +import java.util.Set; +import java.util.StringJoiner; + +public class ConditionTest { + + @Test + public void test1() { + String condition = "[{\"$or\":[{\"$eq\":[\"1\",\"2\"]}]},{\"$or\":[{\"$eq\":[\"2\",\"2\"]}]}]"; + + JSONArray jsonArray = JSONUtil.parseArray(condition); + + StringBuffer stringBuffer = new StringBuffer(); + for (int i = 0; i < jsonArray.size(); i++) { + StringJoiner stringJoiner = new StringJoiner(" "); + JSONObject o = jsonArray.getJSONObject(i); + + int finalI = i; + o.forEach(kv -> { + String key = kv.getKey(); + JSONArray values = (JSONArray) kv.getValue(); + boolean notEmpty = CollUtil.isNotEmpty(values); + + if (notEmpty) { + if (finalI != 0) { + MathOperatorEnum operatorEnum = MathOperatorEnum.fromOperator(key); + Console.log("math Operator = {}", operatorEnum.toString()); + stringJoiner.add(operatorEnum.getActual()); + } + + + stringJoiner.add("("); + int ki = 0; + for (Object value : values) { + JSONObject vJson = (JSONObject) value; + + Set keySet = vJson.keySet(); + for (String skey : keySet) { +// if(ki != 0) { + MathOperatorEnum operatorEnum = MathOperatorEnum.fromOperator(skey); + Console.log("math Operator = {}", operatorEnum.toString()); +// } + + JSONArray sValues = vJson.getJSONArray(skey); + String leftValue = sValues.getStr(0); + String rightValue = sValues.getStr(1); + stringJoiner.add(leftValue).add(operatorEnum.getActual()).add(rightValue); + } + ki++; + } + stringJoiner.add(") "); + } + stringBuffer.append(stringJoiner.toString()); + }); + } + Console.log("condition template = {}", stringBuffer.toString()); + + Object executeB = AviatorEvaluator.execute(stringBuffer.toString()); + Console.log("{} = {}", stringBuffer.toString(), executeB); + } + +}