规则样例
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