From 86832f1a52ce2ff5dfbcac6b753bac14b1de979b Mon Sep 17 00:00:00 2001 From: wangshaoping Date: Mon, 7 Jul 2025 11:37:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E6=A1=86=E6=9E=B6=E5=8F=91?= =?UTF-8?q?=E5=B8=83:=208.2.22=20=20=201)=20=E8=A7=84=E5=88=99=E5=BC=95?= =?UTF-8?q?=E6=93=8E=E4=B8=AD,=20=E5=AF=B9=20java=20=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=E5=BC=95=E6=93=8E=E8=BF=9B=E8=A1=8C=E4=BA=86=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.platform/build.gradle | 10 +- .../app/platform/i18n/messages.properties | 2 +- .../platform/i18n/messages_tw_CN.properties | 2 +- .../platform/i18n/messages_zh_CN.properties | 2 +- .../AutoCompileDeployedModelInitializer.java | 2 +- .../service/ExecutorFactoryService.java | 3 +- .../client/spring/service/LocalLoader.java | 4 +- .../impl/ExecutorFactoryServiceImpl.java | 8 +- io.sc.engine.rule.client/build.gradle | 111 ++++++++++++++++++ .../engine/rule/client/ExecutorBuilder.java | 9 +- .../engine/rule/client/ExecutorFactory.java | 5 +- .../rule/client/local/LocalExecutor.java | 7 +- .../rule/client/remote/RemoteExecutor.java | 8 +- .../rule/client/remote/RemoteLoader.java | 4 +- .../rule/client/runtime/EngineRuntime.java | 6 +- .../runtime/impl/GroovyEngineRuntime.java | 2 +- .../runtime/impl/JavaEngineRuntime.java | 2 +- .../impl/java/JavaEngineServiceImpl.java | 6 +- .../platform/plugins/directories.json | 3 +- .../plugins/exportable-resources.json | 66 +++++++++++ .../io/sc/engine/rule/client/test/Test.java | 8 +- .../io/sc/engine/rule/client/test/Test2.java | 3 +- .../sc/engine/rule/core}/client/Executor.java | 3 +- .../rule/core/client}/ExecutorMode.java | 2 +- .../rule/core/client}/GeneratorType.java | 2 +- .../sc/engine/rule/core}/client/Loader.java | 2 +- .../engine/rule/core/client}/LoaderMode.java | 2 +- .../generator/impl/IndicatorGenerator.java | 40 ++++++- .../core/code/java/template/import_render.tpl | 3 +- .../initializer/UserFunctionInitializer.java | 17 ++- .../service/impl/ResourceServiceImpl.java | 2 +- .../service/impl/TestCaseServiceImpl.java | 2 +- .../plugins/rule-engine-function.json | 2 +- io.sc.platform.app/build.gradle | 2 +- .../platform/core/plugins/item/Directory.java | 7 ++ .../BeforeEnvironmentProcessor.java | 7 ++ io.sc.platform.scheduler.manager/build.gradle | 2 +- .../main/java/io/sc/platform/util/OsUtil.java | 22 ++++ .../util/compiler/file/FileJavaCompiler.java | 65 +++++++--- 39 files changed, 370 insertions(+), 85 deletions(-) create mode 100644 io.sc.engine.rule.client/src/main/resources/META-INF/platform/plugins/exportable-resources.json rename {io.sc.engine.rule.client/src/main/java/io/sc/engine/rule => io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core}/client/Executor.java (93%) rename {io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/enums => io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/client}/ExecutorMode.java (88%) rename {io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/enums => io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/client}/GeneratorType.java (88%) rename {io.sc.engine.rule.client/src/main/java/io/sc/engine/rule => io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core}/client/Loader.java (87%) rename {io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/enums => io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/client}/LoaderMode.java (88%) create mode 100644 io.sc.platform.util/src/main/java/io/sc/platform/util/OsUtil.java diff --git a/app.platform/build.gradle b/app.platform/build.gradle index b9f0b5fe..8d7fb384 100644 --- a/app.platform/build.gradle +++ b/app.platform/build.gradle @@ -16,6 +16,9 @@ dependencies { project(":io.sc.platform.developer"), project(":io.sc.standard"), + // security + project(":io.sc.platform.security.loginform"), + // ai project(":io.sc.platform.ai"), @@ -57,11 +60,8 @@ dependencies { * replace [application.version] in i18n message file */ processResources { - filesMatching('**/messages*.properties') { - println 'replace ${version} in [' + it + ']' - filteringCharset = 'iso8859-1' - filter(org.apache.tools.ant.filters.ReplaceTokens, beginToken: '$version', endToken: '',tokens: [version: '' + project.version]) - } + from 'src/main/resources/**/messages*.properties' + filter(org.apache.tools.ant.filters.ReplaceTokens,tokens: [version: '' + project.version]) doLast{ // 为了能够兼容 eclipse 和 idea 两种开发环境,调整如下: diff --git a/app.platform/src/main/resources/app/platform/i18n/messages.properties b/app.platform/src/main/resources/app/platform/i18n/messages.properties index 5c80c7ce..caaeecb3 100644 --- a/app.platform/src/main/resources/app/platform/i18n/messages.properties +++ b/app.platform/src/main/resources/app/platform/i18n/messages.properties @@ -1,3 +1,3 @@ application.title=Risk Manager Platform -application.version=$version +application.version=@version@ application.copyright=Copyright \u00A9 2019\u20132022 \ No newline at end of file diff --git a/app.platform/src/main/resources/app/platform/i18n/messages_tw_CN.properties b/app.platform/src/main/resources/app/platform/i18n/messages_tw_CN.properties index 1c5d37e3..136cea0e 100644 --- a/app.platform/src/main/resources/app/platform/i18n/messages_tw_CN.properties +++ b/app.platform/src/main/resources/app/platform/i18n/messages_tw_CN.properties @@ -1,3 +1,3 @@ application.title=\u98A8\u96AA\u7BA1\u7406\u5E73\u53F0 -application.version=$version +application.version=@version@ application.copyright=Copyright \u00A9 2019\u20132022 \ No newline at end of file diff --git a/app.platform/src/main/resources/app/platform/i18n/messages_zh_CN.properties b/app.platform/src/main/resources/app/platform/i18n/messages_zh_CN.properties index 0d793ded..9086b5a7 100644 --- a/app.platform/src/main/resources/app/platform/i18n/messages_zh_CN.properties +++ b/app.platform/src/main/resources/app/platform/i18n/messages_zh_CN.properties @@ -1,3 +1,3 @@ application.title=\u98CE\u9669\u7BA1\u7406\u5E73\u53F0 -application.version=$version +application.version=@version@ application.copyright=Copyright \u00A9 2019\u20132022 \ No newline at end of file diff --git a/io.sc.engine.rule.client.spring/src/main/java/io/sc/engine/rule/client/spring/initializer/AutoCompileDeployedModelInitializer.java b/io.sc.engine.rule.client.spring/src/main/java/io/sc/engine/rule/client/spring/initializer/AutoCompileDeployedModelInitializer.java index 15350088..a1f751bc 100644 --- a/io.sc.engine.rule.client.spring/src/main/java/io/sc/engine/rule/client/spring/initializer/AutoCompileDeployedModelInitializer.java +++ b/io.sc.engine.rule.client.spring/src/main/java/io/sc/engine/rule/client/spring/initializer/AutoCompileDeployedModelInitializer.java @@ -1,8 +1,8 @@ package io.sc.engine.rule.client.spring.initializer; -import io.sc.engine.rule.client.Executor; import io.sc.engine.rule.client.spring.service.ExecutorFactoryService; import io.sc.engine.rule.core.ResourceAbstract; +import io.sc.engine.rule.core.client.Executor; import io.sc.engine.rule.core.enums.DeployStatus; import io.sc.platform.core.initializer.ApplicationInitializer; import io.sc.platform.core.initializer.ApplicationInitializerExecuteException; diff --git a/io.sc.engine.rule.client.spring/src/main/java/io/sc/engine/rule/client/spring/service/ExecutorFactoryService.java b/io.sc.engine.rule.client.spring/src/main/java/io/sc/engine/rule/client/spring/service/ExecutorFactoryService.java index b0303ed2..3c75f6e4 100644 --- a/io.sc.engine.rule.client.spring/src/main/java/io/sc/engine/rule/client/spring/service/ExecutorFactoryService.java +++ b/io.sc.engine.rule.client.spring/src/main/java/io/sc/engine/rule/client/spring/service/ExecutorFactoryService.java @@ -1,6 +1,7 @@ package io.sc.engine.rule.client.spring.service; -import io.sc.engine.rule.client.Executor; + +import io.sc.engine.rule.core.client.Executor; /** * Spring 环境中的决策引擎执行器工厂服务类 diff --git a/io.sc.engine.rule.client.spring/src/main/java/io/sc/engine/rule/client/spring/service/LocalLoader.java b/io.sc.engine.rule.client.spring/src/main/java/io/sc/engine/rule/client/spring/service/LocalLoader.java index f27ca78b..aaeaee34 100644 --- a/io.sc.engine.rule.client.spring/src/main/java/io/sc/engine/rule/client/spring/service/LocalLoader.java +++ b/io.sc.engine.rule.client.spring/src/main/java/io/sc/engine/rule/client/spring/service/LocalLoader.java @@ -1,10 +1,10 @@ package io.sc.engine.rule.client.spring.service; -import io.sc.engine.rule.client.Loader; +import io.sc.engine.rule.core.client.Loader; /** * 本地资源定义加载器接口 */ -public interface LocalLoader extends Loader{ +public interface LocalLoader extends Loader { } diff --git a/io.sc.engine.rule.client.spring/src/main/java/io/sc/engine/rule/client/spring/service/impl/ExecutorFactoryServiceImpl.java b/io.sc.engine.rule.client.spring/src/main/java/io/sc/engine/rule/client/spring/service/impl/ExecutorFactoryServiceImpl.java index 8f2de523..5d9b2954 100644 --- a/io.sc.engine.rule.client.spring/src/main/java/io/sc/engine/rule/client/spring/service/impl/ExecutorFactoryServiceImpl.java +++ b/io.sc.engine.rule.client.spring/src/main/java/io/sc/engine/rule/client/spring/service/impl/ExecutorFactoryServiceImpl.java @@ -4,7 +4,10 @@ import java.util.Map; import javax.annotation.PostConstruct; -import io.sc.engine.rule.client.enums.GeneratorType; +import io.sc.engine.rule.core.client.Executor; +import io.sc.engine.rule.core.client.ExecutorMode; +import io.sc.engine.rule.core.client.GeneratorType; +import io.sc.engine.rule.core.client.LoaderMode; import io.sc.engine.rule.core.code.generator.GroovySourceCodeGenerator; import io.sc.engine.rule.core.code.generator.JavaSourceCodeGenerator; import io.sc.platform.core.service.RuntimeService; @@ -14,10 +17,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Service; -import io.sc.engine.rule.client.Executor; import io.sc.engine.rule.client.ExecutorBuilder; -import io.sc.engine.rule.client.enums.ExecutorMode; -import io.sc.engine.rule.client.enums.LoaderMode; import io.sc.engine.rule.client.local.LocalExecutor; import io.sc.engine.rule.client.spring.service.ExecutorFactoryService; import io.sc.engine.rule.client.spring.service.LocalLoader; diff --git a/io.sc.engine.rule.client/build.gradle b/io.sc.engine.rule.client/build.gradle index 63a517a7..e0e26ae9 100644 --- a/io.sc.engine.rule.client/build.gradle +++ b/io.sc.engine.rule.client/build.gradle @@ -1,6 +1,117 @@ dependencies { api( project(":io.sc.engine.rule.core"), + project(":io.sc.platform.util"), project(":io.sc.platform.groovy"), ) } + +/** + * 拷贝依赖工程生成的 jar 包 + * 1. io.sc.engine.rule.core-xxx.jar + * 2. io.sc.platform.util-xxx.jar + */ +tasks.register('copyDependenciesProjectJars') { + dependsOn ':io.sc.engine.rule.core:jar',':io.sc.platform.util:jar',':io.sc.creditreport.core:jar',':io.sc.engine.rule.client.spring:jar' + doLast { + println('copy dependencies project jar ......'); + def targetDir =file('src/main/resources/io/sc/engine/rule/client/jars/').absolutePath; + delete targetDir; + file(targetDir).mkdirs(); + project.getRootProject().subprojects { dependedProject -> + if( dependedProject.name=='io.sc.engine.rule.core' + || dependedProject.name=='io.sc.platform.util' + || dependedProject.name=='io.sc.creditreport.core' + || dependedProject.name=='io.sc.engine.rule.client.spring' + ){ + def dir =dependedProject.getBuildDir().absolutePath + '/libs'; + def source =dir + '/' + dependedProject.name + '-' + dependedProject.version + '.jar'; + if(file(source).exists() && file(source).isFile()){ + copy { + from dir + '/' + dependedProject.name + '-' + dependedProject.version + '.jar' + into targetDir + } + }else{ + println('>>>>>>>>'); + } + } + } + } +} + +/** + * 拷贝依赖第三方 jar 包 + */ +tasks.register('copyRuntimeClasspathJars') { + dependsOn 'copyDependenciesProjectJars' + doLast { + configurations.runtimeClasspath.each(r ->{ + println r + }); + println('copy runtimeClasspath jar ......'); + copy { + from configurations.runtimeClasspath + into 'src/main/resources/io/sc/engine/rule/client/jars' + include( + 'jackson-annotations-*.jar', + 'jackson-core-*.jar', + 'jackson-databind-*.jar', + 'slf4j-api-*.jar', + 'jaxb-api-*.jar' + ) + } + } +} + +/** + * 替换可导出资源插件文件, 更新版本 + */ +tasks.register('replaceExportableResourcesPlugins') { + dependsOn 'copyRuntimeClasspathJars' + doLast { + println('replace exportable-resources.json ......'); + File file =file('src/main/resources/META-INF/platform/plugins/exportable-resources.json'); + String content =file.text; + // replace io.sc.engine.rule.core-xx.xx.xx.jar + java.util.regex.Pattern corePattern =java.util.regex.Pattern.compile('io\\.sc\\.engine\\.rule\\.core-(.*)?\\.jar'); + java.util.regex.Matcher coreMatcher = corePattern.matcher(content); + while (coreMatcher.find()) { + content =content.replace(coreMatcher.group(0),"io.sc.engine.rule.core-" + project.version + ".jar"); + } + // replace io.sc.platform.util-xx.xx.xx.jar + java.util.regex.Pattern utilPattern =java.util.regex.Pattern.compile('io\\.sc\\.platform\\.util-(.*)?\\.jar'); + java.util.regex.Matcher utilMatcher = utilPattern.matcher(content); + while (utilMatcher.find()) { + content =content.replace(utilMatcher.group(0),"io.sc.platform.util-" + project.version + ".jar"); + } + + // replace io.sc.creditreport.core-xx.xx.xx.jar + java.util.regex.Pattern creditreportPattern =java.util.regex.Pattern.compile('io\\.sc\\.creditreport\\.core-(.*)?\\.jar'); + java.util.regex.Matcher creditreportMatcher = creditreportPattern.matcher(content); + while (creditreportMatcher.find()) { + content =content.replace(creditreportMatcher.group(0),"io.sc.creditreport.core-" + project.version + ".jar"); + } + + // replace io.sc.engine.rule.client.spring-xx.xx.xx.jar + java.util.regex.Pattern clientSpringPattern =java.util.regex.Pattern.compile('io\\.sc\\.engine\\.rule\\.client\\.spring-(.*)?\\.jar'); + java.util.regex.Matcher clientSpringMatcher = clientSpringPattern.matcher(content); + while (clientSpringMatcher.find()) { + content =content.replace(clientSpringMatcher.group(0),"io.sc.engine.rule.client.spring-" + project.version + ".jar"); + } + + file.write(content); + } +} + +/** + * 同步项目, + */ +tasks.register('sync') { + dependsOn 'replaceExportableResourcesPlugins' +} + +processResources { + dependsOn sync +} + + diff --git a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/ExecutorBuilder.java b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/ExecutorBuilder.java index e7d50140..c014fad8 100644 --- a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/ExecutorBuilder.java +++ b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/ExecutorBuilder.java @@ -1,13 +1,12 @@ package io.sc.engine.rule.client; -import io.sc.engine.rule.client.enums.ExecutorMode; -import io.sc.engine.rule.client.enums.LoaderMode; -import io.sc.engine.rule.client.enums.GeneratorType; import io.sc.engine.rule.client.local.LocalExecutor; import io.sc.engine.rule.client.remote.RemoteExecutor; import io.sc.engine.rule.client.remote.RemoteLoader; -import io.sc.engine.rule.core.code.generator.GroovySourceCodeGenerator; -import io.sc.engine.rule.core.code.generator.JavaSourceCodeGenerator; +import io.sc.engine.rule.core.client.Executor; +import io.sc.engine.rule.core.client.ExecutorMode; +import io.sc.engine.rule.core.client.GeneratorType; +import io.sc.engine.rule.core.client.LoaderMode; /** * 执行器构建器 diff --git a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/ExecutorFactory.java b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/ExecutorFactory.java index ef7dae2b..1ff463f9 100644 --- a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/ExecutorFactory.java +++ b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/ExecutorFactory.java @@ -1,13 +1,16 @@ package io.sc.engine.rule.client; +import io.sc.engine.rule.core.client.Executor; + import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import java.util.regex.Pattern; /** * 执行器工厂,用于缓存执行器 */ public class ExecutorFactory { - private static Map cache =new ConcurrentHashMap(); + private static Map cache =new ConcurrentHashMap(); /** * 注册执行器 diff --git a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/local/LocalExecutor.java b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/local/LocalExecutor.java index a3b58d6f..3f9cbd37 100644 --- a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/local/LocalExecutor.java +++ b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/local/LocalExecutor.java @@ -1,12 +1,11 @@ package io.sc.engine.rule.client.local; -import io.sc.engine.rule.client.Executor; -import io.sc.engine.rule.client.Loader; -import io.sc.engine.rule.client.enums.GeneratorType; import io.sc.engine.rule.client.runtime.EngineRuntime; import io.sc.engine.rule.core.ExecuteResult; +import io.sc.engine.rule.core.client.Executor; +import io.sc.engine.rule.core.client.GeneratorType; +import io.sc.engine.rule.core.client.Loader; import io.sc.engine.rule.core.code.ExecuteUnit; -import io.sc.engine.rule.core.code.SourceCodeGenerator; import java.util.Map; diff --git a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/remote/RemoteExecutor.java b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/remote/RemoteExecutor.java index ed5dadfe..41323700 100644 --- a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/remote/RemoteExecutor.java +++ b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/remote/RemoteExecutor.java @@ -1,9 +1,9 @@ package io.sc.engine.rule.client.remote; -import io.sc.engine.rule.client.Executor; -import io.sc.engine.rule.client.Loader; -import io.sc.engine.rule.client.enums.GeneratorType; import io.sc.engine.rule.core.ExecuteResult; +import io.sc.engine.rule.core.client.Executor; +import io.sc.engine.rule.core.client.GeneratorType; +import io.sc.engine.rule.core.client.Loader; import io.sc.engine.rule.core.code.SourceCodeGenerator; import io.sc.engine.rule.core.util.HttpRequestUtil; import io.sc.platform.util.ObjectMapperUtil; @@ -13,7 +13,7 @@ import java.util.Map; /** * 远程执行客户端 */ -public class RemoteExecutor implements Executor{ +public class RemoteExecutor implements Executor { private String remoteApiUrl; private Loader loader; diff --git a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/remote/RemoteLoader.java b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/remote/RemoteLoader.java index 4ad4dd46..d29a909c 100644 --- a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/remote/RemoteLoader.java +++ b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/remote/RemoteLoader.java @@ -1,6 +1,6 @@ package io.sc.engine.rule.client.remote; -import io.sc.engine.rule.client.Loader; +import io.sc.engine.rule.core.client.Loader; import io.sc.engine.rule.core.code.ExecuteUnit; import io.sc.engine.rule.core.util.HttpRequestUtil; import io.sc.platform.util.ObjectMapperUtil; @@ -10,7 +10,7 @@ import org.slf4j.LoggerFactory; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -public class RemoteLoader implements Loader{ +public class RemoteLoader implements Loader { private static final Logger log =LoggerFactory.getLogger(RemoteLoader.class); private String remoteApiUrl; private Map cache =new ConcurrentHashMap<>(); diff --git a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/runtime/EngineRuntime.java b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/runtime/EngineRuntime.java index ff414e9d..bc8aef2e 100644 --- a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/runtime/EngineRuntime.java +++ b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/runtime/EngineRuntime.java @@ -1,16 +1,14 @@ package io.sc.engine.rule.client.runtime; -import io.sc.engine.rule.client.Executor; -import io.sc.engine.rule.client.enums.GeneratorType; import io.sc.engine.rule.client.runtime.impl.GroovyEngineRuntime; import io.sc.engine.rule.client.runtime.impl.JavaEngineRuntime; import io.sc.engine.rule.core.ExecuteResult; +import io.sc.engine.rule.core.client.Executor; +import io.sc.engine.rule.core.client.GeneratorType; import io.sc.engine.rule.core.code.ExecuteUnit; import java.util.Map; -import static io.sc.engine.rule.client.enums.GeneratorType.GROOVY; - public abstract class EngineRuntime { public static EngineRuntime getInstance(GeneratorType generatorType) { switch (generatorType){ diff --git a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/runtime/impl/GroovyEngineRuntime.java b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/runtime/impl/GroovyEngineRuntime.java index cae84e15..0353aec8 100644 --- a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/runtime/impl/GroovyEngineRuntime.java +++ b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/runtime/impl/GroovyEngineRuntime.java @@ -1,10 +1,10 @@ package io.sc.engine.rule.client.runtime.impl; -import io.sc.engine.rule.client.Executor; import io.sc.engine.rule.client.runtime.EngineRuntime; import io.sc.engine.rule.client.runtime.impl.groovy.GroovyScriptEngineService; import io.sc.engine.rule.client.runtime.impl.groovy.GroovyScriptEngineServiceImpl; import io.sc.engine.rule.core.ExecuteResult; +import io.sc.engine.rule.core.client.Executor; import io.sc.engine.rule.core.code.*; import io.sc.engine.rule.core.code.generator.GroovySourceCodeGenerator; import io.sc.engine.rule.core.po.lib.Lib; diff --git a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/runtime/impl/JavaEngineRuntime.java b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/runtime/impl/JavaEngineRuntime.java index 5bcc88c1..bd9870ce 100644 --- a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/runtime/impl/JavaEngineRuntime.java +++ b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/runtime/impl/JavaEngineRuntime.java @@ -1,10 +1,10 @@ package io.sc.engine.rule.client.runtime.impl; -import io.sc.engine.rule.client.Executor; import io.sc.engine.rule.client.runtime.EngineRuntime; import io.sc.engine.rule.client.runtime.impl.java.JavaEngineService; import io.sc.engine.rule.client.runtime.impl.java.JavaEngineServiceImpl; import io.sc.engine.rule.core.ExecuteResult; +import io.sc.engine.rule.core.client.Executor; import io.sc.engine.rule.core.code.*; import io.sc.engine.rule.core.code.generator.JavaSourceCodeGenerator; import io.sc.engine.rule.core.po.lib.Lib; diff --git a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/runtime/impl/java/JavaEngineServiceImpl.java b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/runtime/impl/java/JavaEngineServiceImpl.java index 842ce952..89042632 100644 --- a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/runtime/impl/java/JavaEngineServiceImpl.java +++ b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/runtime/impl/java/JavaEngineServiceImpl.java @@ -7,6 +7,7 @@ import io.sc.platform.util.compiler.file.FileJavaCompiler; import io.sc.platform.util.compiler.memory.JavaCompileException; import io.sc.platform.util.compiler.memory.MemoryJavaCompiler; +import java.io.File; import java.io.IOException; import java.lang.reflect.Method; import java.net.MalformedURLException; @@ -18,6 +19,7 @@ import java.util.concurrent.ConcurrentHashMap; public class JavaEngineServiceImpl implements JavaEngineService { private static final String targetDir =DirectoryManager.getInstance().getByName("dir.engine.rule.compiler"); + private static final String classPathDir =DirectoryManager.getInstance().getByName("dir.engine.rule.classpath"); private Map classLoaderMap =new ConcurrentHashMap<>(); @Override @@ -54,8 +56,10 @@ public class JavaEngineServiceImpl implements JavaEngineService { private URLClassLoader compile(SourceCode sourceCode) throws JavaCompileException, IOException { String outputDir =targetDir + "/" + sourceCode.getClassName() + "/"; + FileUtil.deldirs(outputDir); - FileJavaCompiler fileJavaCompiler =new FileJavaCompiler(); + new File(outputDir).mkdirs(); + FileJavaCompiler fileJavaCompiler =new FileJavaCompiler(classPathDir); fileJavaCompiler.compile(sourceCode.getQualifiedClassName(),sourceCode.getSource(),outputDir); return new URLClassLoader(new URL[]{ new URL("file",null,outputDir) }); } diff --git a/io.sc.engine.rule.client/src/main/resources/META-INF/platform/plugins/directories.json b/io.sc.engine.rule.client/src/main/resources/META-INF/platform/plugins/directories.json index db91dfec..39e4e502 100644 --- a/io.sc.engine.rule.client/src/main/resources/META-INF/platform/plugins/directories.json +++ b/io.sc.engine.rule.client/src/main/resources/META-INF/platform/plugins/directories.json @@ -1,3 +1,4 @@ [ - {"name":"dir.engine.rule.compiler","path":"/work/engine/rule/compiler","autoCreate":true} + {"name":"dir.engine.rule.compiler","path":"/work/engine/rule/compiler","autoCreate":true}, + {"name":"dir.engine.rule.classpath","path":"/work/engine/rule/jars","autoCreate":true, "deleteFirst":true} ] diff --git a/io.sc.engine.rule.client/src/main/resources/META-INF/platform/plugins/exportable-resources.json b/io.sc.engine.rule.client/src/main/resources/META-INF/platform/plugins/exportable-resources.json new file mode 100644 index 00000000..ed2f66d5 --- /dev/null +++ b/io.sc.engine.rule.client/src/main/resources/META-INF/platform/plugins/exportable-resources.json @@ -0,0 +1,66 @@ +[ + { + "type" :"file", + "name" :"jackson-annotations-2.13.5.jar", + "description" :"jackson-annotations-2.13.5.jar", + "sources" :["classpath:/io/sc/engine/rule/client/jars/jackson-annotations-2.13.5.jar"], + "target" :"${dir.engine.rule.classpath}/jackson-annotations-2.13.5.jar" + }, + { + "type" :"file", + "name" :"jackson-core-2.13.5.jar", + "description" :"jackson-core-2.13.5.jar", + "sources" :["classpath:/io/sc/engine/rule/client/jars/jackson-core-2.13.5.jar"], + "target" :"${dir.engine.rule.classpath}/jackson-core-2.13.5.jar" + }, + { + "type" :"file", + "name" :"jackson-databind-2.13.5.jar", + "description" :"jackson-databind-2.13.5.jar", + "sources" :["classpath:/io/sc/engine/rule/client/jars/jackson-databind-2.13.5.jar"], + "target" :"${dir.engine.rule.classpath}/jackson-databind-2.13.5.jar" + }, + { + "type" :"file", + "name" :"slf4j-api-1.7.36.jar", + "description" :"slf4j-api-1.7.36.jar", + "sources" :["classpath:/io/sc/engine/rule/client/jars/slf4j-api-1.7.36.jar"], + "target" :"${dir.engine.rule.classpath}/slf4j-api-1.7.36.jar" + }, + { + "type" :"file", + "name" :"io.sc.engine.rule.core-8.2.22.jar", + "description" :"io.sc.engine.rule.core-8.2.22.jar", + "sources" :["classpath:/io/sc/engine/rule/client/jars/io.sc.engine.rule.core-8.2.22.jar"], + "target" :"${dir.engine.rule.classpath}/io.sc.engine.rule.core-8.2.22.jar" + }, + { + "type" :"file", + "name" :"io.sc.platform.util-8.2.22.jar", + "description" :"io.sc.platform.util-8.2.22.jar", + "sources" :["classpath:/io/sc/engine/rule/client/jars/io.sc.platform.util-8.2.22.jar"], + "target" :"${dir.engine.rule.classpath}/io.sc.platform.util-8.2.22.jar" + }, + { + "type" :"file", + "name" :"io.sc.creditreport.core-8.2.22.jar", + "description" :"io.sc.creditreport.core-8.2.22.jar", + "sources" :["classpath:/io/sc/engine/rule/client/jars/io.sc.creditreport.core-8.2.22.jar"], + "target" :"${dir.engine.rule.classpath}/io.sc.creditreport.core-8.2.22.jar" + }, + { + "type" :"file", + "name" :"io.sc.engine.rule.client.spring-8.2.22.jar", + "description" :"io.sc.engine.rule.client.spring-8.2.22.jar", + "sources" :["classpath:/io/sc/engine/rule/client/jars/io.sc.engine.rule.client.spring-8.2.22.jar"], + "target" :"${dir.engine.rule.classpath}/io.sc.engine.rule.client.spring-8.2.22.jar" + }, + + { + "type" :"file", + "name" :"jaxb-api-2.3.1.jar", + "description" :"jaxb-api-2.3.1.jar", + "sources" :["classpath:/io/sc/engine/rule/client/jarsother/jaxb-api-2.3.1.jar"], + "target" :"${dir.engine.rule.classpath}/jaxb-api-2.3.1.jar" + } +] \ No newline at end of file diff --git a/io.sc.engine.rule.client/src/test/java/io/sc/engine/rule/client/test/Test.java b/io.sc.engine.rule.client/src/test/java/io/sc/engine/rule/client/test/Test.java index 1450823a..8d4509a7 100644 --- a/io.sc.engine.rule.client/src/test/java/io/sc/engine/rule/client/test/Test.java +++ b/io.sc.engine.rule.client/src/test/java/io/sc/engine/rule/client/test/Test.java @@ -1,12 +1,12 @@ package io.sc.engine.rule.client.test; -import io.sc.engine.rule.client.Executor; import io.sc.engine.rule.client.ExecutorBuilder; -import io.sc.engine.rule.client.enums.ExecutorMode; -import io.sc.engine.rule.client.enums.LoaderMode; -import io.sc.engine.rule.client.enums.GeneratorType; import io.sc.engine.rule.core.ExecuteResult; import io.sc.engine.rule.core.ParameterResult; +import io.sc.engine.rule.core.client.Executor; +import io.sc.engine.rule.core.client.ExecutorMode; +import io.sc.engine.rule.core.client.GeneratorType; +import io.sc.engine.rule.core.client.LoaderMode; import io.sc.platform.util.TimeMonitor; import java.util.HashMap; diff --git a/io.sc.engine.rule.client/src/test/java/io/sc/engine/rule/client/test/Test2.java b/io.sc.engine.rule.client/src/test/java/io/sc/engine/rule/client/test/Test2.java index b42a1258..3303d61e 100644 --- a/io.sc.engine.rule.client/src/test/java/io/sc/engine/rule/client/test/Test2.java +++ b/io.sc.engine.rule.client/src/test/java/io/sc/engine/rule/client/test/Test2.java @@ -15,6 +15,7 @@ import java.util.Map; public class Test2 { private static final String outputDir ="/Users/wangshaoping/Desktop/class"; + private static final String classPathDir="/Users/wangshaoping/wspsc/workspace/wangshaoping/v8/platform/app.platform/work/engine/rule/jars"; private static final String[] scriptUrls =new String[]{ "/Users/wangshaoping/wspsc/workspace/wangshaoping/v8/platform/io.sc.engine.rule.client/src/test/java/io/sc/engine/rule/generated/M1734935254414_V1.java" }; @@ -27,7 +28,7 @@ public class Test2 { String script = FileUtil.readString(ins); long tm =new Date().getTime(); - FileJavaCompiler fileJavaCompiler =new FileJavaCompiler(); + FileJavaCompiler fileJavaCompiler =new FileJavaCompiler(classPathDir); fileJavaCompiler.compile(className,script,outputDir); System.out.println(new Date().getTime() - tm); diff --git a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/Executor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/client/Executor.java similarity index 93% rename from io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/Executor.java rename to io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/client/Executor.java index 90f1796e..6a0c8b5e 100644 --- a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/Executor.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/client/Executor.java @@ -1,6 +1,5 @@ -package io.sc.engine.rule.client; +package io.sc.engine.rule.core.client; -import io.sc.engine.rule.client.enums.GeneratorType; import io.sc.engine.rule.core.ExecuteResult; import java.util.Map; diff --git a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/enums/ExecutorMode.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/client/ExecutorMode.java similarity index 88% rename from io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/enums/ExecutorMode.java rename to io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/client/ExecutorMode.java index c3a74464..06725153 100644 --- a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/enums/ExecutorMode.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/client/ExecutorMode.java @@ -1,4 +1,4 @@ -package io.sc.engine.rule.client.enums; +package io.sc.engine.rule.core.client; /** * 执行器模式 diff --git a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/enums/GeneratorType.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/client/GeneratorType.java similarity index 88% rename from io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/enums/GeneratorType.java rename to io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/client/GeneratorType.java index 0196447f..1359b3bb 100644 --- a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/enums/GeneratorType.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/client/GeneratorType.java @@ -1,4 +1,4 @@ -package io.sc.engine.rule.client.enums; +package io.sc.engine.rule.core.client; public enum GeneratorType { GROOVY, diff --git a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/Loader.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/client/Loader.java similarity index 87% rename from io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/Loader.java rename to io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/client/Loader.java index 5df2563a..31e7fc21 100644 --- a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/Loader.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/client/Loader.java @@ -1,4 +1,4 @@ -package io.sc.engine.rule.client; +package io.sc.engine.rule.core.client; import io.sc.engine.rule.core.code.ExecuteUnit; diff --git a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/enums/LoaderMode.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/client/LoaderMode.java similarity index 88% rename from io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/enums/LoaderMode.java rename to io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/client/LoaderMode.java index 4800bcf1..6f07b6d6 100644 --- a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/enums/LoaderMode.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/client/LoaderMode.java @@ -1,4 +1,4 @@ -package io.sc.engine.rule.client.enums; +package io.sc.engine.rule.core.client; /** * 模型定义加载器模式 diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/IndicatorGenerator.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/IndicatorGenerator.java index 20e511eb..22504af9 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/IndicatorGenerator.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/IndicatorGenerator.java @@ -12,6 +12,7 @@ import io.sc.engine.rule.core.util.GroovyExpressionReplacer; import io.sc.engine.rule.core.util.IdReplacer; import io.sc.engine.rule.core.util.ValueTypeUtil; import io.sc.platform.util.CollectionUtil; +import io.sc.platform.util.ObjectMapperUtil; import io.sc.platform.util.StringUtil; import org.springframework.util.StringUtils; @@ -45,9 +46,15 @@ public class IndicatorGenerator { } else { //非列表 if (ValueTypeUtil.isBase(valueType)) { // 基本类型 if (ValueTypeUtil.isString(valueType)) { // 字符串 - String tpl ="String ${fieldName} =\"\"\"${defaultValue}\"\"\"; //${name}"; + String tpl ="String ${fieldName} =\"${defaultValue}\"; //${name}"; sb.append(StringUtil.format(tpl,variables)).append("\n"); - } else { // 非字符串 + }else if (ValueTypeUtil.isLong(valueType)) { // 字符串 + String tpl ="Long ${fieldName} =Long.valueOf(${defaultValue}); //${name}"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else if (ValueTypeUtil.isDecimal(valueType)) { // 字符串 + String tpl ="Double ${fieldName} =new Double(${defaultValue}); //${name}"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else { // 非字符串 variables.put("className", IdReplacer.className(valueType, valueTypeVersion)); String tpl = "${className} ${fieldName} =${defaultValue}; //${name}"; sb.append(StringUtil.format(tpl, variables)).append("\n"); @@ -66,8 +73,16 @@ public class IndicatorGenerator { }else { variables.put("className", IdReplacer.className(valueType, valueTypeVersion)); if (ValueTypeUtil.isBase(valueType)) { // 基本类型 - String tpl = "${className} ${fieldName}; //${name}"; - sb.append(StringUtil.format(tpl, variables)).append("\n"); + if(ValueTypeUtil.isLong(valueType)){ + String tpl = "Long ${fieldName}; //${name}"; + sb.append(StringUtil.format(tpl, variables)).append("\n"); + }else if(ValueTypeUtil.isDecimal(valueType)){ + String tpl = "Double ${fieldName}; //${name}"; + sb.append(StringUtil.format(tpl, variables)).append("\n"); + }else { + String tpl = "${className} ${fieldName}; //${name}"; + sb.append(StringUtil.format(tpl, variables)).append("\n"); + } } else { String tpl = "${className} ${fieldName} =new ${className}(); //${name}"; sb.append(StringUtil.format(tpl, variables)).append("\n"); @@ -100,8 +115,21 @@ public class IndicatorGenerator { sb.append(StringUtil.format(tpl,variables)); } else { sb.append(StringUtil.format("if (map.get(\"${code}\")!=null) {",variables)); - String tpl =" arg.${fieldName} =TypeConvertor.getValue(map.get(\"${code}\"),${className}.class); } //${name}\n"; - sb.append(StringUtil.format(tpl,variables)); + if(ValueTypeUtil.isBase(valueType)){ + if(ValueTypeUtil.isLong(valueType)){ + String tpl =" arg.${fieldName} =TypeConvertor.getValue(map.get(\"${code}\"),Long.class); } //${name}\n"; + sb.append(StringUtil.format(tpl,variables)); + }else if(ValueTypeUtil.isDecimal(valueType)){ + String tpl =" arg.${fieldName} =TypeConvertor.getValue(map.get(\"${code}\"),Double.class); } //${name}\n"; + sb.append(StringUtil.format(tpl,variables)); + }else { + String tpl =" arg.${fieldName} =TypeConvertor.getValue(map.get(\"${code}\"),${className}.class); } //${name}\n"; + sb.append(StringUtil.format(tpl,variables)); + } + }else{ + String tpl =" arg.${fieldName} =ObjectMapperUtil.json().readValue(map.get(\"${code}\").toString(),${className}.class); } //${name}\n"; + sb.append(StringUtil.format(tpl,variables)); + } } } return sb.toString(); diff --git a/io.sc.engine.rule.core/src/main/resources/io/sc/engine/rule/core/code/java/template/import_render.tpl b/io.sc.engine.rule.core/src/main/resources/io/sc/engine/rule/core/code/java/template/import_render.tpl index bc9e088e..1841f358 100644 --- a/io.sc.engine.rule.core/src/main/resources/io/sc/engine/rule/core/code/java/template/import_render.tpl +++ b/io.sc.engine.rule.core/src/main/resources/io/sc/engine/rule/core/code/java/template/import_render.tpl @@ -1,8 +1,7 @@ #define renderImport() import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.core.type.TypeReference; -import groovy.transform.Canonical; -import io.sc.engine.rule.client.Executor; +import io.sc.engine.rule.core.client.Executor; import io.sc.engine.rule.core.ResourceAbstract; import io.sc.engine.rule.core.RuleSetResult; import io.sc.engine.rule.core.SingleRuleResult; diff --git a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/common/initializer/UserFunctionInitializer.java b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/common/initializer/UserFunctionInitializer.java index 41148b8c..3aad8134 100644 --- a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/common/initializer/UserFunctionInitializer.java +++ b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/common/initializer/UserFunctionInitializer.java @@ -1,9 +1,9 @@ package io.sc.engine.rule.server.common.initializer; -import io.sc.engine.rule.server.function.entity.FunctionEntity; -import io.sc.engine.rule.server.function.service.FunctionService; import io.sc.engine.rule.server.common.plugins.PluginManager; import io.sc.engine.rule.server.common.plugins.item.FunctionItem; +import io.sc.engine.rule.server.function.entity.FunctionEntity; +import io.sc.engine.rule.server.function.service.FunctionService; import io.sc.platform.core.initializer.ApplicationInitializer; import io.sc.platform.core.initializer.ApplicationInitializerExecuteException; import org.slf4j.Logger; @@ -11,9 +11,7 @@ import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationContext; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; public class UserFunctionInitializer implements ApplicationInitializer{ private static final Logger log =LoggerFactory.getLogger(UserFunctionInitializer.class); @@ -36,6 +34,13 @@ public class UserFunctionInitializer implements ApplicationInitializer{ if(isInitialized!=null) { return isInitialized; } + if(functionService.getRepository().count()<=0){ + isInitialized =false; + }else{ + isInitialized =true; + } + return isInitialized; + /* // 插件定义的函数 List functionItems =PluginManager.getInstance().getFunctionItemEntries(); Map cache =new HashMap<>(); @@ -77,12 +82,14 @@ public class UserFunctionInitializer implements ApplicationInitializer{ isInitialized = true; } return isInitialized; + */ } @Override public void execute() throws ApplicationInitializerExecuteException { try { - for(FunctionItem item : this.needAddedFunctions){ + List functionItems = PluginManager.getInstance().getFunctionItemEntries(); + for(FunctionItem item : functionItems){ FunctionEntity entity =new FunctionEntity(); entity.setEnable(item.getEnable()); entity.setName(item.getName()); diff --git a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/resource/service/impl/ResourceServiceImpl.java b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/resource/service/impl/ResourceServiceImpl.java index e6503310..4cc43139 100644 --- a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/resource/service/impl/ResourceServiceImpl.java +++ b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/resource/service/impl/ResourceServiceImpl.java @@ -2,9 +2,9 @@ package io.sc.engine.rule.server.resource.service.impl; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; -import io.sc.engine.rule.client.enums.GeneratorType; import io.sc.engine.rule.client.spring.service.ExecutorFactoryService; import io.sc.engine.rule.core.ResourceAbstract; +import io.sc.engine.rule.core.client.GeneratorType; import io.sc.engine.rule.core.code.*; import io.sc.engine.rule.core.code.generator.GroovySourceCodeGenerator; import io.sc.engine.rule.core.code.generator.JavaSourceCodeGenerator; diff --git a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/testcase/service/impl/TestCaseServiceImpl.java b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/testcase/service/impl/TestCaseServiceImpl.java index 46d540b7..838692b4 100644 --- a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/testcase/service/impl/TestCaseServiceImpl.java +++ b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/testcase/service/impl/TestCaseServiceImpl.java @@ -1,10 +1,10 @@ package io.sc.engine.rule.server.testcase.service.impl; -import io.sc.engine.rule.client.Executor; import io.sc.engine.rule.client.runtime.impl.groovy.GroovyScriptEngineService; import io.sc.engine.rule.client.runtime.impl.groovy.GroovyScriptEngineServiceImpl; import io.sc.engine.rule.client.spring.service.ExecutorFactoryService; import io.sc.engine.rule.core.*; +import io.sc.engine.rule.core.client.Executor; import io.sc.engine.rule.core.code.ExecuteUnit; import io.sc.engine.rule.core.code.ExecuteUnit4Resource; import io.sc.engine.rule.core.code.SourceCode; diff --git a/io.sc.engine.rule.server/src/main/resources/META-INF/platform/plugins/rule-engine-function.json b/io.sc.engine.rule.server/src/main/resources/META-INF/platform/plugins/rule-engine-function.json index 291c317b..15c5faa2 100644 --- a/io.sc.engine.rule.server/src/main/resources/META-INF/platform/plugins/rule-engine-function.json +++ b/io.sc.engine.rule.server/src/main/resources/META-INF/platform/plugins/rule-engine-function.json @@ -5,6 +5,6 @@ "description" : "特殊除法, a 除以 b, 用于处理分母为零", "enable" : true, "mathXml" : "\n\n UDF.DIV\n (\n \n a\n \n ,\n \n b\n \n )\n\n", - "body" : "def static DIV(Double a, Double b){\n if(b==0){\n if(a>0){\n return 999;\n }else if(a<0){\n return -999;\n }else{\n return 0;\n }\n }\n}" + "body" : "static Double DIV(Double a, Double b){\n if(b==0){\n if(a>0){\n return 999d;\n }else if(a<0){\n return -999d;\n }else{\n return 0d;\n }\n }\n return a/b;\n}" } ] \ No newline at end of file diff --git a/io.sc.platform.app/build.gradle b/io.sc.platform.app/build.gradle index 319f3b63..20c468ac 100644 --- a/io.sc.platform.app/build.gradle +++ b/io.sc.platform.app/build.gradle @@ -10,7 +10,7 @@ dependencies { project(":io.sc.platform.lcdp"), project(":io.sc.platform.orm.mybatis"), project(":io.sc.platform.poi"), - project(":io.sc.platform.security.loginform"), + project(":io.sc.platform.security"), project(":io.sc.platform.system"), project(":io.sc.platform.ws.cxf"), project(":io.sc.webjars"), diff --git a/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/item/Directory.java b/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/item/Directory.java index 719cc1a6..55707cb2 100644 --- a/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/item/Directory.java +++ b/io.sc.platform.core/src/main/java/io/sc/platform/core/plugins/item/Directory.java @@ -7,6 +7,7 @@ public class Directory { private String name; //名称 private String path; //目录路径 private boolean autoCreate =true; //是否自动创建(如果目录不存在) + private boolean deleteFirst =false; //是否首先删除(如果目录存在) //附加属性 private String configurationFileUrl; //菜单贡献项配置文件位置 @@ -29,6 +30,12 @@ public class Directory { public void setAutoCreate(boolean autoCreate) { this.autoCreate = autoCreate; } + public boolean isDeleteFirst() { + return deleteFirst; + } + public void setDeleteFirst(boolean deleteFirst) { + this.deleteFirst = deleteFirst; + } public String getConfigurationFileUrl() { return configurationFileUrl; } diff --git a/io.sc.platform.core/src/main/java/io/sc/platform/core/springboot/BeforeEnvironmentProcessor.java b/io.sc.platform.core/src/main/java/io/sc/platform/core/springboot/BeforeEnvironmentProcessor.java index 22f55e23..8e032390 100644 --- a/io.sc.platform.core/src/main/java/io/sc/platform/core/springboot/BeforeEnvironmentProcessor.java +++ b/io.sc.platform.core/src/main/java/io/sc/platform/core/springboot/BeforeEnvironmentProcessor.java @@ -85,6 +85,13 @@ public class BeforeEnvironmentProcessor implements EnvironmentPostProcessor, Ord String path =applicationHomeDir + directory.getPath(); platformProperties.put(directory.getName(), path); File dir =new File(path); + if(dir.exists() && dir.isDirectory() && directory.isDeleteFirst()){ + try{ + FileUtil.deldirs(dir); + } catch (IOException e) { + e.printStackTrace(); + } + } if(!dir.isDirectory() || !dir.exists()){ dir.mkdirs(); } diff --git a/io.sc.platform.scheduler.manager/build.gradle b/io.sc.platform.scheduler.manager/build.gradle index 63225026..27fe552b 100644 --- a/io.sc.platform.scheduler.manager/build.gradle +++ b/io.sc.platform.scheduler.manager/build.gradle @@ -5,7 +5,7 @@ dependencies { project(":io.sc.platform.core"), project(":io.sc.platform.orm"), project(":io.sc.platform.mvc"), - project(":io.sc.platform.security.loginform"), + project(":io.sc.platform.security"), project(":io.sc.platform.system"), project(":io.sc.platform.jdbc.liquibase"), project(":io.sc.platform.jdbc.schemacrawler"), diff --git a/io.sc.platform.util/src/main/java/io/sc/platform/util/OsUtil.java b/io.sc.platform.util/src/main/java/io/sc/platform/util/OsUtil.java new file mode 100644 index 00000000..3a73f27b --- /dev/null +++ b/io.sc.platform.util/src/main/java/io/sc/platform/util/OsUtil.java @@ -0,0 +1,22 @@ +package io.sc.platform.util; + +public class OsUtil { + public static boolean isWindows(){ + String osName = getOsName(); + return osName != null && osName.startsWith("Windows"); + } + + public static boolean isMacOs() { + String osName = getOsName(); + return osName != null && osName.startsWith("Mac"); + } + + public static boolean isLinux() { + String osName = getOsName(); + return (osName != null && osName.startsWith("Linux")) || (!isWindows() && !isMacOs()); + } + + public static String getOsName() { + return System.getProperty("os.name"); + } +} diff --git a/io.sc.platform.util/src/main/java/io/sc/platform/util/compiler/file/FileJavaCompiler.java b/io.sc.platform.util/src/main/java/io/sc/platform/util/compiler/file/FileJavaCompiler.java index 3c938a1c..4decff68 100644 --- a/io.sc.platform.util/src/main/java/io/sc/platform/util/compiler/file/FileJavaCompiler.java +++ b/io.sc.platform.util/src/main/java/io/sc/platform/util/compiler/file/FileJavaCompiler.java @@ -1,37 +1,70 @@ package io.sc.platform.util.compiler.file; +import io.sc.platform.util.OsUtil; import io.sc.platform.util.compiler.memory.JavaCompileException; -import io.sc.platform.util.compiler.memory.MemoryJavaFileObject; +import org.springframework.util.StringUtils; import javax.tools.*; import java.io.File; -import java.util.Arrays; +import java.util.ArrayList; import java.util.List; public class FileJavaCompiler { private javax.tools.JavaCompiler compiler; private StandardJavaFileManager standardFileManager; + private String classpathJarFileDir; - public FileJavaCompiler() { + public FileJavaCompiler(String classpathJarFileDir) { this.compiler = ToolProvider.getSystemJavaCompiler(); this.standardFileManager = compiler.getStandardFileManager(null, null, null); + this.classpathJarFileDir =classpathJarFileDir; } public void compile(String className, String sourceCode,String targetDir) throws JavaCompileException { DiagnosticCollector diagnostics = new DiagnosticCollector<>(); - JavaCompiler.CompilationTask task = compiler.getTask( - null, - standardFileManager, - diagnostics, - Arrays.asList("-d", targetDir), - null, - Arrays.asList(new StringJavaFileObject(className,sourceCode)) - ); - Boolean result = task.call(); - if (result == null || !result.booleanValue()) { - StringBuilder sb =new StringBuilder(); - diagnostics.getDiagnostics().forEach(d -> sb.append(String.valueOf(d))); - throw new JavaCompileException(sb.toString()); + + String classpath =getClassPath(); + // 编译选项 + List options =new ArrayList<>(); + options.add("-d"); + options.add(targetDir); + if(StringUtils.hasText(classpath)){ + options.add("-cp"); + options.add(classpath); + } + // 编译部件 + List units =new ArrayList<>(); + units.add(new StringJavaFileObject(className,sourceCode)); + + JavaCompiler.CompilationTask task = compiler.getTask(null,standardFileManager,diagnostics,options,null,units); + try { + Boolean result = task.call(); + if (!result) { + StringBuilder sb = new StringBuilder(); + diagnostics.getDiagnostics().forEach(d -> sb.append(String.valueOf(d))); + throw new JavaCompileException(sb.toString()); + } + } catch (Exception e) { + throw new JavaCompileException(e); + } + } + + private String getClassPath(){ + File dir =new File(classpathJarFileDir); + if(dir.exists() && dir.isDirectory()) { + File[] jars = dir.listFiles(); + if(jars!=null && jars.length>0) { + List paths =new ArrayList<>(jars.length); + for(File jar : jars){ + paths.add(jar.getAbsolutePath()); + } + if(OsUtil.isWindows()) { + return String.join(";", paths); + }else{ + return String.join(":", paths); + } + } } + return null; } }