diff --git a/README.md b/README.md
index 73cfd0589e4edda18755d0b83586c675806a27f3..b89257cd88a035eab4fc98c4a19d08671c01da52 100644
--- a/README.md
+++ b/README.md
@@ -228,4 +228,8 @@ REC(Rule Engine Component)规则引擎组件:提供统一的规则处理
- 新建模块实现服务的运行:加载所有域的信息进行处理 rec-support,定义SPI加载接口,SDK和rec-core的实现不一致,取值方式不一致
- rec-register:注册中心
- rec-group:组的概念SAAS
-- 返回值类型,是否开启返回值,返回值模式
\ No newline at end of file
+- 返回值类型,是否开启返回值,返回值模式
+-
+- mvn versions:set -DnewVersion=0.0.0.1-SNAPSHOT
+- mvn versions:revert
+- mvn versions:commit
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 2c72dd098d1679c8f83a29bd18ad69e330306472..10bd6828c382143bb03d8da1a19ae9abdec3664e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,20 +7,34 @@
cn.icanci.rec
rec-parent
pom
- ${revision}
+ 0.0.0.1-SNAPSHOT
rec-admin
rec-core
rec-engine
rec-spring-boot-starter
- rec-socket
rec-common
rec-spi
+ Rule-Engine-Component
+ Rule Engine Component: provides a unified rule processing method and policy. Support SDK access and HTTP access; Only page configuration is needed to complete the
+ rule processing, and simple mode and complex mode are supported for editing. The front and rear end projects can be separated and deployed independently, or packaged and
+ deployed at the front and rear end.
+
+ https://gitee.com/icanci/rec
+
-
- 1.0.0.0-SNAPSHOT
+
+ UTF-8
+
+ 3.8.1
+ 3.0.0-M1
+ 3.2.1
+ 3.2.0
+ 1.6.8
+ 1.6
+ 3.0.0-M1
1.8
UTF-8
@@ -232,39 +246,35 @@
jackson-databind
+
+
+
+ The Apache Software License, Version 2.0
+ http://www.apache.org/licenses/LICENSE-2.0.txt
+ repo
+
+
+
+
+
+ icanci
+ icanci@foxmail.com
+ https://gitee.com/icanci
+ +8
+
+
+
+
+ master
+ scm:git:https://gitee.com/icanci/rec.git
+ scm:git:https://gitee.com/icanci/rec.git
+ https://gitee.com/icanci/rec.git
+
+
+ ${project.artifactId}-${project.version}
-
- org.codehaus.mojo
- flatten-maven-plugin
- 1.2.7
-
- clean
- true
-
- remove
- remove
-
- ${project.build.directory}/flattened
-
-
-
- flatten
- process-resources
-
- flatten
-
-
-
- flatten.clean
- clean
-
- clean
-
-
-
-
org.apache.maven.plugins
maven-source-plugin
@@ -279,19 +289,179 @@
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ 3.0.0-M1
+
+ ${javadoc.opts}
+
+
+
+
+ src/main/resources
+ true
+
+
-
-
- org.codehaus.mojo
- flatten-maven-plugin
-
-
- org.apache.maven.plugins
- maven-source-plugin
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+ ${maven.compiler.target}
+ ${maven.compiler.source}
+ ${project.build.sourceEncoding}
+ true
+
+ -parameters
+
+
+
+
+
+
+ disable-javadoc-doclint
+
+ [1.8,)
+
+
+ -Xdoclint:none
+
+
+
+ release
+
+
+
+ org.apache.maven.plugins
+ maven-deploy-plugin
+ ${maven-deploy-plugin.version}
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ ${maven-source-plugin.version}
+
+
+ attach-sources
+ package
+
+ jar-no-fork
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ ${maven-javadoc-plugin.version}
+
+ package
+
+
+ date
+
+
+
+
+
+ attach-javadocs
+ package
+
+ jar
+
+
+ none
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-gpg-plugin
+ 1.6
+
+
+ verify
+
+ sign
+
+
+
+
+
+ org.sonatype.plugins
+ nexus-staging-maven-plugin
+ ${nexus-staging-maven-plugin.version}
+ true
+
+ oss-release
+ https://s01.oss.sonatype.org/
+ true
+
+
+
+ org.codehaus.mojo
+ flatten-maven-plugin
+ 1.2.7
+
+ clean
+ true
+
+ remove
+ remove
+
+ ${project.build.directory}/flattened
+
+
+
+ flatten
+ process-resources
+
+ flatten
+
+
+
+ flatten.clean
+ clean
+
+ clean
+
+
+
+
+
+
+
+
+
+ sonatype-snapshots
+ https://s01.oss.sonatype.org/content/repositories/snapshots
+
+
+ sonatype-release
+ https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/
+
+
+
+
+
+
+
+ sonatype-snapshots
+ https://s01.oss.sonatype.org/content/repositories/snapshots
+
+
+ sonatype-release
+ https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/
+
+
\ No newline at end of file
diff --git a/rec-admin/pom.xml b/rec-admin/pom.xml
index 3df8853b21d1f32edb4c1d434ef15716f199229d..b79aa156885ef7d609fb24178807e94d7351912e 100644
--- a/rec-admin/pom.xml
+++ b/rec-admin/pom.xml
@@ -5,7 +5,7 @@
rec-parent
cn.icanci.rec
- ${revision}
+ 0.0.0.1-SNAPSHOT
4.0.0
@@ -34,7 +34,7 @@
cn.icanci.rec
rec-common
- ${revision}
+ ${parent.version}
diff --git a/rec-admin/rec-admin-biz/pom.xml b/rec-admin/rec-admin-biz/pom.xml
index 3ca4553fda880111981d57e0e0934eda03fb46a3..0733b4f403a21f264f0693151284ca9fbe6cfc20 100644
--- a/rec-admin/rec-admin-biz/pom.xml
+++ b/rec-admin/rec-admin-biz/pom.xml
@@ -5,7 +5,7 @@
rec-admin
cn.icanci.rec
- ${revision}
+ 0.0.0.1-SNAPSHOT
4.0.0
@@ -20,17 +20,17 @@
cn.icanci.rec
rec-admin-dal
- ${revision}
+ ${parent.version}
cn.icanci.rec
rec-spi
- ${revision}
+ ${parent.version}
cn.icanci.rec
rec-engine-script
- ${revision}
+ ${parent.version}
org.mapstruct
diff --git a/rec-admin/rec-admin-dal/pom.xml b/rec-admin/rec-admin-dal/pom.xml
index cc6740028e0a29a55f884048be98eacfc4aaaaa7..f3e2f4bc41f505ad639a70c695c3ac7d1319c648 100644
--- a/rec-admin/rec-admin-dal/pom.xml
+++ b/rec-admin/rec-admin-dal/pom.xml
@@ -5,7 +5,7 @@
rec-admin
cn.icanci.rec
- ${revision}
+ 0.0.0.1-SNAPSHOT
4.0.0
diff --git a/rec-admin/rec-admin-views/pom.xml b/rec-admin/rec-admin-views/pom.xml
index 2b5e2c9dde1753b1e74b0e25a0659e44b92b6359..33e8078c441945fc5e4a0272e738b8b40e5c7b03 100644
--- a/rec-admin/rec-admin-views/pom.xml
+++ b/rec-admin/rec-admin-views/pom.xml
@@ -5,7 +5,7 @@
rec-admin
cn.icanci.rec
- ${revision}
+ 0.0.0.1-SNAPSHOT
4.0.0
@@ -31,7 +31,7 @@
cn.icanci.rec
rec-admin-web
- ${revision}
+ ${parent.version}
diff --git a/rec-admin/rec-admin-web/pom.xml b/rec-admin/rec-admin-web/pom.xml
index 94da97305f6a7ff6e657c2de269b2c4731598231..a48976a086cb6b6f4a0ce6b1a587fd48beb6a660 100644
--- a/rec-admin/rec-admin-web/pom.xml
+++ b/rec-admin/rec-admin-web/pom.xml
@@ -5,7 +5,7 @@
rec-admin
cn.icanci.rec
- ${revision}
+ 0.0.0.1-SNAPSHOT
4.0.0
@@ -20,7 +20,7 @@
cn.icanci.rec
rec-admin-biz
- ${revision}
+ ${parent.version}
org.springframework.boot
diff --git a/rec-common/pom.xml b/rec-common/pom.xml
index ee0327e1b0084c57090b62f7ced2b0ede30c688d..9e728e0581148e70445b269a30c908f67709bf24 100644
--- a/rec-common/pom.xml
+++ b/rec-common/pom.xml
@@ -5,7 +5,7 @@
rec-parent
cn.icanci.rec
- ${revision}
+ 0.0.0.1-SNAPSHOT
4.0.0
diff --git a/rec-common/src/main/java/cn/icanci/rec/common/aggregation/RuleAggregation.java b/rec-common/src/main/java/cn/icanci/rec/common/aggregation/RuleAggregation.java
index 7dfc384fd5251f52d922d5229b2433f0aa652d63..dcf37016a9effba4817726196cc279929d3d581d 100644
--- a/rec-common/src/main/java/cn/icanci/rec/common/aggregation/RuleAggregation.java
+++ b/rec-common/src/main/java/cn/icanci/rec/common/aggregation/RuleAggregation.java
@@ -9,9 +9,12 @@ import java.util.StringJoiner;
/**
* 规则聚合-单个规则需要的配置数据信息
*
+ * 如果需要数据迁移,可以使用此模型
+ *
* @author icanci
* @since 1.0 Created in 2022/11/15 15:44
*/
+@Deprecated
public class RuleAggregation {
/** 域 */
private DomainDTO domain;
diff --git a/rec-common/src/main/java/cn/icanci/rec/common/aggregation/model/BaseDataDTO.java b/rec-common/src/main/java/cn/icanci/rec/common/aggregation/model/BaseDataDTO.java
index fe8ebd3c756d608c1a46fbf2b53863b3ab7fa6af..fe0173fd690b3726df7bab875faf298c752c8fd2 100644
--- a/rec-common/src/main/java/cn/icanci/rec/common/aggregation/model/BaseDataDTO.java
+++ b/rec-common/src/main/java/cn/icanci/rec/common/aggregation/model/BaseDataDTO.java
@@ -4,42 +4,44 @@ import cn.icanci.rec.common.enums.DataTypeEnum;
import cn.icanci.rec.common.enums.ResultTypeEnum;
import cn.icanci.rec.common.enums.ScriptTypeEnum;
+import javax.script.CompiledScript;
+
/**
* @author icanci
* @since 1.0 Created in 2022/11/15 17:14
*/
public class BaseDataDTO extends BaseDTO {
- private static final long serialVersionUID = -509622609203854310L;
+ private static final long serialVersionUID = -509622609203854310L;
/**
* 域Code
*/
- private String domainCode;
+ private String domainCode;
/**
* 基础数据名称
*/
- private String fieldName;
+ private String fieldName;
/**
* 数据类型(布尔、字符串、数值、日期、元数据等)
*
* @see DataTypeEnum#name()
*/
- private String dataType;
+ private String dataType;
/**
* 关联的元数据uuid
*
* {@link DataTypeEnum#METADATA}
*/
- private String metadataUuid;
+ private String metadataUuid;
/**
* 脚本执行类型
*
* @see ScriptTypeEnum#name()
*/
- private String scriptType;
+ private String scriptType;
/**
* 脚本内容
*/
- private String scriptContent;
+ private String scriptContent;
/**
* TODO 是否有必要
* 脚本执行返回类型(只能是基本数据类型)
@@ -47,7 +49,12 @@ public class BaseDataDTO extends BaseDTO {
* @see ResultTypeEnum#name()
*/
@Deprecated
- private String resultType;
+ private String resultType;
+
+ /**
+ * 通过 Compilable 编译 scriptContent 之后的实例对象
+ */
+ private transient CompiledScript compiledScript;
public String getDomainCode() {
return domainCode;
@@ -104,4 +111,12 @@ public class BaseDataDTO extends BaseDTO {
public void setResultType(String resultType) {
this.resultType = resultType;
}
+
+ public CompiledScript getCompiledScript() {
+ return compiledScript;
+ }
+
+ public void setCompiledScript(CompiledScript compiledScript) {
+ this.compiledScript = compiledScript;
+ }
}
diff --git a/rec-common/src/main/java/cn/icanci/rec/common/aggregation/model/DataSourceDTO.java b/rec-common/src/main/java/cn/icanci/rec/common/aggregation/model/DataSourceDTO.java
index ee1476f887917f4c66c5ba71b17e1e5c8097af8c..a017340f89fd1f27d0bccf1c0df15082c8aa2827 100644
--- a/rec-common/src/main/java/cn/icanci/rec/common/aggregation/model/DataSourceDTO.java
+++ b/rec-common/src/main/java/cn/icanci/rec/common/aggregation/model/DataSourceDTO.java
@@ -4,6 +4,8 @@ import cn.icanci.rec.common.enums.DataSourceTypeEnum;
import cn.icanci.rec.common.enums.HttpRequestTypeEnum;
import cn.icanci.rec.common.enums.ScriptTypeEnum;
+import javax.script.CompiledScript;
+
/**
* @author icanci
* @since 1.0 Created in 2022/11/15 17:15
@@ -46,17 +48,22 @@ public class DataSourceDTO extends BaseDTO {
* @see ScriptTypeEnum#name()
*
*/
- private String scriptType;
+ private String scriptType;
/**
* 脚本内容
*/
- private String scriptContent;
+ private String scriptContent;
/**
* 执行超时时间,秒
* 为0则不做限制
*/
- private int timeout;
+ private int timeout;
+
+ /**
+ * 通过 Compilable 编译 scriptContent 之后的实例对象
+ */
+ private transient CompiledScript compiledScript;
public String getScriptType() {
return scriptType;
@@ -81,6 +88,14 @@ public class DataSourceDTO extends BaseDTO {
public void setTimeout(int timeout) {
this.timeout = timeout;
}
+
+ public CompiledScript getCompiledScript() {
+ return compiledScript;
+ }
+
+ public void setCompiledScript(CompiledScript compiledScript) {
+ this.compiledScript = compiledScript;
+ }
}
/**
diff --git a/rec-core/pom.xml b/rec-core/pom.xml
index aed63f775ed32094403f7adab1038d63382717d6..4bb17a24e0f38d37a43dfac400f1d2d0a3c32581 100644
--- a/rec-core/pom.xml
+++ b/rec-core/pom.xml
@@ -5,7 +5,7 @@
rec-parent
cn.icanci.rec
- ${revision}
+ 0.0.0.1-SNAPSHOT
4.0.0
@@ -32,17 +32,17 @@
cn.icanci.rec
rec-common
- ${revision}
+ ${parent.version}
cn.icanci.rec
rec-engine-sdk
- ${revision}
+ ${parent.version}
cn.icanci.rec
rec-engine-sdk-http
- ${revision}
+ ${parent.version}
diff --git a/rec-engine/pom.xml b/rec-engine/pom.xml
index 92b307251a97643fceeecc79de069f5c5a02f8b9..436f13e9f818f7a51b5e80730ab0902550e4e428 100644
--- a/rec-engine/pom.xml
+++ b/rec-engine/pom.xml
@@ -5,7 +5,7 @@
rec-parent
cn.icanci.rec
- ${revision}
+ 0.0.0.1-SNAPSHOT
4.0.0
diff --git a/rec-engine/rec-engine-script/pom.xml b/rec-engine/rec-engine-script/pom.xml
index 1aaab1db97a54d5d07a01fc6b51e5c9bb4f14ba1..82de7379f69e4f861b0e5c86a61de970218dea31 100644
--- a/rec-engine/rec-engine-script/pom.xml
+++ b/rec-engine/rec-engine-script/pom.xml
@@ -5,10 +5,10 @@
rec-engine
cn.icanci.rec
- ${revision}
+ 0.0.0.1-SNAPSHOT
4.0.0
-
+ jar
rec-engine-script
@@ -20,7 +20,7 @@
cn.icanci.rec
rec-common
- ${revision}
+ ${parent.version}
diff --git a/rec-engine/rec-engine-script/src/main/java/cn/icanci/rec/engine/script/RecScriptEngine.java b/rec-engine/rec-engine-script/src/main/java/cn/icanci/rec/engine/script/RecScriptEngine.java
index 141574c030a8c429ed5653c4c8d1d6bf3c1b6615..b02df96fcc21c7a885ab6f459655cdf1ca98d2ab 100644
--- a/rec-engine/rec-engine-script/src/main/java/cn/icanci/rec/engine/script/RecScriptEngine.java
+++ b/rec-engine/rec-engine-script/src/main/java/cn/icanci/rec/engine/script/RecScriptEngine.java
@@ -6,6 +6,8 @@ import cn.icanci.rec.engine.script.context.RecScriptEngineContext;
import cn.icanci.rec.engine.script.wrapper.HttpResponseWrapper;
import javax.script.Bindings;
+import javax.script.CompiledScript;
+import javax.script.ScriptEngine;
/**
* 脚本执行引擎抽象顶级接口
@@ -14,6 +16,25 @@ import javax.script.Bindings;
* @since 1.0 Created in 2022/11/12 22:12
*/
public interface RecScriptEngine {
+ // ================================ 脚本编译 ================================
+
+ /**
+ * 根据脚本类型找到对应的执行引擎
+ *
+ * @param scriptType scriptType
+ * @return 返回对应的执行引擎
+ */
+ ScriptEngine findEngine(ScriptTypeEnum scriptType);
+
+ /**
+ * 根据脚本类型和脚本进行编译
+ *
+ * @param scriptType scriptType
+ * @param scriptContent scriptContent
+ * @return 返回编译结果
+ */
+ CompiledScript compile(ScriptTypeEnum scriptType, String scriptContent);
+
// ================================ 脚本执行 ================================
/**
* 执行脚本
@@ -68,4 +89,5 @@ public interface RecScriptEngine {
* @return 返回请求执行结果
*/
HttpResponseWrapper httpEval(HttpRequestTypeEnum requestType, String reqUrl, String reqParam, int timeout);
+
}
diff --git a/rec-engine/rec-engine-script/src/main/java/cn/icanci/rec/engine/script/impl/RecScriptEngineImpl.java b/rec-engine/rec-engine-script/src/main/java/cn/icanci/rec/engine/script/impl/RecScriptEngineImpl.java
index d7ac6591fd4285f9c789763c77f0c5f05bb2b93e..f8ed1b8eb8998a38b4ee15d641a0973b8521c5a7 100644
--- a/rec-engine/rec-engine-script/src/main/java/cn/icanci/rec/engine/script/impl/RecScriptEngineImpl.java
+++ b/rec-engine/rec-engine-script/src/main/java/cn/icanci/rec/engine/script/impl/RecScriptEngineImpl.java
@@ -1,5 +1,13 @@
package cn.icanci.rec.engine.script.impl;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+import javax.script.*;
+
+import com.google.common.collect.Maps;
+
import cn.icanci.rec.common.enums.HttpRequestTypeEnum;
import cn.icanci.rec.common.enums.ScriptTypeEnum;
import cn.icanci.rec.common.utils.FastJsonUtils;
@@ -12,14 +20,6 @@ import cn.icanci.rec.engine.script.context.RecScriptEngineContext;
import cn.icanci.rec.engine.script.factory.ScriptEngineFactory;
import cn.icanci.rec.engine.script.wrapper.HttpResponseWrapper;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-
-import javax.script.*;
-
-import com.google.common.collect.Maps;
-
/**
* @author icanci
* @since 1.0 Created in 2022/11/12 22:46
@@ -30,6 +30,25 @@ public class RecScriptEngineImpl implements RecScriptEngine {
/** DEFAULT_APPLICATION_JSON_VALUE */
public static final String DEFAULT_APPLICATION_JSON_VALUE = "application/json";
+ @Override
+ public ScriptEngine findEngine(ScriptTypeEnum scriptType) {
+ return ScriptEngineFactory.getScriptEngine(scriptType);
+ }
+
+ @Override
+ public CompiledScript compile(ScriptTypeEnum scriptType, String scriptContent) {
+ try {
+ ScriptEngine scriptEngine = ScriptEngineFactory.getScriptEngine(scriptType);
+ if (scriptEngine instanceof Compilable) {
+ Compilable compilable = (Compilable) scriptEngine;
+ return compilable.compile(scriptContent);
+ }
+ } catch (Throwable t) {
+ // No Op
+ }
+ return null;
+ }
+
/**
* 执行脚本
*
diff --git a/rec-engine/rec-engine-sdk-http/pom.xml b/rec-engine/rec-engine-sdk-http/pom.xml
index b925fb7f2ad1b63270a364ba91613a9199f55ee0..9e24a16c515eb0d2a455d752927de58660ba43da 100644
--- a/rec-engine/rec-engine-sdk-http/pom.xml
+++ b/rec-engine/rec-engine-sdk-http/pom.xml
@@ -5,10 +5,10 @@
rec-engine
cn.icanci.rec
- ${revision}
+ 0.0.0.1-SNAPSHOT
4.0.0
-
+ jar
rec-engine-sdk-http
@@ -20,7 +20,7 @@
cn.icanci.rec
rec-engine-sdk
- ${revision}
+ ${parent.version}
\ No newline at end of file
diff --git a/rec-engine/rec-engine-sdk-http/src/main/java/cn/icanci/rec/engine/sdk/http/spi/HttpDataSourceSPI.java b/rec-engine/rec-engine-sdk-http/src/main/java/cn/icanci/rec/engine/sdk/http/spi/HttpDataSourceSPI.java
index 895ba794d45b3e6c5f2cb050447ce4ee21cbb2ff..b53a6c83cd1751191b2e05a7322183b532abde02 100644
--- a/rec-engine/rec-engine-sdk-http/src/main/java/cn/icanci/rec/engine/sdk/http/spi/HttpDataSourceSPI.java
+++ b/rec-engine/rec-engine-sdk-http/src/main/java/cn/icanci/rec/engine/sdk/http/spi/HttpDataSourceSPI.java
@@ -1,11 +1,11 @@
package cn.icanci.rec.engine.sdk.http.spi;
-import cn.icanci.rec.common.aggregation.model.DataSourceDTO;
-import cn.icanci.rec.engine.sdk.spi.DataSourceSPI;
-
import java.util.List;
import java.util.Set;
+import cn.icanci.rec.common.aggregation.model.DataSourceDTO;
+import cn.icanci.rec.engine.sdk.spi.DataSourceSPI;
+
/**
* @author icanci
* @since 1.0 Created in 2022/11/15 21:26
@@ -20,9 +20,4 @@ public class HttpDataSourceSPI extends AbstractLoadSPI implements DataSourceSPI
public List load(String domain) {
return null;
}
-
- @Override
- public DataSourceDTO loadOne(String domain, String uuid) {
- return null;
- }
}
diff --git a/rec-engine/rec-engine-sdk-http/src/main/java/cn/icanci/rec/engine/sdk/http/spi/HttpStrategySPI.java b/rec-engine/rec-engine-sdk-http/src/main/java/cn/icanci/rec/engine/sdk/http/spi/HttpStrategySPI.java
index d5f4c93bcb8797df68decb2a8b65012a48b83ec3..734c12187d366bda8d92f48abd08e1e45111b506 100644
--- a/rec-engine/rec-engine-sdk-http/src/main/java/cn/icanci/rec/engine/sdk/http/spi/HttpStrategySPI.java
+++ b/rec-engine/rec-engine-sdk-http/src/main/java/cn/icanci/rec/engine/sdk/http/spi/HttpStrategySPI.java
@@ -21,8 +21,4 @@ public class HttpStrategySPI extends AbstractLoadSPI implements StrategySPI {
return null;
}
- @Override
- public StrategyDTO loadOne(String domain, String sceneCode) {
- return null;
- }
}
diff --git a/rec-engine/rec-engine-sdk-netty/pom.xml b/rec-engine/rec-engine-sdk-netty/pom.xml
index 079e37d84de84064501fe53d20435064fd3c4e3d..95df87084069e320c2fd7d78df1b2589dcca0ec1 100644
--- a/rec-engine/rec-engine-sdk-netty/pom.xml
+++ b/rec-engine/rec-engine-sdk-netty/pom.xml
@@ -5,10 +5,10 @@
rec-engine
cn.icanci.rec
- ${revision}
+ 0.0.0.1-SNAPSHOT
4.0.0
-
+ jar
rec-engine-sdk-netty
@@ -20,7 +20,7 @@
cn.icanci.rec
rec-engine-sdk
- ${revision}
+ ${parent.version}
\ No newline at end of file
diff --git a/rec-engine/rec-engine-sdk/pom.xml b/rec-engine/rec-engine-sdk/pom.xml
index 56f642e4eb57a1f4baa25699c287491179eba99a..ba8adf39b5b353097c624ffbf2535527a12c786a 100644
--- a/rec-engine/rec-engine-sdk/pom.xml
+++ b/rec-engine/rec-engine-sdk/pom.xml
@@ -5,10 +5,10 @@
rec-engine
cn.icanci.rec
- ${revision}
+ 0.0.0.1-SNAPSHOT
4.0.0
-
+ jar
rec-engine-sdk
@@ -20,17 +20,12 @@
cn.icanci.rec
rec-common
- ${revision}
-
-
- cn.icanci.rec
- rec-engine-rule
- ${revision}
+ ${parent.version}
cn.icanci.rec
rec-engine-script
- ${revision}
+ ${parent.version}
diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/RecEngineSDKAutoConfig.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/RecEngineSDKAutoConfig.java
index 86c6fef0c59589eda0421555543664df412b4b39..fef45dec64c0f149c35d8364f6d73b11d402440f 100644
--- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/RecEngineSDKAutoConfig.java
+++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/RecEngineSDKAutoConfig.java
@@ -1,12 +1,5 @@
package cn.icanci.rec.engine.sdk;
-import org.springframework.beans.BeansException;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
import cn.icanci.rec.engine.script.RecScriptEngine;
import cn.icanci.rec.engine.script.RecScriptEngineManager;
import cn.icanci.rec.engine.sdk.actuator.RecRuleEngineActuator;
@@ -16,10 +9,16 @@ import cn.icanci.rec.engine.sdk.rule.EngineExecutor;
import cn.icanci.rec.engine.sdk.rule.EngineRepositoryLoader;
import cn.icanci.rec.engine.sdk.rule.RuleAggregationCluster;
import cn.icanci.rec.engine.sdk.rule.impl.EngineRepositoryLoaderImpl;
-import cn.icanci.rec.engine.sdk.rule.impl.RuleAggregationClusterImpl;
-import cn.icanci.rec.engine.sdk.rule.repository.EngineRepository;
+import cn.icanci.rec.engine.sdk.rule.repository.EngineRepositoryHolder;
import cn.icanci.rec.engine.sdk.spi.*;
+import org.springframework.beans.BeansException;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
/**
* @author icanci
* @since 1.0 Created in 2022/11/15 20:34
@@ -68,24 +67,34 @@ public class RecEngineSDKAutoConfig implements ApplicationContextAware {
return RecScriptEngineManager.getRecScriptEngine();
}
- /**
- * 执行引擎
- *
- * @return 返回脚本执行引擎
- */
- @Bean("ruleAggregationCluster")
- public RuleAggregationCluster ruleAggregationCluster(EngineRepository engineRepository, RecScriptEngine engine) {
- return new RuleAggregationClusterImpl(engineRepository, engine);
- }
+// /**
+// * 执行引擎 暂不使用
+// *
+// * @return 返回脚本执行引擎
+// */
+// @Bean("ruleAggregationCluster")
+// public RuleAggregationCluster ruleAggregationCluster(AggregationRepositoryHolder aggregationRepositoryHolder, RecScriptEngine engine) {
+// return new RuleAggregationClusterImpl(aggregationRepositoryHolder, engine);
+// }
+//
+// /**
+// * 执行引擎 暂不使用
+// *
+// * @return 返回脚本执行引擎
+// */
+// @Bean("aggregationRepositoryHolder")
+// public AggregationRepositoryHolder aggregationRepositoryHolder() {
+// return new AggregationRepositoryHolder();
+// }
/**
* 执行引擎
*
* @return 返回脚本执行引擎
*/
- @Bean("engineRepository")
- public EngineRepository engineRepository() {
- return new EngineRepository();
+ @Bean("engineRepositoryHolder")
+ public EngineRepositoryHolder engineRepositoryHolder() {
+ return new EngineRepositoryHolder();
}
// ============================== SPI ==============================
diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/actuator/RuleEngineResponse.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/actuator/RuleEngineResponse.java
index 555eafa1c72f23e6a6340858a7c7b5f04fd4eb44..9815b4d949caea504ec3c413ad6176a8ed564299 100644
--- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/actuator/RuleEngineResponse.java
+++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/actuator/RuleEngineResponse.java
@@ -10,4 +10,7 @@ import java.io.Serializable;
*/
public class RuleEngineResponse implements Serializable {
private static final long serialVersionUID = -4658078915045778725L;
+ private boolean success;
+ private String errorMessage;
+
}
diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/actuator/impl/RecRuleEngineActuatorImpl.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/actuator/impl/RecRuleEngineActuatorImpl.java
index 1e12445beba8116e80e0a154d3c28f5897c6e851..e025011a5c681e3f9293660963e7ebef40425d6e 100644
--- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/actuator/impl/RecRuleEngineActuatorImpl.java
+++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/actuator/impl/RecRuleEngineActuatorImpl.java
@@ -3,8 +3,7 @@ package cn.icanci.rec.engine.sdk.actuator.impl;
import cn.icanci.rec.engine.sdk.actuator.RecRuleEngineActuator;
import cn.icanci.rec.engine.sdk.actuator.RuleEngineRequest;
import cn.icanci.rec.engine.sdk.actuator.RuleEngineResponse;
-import cn.icanci.rec.engine.sdk.rule.repository.EngineRepository;
-import cn.icanci.rec.engine.sdk.rule.runtime.RuleAggregationCompiled;
+import cn.icanci.rec.engine.sdk.rule.EngineExecutor;
import javax.annotation.Resource;
@@ -15,11 +14,10 @@ import javax.annotation.Resource;
public class RecRuleEngineActuatorImpl implements RecRuleEngineActuator {
@Resource
- private EngineRepository engineRepository;
+ private EngineExecutor engineExecutor;
@Override
public RuleEngineResponse executor(RuleEngineRequest request) {
- RuleAggregationCompiled compiled = engineRepository.loadRuleAggregationCompiled(request.getDomainCode(), request.getSceneCode());
- return null;
+ return engineExecutor.execute(request);
}
}
diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/EngineExecutor.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/EngineExecutor.java
index 491f1adc4979c3197570a22e05b41979325be3c7..ad40512c2baf7e1396fbeacc434ee88351ab2d69 100644
--- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/EngineExecutor.java
+++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/EngineExecutor.java
@@ -1,8 +1,9 @@
package cn.icanci.rec.engine.sdk.rule;
+import cn.icanci.rec.common.aggregation.model.StrategyDTO;
import cn.icanci.rec.engine.sdk.actuator.RuleEngineRequest;
import cn.icanci.rec.engine.sdk.actuator.RuleEngineResponse;
-import cn.icanci.rec.engine.sdk.rule.repository.EngineRepository;
+import cn.icanci.rec.engine.sdk.rule.repository.EngineRepositoryHolder;
import javax.annotation.Resource;
@@ -13,9 +14,33 @@ import javax.annotation.Resource;
public final class EngineExecutor {
@Resource
- private EngineRepository engineRepository;
+ private EngineRepositoryHolder holder;
+ /**
+ * 执行入口
+ *
+ * @param request request
+ * @return 返回执行结果
+ */
public RuleEngineResponse execute(RuleEngineRequest request) {
+ // 1.数据基本校验
+ validator(request);
+
+ // 2.获取策略
+ StrategyDTO strategy = holder.getStrategy(request.getDomainCode(), request.getSceneCode());
+ // 3.聚合数据
+
+ // 4.执行
+ // 5.返回执行结果
return null;
}
+
+ /**
+ * 数据基本校验
+ *
+ * @param request request
+ */
+ private void validator(RuleEngineRequest request) {
+
+ }
}
diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/EngineRepositoryLoader.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/EngineRepositoryLoader.java
index b14744d603ad7a5d2b96831feab3bfab3d0ea27f..f201031aa3ff45dcf35c1118bf0a1f1734c45230 100644
--- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/EngineRepositoryLoader.java
+++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/EngineRepositoryLoader.java
@@ -1,9 +1,9 @@
package cn.icanci.rec.engine.sdk.rule;
-import java.util.List;
-
import cn.icanci.rec.common.aggregation.model.*;
+import java.util.List;
+
/**
* @author icanci
* @since 1.0 Created in 2022/11/15 19:16
@@ -56,17 +56,15 @@ public interface EngineRepositoryLoader {
* 加载数据源信息
*
* @param domainCode domainCode
- * @param sceneCode sceneCode
* @return 返回数据源信息
*/
- DataSourceDTO loadDataSource(String domainCode, String sceneCode);
+ List loadDataSource(String domainCode);
/**
* 加载执行策略
*
* @param domainCode domainCode
- * @param sceneCode sceneCode
* @return 返回执行策略
*/
- StrategyDTO loadStrategy(String domainCode, String sceneCode);
+ List loadStrategy(String domainCode);
}
diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/RuleAggregationCluster.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/RuleAggregationCluster.java
index 143b076b2252835479f8e9fad15f64a99d5829a7..751e7ac16f77caea00bc955ef5c4973433ba1bb4 100644
--- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/RuleAggregationCluster.java
+++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/RuleAggregationCluster.java
@@ -4,11 +4,12 @@ import cn.icanci.rec.common.aggregation.RuleAggregation;
import cn.icanci.rec.engine.sdk.rule.runtime.RuleAggregationCompiled;
/**
- * 规则聚合簇
+ * 规则聚合簇,此方法暂不实现
*
* @author icanci
* @since 1.0 Created in 2022/11/15 15:32
*/
+@Deprecated
public interface RuleAggregationCluster {
/**
diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/impl/EngineRepositoryLoaderImpl.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/impl/EngineRepositoryLoaderImpl.java
index a5ecfe9a11a2fdd8026907d3c74639cbca1a1dcd..3b593d5d616d65a667dfff597225a3ce55f2e427 100644
--- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/impl/EngineRepositoryLoaderImpl.java
+++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/impl/EngineRepositoryLoaderImpl.java
@@ -1,19 +1,17 @@
package cn.icanci.rec.engine.sdk.rule.impl;
+import cn.icanci.rec.common.aggregation.model.*;
+import cn.icanci.rec.engine.sdk.rule.EngineRepositoryLoader;
+import cn.icanci.rec.engine.sdk.spi.*;
+
import java.util.List;
-import java.util.Map;
import java.util.Optional;
-import java.util.concurrent.ConcurrentHashMap;
import javax.annotation.Resource;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
-import cn.icanci.rec.common.aggregation.model.*;
-import cn.icanci.rec.engine.sdk.rule.EngineRepositoryLoader;
-import cn.icanci.rec.engine.sdk.spi.*;
-
/**
* @author icanci
* @since 1.0 Created in 2022/11/15 19:28
@@ -22,19 +20,17 @@ import cn.icanci.rec.engine.sdk.spi.*;
public class EngineRepositoryLoaderImpl implements EngineRepositoryLoader {
@Resource
- private DomainSPI domainSPI;
+ private DomainSPI domainSPI;
@Resource
- private SceneSPI sceneSPI;
+ private SceneSPI sceneSPI;
@Resource
- private BaseDataSPI baseDataSPI;
+ private BaseDataSPI baseDataSPI;
@Resource
- private MetadataSPI metadataSPI;
+ private MetadataSPI metadataSPI;
@Resource
- private DataSourceSPI dataSourceSPI;
+ private DataSourceSPI dataSourceSPI;
@Resource
- private StrategySPI strategySPI;
-
- private static final Map DOMAIN_DTO_MAP = new ConcurrentHashMap<>();
+ private StrategySPI strategySPI;
@Override
public DomainDTO loadDomain(String domainCode) {
@@ -64,18 +60,12 @@ public class EngineRepositoryLoaderImpl implements EngineRepositoryLoader {
return metadataSPI.load(domainCode);
}
- @Override
- public DataSourceDTO loadDataSource(String domainCode, String sceneCode) {
- StrategyDTO strategy = loadStrategy(domainCode, sceneCode);
- if (strategy == null || StringUtils.isBlank(strategy.getDataSourceUuid())) {
- return null;
- }
- String dataSourceUuid = strategy.getDataSourceUuid();
- return dataSourceSPI.loadOne(domainCode, dataSourceUuid);
+ @Override public List loadDataSource(String domainCode) {
+ return dataSourceSPI.load(domainCode);
}
@Override
- public StrategyDTO loadStrategy(String domainCode, String sceneCode) {
- return strategySPI.loadOne(domainCode, sceneCode);
+ public List loadStrategy(String domainCode) {
+ return strategySPI.load(domainCode);
}
}
diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/impl/RuleAggregationClusterImpl.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/impl/RuleAggregationClusterImpl.java
index 7e9cb71c5d70a728d1c0283f0784de289671d92a..dd7e42049c395a8aa1328f0593110dfd667daef2 100644
--- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/impl/RuleAggregationClusterImpl.java
+++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/impl/RuleAggregationClusterImpl.java
@@ -1,11 +1,10 @@
package cn.icanci.rec.engine.sdk.rule.impl;
import cn.icanci.rec.common.aggregation.RuleAggregation;
-import cn.icanci.rec.common.aggregation.model.DomainDTO;
import cn.icanci.rec.engine.script.RecScriptEngine;
import cn.icanci.rec.engine.sdk.exception.RuleAggregationException;
import cn.icanci.rec.engine.sdk.rule.RuleAggregationCluster;
-import cn.icanci.rec.engine.sdk.rule.repository.EngineRepository;
+import cn.icanci.rec.engine.sdk.rule.repository.AggregationRepositoryHolder;
import cn.icanci.rec.engine.sdk.rule.runtime.RuleAggregationCompiled;
/**
@@ -15,13 +14,13 @@ import cn.icanci.rec.engine.sdk.rule.runtime.RuleAggregationCompiled;
public class RuleAggregationClusterImpl implements RuleAggregationCluster {
/** 仓储的实现类 */
- private EngineRepository engineRepository;
+ private AggregationRepositoryHolder holder;
/** 编译执行引擎 */
- private RecScriptEngine engine;
+ private RecScriptEngine engine;
- public RuleAggregationClusterImpl(EngineRepository engineRepository, RecScriptEngine engine) {
- this.engineRepository = engineRepository;
+ public RuleAggregationClusterImpl(AggregationRepositoryHolder engineRepositoryHolder, RecScriptEngine engine) {
+ this.holder = engineRepositoryHolder;
this.engine = engine;
}
@@ -29,12 +28,12 @@ public class RuleAggregationClusterImpl implements RuleAggregationCluster {
public RuleAggregation buildAgg(String domainCode, String sceneCode) {
try {
RuleAggregation aggregation = new RuleAggregation();
- aggregation.setDomain(engineRepository.loadDomain(domainCode));
- aggregation.setScenePair(engineRepository.loadScenePair(domainCode, sceneCode));
- aggregation.setBaseDatas(engineRepository.loadBaseDatas(domainCode));
- aggregation.setMetadatas(engineRepository.loadMetadatas(domainCode));
- aggregation.setDataSource(engineRepository.loadDataSource(domainCode, sceneCode));
- aggregation.setStrategy(engineRepository.loadStrategy(domainCode, sceneCode));
+ aggregation.setDomain(holder.loadDomain(domainCode));
+ aggregation.setScenePair(holder.loadScenePair(domainCode, sceneCode));
+ aggregation.setBaseDatas(holder.loadBaseDatas(domainCode));
+ aggregation.setMetadatas(holder.loadMetadatas(domainCode));
+ aggregation.setDataSource(holder.loadDataSource(domainCode, sceneCode));
+ aggregation.setStrategy(holder.loadStrategy(domainCode, sceneCode));
return aggregation;
} catch (Throwable e) {
return null;
@@ -48,8 +47,6 @@ public class RuleAggregationClusterImpl implements RuleAggregationCluster {
if (agg == null) {
throw new RuleAggregationException("Build RuleAggregation by domainCode: " + domainCode + " result is Null! Compilation failed!");
}
- DomainDTO domain = agg.getDomain();
-
return null;
} catch (Throwable e) {
throw new RuleAggregationException(e);
diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/repository/AggregationRepositoryHolder.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/repository/AggregationRepositoryHolder.java
new file mode 100644
index 0000000000000000000000000000000000000000..9466bfbed2fee6ebf093f3f43621b641ce5611d4
--- /dev/null
+++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/repository/AggregationRepositoryHolder.java
@@ -0,0 +1,42 @@
+package cn.icanci.rec.engine.sdk.rule.repository;
+
+import java.util.List;
+
+import cn.icanci.rec.common.aggregation.model.*;
+import cn.icanci.rec.engine.sdk.rule.runtime.RuleAggregationCompiled;
+
+/**
+ * @author icanci
+ * @since 1.0 Created in 2022/11/16 08:51
+ */
+@Deprecated
+public class AggregationRepositoryHolder {
+
+ public DomainDTO loadDomain(String domainCode) {
+ return null;
+ }
+
+ public SceneDTO.ScenePair loadScenePair(String domainCode, String sceneCode) {
+ return null;
+ }
+
+ public List loadBaseDatas(String domainCode) {
+ return null;
+ }
+
+ public List loadMetadatas(String domainCode) {
+ return null;
+ }
+
+ public DataSourceDTO loadDataSource(String domainCode, String sceneCode) {
+ return null;
+ }
+
+ public StrategyDTO loadStrategy(String domainCode, String sceneCode) {
+ return null;
+ }
+
+ public RuleAggregationCompiled loadRuleAggregationCompiled(String domainCode, String sceneCode) {
+ return null;
+ }
+}
diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/repository/DomainSceneKey.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/repository/DomainSceneKey.java
new file mode 100644
index 0000000000000000000000000000000000000000..07f1e993f90fda1ac01325bd02ff6f8d9adcbd89
--- /dev/null
+++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/repository/DomainSceneKey.java
@@ -0,0 +1,54 @@
+package cn.icanci.rec.engine.sdk.rule.repository;
+
+import java.util.Objects;
+import java.util.StringJoiner;
+
+/**
+ * @author icanci
+ * @since 1.0 Created in 2022/11/16 08:35
+ */
+public class DomainSceneKey {
+ private String domainCode;
+ private String sceneCode;
+
+ public DomainSceneKey(String domainCode, String sceneCode) {
+ this.domainCode = domainCode;
+ this.sceneCode = sceneCode;
+ }
+
+ public String getDomainCode() {
+ return domainCode;
+ }
+
+ public void setDomainCode(String domainCode) {
+ this.domainCode = domainCode;
+ }
+
+ public String getSceneCode() {
+ return sceneCode;
+ }
+
+ public void setSceneCode(String sceneCode) {
+ this.sceneCode = sceneCode;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o)
+ return true;
+ if (o == null || getClass() != o.getClass())
+ return false;
+ DomainSceneKey that = (DomainSceneKey) o;
+ return Objects.equals(domainCode, that.domainCode) && Objects.equals(sceneCode, that.sceneCode);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(domainCode, sceneCode);
+ }
+
+ @Override
+ public String toString() {
+ return new StringJoiner(",").add("domainCode=" + domainCode).add("sceneCode=" + sceneCode).toString();
+ }
+}
diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/repository/EngineRepository.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/repository/EngineRepository.java
index 20a5b0f2d074dfb47654c6b608ed4004d64ce0f0..6b0d59ed58d3181d034cf1ceb9555a69c91132d8 100644
--- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/repository/EngineRepository.java
+++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/repository/EngineRepository.java
@@ -1,19 +1,11 @@
package cn.icanci.rec.engine.sdk.rule.repository;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.Resource;
+import cn.icanci.rec.common.aggregation.model.*;
-import org.apache.commons.collections4.CollectionUtils;
+import java.util.Map;
import com.google.common.collect.Maps;
-import cn.icanci.rec.common.aggregation.model.*;
-import cn.icanci.rec.engine.sdk.rule.EngineRepositoryLoader;
-import cn.icanci.rec.engine.sdk.rule.runtime.RuleAggregationCompiled;
-
/**
* EngineRepository Local Cache
*
@@ -21,66 +13,58 @@ import cn.icanci.rec.engine.sdk.rule.runtime.RuleAggregationCompiled;
* @since 1.0 Created in 2022/11/15 22:56
*/
public final class EngineRepository {
- @Resource
- private EngineRepositoryLoader engineRepositoryLoader;
-
- /** 域缓存 */
- private static final Map DOMAIN_MAP = Maps.newConcurrentMap();
-
- /**
- * 刷新仓储
- *
- * @param domainCodes domainCodes
- */
- public void refresh(Set domainCodes) {
- if (CollectionUtils.isEmpty(domainCodes)) {
- return;
- }
- for (String domainCode : domainCodes) {
- refresh(domainCode);
- }
- }
+ /** 域缓存 key:domainCode value:DomainDTO */
+ private DomainDTO domainRepository;
- /**
- * 刷新仓储
- *
- * @param domain domain
- */
- private void refresh(String domain) {
- List scenePairs = engineRepositoryLoader.loadScenePairs(domain);
- if (CollectionUtils.isEmpty(scenePairs)) {
- return;
- }
- // 刷新本地缓存
- // 刷新编译数据
+ /** 基础数据缓存 key:uuid value:BaseDataDTO*/
+ private Map baseDataRepository = Maps.newConcurrentMap();
- }
+ /** 元数据数据缓存 key:uuid value:MetadataDTO */
+ private Map metadataRepository = Maps.newConcurrentMap();
- public DomainDTO loadDomain(String domainCode) {
- return DOMAIN_MAP.get(domainCode);
- }
+ /** 数据源缓存 key:uuid value:MetadataDTO*/
+ private Map dataSourceRepository = Maps.newConcurrentMap();
- public SceneDTO.ScenePair loadScenePair(String domainCode, String sceneCode) {
+ /** 数据源缓存 key:DomainSceneKey value:StrategyDTO*/
+ private Map strategyRepository = Maps.newConcurrentMap();
+ public DomainDTO getDomainRepository() {
+ return domainRepository;
}
- public List loadBaseDatas(String domainCode) {
-
+ public void setDomainRepository(DomainDTO domainRepository) {
+ this.domainRepository = domainRepository;
}
- public List loadMetadatas(String domainCode) {
+ public Map getBaseDataRepository() {
+ return baseDataRepository;
+ }
+ public void setBaseDataRepository(Map baseDataRepository) {
+ this.baseDataRepository = baseDataRepository;
}
- public DataSourceDTO loadDataSource(String domainCode, String sceneCode) {
+ public Map getMetadataRepository() {
+ return metadataRepository;
+ }
+ public void setMetadataRepository(Map metadataRepository) {
+ this.metadataRepository = metadataRepository;
}
- public StrategyDTO loadStrategy(String domainCode, String sceneCode) {
+ public Map getDataSourceRepository() {
+ return dataSourceRepository;
+ }
+ public void setDataSourceRepository(Map dataSourceRepository) {
+ this.dataSourceRepository = dataSourceRepository;
}
- public RuleAggregationCompiled loadRuleAggregationCompiled(String domainCode, String sceneCode) {
+ public Map getStrategyRepository() {
+ return strategyRepository;
+ }
+ public void setStrategyRepository(Map strategyRepository) {
+ this.strategyRepository = strategyRepository;
}
}
diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/repository/EngineRepositoryHolder.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/repository/EngineRepositoryHolder.java
new file mode 100644
index 0000000000000000000000000000000000000000..63da3491d254ff87320ccd2d9c0d485d555fa00d
--- /dev/null
+++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/repository/EngineRepositoryHolder.java
@@ -0,0 +1,201 @@
+package cn.icanci.rec.engine.sdk.rule.repository;
+
+import cn.icanci.rec.common.aggregation.model.*;
+import cn.icanci.rec.common.enums.DataSourceTypeEnum;
+import cn.icanci.rec.common.enums.ScriptTypeEnum;
+import cn.icanci.rec.engine.script.RecScriptEngine;
+import cn.icanci.rec.engine.sdk.rule.EngineRepositoryLoader;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import javax.annotation.Resource;
+import javax.script.CompiledScript;
+
+import org.apache.commons.collections4.CollectionUtils;
+
+import com.google.common.collect.Maps;
+
+/**
+ * @author icanci
+ * @since 1.0 Created in 2022/11/16 08:38
+ */
+public class EngineRepositoryHolder {
+ @Resource
+ private EngineRepositoryLoader engineRepositoryLoader;
+ @Resource
+ private RecScriptEngine recScriptEngine;
+
+ /** 缓存 key:domainCode value:EngineRepository */
+ private static final Map ENGINE_REPOSITORY_CONFIG = Maps.newConcurrentMap();
+
+ /**
+ * 刷新仓储
+ *
+ * @param domainCodes domainCodes
+ */
+ public void refresh(Set domainCodes) {
+ if (CollectionUtils.isEmpty(domainCodes)) {
+ return;
+ }
+ for (String domainCode : domainCodes) {
+ refresh(domainCode);
+ }
+ }
+
+ /**
+ * 刷新仓储
+ *
+ * @param domain domain
+ */
+ private void refresh(String domain) {
+ // 1.先获取场景,如果场景都没有,则不处理
+ List scenePairs = engineRepositoryLoader.loadScenePairs(domain);
+ if (CollectionUtils.isEmpty(scenePairs)) {
+ return;
+ }
+ // 2.新建或者获取域对应的仓储
+ EngineRepository repository = ENGINE_REPOSITORY_CONFIG.putIfAbsent(domain, new EngineRepository());
+
+ // 3.刷新本地缓存
+
+ // 3.1 刷新域信息
+ repository.setDomainRepository(engineRepositoryLoader.loadDomain(domain));
+
+ // 3.2 刷新基础数据信息
+ List baseDatas = engineRepositoryLoader.loadBaseDatas(domain);
+ // 3.2.1 编译执行脚本
+ compileBaseDataScript(baseDatas);
+ // 3.2.2 属性仓储信息
+ Map refreshBaseDatas = baseDatas.stream().collect(Collectors.toMap(BaseDTO::getUuid, baseData -> baseData));
+ repository.getBaseDataRepository().putAll(refreshBaseDatas);
+
+ // 3.3 刷新元数据信息
+ List metadatas = engineRepositoryLoader.loadMetadatas(domain);
+ Map refreshMetadatas = metadatas.stream().collect(Collectors.toMap(BaseDTO::getUuid, metadata -> metadata));
+ repository.getMetadataRepository().putAll(refreshMetadatas);
+
+ // 3.4 刷新数据源信息
+ List dataSources = engineRepositoryLoader.loadDataSource(domain);
+ // 3.4.1 编译执行脚本
+ compileDataSourceScript(dataSources);
+ // 3.4.2 属性仓储信息
+ Map refreshDataSources = dataSources.stream().collect(Collectors.toMap(BaseDTO::getUuid, dataSource -> dataSource));
+ repository.getDataSourceRepository().putAll(refreshDataSources);
+
+ // 3.5 构建策略信息
+ List strategies = engineRepositoryLoader.loadStrategy(domain);
+ Map refreshStrategies = strategies.stream()
+ .collect(Collectors.toMap(x -> new DomainSceneKey(x.getDomainCode(), x.getSceneCode()), dataSource -> dataSource));
+ repository.getStrategyRepository().putAll(refreshStrategies);
+ }
+
+ /**
+ * 编译执行脚本
+ *
+ * @param baseDatas baseDatas
+ */
+ private void compileBaseDataScript(List baseDatas) {
+ if (CollectionUtils.isEmpty(baseDatas)) {
+ return;
+ }
+ for (BaseDataDTO baseData : baseDatas) {
+ CompiledScript compiledScript = recScriptEngine.compile(ScriptTypeEnum.valueOf(baseData.getScriptType()), baseData.getScriptContent());
+ baseData.setCompiledScript(compiledScript);
+ }
+ }
+
+ /**
+ * 编译执行脚本
+ *
+ * @param dataSources dataSources
+ */
+ private void compileDataSourceScript(List dataSources) {
+ if (CollectionUtils.isEmpty(dataSources)) {
+ return;
+ }
+ for (DataSourceDTO dataSource : dataSources) {
+ DataSourceTypeEnum sourceType = DataSourceTypeEnum.valueOf(dataSource.getDataSourceType());
+ if (sourceType == DataSourceTypeEnum.SCRIPT) {
+ DataSourceDTO.ScriptInfo scriptInfo = dataSource.getScriptInfo();
+ scriptInfo.setCompiledScript(recScriptEngine.compile(ScriptTypeEnum.valueOf(scriptInfo.getScriptType()), scriptInfo.getScriptContent()));
+ }
+ }
+ }
+
+ /**
+ * 获取域
+ *
+ * @param domainCode domainCode
+ * @return 返回域
+ */
+ public DomainDTO getDomain(String domainCode) {
+ return Optional //
+ .ofNullable(ENGINE_REPOSITORY_CONFIG.get(domainCode)) //
+ .map(EngineRepository::getDomainRepository) //
+ .orElse(null);
+ }
+
+ /**
+ * 获取基础数据
+ *
+ * @param domainCode domainCode
+ * @param uuid uuid
+ * @return 返回基础数据
+ */
+ public BaseDataDTO getBaseData(String domainCode, String uuid) {
+ return Optional //
+ .ofNullable(ENGINE_REPOSITORY_CONFIG.get(domainCode)) //
+ .map(EngineRepository::getBaseDataRepository) //
+ .orElse(Maps.newHashMap()) //
+ .get(uuid);
+ }
+
+ /**
+ * 获取元数据
+ *
+ * @param domainCode domainCode
+ * @param uuid uuid
+ * @return 返回元数据
+ */
+ public MetadataDTO getMetadata(String domainCode, String uuid) {
+ return Optional //
+ .ofNullable(ENGINE_REPOSITORY_CONFIG.get(domainCode)) //
+ .map(EngineRepository::getMetadataRepository) //
+ .orElse(Maps.newHashMap()) //
+ .get(uuid);
+ }
+
+ /**
+ * 获取数据源
+ *
+ * @param domainCode domainCode
+ * @param uuid uuid
+ * @return 返回数据源
+ */
+ public DataSourceDTO getDataSource(String domainCode, String uuid) {
+ return Optional //
+ .ofNullable(ENGINE_REPOSITORY_CONFIG.get(domainCode)) //
+ .map(EngineRepository::getDataSourceRepository) //
+ .orElse(Maps.newHashMap()) //
+ .get(uuid);
+ }
+
+ /**
+ * 获取策略
+ *
+ * @param domainCode domainCode
+ * @param sceneCode sceneCode
+ * @return 返回策略
+ */
+ public StrategyDTO getStrategy(String domainCode, String sceneCode) {
+ return Optional //
+ .ofNullable(ENGINE_REPOSITORY_CONFIG.get(domainCode)) //
+ .map(EngineRepository::getStrategyRepository) //
+ .orElse(Maps.newHashMap()) //
+ .get(new DomainSceneKey(domainCode, sceneCode));
+ }
+}
diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/spi/DataSourceSPI.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/spi/DataSourceSPI.java
index e102c3884da367eb5a8468cb79359b442be6c149..36209b3707f55c67e265ab1d147d442dbea74243 100644
--- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/spi/DataSourceSPI.java
+++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/spi/DataSourceSPI.java
@@ -9,13 +9,4 @@ import cn.icanci.rec.engine.sdk.extensions.RecSpi;
*/
@RecSpi
public interface DataSourceSPI extends RecSupportSPI {
-
- /**
- * 加载数据
- *
- * @param domain 域
- * @param uuid uuid
- * @return 返回相关的数据
- */
- DataSourceDTO loadOne(String domain,String uuid);
}
diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/spi/StrategySPI.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/spi/StrategySPI.java
index 24011e55b6e00cb34d211d325840876b3ac02cde..91e332c44e9e8c31e5b0994b5e99fb351ca9e2b7 100644
--- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/spi/StrategySPI.java
+++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/spi/StrategySPI.java
@@ -9,13 +9,4 @@ import cn.icanci.rec.engine.sdk.extensions.RecSpi;
*/
@RecSpi
public interface StrategySPI extends RecSupportSPI {
-
- /**
- * 加载数据
- *
- * @param domain 域
- * @param sceneCode sceneCode
- * @return 返回相关的数据
- */
- StrategyDTO loadOne(String domain, String sceneCode);
}
diff --git a/rec-socket/README.md b/rec-socket/README.md
deleted file mode 100644
index 34a02075e2ffd03fe8f4538fde4300892c7a62f3..0000000000000000000000000000000000000000
--- a/rec-socket/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-#### rec-socket
-
-- TODO
\ No newline at end of file
diff --git a/rec-socket/pom.xml b/rec-socket/pom.xml
deleted file mode 100644
index 6c0d71826bd39329b2b09c117bbb45df7a030bcc..0000000000000000000000000000000000000000
--- a/rec-socket/pom.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
- rec-parent
- cn.icanci.rec
- ${revision}
-
- 4.0.0
-
- rec-socket
- pom
-
- rec-socket-client
- rec-socket-server
-
-
-
- 8
- 8
-
-
-
\ No newline at end of file
diff --git a/rec-socket/rec-socket-client/pom.xml b/rec-socket/rec-socket-client/pom.xml
deleted file mode 100644
index 8769c99050b9a4326963e31a684ed6721fa008d3..0000000000000000000000000000000000000000
--- a/rec-socket/rec-socket-client/pom.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
- rec-socket
- cn.icanci.rec
- ${revision}
-
- 4.0.0
-
- rec-socket-client
-
-
- 8
- 8
-
-
-
\ No newline at end of file
diff --git a/rec-socket/rec-socket-server/pom.xml b/rec-socket/rec-socket-server/pom.xml
deleted file mode 100644
index afe11a4bba915ba8d02e1a2e9ba0c6d4f091d3a0..0000000000000000000000000000000000000000
--- a/rec-socket/rec-socket-server/pom.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
- rec-socket
- cn.icanci.rec
- ${revision}
-
- 4.0.0
-
- rec-socket-server
-
-
- 8
- 8
-
-
-
\ No newline at end of file
diff --git a/rec-spi/pom.xml b/rec-spi/pom.xml
index 511f9dd725fda80049b6e09c4d04be7eb6e13afd..90c449f3dc69c9517c02cc8b136f57daab4bbe9b 100644
--- a/rec-spi/pom.xml
+++ b/rec-spi/pom.xml
@@ -5,7 +5,7 @@
rec-parent
cn.icanci.rec
- ${revision}
+ 0.0.0.1-SNAPSHOT
4.0.0
diff --git a/rec-spring-boot-starter/pom.xml b/rec-spring-boot-starter/pom.xml
index 10d2d9c13a9bb9f2298423d71d886eb0f94cd8ec..fd710b8a05de148f64d63ba66fb0c477a1e83d4d 100644
--- a/rec-spring-boot-starter/pom.xml
+++ b/rec-spring-boot-starter/pom.xml
@@ -5,7 +5,7 @@
rec-parent
cn.icanci.rec
- ${revision}
+ 0.0.0.1-SNAPSHOT
4.0.0