规则样例
This commit is contained in:
commit
654d08e951
|
@ -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
|
|
@ -0,0 +1,137 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<groupId>com.we-zone.drools</groupId>
|
||||||
|
<artifactId>drools-demo</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>8</maven.compiler.source>
|
||||||
|
<maven.compiler.target>8</maven.compiler.target>
|
||||||
|
<springboot.version>2.7.1</springboot.version>
|
||||||
|
<drools.version>7.10.0.Final</drools.version>
|
||||||
|
<hutool.version>5.8.4</hutool.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<dependencyManagement>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
|
<type>pom</type>
|
||||||
|
<version>${springboot.version}</version>
|
||||||
|
<scope>import</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</dependencyManagement>
|
||||||
|
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>mysql</groupId>
|
||||||
|
<artifactId>mysql-connector-java</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-lang3</artifactId>
|
||||||
|
<version>3.3.2</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>cn.hutool</groupId>
|
||||||
|
<artifactId>hutool-all</artifactId>
|
||||||
|
<version>${hutool.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.googlecode.aviator</groupId>
|
||||||
|
<artifactId>aviator</artifactId>
|
||||||
|
<version>5.2.7</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.kie</groupId>
|
||||||
|
<artifactId>kie-spring</artifactId>
|
||||||
|
<version>${drools.version}</version>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.springframework</groupId>
|
||||||
|
<artifactId>spring-tx</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.springframework</groupId>
|
||||||
|
<artifactId>spring-beans</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.springframework</groupId>
|
||||||
|
<artifactId>spring-core</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.springframework</groupId>
|
||||||
|
<artifactId>spring-context</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!--drools规则引擎-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.drools</groupId>
|
||||||
|
<artifactId>drools-compiler</artifactId>
|
||||||
|
<version>${drools.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.drools</groupId>
|
||||||
|
<artifactId>drools-templates</artifactId>
|
||||||
|
<version>${drools.version}</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<finalName>${project.artifactId}</finalName>
|
||||||
|
<resources>
|
||||||
|
<resource>
|
||||||
|
<directory>src/main/java</directory>
|
||||||
|
<includes>
|
||||||
|
<include>**/*.xml</include>
|
||||||
|
</includes>
|
||||||
|
<filtering>false</filtering>
|
||||||
|
</resource>
|
||||||
|
<resource>
|
||||||
|
<directory>src/main/resources</directory>
|
||||||
|
<includes>
|
||||||
|
<include>**/*.*</include>
|
||||||
|
</includes>
|
||||||
|
<filtering>false</filtering>
|
||||||
|
</resource>
|
||||||
|
</resources>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>2.3.2</version>
|
||||||
|
<configuration>
|
||||||
|
<source>1.8</source>
|
||||||
|
<target>1.8</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</project>
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
package com.wezone.drools.utils;
|
||||||
|
|
||||||
|
public interface ConditionConstants {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
package com.wezone.drools.utils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 条件格式化
|
||||||
|
*/
|
||||||
|
public class ConditionParser {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
server:
|
||||||
|
port: 8080
|
||||||
|
spring:
|
||||||
|
application:
|
||||||
|
name: drools-springboot
|
|
@ -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<String> 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue