diff --git a/jar-enginex-runner/.gitignore b/jar-enginex-runner/.gitignore
new file mode 100644
index 0000000..cf60db2
--- /dev/null
+++ b/jar-enginex-runner/.gitignore
@@ -0,0 +1,34 @@
+HELP.md
+target/
+logs/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
diff --git a/jar-enginex-runner/README.md b/jar-enginex-runner/README.md
new file mode 100644
index 0000000..68556ce
--- /dev/null
+++ b/jar-enginex-runner/README.md
@@ -0,0 +1,3 @@
+# jar-enginex-runner
+
+enginex后端执行器
\ No newline at end of file
diff --git a/jar-enginex-runner/lib/javax.ejb.jar b/jar-enginex-runner/lib/javax.ejb.jar
new file mode 100644
index 0000000..4ebf5ec
Binary files /dev/null and b/jar-enginex-runner/lib/javax.ejb.jar differ
diff --git a/jar-enginex-runner/lib/javax.jms.jar b/jar-enginex-runner/lib/javax.jms.jar
new file mode 100644
index 0000000..d31451a
Binary files /dev/null and b/jar-enginex-runner/lib/javax.jms.jar differ
diff --git a/jar-enginex-runner/lib/javax.persistence.jar b/jar-enginex-runner/lib/javax.persistence.jar
new file mode 100644
index 0000000..21d80e0
Binary files /dev/null and b/jar-enginex-runner/lib/javax.persistence.jar differ
diff --git a/jar-enginex-runner/lib/javax.resource.jar b/jar-enginex-runner/lib/javax.resource.jar
new file mode 100644
index 0000000..696a234
Binary files /dev/null and b/jar-enginex-runner/lib/javax.resource.jar differ
diff --git a/jar-enginex-runner/lib/javax.servlet.jsp.jar b/jar-enginex-runner/lib/javax.servlet.jsp.jar
new file mode 100644
index 0000000..9c0631c
Binary files /dev/null and b/jar-enginex-runner/lib/javax.servlet.jsp.jar differ
diff --git a/jar-enginex-runner/lib/javax.servlet.jsp.jstl.jar b/jar-enginex-runner/lib/javax.servlet.jsp.jstl.jar
new file mode 100644
index 0000000..7be17cc
Binary files /dev/null and b/jar-enginex-runner/lib/javax.servlet.jsp.jstl.jar differ
diff --git a/jar-enginex-runner/lib/javax.transaction.jar b/jar-enginex-runner/lib/javax.transaction.jar
new file mode 100644
index 0000000..729c695
Binary files /dev/null and b/jar-enginex-runner/lib/javax.transaction.jar differ
diff --git a/jar-enginex-runner/mvnw b/jar-enginex-runner/mvnw
new file mode 100644
index 0000000..a16b543
--- /dev/null
+++ b/jar-enginex-runner/mvnw
@@ -0,0 +1,310 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Maven Start Up Batch script
+#
+# Required ENV vars:
+# ------------------
+# JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+# M2_HOME - location of maven2's installed home dir
+# MAVEN_OPTS - parameters passed to the Java VM when running Maven
+# e.g. to debug Maven itself, use
+# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ] ; then
+
+ if [ -f /etc/mavenrc ] ; then
+ . /etc/mavenrc
+ fi
+
+ if [ -f "$HOME/.mavenrc" ] ; then
+ . "$HOME/.mavenrc"
+ fi
+
+fi
+
+# OS specific support. $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+mingw=false
+case "`uname`" in
+ CYGWIN*) cygwin=true ;;
+ MINGW*) mingw=true;;
+ Darwin*) darwin=true
+ # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
+ # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
+ if [ -z "$JAVA_HOME" ]; then
+ if [ -x "/usr/libexec/java_home" ]; then
+ export JAVA_HOME="`/usr/libexec/java_home`"
+ else
+ export JAVA_HOME="/Library/Java/Home"
+ fi
+ fi
+ ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+ if [ -r /etc/gentoo-release ] ; then
+ JAVA_HOME=`java-config --jre-home`
+ fi
+fi
+
+if [ -z "$M2_HOME" ] ; then
+ ## resolve links - $0 may be a link to maven's home
+ PRG="$0"
+
+ # need this for relative symlinks
+ while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG="`dirname "$PRG"`/$link"
+ fi
+ done
+
+ saveddir=`pwd`
+
+ M2_HOME=`dirname "$PRG"`/..
+
+ # make it fully qualified
+ M2_HOME=`cd "$M2_HOME" && pwd`
+
+ cd "$saveddir"
+ # echo Using m2 at $M2_HOME
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+ [ -n "$M2_HOME" ] &&
+ M2_HOME=`cygpath --unix "$M2_HOME"`
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+ [ -n "$CLASSPATH" ] &&
+ CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+fi
+
+# For Mingw, ensure paths are in UNIX format before anything is touched
+if $mingw ; then
+ [ -n "$M2_HOME" ] &&
+ M2_HOME="`(cd "$M2_HOME"; pwd)`"
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+ javaExecutable="`which javac`"
+ if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
+ # readlink(1) is not available as standard on Solaris 10.
+ readLink=`which readlink`
+ if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
+ if $darwin ; then
+ javaHome="`dirname \"$javaExecutable\"`"
+ javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
+ else
+ javaExecutable="`readlink -f \"$javaExecutable\"`"
+ fi
+ javaHome="`dirname \"$javaExecutable\"`"
+ javaHome=`expr "$javaHome" : '\(.*\)/bin'`
+ JAVA_HOME="$javaHome"
+ export JAVA_HOME
+ fi
+ fi
+fi
+
+if [ -z "$JAVACMD" ] ; then
+ if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ else
+ JAVACMD="`which java`"
+ fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+ echo "Error: JAVA_HOME is not defined correctly." >&2
+ echo " We cannot execute $JAVACMD" >&2
+ exit 1
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+ echo "Warning: JAVA_HOME environment variable is not set."
+fi
+
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+
+ if [ -z "$1" ]
+ then
+ echo "Path not specified to find_maven_basedir"
+ return 1
+ fi
+
+ basedir="$1"
+ wdir="$1"
+ while [ "$wdir" != '/' ] ; do
+ if [ -d "$wdir"/.mvn ] ; then
+ basedir=$wdir
+ break
+ fi
+ # workaround for JBEAP-8937 (on Solaris 10/Sparc)
+ if [ -d "${wdir}" ]; then
+ wdir=`cd "$wdir/.."; pwd`
+ fi
+ # end of workaround
+ done
+ echo "${basedir}"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+ if [ -f "$1" ]; then
+ echo "$(tr -s '\n' ' ' < "$1")"
+ fi
+}
+
+BASE_DIR=`find_maven_basedir "$(pwd)"`
+if [ -z "$BASE_DIR" ]; then
+ exit 1;
+fi
+
+##########################################################################################
+# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+# This allows using the maven wrapper in projects that prohibit checking in binary data.
+##########################################################################################
+if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Found .mvn/wrapper/maven-wrapper.jar"
+ fi
+else
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
+ fi
+ if [ -n "$MVNW_REPOURL" ]; then
+ jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+ else
+ jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+ fi
+ while IFS="=" read key value; do
+ case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
+ esac
+ done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Downloading from: $jarUrl"
+ fi
+ wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
+ if $cygwin; then
+ wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
+ fi
+
+ if command -v wget > /dev/null; then
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Found wget ... using wget"
+ fi
+ if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+ wget "$jarUrl" -O "$wrapperJarPath"
+ else
+ wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
+ fi
+ elif command -v curl > /dev/null; then
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Found curl ... using curl"
+ fi
+ if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+ curl -o "$wrapperJarPath" "$jarUrl" -f
+ else
+ curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
+ fi
+
+ else
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Falling back to using Java to download"
+ fi
+ javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
+ # For Cygwin, switch paths to Windows format before running javac
+ if $cygwin; then
+ javaClass=`cygpath --path --windows "$javaClass"`
+ fi
+ if [ -e "$javaClass" ]; then
+ if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo " - Compiling MavenWrapperDownloader.java ..."
+ fi
+ # Compiling the Java class
+ ("$JAVA_HOME/bin/javac" "$javaClass")
+ fi
+ if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+ # Running the downloader
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo " - Running MavenWrapperDownloader.java ..."
+ fi
+ ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
+ fi
+ fi
+ fi
+fi
+##########################################################################################
+# End of extension
+##########################################################################################
+
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
+if [ "$MVNW_VERBOSE" = true ]; then
+ echo $MAVEN_PROJECTBASEDIR
+fi
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+ [ -n "$M2_HOME" ] &&
+ M2_HOME=`cygpath --path --windows "$M2_HOME"`
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+ [ -n "$CLASSPATH" ] &&
+ CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+ [ -n "$MAVEN_PROJECTBASEDIR" ] &&
+ MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
+fi
+
+# Provide a "standardized" way to retrieve the CLI args that will
+# work with both Windows and non-Windows executions.
+MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
+export MAVEN_CMD_LINE_ARGS
+
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+exec "$JAVACMD" \
+ $MAVEN_OPTS \
+ -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+ "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+ ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
diff --git a/jar-enginex-runner/mvnw.cmd b/jar-enginex-runner/mvnw.cmd
new file mode 100644
index 0000000..c8d4337
--- /dev/null
+++ b/jar-enginex-runner/mvnw.cmd
@@ -0,0 +1,182 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements. See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership. The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License. You may obtain a copy of the License at
+@REM
+@REM https://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied. See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Maven Start Up Batch script
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@REM M2_HOME - location of maven2's installed home dir
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM set title of command window
+title %0
+@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
+if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+echo Error: JAVA_HOME not found in your environment. >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto init
+
+echo.
+echo Error: JAVA_HOME is set to an invalid directory. >&2
+echo JAVA_HOME = "%JAVA_HOME%" >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+@REM ==== END VALIDATION ====
+
+:init
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+
+FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+ IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
+)
+
+@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
+if exist %WRAPPER_JAR% (
+ if "%MVNW_VERBOSE%" == "true" (
+ echo Found %WRAPPER_JAR%
+ )
+) else (
+ if not "%MVNW_REPOURL%" == "" (
+ SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+ )
+ if "%MVNW_VERBOSE%" == "true" (
+ echo Couldn't find %WRAPPER_JAR%, downloading it ...
+ echo Downloading from: %DOWNLOAD_URL%
+ )
+
+ powershell -Command "&{"^
+ "$webclient = new-object System.Net.WebClient;"^
+ "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
+ "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
+ "}"^
+ "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
+ "}"
+ if "%MVNW_VERBOSE%" == "true" (
+ echo Finished downloading %WRAPPER_JAR%
+ )
+)
+@REM End of extension
+
+@REM Provide a "standardized" way to retrieve the CLI args that will
+@REM work with both Windows and non-Windows executions.
+set MAVEN_CMD_LINE_ARGS=%*
+
+%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
+if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%" == "on" pause
+
+if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
+
+exit /B %ERROR_CODE%
diff --git a/jar-enginex-runner/pom.xml b/jar-enginex-runner/pom.xml
new file mode 100644
index 0000000..0e7e184
--- /dev/null
+++ b/jar-enginex-runner/pom.xml
@@ -0,0 +1,311 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.4.2
+
+
+ com.baoying
+ enginex-runner
+ 0.0.1-SNAPSHOT
+ jar-enginex-runner
+ Demo project for Spring Boot
+
+ 1.8
+ 1.2.12
+ 6.4.0.Final
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-logging
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-log4j2
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+ junit
+ junit
+ test
+
+
+
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ 3.3.2
+
+
+
+ mysql
+ mysql-connector-java
+
+
+
+ com.alibaba
+ druid-spring-boot-starter
+ 1.1.21
+
+
+
+ org.codehaus.jackson
+ jackson-mapper-lgpl
+ 1.7.4
+
+
+
+ org.apache.commons
+ commons-lang3
+ 3.1
+
+
+
+ com.alibaba
+ fastjson
+ 1.2.58
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.0
+
+
+
+
+ org.drools
+ drools-core
+ ${drools.version}
+
+
+ org.kie
+ kie-spring
+ ${drools.version}
+
+
+ org.drools
+ drools-compiler
+ ${drools.version}
+
+
+ org.kie
+ kie-api
+ ${drools.version}
+
+
+ org.kie
+ kie-ci
+ ${drools.version}
+
+
+ org.drools
+ knowledge-api
+ 6.4.0.Final
+
+
+ com.itextpdf
+ itextpdf
+ 5.4.3
+
+
+ com.itextpdf
+ itext-asian
+ 5.2.0
+
+
+
+
+
+ com.github.ben-manes.caffeine
+ caffeine
+ 2.8.4
+
+
+
+
+ org.apache.commons
+ commons-pool2
+ 2.0
+
+
+
+
+ redis.clients
+ jedis
+ 2.4.2
+
+
+
+
+
+ commons-httpclient
+ commons-httpclient
+ 3.1
+
+
+
+
+ org.codehaus.groovy
+ groovy-all
+ 2.4.15
+
+
+
+ org.python
+ jython-standalone
+ 2.7.0
+
+
+
+ org.jpmml
+ pmml-evaluator
+ 1.4.1
+
+
+ org.jpmml
+ pmml-evaluator-extension
+ 1.4.1
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-mail
+
+
+
+ com.alibaba
+ transmittable-thread-local
+ 2.2.0
+
+
+
+ jakarta.xml.bind
+ jakarta.xml.bind-api
+ 2.3.3
+ compile
+
+
+
+
+
+ com.spring4all
+ spring-boot-starter-hbase
+ 1.0.0.RELEASE
+
+
+
+ org.apache.hbase
+ hbase-client
+
+
+
+
+
+
+
+ org.apache.hbase
+ hbase-shaded-client
+ 1.3.1
+
+
+
+ com.github.pagehelper
+ pagehelper-spring-boot-starter
+
+ 1.2.3
+
+
+ org.mybatis
+ mybatis
+
+
+ org.mybatis
+ mybatis-spring
+
+
+
+
+
+
+ com.alibaba.otter
+ canal.client
+ 1.1.4
+
+
+ ch.qos.logback
+ logback-core
+
+
+ ch.qos.logback
+ logback-classic
+
+
+
+
+ com.google.protobuf
+ protobuf-java
+ 3.5.1
+
+
+
+ cn.hutool
+ hutool-all
+ 5.5.2
+
+
+
+
+
+
+ src/main/java
+
+
+ **/*.xml
+
+
+
+
+ src/main/resources
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/JarEnginexRunnerApplication.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/JarEnginexRunnerApplication.java
new file mode 100644
index 0000000..75a7d47
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/JarEnginexRunnerApplication.java
@@ -0,0 +1,19 @@
+package com.baoying.enginex.executor;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+@SpringBootApplication
+@EnableTransactionManagement
+@MapperScan("com.baoying.enginex.executor.*.mapper")
+@ComponentScan(basePackages = "com.baoying.enginex.executor.**")
+public class JarEnginexRunnerApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(JarEnginexRunnerApplication.class, args);
+ }
+
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/canal/CacheController.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/canal/CacheController.java
new file mode 100644
index 0000000..4da7c78
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/canal/CacheController.java
@@ -0,0 +1,119 @@
+package com.baoying.enginex.executor.canal;
+
+import com.baoying.enginex.executor.datamanage.mapper.SimpleMapper;
+import com.baoying.enginex.executor.redis.RedisManager;
+import com.baoying.enginex.executor.redis.RedisUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/cache")
+public class CacheController {
+
+ private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+ @Resource
+ private SimpleMapper simpleMapper;
+ @Autowired
+ private RedisManager redisManager;
+
+ @RequestMapping(value = "initCache", method = RequestMethod.GET)
+ public void initCache() {
+ logger.info("===================== 缓存初始化开始 =====================");
+ long start = System.currentTimeMillis();
+ // 遍历表
+ for (TableEnum tableEnum : TableEnum.values()) {
+ String tableName = tableEnum.getTableName();
+ logger.info("===================== 开始初始化缓存表[{}] =====================", tableName);
+
+ String sqlStr = "select * from " + tableName;
+ Map parameterMap = new HashMap<>();
+ parameterMap.put("sqlStr", sqlStr);
+ List> result = simpleMapper.customSelect(parameterMap);
+ // 遍历行
+ for (LinkedHashMap map : result) {
+ row(tableEnum, map);
+ }
+ logger.info("===================== 结束初始化缓存表[{}],共[{}]条数据 =====================", tableName, result.size());
+ }
+ long end = System.currentTimeMillis();
+ logger.info("===================== 缓存初始化成功!!耗时:{}ms =====================", (end - start));
+ }
+
+ private void row(TableEnum tableEnum, LinkedHashMap map) {
+ String tableName = tableEnum.getTableName();
+ String primaryKey = null;
+ String foreignKey = null;
+
+ if (StringUtils.isNotBlank(tableEnum.getPrimaryId())) {
+ String primaryId = map.get(tableEnum.getPrimaryId()).toString();
+ primaryKey = RedisUtils.getPrimaryKey(tableName, primaryId);
+ }
+
+ if (StringUtils.isNotBlank(tableEnum.getForeignId())) {
+ Object obj = map.get(tableEnum.getForeignId());
+ if (obj != null && !"".equals(obj.toString())) {
+ String foreignId = obj.toString();
+ foreignKey = RedisUtils.getForeignKey(tableName, foreignId);
+ }
+ }
+
+ if (StringUtils.isNotBlank(primaryKey)) {
+ // 遍历列
+ for (String field : map.keySet()) {
+ String value = map.get(field) == null ? null : map.get(field).toString();
+ setColumnCache(primaryKey, field, value);
+ }
+ }
+
+ if (StringUtils.isNotBlank(foreignKey)) {
+ setForeignKeyCache(primaryKey, foreignKey);
+ }
+
+ // 指标表特殊处理
+ dealSpecialTable(tableName, map);
+ }
+
+ private void setColumnCache(String primaryKey, String field, String value) {
+ logger.info("开始主键缓存设置, primaryKey:{}, field:{}, value:{}", primaryKey, field, value);
+
+ redisManager.hset(primaryKey, field, value);
+
+ logger.info("结束主键缓存设置, primaryKey:{}, field:{}, value:{}", primaryKey, field, value);
+ }
+
+ private void setForeignKeyCache(String primaryKey, String foreignKey) {
+ logger.info("开始外键缓存设置, primaryKey:{}, foreignKey:{}", primaryKey, foreignKey);
+
+ redisManager.sadd(foreignKey, primaryKey);
+
+ logger.info("结束外键缓存设置, primaryKey:{}, foreignKey:{}", primaryKey, foreignKey);
+ }
+
+ private void dealSpecialTable(String tableName, LinkedHashMap map) {
+ if(tableName.equals(TableEnum.T_FIELD.getTableName())){
+ String fieldEn = "field_en:" + map.get("organ_id") + ":" + map.get("field_en");
+ String fieldEnKey = RedisUtils.getPrimaryKey(tableName, fieldEn);
+
+ String fieldCn = "field_cn:" + map.get("organ_id") + ":" + map.get("field_cn");
+ String fieldCnKey = RedisUtils.getPrimaryKey(tableName, fieldCn);
+
+ for (String field : map.keySet()) {
+ String value = map.get(field) == null ? null : map.get(field).toString();
+ setColumnCache(fieldEnKey, field, value);
+ setColumnCache(fieldCnKey, field, value);
+ }
+ }
+ }
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/canal/CanalClient.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/canal/CanalClient.java
new file mode 100644
index 0000000..cdbb23d
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/canal/CanalClient.java
@@ -0,0 +1,246 @@
+package com.baoying.enginex.executor.canal;
+
+import com.alibaba.otter.canal.client.CanalConnector;
+import com.alibaba.otter.canal.client.CanalConnectors;
+import com.alibaba.otter.canal.protocol.CanalEntry;
+import com.alibaba.otter.canal.protocol.Message;
+import com.baoying.enginex.executor.common.constants.Constants;
+import com.baoying.enginex.executor.config.ConfigHolder;
+import com.baoying.enginex.executor.redis.RedisManager;
+import com.baoying.enginex.executor.redis.RedisUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.stereotype.Component;
+
+import java.net.InetSocketAddress;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * Canal数据同步
+ * 实现ApplicationRunner接口,springboot启动成功后会执行run方法
+ */
+@Component
+public class CanalClient implements ApplicationRunner {
+
+ private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+ private final static int BATCH_SIZE = 1000;
+ @Autowired
+ private ConfigHolder configHolder;
+ @Autowired
+ private RedisManager redisManager;
+
+ @Override
+ public void run(ApplicationArguments args) throws Exception {
+ if(Constants.switchFlag.OFF.equals(configHolder.getCanalCacheSwitch())){
+ return;
+ }
+
+ // 创建链接
+ CanalConnector connector = CanalConnectors.newSingleConnector(
+ new InetSocketAddress(configHolder.getCanalHostName(), configHolder.getCanalPort()),
+ "example", "", "");
+ try {
+ //打开连接
+ connector.connect();
+ //订阅数据库表,全部表
+ connector.subscribe(".*\\..*");
+ //回滚到未进行ack的地方,下次fetch的时候,可以从最后一个没有ack的地方开始拿
+ connector.rollback();
+ while (true) {
+ logger.info("canal数据同步监听中...");
+ // 获取指定数量的数据
+ Message message = connector.getWithoutAck(BATCH_SIZE);
+ //获取批量ID
+ long batchId = message.getId();
+ //获取批量的数量
+ int size = message.getEntries().size();
+ //如果没有数据
+ if (batchId == -1 || size == 0) {
+ try {
+ //线程休眠2秒
+ Thread.sleep(2000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ } else {
+ //如果有数据,处理数据
+ printEntry(message.getEntries());
+ }
+ //进行 batch id 的确认。确认之后,小于等于此 batchId 的 Message 都会被确认。
+ connector.ack(batchId);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ connector.disconnect();
+ }
+ }
+
+ /**
+ * 解析binlog获得的实体类信息
+ */
+ private void printEntry(List entrys) {
+ for (CanalEntry.Entry entry : entrys) {
+ if (entry.getEntryType() == CanalEntry.EntryType.TRANSACTIONBEGIN || entry.getEntryType() == CanalEntry.EntryType.TRANSACTIONEND) {
+ //开启/关闭事务的实体类型,跳过
+ continue;
+ }
+
+ String tableName = entry.getHeader().getTableName();
+ TableEnum tableEnum = TableEnum.getByTableName(tableName);
+ if(tableEnum == null){
+ // 没有在枚举中定义的表,跳过
+ continue;
+ }
+
+ //RowChange对象,包含了一行数据变化的所有特征
+ //比如isDdl 是否是ddl变更操作 sql 具体的ddl sql beforeColumns afterColumns 变更前后的数据字段等等
+ CanalEntry.RowChange rowChage;
+ try {
+ rowChage = CanalEntry.RowChange.parseFrom(entry.getStoreValue());
+ } catch (Exception e) {
+ throw new RuntimeException("ERROR ## parser of eromanga-event has an error , data:" + entry.toString(), e);
+ }
+
+ //获取操作类型:insert/update/delete类型
+ CanalEntry.EventType eventType = rowChage.getEventType();
+ //打印Header信息
+ logger.info(String.format("============= binlog[%s:%s] , name[%s,%s] , eventType : %s =============",
+ entry.getHeader().getLogfileName(), entry.getHeader().getLogfileOffset(),
+ entry.getHeader().getSchemaName(), entry.getHeader().getTableName(),
+ eventType));
+
+ //判断是否是DDL语句
+ if (rowChage.getIsDdl()) {
+ logger.info("============= isDdl: true,sql:" + rowChage.getSql());
+ }
+
+ //获取RowChange对象里的每一行数据
+ for (CanalEntry.RowData rowData : rowChage.getRowDatasList()) {
+ //如果是删除语句
+ if (eventType == CanalEntry.EventType.DELETE) {
+ row(rowData.getBeforeColumnsList(), tableName);
+ //如果是新增语句
+ } else if (eventType == CanalEntry.EventType.INSERT) {
+ row(rowData.getAfterColumnsList(), tableName);
+ //如果是更新的语句
+ } else {
+ //变更前的数据
+// printColumn(rowData.getBeforeColumnsList(), tableName);
+ //变更后的数据
+ row(rowData.getAfterColumnsList(), tableName);
+ }
+ }
+ }
+ }
+
+ private void row(List columns, String tableName) {
+ Optional keyColumn = columns.stream().filter(item -> item.getIsKey()).findFirst();
+ if(keyColumn.isPresent()){
+ // 获取主键id
+ String id = keyColumn.get().getValue();
+ // 拼接主键key
+ String key = RedisUtils.getPrimaryKey(tableName, id);
+ // 拼接外键key
+ String foreignKey = null;
+ // 子表的redis key需要拼接上主表的id
+ TableEnum tableEnum = TableEnum.getByTableName(tableName);
+ if(tableEnum != null){
+ Optional foreignKeyColumn = columns.stream().filter(item -> item.getName().equals(tableEnum.getForeignId())).findFirst();
+ if(foreignKeyColumn.isPresent()){
+ String foreignKeyValue = foreignKeyColumn.get().getValue();
+ foreignKey = RedisUtils.getForeignKey(tableName, foreignKeyValue);
+ }
+ }
+
+ for (CanalEntry.Column column : columns) {
+ // 更新发生改变的字段缓存
+ setUpdatedColumnCache(column, key, foreignKey);
+ }
+
+ // 指标表特殊处理
+ dealSpecialTable(columns, tableName);
+ }
+ }
+
+ private void setUpdatedColumnCache(CanalEntry.Column column, String key, String foreignKey){
+ if(column.getUpdated()) {
+ logger.info("开始主键缓存更新, {}, {}, {}", key, column.getName(), column.getValue());
+
+ redisManager.hset(key, column.getName(), column.getValue());
+
+ logger.info("结束主键缓存更新, {}, {}, {}", key, column.getName(), column.getValue());
+
+ if(foreignKey != null){
+ logger.info("开始外键缓存更新, {}, {}", key, foreignKey);
+
+ redisManager.sadd(foreignKey, key);
+
+ logger.info("结束外键缓存更新, {}, {}", key, foreignKey);
+ }
+ }
+ }
+
+ private void setAllColumnCache(CanalEntry.Column column, String key){
+ logger.info("开始主键缓存更新, {}, {}, {}", key, column.getName(), column.getValue());
+
+ redisManager.hset(key, column.getName(), column.getValue());
+
+ logger.info("结束主键缓存更新, {}, {}, {}", key, column.getName(), column.getValue());
+ }
+
+ private void dealSpecialTable(List columns, String tableName){
+ if(tableName.equals(TableEnum.T_FIELD.getTableName())){
+ String organ_id = null;
+ String field_en = null;
+ String field_cn = null;
+ for (CanalEntry.Column column : columns) {
+ String name = column.getName();
+ switch (name) {
+ case "organ_id":
+ organ_id = column.getValue();
+ break;
+ case "field_en":
+ field_en = column.getValue();
+ break;
+ case "field_cn":
+ field_cn = column.getValue();
+ break;
+ default:
+ break;
+ }
+ }
+
+ String fieldEn = "field_en:" + organ_id + ":" + field_en;
+ String fieldEnKey = RedisUtils.getPrimaryKey(tableName, fieldEn);
+
+ String fieldCn = "field_cn:" + organ_id + ":" + field_cn;
+ String fieldCnKey = RedisUtils.getPrimaryKey(tableName, fieldCn);
+
+ // 如果field_en或field_cn发生变化,则对应的key为新生成的,需要保存所有字段缓存
+ Optional fieldEnOptional = columns.stream().filter(item -> item.getName().equals("field_en") && item.getUpdated()).findFirst();
+ Optional fieldCnOptional = columns.stream().filter(item -> item.getName().equals("field_cn") && item.getUpdated()).findFirst();
+ for (CanalEntry.Column column : columns) {
+ if(fieldEnOptional.isPresent()){
+ // 更新所有字段缓存
+ setAllColumnCache(column, fieldEnKey);
+ } else {
+ // 更新发生改变的字段缓存
+ setUpdatedColumnCache(column, fieldEnKey, null);
+ }
+
+ if(fieldCnOptional.isPresent()){
+ setAllColumnCache(column, fieldCnKey);
+ } else {
+ setUpdatedColumnCache(column, fieldCnKey, null);
+ }
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/canal/TableEnum.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/canal/TableEnum.java
new file mode 100644
index 0000000..ba4b0be
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/canal/TableEnum.java
@@ -0,0 +1,77 @@
+package com.baoying.enginex.executor.canal;
+
+/**
+ * 缓存数据同步表
+ */
+public enum TableEnum {
+
+ /**
+ * 引擎
+ */
+ T_ENGINE("t_engine", "id", ""),
+ T_ENGINE_VERSION("t_engine_version", "version_id", "engine_id"),
+ T_ENGINE_NODE("t_engine_node", "node_id", "version_id"),
+
+ /**
+ * 指标
+ */
+ T_FIELD("t_field", "id", ""),
+ T_FIELD_INTERFACE("t_field_interface", "id", ""),
+ T_FIELD_DATA_SOURCE("t_field_data_source", "id", ""),
+
+ /**
+ * 规则
+ */
+ T_RULE("t_rule", "id", ""),
+ T_RULE_VERSION("t_rule_version", "id", "rule_id"),
+ T_RULE_CONDITION("t_rule_condition", "id", "version_id"),
+ T_RULE_LOOP_GROUP_ACTION("t_rule_loop_group_action", "id", "condition_for_id"),
+ T_RULE_FIELD("t_rule_field", "id", "rule_id"),
+ /**
+ * 策略输出
+ */
+ T_TACTICS_OUTPUT("t_tactics_output", "id", "tactics_id");
+
+ private String tableName;
+ private String primaryId;
+ private String foreignId;
+
+ TableEnum(String tableName, String primaryId, String foreignId) {
+ this.tableName = tableName;
+ this.primaryId = primaryId;
+ this.foreignId = foreignId;
+ }
+
+ public static TableEnum getByTableName(String tableName) {
+ for (TableEnum tableEnum : TableEnum.values()) {
+ if (tableName.equals(tableEnum.getTableName())) {
+ return tableEnum;
+ }
+ }
+ return null;
+ }
+
+ public String getTableName() {
+ return tableName;
+ }
+
+ public void setTableName(String tableName) {
+ this.tableName = tableName;
+ }
+
+ public String getPrimaryId() {
+ return primaryId;
+ }
+
+ public void setPrimaryId(String primaryId) {
+ this.primaryId = primaryId;
+ }
+
+ public String getForeignId() {
+ return foreignId;
+ }
+
+ public void setForeignId(String foreignId) {
+ this.foreignId = foreignId;
+ }
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/basefactory/CustomBeanFactory.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/basefactory/CustomBeanFactory.java
new file mode 100644
index 0000000..b2caba1
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/basefactory/CustomBeanFactory.java
@@ -0,0 +1,17 @@
+package com.baoying.enginex.executor.common.basefactory;
+
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public final class CustomBeanFactory {
+ public static ApplicationContext getContext() {
+ final String[] applicationXML = { "applicationContext.xml"};
+ ApplicationContext context = getSpringContext(applicationXML);
+ return context;
+ }
+
+ public static ApplicationContext getSpringContext(String[] paths) {
+ return new ClassPathXmlApplicationContext(paths);
+
+ }
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/constants/CommonConst.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/constants/CommonConst.java
new file mode 100644
index 0000000..f34a03d
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/constants/CommonConst.java
@@ -0,0 +1,31 @@
+package com.baoying.enginex.executor.common.constants;
+
+public class CommonConst {
+
+ /**
+ * 逗号
+ */
+ public static final String SYMBOL_COMMA = ",";
+
+ /**
+ * 单引号
+ */
+ public static final String SYMBOL_SINGLE_QUOTA = "\'";
+
+ /**
+ * 空格
+ */
+ public static final String SYMBOL_BLANK = " ";
+
+ /**
+ * 空字符串
+ */
+ public static final String STRING_EMPTY = "";
+
+ /**
+ * 30分钟(s)
+ * */
+ public static final long MINUTE_30 = 1800000;
+
+ public static String DROOLS_KSESSION_KEY_PREFIX = "DROOLS_KSESSION#";
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/constants/Constants.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/constants/Constants.java
new file mode 100644
index 0000000..9fdc18c
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/constants/Constants.java
@@ -0,0 +1,30 @@
+package com.baoying.enginex.executor.common.constants;
+
+/**
+ * 公共变量约定
+ */
+public class Constants {
+
+ // 规则集节点相关常量
+ public interface ruleNode {
+ // 互斥组(串行)
+ int MUTEXGROUP = 1;
+ // 执行组(并行)
+ int EXECUTEGROUP = 2;
+ }
+
+ public interface switchFlag {
+ // 开关打开
+ String ON = "on";
+ // 开关关闭
+ String OFF = "off";
+ }
+
+ public interface fieldName {
+ // 字段英文名
+ String fieldEn = "field_en";
+ //字段中文名
+ String fieldCn = "field_cn";
+ }
+
+}
\ No newline at end of file
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/constants/ParamTypeConst.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/constants/ParamTypeConst.java
new file mode 100644
index 0000000..9ce45b6
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/constants/ParamTypeConst.java
@@ -0,0 +1,10 @@
+package com.baoying.enginex.executor.common.constants;
+
+public class ParamTypeConst {
+ public static final int CONSTANT = 1;
+ public static final int VARIABLE = 2;
+ public static final int CUSTOM = 3;
+ public static final int REGEX = 4;
+
+
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/ksession/KSessionFactory.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/ksession/KSessionFactory.java
new file mode 100644
index 0000000..6b4e3f5
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/ksession/KSessionFactory.java
@@ -0,0 +1,60 @@
+package com.baoying.enginex.executor.common.ksession;
+
+import com.baoying.enginex.executor.redis.RedisManager;
+import org.apache.commons.pool2.BaseKeyedPooledObjectFactory;
+import org.apache.commons.pool2.PooledObject;
+import org.apache.commons.pool2.impl.DefaultPooledObject;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.builder.*;
+import org.drools.io.ResourceFactory;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * kSession工厂类
+ */
+@Component
+public class KSessionFactory extends BaseKeyedPooledObjectFactory {
+
+ @Autowired
+ private RedisManager redisManager;
+
+ @Override
+ public StatefulKnowledgeSession create(String key) throws Exception {
+ StatefulKnowledgeSession kSession = null;
+ try {
+ String ruleString = redisManager.get(key);
+ if(ruleString == null){
+ throw new Exception("create kSession fail, key is "+ key + ", ruleString is null!");
+ }
+
+ long start = System.currentTimeMillis();
+ KnowledgeBuilder kb = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kb.add(ResourceFactory.newByteArrayResource(ruleString.getBytes("utf-8")), ResourceType.DRL);
+ KnowledgeBuilderErrors errors = kb.getErrors();
+ for (KnowledgeBuilderError error : errors) {
+ System.out.println(error);
+ }
+ KnowledgeBase kBase = KnowledgeBaseFactory.newKnowledgeBase();
+ kBase.addKnowledgePackages(kb.getKnowledgePackages());
+ kSession = kBase.newStatefulKnowledgeSession();
+ long end = System.currentTimeMillis();
+ System.out.println("------------------drools kSession创建耗时:" + (end - start) + " ----------------------");
+ } catch (Exception e) {
+ throw e;
+ }
+
+ return kSession;
+ }
+
+ @Override
+ public PooledObject wrap(StatefulKnowledgeSession kSession) {
+ return new DefaultPooledObject(kSession);
+ }
+
+ public void setRedisManager(RedisManager redisManager) {
+ this.redisManager = redisManager;
+ }
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/ksession/KSessionPool.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/ksession/KSessionPool.java
new file mode 100644
index 0000000..6951d13
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/ksession/KSessionPool.java
@@ -0,0 +1,67 @@
+package com.baoying.enginex.executor.common.ksession;
+
+import org.apache.commons.pool2.impl.GenericKeyedObjectPool;
+import org.apache.commons.pool2.impl.GenericKeyedObjectPoolConfig;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * kSession连接池
+ */
+@Component
+public class KSessionPool implements InitializingBean {
+
+ private GenericKeyedObjectPool pool;
+
+ @Autowired
+ private KSessionFactory kSessionFactory;
+
+ /**
+ * 初始化方法
+ * @throws Exception
+ */
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ initPool();
+ }
+
+ /**
+ * 初始化连接池
+ * @return
+ * @throws Exception
+ */
+ public void initPool() throws Exception {
+ GenericKeyedObjectPoolConfig poolConfig = new GenericKeyedObjectPoolConfig();
+ poolConfig.setMaxTotalPerKey(200);
+ poolConfig.setMaxIdlePerKey(50);
+ poolConfig.setMinIdlePerKey(5);
+ poolConfig.setMaxTotal(2000);
+ this.pool = new GenericKeyedObjectPool(kSessionFactory, poolConfig);
+ }
+
+ /**
+ * 获取一个连接对象
+ * @return
+ * @throws Exception
+ */
+ public StatefulKnowledgeSession borrowObject(String key) throws Exception {
+ return pool.borrowObject(key);
+ }
+
+ /**
+ * 归还一个连接对象
+ * @param ftpClient
+ */
+ public void returnObject(String key, StatefulKnowledgeSession kSession) {
+ if(kSession != null){
+ pool.returnObject(key, kSession);
+ }
+ }
+
+ public void setkSessionFactory(KSessionFactory kSessionFactory) {
+ this.kSessionFactory = kSessionFactory;
+ }
+
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/mapper/BaseMapper.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/mapper/BaseMapper.java
new file mode 100644
index 0000000..f70a40b
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/mapper/BaseMapper.java
@@ -0,0 +1,55 @@
+package com.baoying.enginex.executor.common.mapper;
+
+import java.util.List;
+
+public abstract interface BaseMapper {
+
+ /**
+ * @Description: 根据对象删除数据
+ * @param entity 对象
+ * @return 是否删除成功
+ */
+ int deleteByExample(IdEntity entity);
+
+ /**
+ * @Description: 根据对象主键ID删除数据
+ * @param id 对象id编号
+ * @return 是否删除成功
+ */
+ int deleteByPrimaryKey(Long id);
+
+ /**
+ * @Description: 插入一条新的数据
+ * @param entity 对象
+ * @return 是否插入成功
+ */
+ int insertSelective(IdEntity entity);
+
+ /**
+ * @Description: 根据对象主键更新对象信息
+ * @param entity 对象
+ * @return 是否修改成功标志
+ */
+ int updateByPrimaryKeySelective(IdEntity entity);
+
+ /**
+ * @Description: 根据对象获取数据条数
+ * @param entity 对象
+ * @return 返回行数
+ */
+ int countByExample(IdEntity entity);
+
+ /**
+ * @Description: 根据对象主键ID获取指定数据(多个)
+ * @param entity 对象
+ * @return 对象列表
+ */
+ List selectByExample(IdEntity entity);
+
+ /**
+ * @Description: 根据对象主键ID获取指定数据(单个)
+ * @param id id编号
+ * @return 返回单个对象
+ */
+ IdEntity selectByPrimaryKey(Long id);
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/mapper/EmailTemplateMapper.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/mapper/EmailTemplateMapper.java
new file mode 100644
index 0000000..e990cb6
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/mapper/EmailTemplateMapper.java
@@ -0,0 +1,39 @@
+package com.baoying.enginex.executor.common.mapper;
+
+import com.baoying.enginex.executor.common.model.EmailTemplate;
+import com.baoying.enginex.executor.common.model.EmailTemplateExample;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface EmailTemplateMapper {
+ long countByExample(EmailTemplateExample example);
+
+ int deleteByExample(EmailTemplateExample example);
+
+ int deleteByPrimaryKey(Integer templateId);
+
+ int insert(EmailTemplate record);
+
+ int insertSelective(EmailTemplate record);
+
+ List selectByExampleWithBLOBs(EmailTemplateExample example);
+
+ List selectByExample(EmailTemplateExample example);
+
+ EmailTemplate selectByPrimaryKey(Integer templateId);
+
+ int updateByExampleSelective(@Param("record") EmailTemplate record, @Param("example") EmailTemplateExample example);
+
+ int updateByExampleWithBLOBs(@Param("record") EmailTemplate record, @Param("example") EmailTemplateExample example);
+
+ int updateByExample(@Param("record") EmailTemplate record, @Param("example") EmailTemplateExample example);
+
+ int updateByPrimaryKeySelective(EmailTemplate record);
+
+ int updateByPrimaryKeyWithBLOBs(EmailTemplate record);
+
+ int updateByPrimaryKey(EmailTemplate record);
+
+ EmailTemplate selectTemplateByNid(String nid);
+}
\ No newline at end of file
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/mapper/EmailTemplateMapper.xml b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/mapper/EmailTemplateMapper.xml
new file mode 100644
index 0000000..5f092f0
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/mapper/EmailTemplateMapper.xml
@@ -0,0 +1,345 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ and ${criterion.condition}
+
+
+ and ${criterion.condition} #{criterion.value}
+
+
+ and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+
+
+ and ${criterion.condition}
+
+ #{listItem}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ and ${criterion.condition}
+
+
+ and ${criterion.condition} #{criterion.value}
+
+
+ and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+
+
+ and ${criterion.condition}
+
+ #{listItem}
+
+
+
+
+
+
+
+
+
+
+ template_id, subject, nid, status, address, use_type, create_time, update_time
+
+
+ content
+
+
+
+
+
+ delete from t_email_template
+ where template_id = #{templateId,jdbcType=INTEGER}
+
+
+ delete from t_email_template
+
+
+
+
+
+ insert into t_email_template (template_id, subject, nid,
+ status, address, use_type,
+ create_time, update_time, content
+ )
+ values (#{templateId,jdbcType=INTEGER}, #{subject,jdbcType=VARCHAR}, #{nid,jdbcType=VARCHAR},
+ #{status,jdbcType=TINYINT}, #{address,jdbcType=VARCHAR}, #{useType,jdbcType=TINYINT},
+ #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}, #{content,jdbcType=LONGVARCHAR}
+ )
+
+
+ insert into t_email_template
+
+
+ template_id,
+
+
+ subject,
+
+
+ nid,
+
+
+ status,
+
+
+ address,
+
+
+ use_type,
+
+
+ create_time,
+
+
+ update_time,
+
+
+ content,
+
+
+
+
+ #{templateId,jdbcType=INTEGER},
+
+
+ #{subject,jdbcType=VARCHAR},
+
+
+ #{nid,jdbcType=VARCHAR},
+
+
+ #{status,jdbcType=TINYINT},
+
+
+ #{address,jdbcType=VARCHAR},
+
+
+ #{useType,jdbcType=TINYINT},
+
+
+ #{createTime,jdbcType=TIMESTAMP},
+
+
+ #{updateTime,jdbcType=TIMESTAMP},
+
+
+ #{content,jdbcType=LONGVARCHAR},
+
+
+
+
+
+ update t_email_template
+
+
+ template_id = #{record.templateId,jdbcType=INTEGER},
+
+
+ subject = #{record.subject,jdbcType=VARCHAR},
+
+
+ nid = #{record.nid,jdbcType=VARCHAR},
+
+
+ status = #{record.status,jdbcType=TINYINT},
+
+
+ address = #{record.address,jdbcType=VARCHAR},
+
+
+ use_type = #{record.useType,jdbcType=TINYINT},
+
+
+ create_time = #{record.createTime,jdbcType=TIMESTAMP},
+
+
+ update_time = #{record.updateTime,jdbcType=TIMESTAMP},
+
+
+ content = #{record.content,jdbcType=LONGVARCHAR},
+
+
+
+
+
+
+
+ update t_email_template
+ set template_id = #{record.templateId,jdbcType=INTEGER},
+ subject = #{record.subject,jdbcType=VARCHAR},
+ nid = #{record.nid,jdbcType=VARCHAR},
+ status = #{record.status,jdbcType=TINYINT},
+ address = #{record.address,jdbcType=VARCHAR},
+ use_type = #{record.useType,jdbcType=TINYINT},
+ create_time = #{record.createTime,jdbcType=TIMESTAMP},
+ update_time = #{record.updateTime,jdbcType=TIMESTAMP},
+ content = #{record.content,jdbcType=LONGVARCHAR}
+
+
+
+
+
+ update t_email_template
+ set template_id = #{record.templateId,jdbcType=INTEGER},
+ subject = #{record.subject,jdbcType=VARCHAR},
+ nid = #{record.nid,jdbcType=VARCHAR},
+ status = #{record.status,jdbcType=TINYINT},
+ address = #{record.address,jdbcType=VARCHAR},
+ use_type = #{record.useType,jdbcType=TINYINT},
+ create_time = #{record.createTime,jdbcType=TIMESTAMP},
+ update_time = #{record.updateTime,jdbcType=TIMESTAMP}
+
+
+
+
+
+ update t_email_template
+
+
+ subject = #{subject,jdbcType=VARCHAR},
+
+
+ nid = #{nid,jdbcType=VARCHAR},
+
+
+ status = #{status,jdbcType=TINYINT},
+
+
+ address = #{address,jdbcType=VARCHAR},
+
+
+ use_type = #{useType,jdbcType=TINYINT},
+
+
+ create_time = #{createTime,jdbcType=TIMESTAMP},
+
+
+ update_time = #{updateTime,jdbcType=TIMESTAMP},
+
+
+ content = #{content,jdbcType=LONGVARCHAR},
+
+
+ where template_id = #{templateId,jdbcType=INTEGER}
+
+
+ update t_email_template
+ set subject = #{subject,jdbcType=VARCHAR},
+ nid = #{nid,jdbcType=VARCHAR},
+ status = #{status,jdbcType=TINYINT},
+ address = #{address,jdbcType=VARCHAR},
+ use_type = #{useType,jdbcType=TINYINT},
+ create_time = #{createTime,jdbcType=TIMESTAMP},
+ update_time = #{updateTime,jdbcType=TIMESTAMP},
+ content = #{content,jdbcType=LONGVARCHAR}
+ where template_id = #{templateId,jdbcType=INTEGER}
+
+
+ update t_email_template
+ set subject = #{subject,jdbcType=VARCHAR},
+ nid = #{nid,jdbcType=VARCHAR},
+ status = #{status,jdbcType=TINYINT},
+ address = #{address,jdbcType=VARCHAR},
+ use_type = #{useType,jdbcType=TINYINT},
+ create_time = #{createTime,jdbcType=TIMESTAMP},
+ update_time = #{updateTime,jdbcType=TIMESTAMP}
+ where template_id = #{templateId,jdbcType=INTEGER}
+
+
+
+
+
\ No newline at end of file
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/model/BasePage.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/model/BasePage.java
new file mode 100644
index 0000000..d2a2e1c
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/model/BasePage.java
@@ -0,0 +1,81 @@
+package com.baoying.enginex.executor.common.model;
+
+
+public class BasePage {
+
+ /**
+ * 当前页数
+ */
+ private int page;
+
+ /**
+ * 每页显示的行数
+ */
+ private int rows;
+
+ /**
+ * 开始行数
+ */
+ private Integer curRow;
+
+ /**
+ * 结束行数
+ */
+ private Integer endRow;
+
+ /**
+ * 总行数
+ */
+ private Integer total;
+
+ public BasePage() {
+
+ }
+
+ public Integer getTotal() {
+ return total;
+ }
+
+ public void setTotal(Integer total) {
+ this.total = total;
+ }
+
+ /**
+ * setPagination:(设置当前页面和每页显示行数).
+ * @author wz
+ * @param page 当前页数
+ * @param rows 每页显示的行数
+ */
+ public void setPagination(int page,int rows){
+ this.page = page;
+ this.rows = rows;
+ this.curRow = (page-1)*rows;
+ this.endRow = (page)*rows;
+ }
+
+
+ public int getPage() {
+ return page;
+ }
+
+ public void setPage(int page) {
+ this.page = page;
+ }
+
+ public int getRows() {
+ return rows;
+ }
+
+ public void setRows(int rows) {
+ this.rows = rows;
+ }
+
+ public void setCurRow(Integer curRow) {
+ this.curRow = curRow;
+ }
+
+ public void setEndRow(Integer endRow) {
+ this.endRow = endRow;
+ }
+
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/model/EmailTemplate.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/model/EmailTemplate.java
new file mode 100644
index 0000000..c7cefad
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/model/EmailTemplate.java
@@ -0,0 +1,122 @@
+package com.baoying.enginex.executor.common.model;
+
+import java.util.Date;
+
+public class EmailTemplate {
+ private Integer templateId;
+
+ private String subject;
+
+ private String nid;
+
+ private Byte status;
+
+ private String address;
+
+ private Byte useType;
+
+ private Date createTime;
+
+ private Date updateTime;
+
+ private String content;
+
+ public EmailTemplate(Integer templateId, String subject, String nid, Byte status, String address, Byte useType, Date createTime, Date updateTime) {
+ this.templateId = templateId;
+ this.subject = subject;
+ this.nid = nid;
+ this.status = status;
+ this.address = address;
+ this.useType = useType;
+ this.createTime = createTime;
+ this.updateTime = updateTime;
+ }
+
+ public EmailTemplate(Integer templateId, String subject, String nid, Byte status, String address, Byte useType, Date createTime, Date updateTime, String content) {
+ this.templateId = templateId;
+ this.subject = subject;
+ this.nid = nid;
+ this.status = status;
+ this.address = address;
+ this.useType = useType;
+ this.createTime = createTime;
+ this.updateTime = updateTime;
+ this.content = content;
+ }
+
+ public EmailTemplate() {
+ super();
+ }
+
+ public Integer getTemplateId() {
+ return templateId;
+ }
+
+ public void setTemplateId(Integer templateId) {
+ this.templateId = templateId;
+ }
+
+ public String getSubject() {
+ return subject;
+ }
+
+ public void setSubject(String subject) {
+ this.subject = subject == null ? null : subject.trim();
+ }
+
+ public String getNid() {
+ return nid;
+ }
+
+ public void setNid(String nid) {
+ this.nid = nid == null ? null : nid.trim();
+ }
+
+ public Byte getStatus() {
+ return status;
+ }
+
+ public void setStatus(Byte status) {
+ this.status = status;
+ }
+
+ public String getAddress() {
+ return address;
+ }
+
+ public void setAddress(String address) {
+ this.address = address == null ? null : address.trim();
+ }
+
+ public Byte getUseType() {
+ return useType;
+ }
+
+ public void setUseType(Byte useType) {
+ this.useType = useType;
+ }
+
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+
+ public Date getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(Date updateTime) {
+ this.updateTime = updateTime;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content == null ? null : content.trim();
+ }
+}
\ No newline at end of file
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/model/EmailTemplateExample.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/model/EmailTemplateExample.java
new file mode 100644
index 0000000..6ae7b1d
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/model/EmailTemplateExample.java
@@ -0,0 +1,711 @@
+package com.baoying.enginex.executor.common.model;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class EmailTemplateExample {
+ protected String orderByClause;
+
+ protected boolean distinct;
+
+ protected List oredCriteria;
+
+ public EmailTemplateExample() {
+ oredCriteria = new ArrayList();
+ }
+
+ public void setOrderByClause(String orderByClause) {
+ this.orderByClause = orderByClause;
+ }
+
+ public String getOrderByClause() {
+ return orderByClause;
+ }
+
+ public void setDistinct(boolean distinct) {
+ this.distinct = distinct;
+ }
+
+ public boolean isDistinct() {
+ return distinct;
+ }
+
+ public List getOredCriteria() {
+ return oredCriteria;
+ }
+
+ public void or(Criteria criteria) {
+ oredCriteria.add(criteria);
+ }
+
+ public Criteria or() {
+ Criteria criteria = createCriteriaInternal();
+ oredCriteria.add(criteria);
+ return criteria;
+ }
+
+ public Criteria createCriteria() {
+ Criteria criteria = createCriteriaInternal();
+ if (oredCriteria.size() == 0) {
+ oredCriteria.add(criteria);
+ }
+ return criteria;
+ }
+
+ protected Criteria createCriteriaInternal() {
+ Criteria criteria = new Criteria();
+ return criteria;
+ }
+
+ public void clear() {
+ oredCriteria.clear();
+ orderByClause = null;
+ distinct = false;
+ }
+
+ protected abstract static class GeneratedCriteria {
+ protected List criteria;
+
+ protected GeneratedCriteria() {
+ super();
+ criteria = new ArrayList();
+ }
+
+ public boolean isValid() {
+ return criteria.size() > 0;
+ }
+
+ public List getAllCriteria() {
+ return criteria;
+ }
+
+ public List getCriteria() {
+ return criteria;
+ }
+
+ protected void addCriterion(String condition) {
+ if (condition == null) {
+ throw new RuntimeException("Value for condition cannot be null");
+ }
+ criteria.add(new Criterion(condition));
+ }
+
+ protected void addCriterion(String condition, Object value, String property) {
+ if (value == null) {
+ throw new RuntimeException("Value for " + property + " cannot be null");
+ }
+ criteria.add(new Criterion(condition, value));
+ }
+
+ protected void addCriterion(String condition, Object value1, Object value2, String property) {
+ if (value1 == null || value2 == null) {
+ throw new RuntimeException("Between values for " + property + " cannot be null");
+ }
+ criteria.add(new Criterion(condition, value1, value2));
+ }
+
+ public Criteria andTemplateIdIsNull() {
+ addCriterion("template_id is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andTemplateIdIsNotNull() {
+ addCriterion("template_id is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andTemplateIdEqualTo(Integer value) {
+ addCriterion("template_id =", value, "templateId");
+ return (Criteria) this;
+ }
+
+ public Criteria andTemplateIdNotEqualTo(Integer value) {
+ addCriterion("template_id <>", value, "templateId");
+ return (Criteria) this;
+ }
+
+ public Criteria andTemplateIdGreaterThan(Integer value) {
+ addCriterion("template_id >", value, "templateId");
+ return (Criteria) this;
+ }
+
+ public Criteria andTemplateIdGreaterThanOrEqualTo(Integer value) {
+ addCriterion("template_id >=", value, "templateId");
+ return (Criteria) this;
+ }
+
+ public Criteria andTemplateIdLessThan(Integer value) {
+ addCriterion("template_id <", value, "templateId");
+ return (Criteria) this;
+ }
+
+ public Criteria andTemplateIdLessThanOrEqualTo(Integer value) {
+ addCriterion("template_id <=", value, "templateId");
+ return (Criteria) this;
+ }
+
+ public Criteria andTemplateIdIn(List values) {
+ addCriterion("template_id in", values, "templateId");
+ return (Criteria) this;
+ }
+
+ public Criteria andTemplateIdNotIn(List values) {
+ addCriterion("template_id not in", values, "templateId");
+ return (Criteria) this;
+ }
+
+ public Criteria andTemplateIdBetween(Integer value1, Integer value2) {
+ addCriterion("template_id between", value1, value2, "templateId");
+ return (Criteria) this;
+ }
+
+ public Criteria andTemplateIdNotBetween(Integer value1, Integer value2) {
+ addCriterion("template_id not between", value1, value2, "templateId");
+ return (Criteria) this;
+ }
+
+ public Criteria andSubjectIsNull() {
+ addCriterion("subject is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andSubjectIsNotNull() {
+ addCriterion("subject is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andSubjectEqualTo(String value) {
+ addCriterion("subject =", value, "subject");
+ return (Criteria) this;
+ }
+
+ public Criteria andSubjectNotEqualTo(String value) {
+ addCriterion("subject <>", value, "subject");
+ return (Criteria) this;
+ }
+
+ public Criteria andSubjectGreaterThan(String value) {
+ addCriterion("subject >", value, "subject");
+ return (Criteria) this;
+ }
+
+ public Criteria andSubjectGreaterThanOrEqualTo(String value) {
+ addCriterion("subject >=", value, "subject");
+ return (Criteria) this;
+ }
+
+ public Criteria andSubjectLessThan(String value) {
+ addCriterion("subject <", value, "subject");
+ return (Criteria) this;
+ }
+
+ public Criteria andSubjectLessThanOrEqualTo(String value) {
+ addCriterion("subject <=", value, "subject");
+ return (Criteria) this;
+ }
+
+ public Criteria andSubjectLike(String value) {
+ addCriterion("subject like", value, "subject");
+ return (Criteria) this;
+ }
+
+ public Criteria andSubjectNotLike(String value) {
+ addCriterion("subject not like", value, "subject");
+ return (Criteria) this;
+ }
+
+ public Criteria andSubjectIn(List values) {
+ addCriterion("subject in", values, "subject");
+ return (Criteria) this;
+ }
+
+ public Criteria andSubjectNotIn(List values) {
+ addCriterion("subject not in", values, "subject");
+ return (Criteria) this;
+ }
+
+ public Criteria andSubjectBetween(String value1, String value2) {
+ addCriterion("subject between", value1, value2, "subject");
+ return (Criteria) this;
+ }
+
+ public Criteria andSubjectNotBetween(String value1, String value2) {
+ addCriterion("subject not between", value1, value2, "subject");
+ return (Criteria) this;
+ }
+
+ public Criteria andNidIsNull() {
+ addCriterion("nid is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andNidIsNotNull() {
+ addCriterion("nid is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andNidEqualTo(String value) {
+ addCriterion("nid =", value, "nid");
+ return (Criteria) this;
+ }
+
+ public Criteria andNidNotEqualTo(String value) {
+ addCriterion("nid <>", value, "nid");
+ return (Criteria) this;
+ }
+
+ public Criteria andNidGreaterThan(String value) {
+ addCriterion("nid >", value, "nid");
+ return (Criteria) this;
+ }
+
+ public Criteria andNidGreaterThanOrEqualTo(String value) {
+ addCriterion("nid >=", value, "nid");
+ return (Criteria) this;
+ }
+
+ public Criteria andNidLessThan(String value) {
+ addCriterion("nid <", value, "nid");
+ return (Criteria) this;
+ }
+
+ public Criteria andNidLessThanOrEqualTo(String value) {
+ addCriterion("nid <=", value, "nid");
+ return (Criteria) this;
+ }
+
+ public Criteria andNidLike(String value) {
+ addCriterion("nid like", value, "nid");
+ return (Criteria) this;
+ }
+
+ public Criteria andNidNotLike(String value) {
+ addCriterion("nid not like", value, "nid");
+ return (Criteria) this;
+ }
+
+ public Criteria andNidIn(List values) {
+ addCriterion("nid in", values, "nid");
+ return (Criteria) this;
+ }
+
+ public Criteria andNidNotIn(List values) {
+ addCriterion("nid not in", values, "nid");
+ return (Criteria) this;
+ }
+
+ public Criteria andNidBetween(String value1, String value2) {
+ addCriterion("nid between", value1, value2, "nid");
+ return (Criteria) this;
+ }
+
+ public Criteria andNidNotBetween(String value1, String value2) {
+ addCriterion("nid not between", value1, value2, "nid");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusIsNull() {
+ addCriterion("status is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusIsNotNull() {
+ addCriterion("status is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusEqualTo(Byte value) {
+ addCriterion("status =", value, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusNotEqualTo(Byte value) {
+ addCriterion("status <>", value, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusGreaterThan(Byte value) {
+ addCriterion("status >", value, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusGreaterThanOrEqualTo(Byte value) {
+ addCriterion("status >=", value, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusLessThan(Byte value) {
+ addCriterion("status <", value, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusLessThanOrEqualTo(Byte value) {
+ addCriterion("status <=", value, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusIn(List values) {
+ addCriterion("status in", values, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusNotIn(List values) {
+ addCriterion("status not in", values, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusBetween(Byte value1, Byte value2) {
+ addCriterion("status between", value1, value2, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusNotBetween(Byte value1, Byte value2) {
+ addCriterion("status not between", value1, value2, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andAddressIsNull() {
+ addCriterion("address is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andAddressIsNotNull() {
+ addCriterion("address is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andAddressEqualTo(String value) {
+ addCriterion("address =", value, "address");
+ return (Criteria) this;
+ }
+
+ public Criteria andAddressNotEqualTo(String value) {
+ addCriterion("address <>", value, "address");
+ return (Criteria) this;
+ }
+
+ public Criteria andAddressGreaterThan(String value) {
+ addCriterion("address >", value, "address");
+ return (Criteria) this;
+ }
+
+ public Criteria andAddressGreaterThanOrEqualTo(String value) {
+ addCriterion("address >=", value, "address");
+ return (Criteria) this;
+ }
+
+ public Criteria andAddressLessThan(String value) {
+ addCriterion("address <", value, "address");
+ return (Criteria) this;
+ }
+
+ public Criteria andAddressLessThanOrEqualTo(String value) {
+ addCriterion("address <=", value, "address");
+ return (Criteria) this;
+ }
+
+ public Criteria andAddressLike(String value) {
+ addCriterion("address like", value, "address");
+ return (Criteria) this;
+ }
+
+ public Criteria andAddressNotLike(String value) {
+ addCriterion("address not like", value, "address");
+ return (Criteria) this;
+ }
+
+ public Criteria andAddressIn(List values) {
+ addCriterion("address in", values, "address");
+ return (Criteria) this;
+ }
+
+ public Criteria andAddressNotIn(List values) {
+ addCriterion("address not in", values, "address");
+ return (Criteria) this;
+ }
+
+ public Criteria andAddressBetween(String value1, String value2) {
+ addCriterion("address between", value1, value2, "address");
+ return (Criteria) this;
+ }
+
+ public Criteria andAddressNotBetween(String value1, String value2) {
+ addCriterion("address not between", value1, value2, "address");
+ return (Criteria) this;
+ }
+
+ public Criteria andUseTypeIsNull() {
+ addCriterion("use_type is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andUseTypeIsNotNull() {
+ addCriterion("use_type is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andUseTypeEqualTo(Byte value) {
+ addCriterion("use_type =", value, "useType");
+ return (Criteria) this;
+ }
+
+ public Criteria andUseTypeNotEqualTo(Byte value) {
+ addCriterion("use_type <>", value, "useType");
+ return (Criteria) this;
+ }
+
+ public Criteria andUseTypeGreaterThan(Byte value) {
+ addCriterion("use_type >", value, "useType");
+ return (Criteria) this;
+ }
+
+ public Criteria andUseTypeGreaterThanOrEqualTo(Byte value) {
+ addCriterion("use_type >=", value, "useType");
+ return (Criteria) this;
+ }
+
+ public Criteria andUseTypeLessThan(Byte value) {
+ addCriterion("use_type <", value, "useType");
+ return (Criteria) this;
+ }
+
+ public Criteria andUseTypeLessThanOrEqualTo(Byte value) {
+ addCriterion("use_type <=", value, "useType");
+ return (Criteria) this;
+ }
+
+ public Criteria andUseTypeIn(List values) {
+ addCriterion("use_type in", values, "useType");
+ return (Criteria) this;
+ }
+
+ public Criteria andUseTypeNotIn(List values) {
+ addCriterion("use_type not in", values, "useType");
+ return (Criteria) this;
+ }
+
+ public Criteria andUseTypeBetween(Byte value1, Byte value2) {
+ addCriterion("use_type between", value1, value2, "useType");
+ return (Criteria) this;
+ }
+
+ public Criteria andUseTypeNotBetween(Byte value1, Byte value2) {
+ addCriterion("use_type not between", value1, value2, "useType");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeIsNull() {
+ addCriterion("create_time is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeIsNotNull() {
+ addCriterion("create_time is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeEqualTo(Date value) {
+ addCriterion("create_time =", value, "createTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeNotEqualTo(Date value) {
+ addCriterion("create_time <>", value, "createTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeGreaterThan(Date value) {
+ addCriterion("create_time >", value, "createTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) {
+ addCriterion("create_time >=", value, "createTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeLessThan(Date value) {
+ addCriterion("create_time <", value, "createTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeLessThanOrEqualTo(Date value) {
+ addCriterion("create_time <=", value, "createTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeIn(List values) {
+ addCriterion("create_time in", values, "createTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeNotIn(List values) {
+ addCriterion("create_time not in", values, "createTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeBetween(Date value1, Date value2) {
+ addCriterion("create_time between", value1, value2, "createTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeNotBetween(Date value1, Date value2) {
+ addCriterion("create_time not between", value1, value2, "createTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andUpdateTimeIsNull() {
+ addCriterion("update_time is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andUpdateTimeIsNotNull() {
+ addCriterion("update_time is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andUpdateTimeEqualTo(Date value) {
+ addCriterion("update_time =", value, "updateTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andUpdateTimeNotEqualTo(Date value) {
+ addCriterion("update_time <>", value, "updateTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andUpdateTimeGreaterThan(Date value) {
+ addCriterion("update_time >", value, "updateTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andUpdateTimeGreaterThanOrEqualTo(Date value) {
+ addCriterion("update_time >=", value, "updateTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andUpdateTimeLessThan(Date value) {
+ addCriterion("update_time <", value, "updateTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andUpdateTimeLessThanOrEqualTo(Date value) {
+ addCriterion("update_time <=", value, "updateTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andUpdateTimeIn(List values) {
+ addCriterion("update_time in", values, "updateTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andUpdateTimeNotIn(List values) {
+ addCriterion("update_time not in", values, "updateTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andUpdateTimeBetween(Date value1, Date value2) {
+ addCriterion("update_time between", value1, value2, "updateTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andUpdateTimeNotBetween(Date value1, Date value2) {
+ addCriterion("update_time not between", value1, value2, "updateTime");
+ return (Criteria) this;
+ }
+ }
+
+ public static class Criteria extends GeneratedCriteria {
+
+ protected Criteria() {
+ super();
+ }
+ }
+
+ public static class Criterion {
+ private String condition;
+
+ private Object value;
+
+ private Object secondValue;
+
+ private boolean noValue;
+
+ private boolean singleValue;
+
+ private boolean betweenValue;
+
+ private boolean listValue;
+
+ private String typeHandler;
+
+ public String getCondition() {
+ return condition;
+ }
+
+ public Object getValue() {
+ return value;
+ }
+
+ public Object getSecondValue() {
+ return secondValue;
+ }
+
+ public boolean isNoValue() {
+ return noValue;
+ }
+
+ public boolean isSingleValue() {
+ return singleValue;
+ }
+
+ public boolean isBetweenValue() {
+ return betweenValue;
+ }
+
+ public boolean isListValue() {
+ return listValue;
+ }
+
+ public String getTypeHandler() {
+ return typeHandler;
+ }
+
+ protected Criterion(String condition) {
+ super();
+ this.condition = condition;
+ this.typeHandler = null;
+ this.noValue = true;
+ }
+
+ protected Criterion(String condition, Object value, String typeHandler) {
+ super();
+ this.condition = condition;
+ this.value = value;
+ this.typeHandler = typeHandler;
+ if (value instanceof List>) {
+ this.listValue = true;
+ } else {
+ this.singleValue = true;
+ }
+ }
+
+ protected Criterion(String condition, Object value) {
+ this(condition, value, null);
+ }
+
+ protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+ super();
+ this.condition = condition;
+ this.value = value;
+ this.secondValue = secondValue;
+ this.typeHandler = typeHandler;
+ this.betweenValue = true;
+ }
+
+ protected Criterion(String condition, Object value, Object secondValue) {
+ this(condition, value, secondValue, null);
+ }
+ }
+}
\ No newline at end of file
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/model/ExpressionParam.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/model/ExpressionParam.java
new file mode 100644
index 0000000..3c20f2a
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/model/ExpressionParam.java
@@ -0,0 +1,18 @@
+package com.baoying.enginex.executor.common.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+//表达式的参数实体类
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ExpressionParam {
+ private String fieldEn;//表达式中key字段en
+ private String operator;//表达式的操作符
+ private Integer variableType;//表达式中value类型,1常量 2变量,3自定义
+ private String fieldValue;//表达式中对应常量value值或者变量key
+ private String executionLogic;//执行逻辑
+ private Integer conditionType;//规则节点的类型:1-关系节点,2-表达式节点
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/session/SessionData.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/session/SessionData.java
new file mode 100644
index 0000000..89163d5
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/session/SessionData.java
@@ -0,0 +1,15 @@
+package com.baoying.enginex.executor.common.session;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+@Data
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = false)
+public class SessionData {
+
+ private Long organId; // 组织id
+ private Long engineId; // 引擎id
+ private Integer reqType;//请求类型
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/session/SessionManager.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/session/SessionManager.java
new file mode 100644
index 0000000..5040ea1
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/common/session/SessionManager.java
@@ -0,0 +1,20 @@
+package com.baoying.enginex.executor.common.session;
+
+import com.alibaba.ttl.TransmittableThreadLocal;
+
+/**
+ * session管理类
+ */
+public class SessionManager {
+ private static TransmittableThreadLocal session = new TransmittableThreadLocal() {
+
+ };
+
+ public static SessionData getSession() {
+ return session.get();
+ }
+
+ public static void setSession(SessionData conn) {
+ session.set(conn);
+ }
+}
\ No newline at end of file
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/config/ConfigHolder.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/config/ConfigHolder.java
new file mode 100644
index 0000000..1e482d2
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/config/ConfigHolder.java
@@ -0,0 +1,72 @@
+package com.baoying.enginex.executor.config;
+
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@Data
+public class ConfigHolder {
+
+ //redisConfig
+ @Value("${redis.host}")
+ private String redisHost;
+ @Value("${redis.port}")
+ private int redisPort;
+ @Value("${redis.db}")
+ private int redisDb;
+ @Value("${redis.password}")
+ private String redisPwd;
+ @Value("${redis.pool.maxTotal}")
+ private int redisMaxTotal;
+ @Value("${redis.pool.maxIdle}")
+ private int redisMaxIdle;
+ @Value("${redis.pool.maxWait}")
+ private int redisMaxWait;
+ @Value("${redis.pool.timeout}")
+ private int redisTimeout;
+
+ // 业务逻辑是否使用缓存
+ @Value("${switch.use.cache}")
+ private String cacheSwitch;
+ // canal缓存同步是否开启
+ @Value("${switch.canal.cache}")
+ private String canalCacheSwitch;
+ // canal主机地址
+ @Value("${canal.hostname}")
+ private String canalHostName;
+ // canal端口
+ @Value("${canal.port}")
+ private int canalPort;
+
+ //jdbcConfig
+ /*@Value("${jdbc.url}")
+ private String jdbcUrl;
+ @Value("${jdbc.driver}")
+ private String DriverName;
+ @Value("${pool.maxPoolSize}")
+ private int maxPoolSize;
+ @Value("${jdbc.username}")
+ private String jdbcUserName;
+ @Value("${jdbc.password}")
+ private String jdbcPwd;
+ @Value("${pool.maxWait}")
+ private int jdbcMaxWait;
+ @Value("${pool.timeBetweenEvictionRunsMillis}")
+ private int timeBetweenEvictionRunsMillis;
+ @Value("${pool.minEvictableIdleTimeMillis}")
+ private int minEvictableIdleTimeMillis;
+ @Value("${pool.validationQuery}")
+ private String validationQuery;
+
+ //rabbitconfig
+ @Value("${rabbitMQ.host}")
+ private String rabbitHost;
+ @Value("${rabbitMQ.port}")
+ private int rabbitPort;
+ @Value("${rabbitMQ.username}")
+ private String rabbitUsername;
+ @Value("${rabbitMQ.password}")
+ private String rabbitPassword;*/
+
+}
\ No newline at end of file
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/config/ConfigurationContainor.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/config/ConfigurationContainor.java
new file mode 100644
index 0000000..54c1e29
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/config/ConfigurationContainor.java
@@ -0,0 +1,46 @@
+package com.baoying.enginex.executor.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import redis.clients.jedis.JedisPool;
+import redis.clients.jedis.JedisPoolConfig;
+
+import javax.annotation.Resource;
+import java.util.concurrent.ThreadPoolExecutor;
+
+@Configuration
+public class ConfigurationContainor {
+
+ @Resource
+ private ConfigHolder configHolder;
+
+ @Bean(name = "threadPoolTaskExecutor")
+ ThreadPoolTaskExecutor threadPoolTaskExecutor(){
+ ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+ executor.setCorePoolSize(2000);
+ executor.setMaxPoolSize(10000);
+ executor.setQueueCapacity(100000);
+ executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
+ return executor;
+ }
+
+ @Bean(name = "jedisPool")
+ public JedisPool jedisPool(){
+ JedisPoolConfig config = new JedisPoolConfig();
+ config.setMaxTotal(configHolder.getRedisMaxTotal());
+ config.setMaxIdle(configHolder.getRedisMaxIdle());
+ config.setMaxWaitMillis(configHolder.getRedisMaxWait());
+ config.setTestOnBorrow(true);
+// config.setTestOnReturn(true);
+
+ JedisPool pool = new JedisPool(config,
+ configHolder.getRedisHost(),
+ configHolder.getRedisPort(),
+ configHolder.getRedisTimeout(),
+ configHolder.getRedisPwd(),
+ configHolder.getRedisDb());
+ return pool;
+ }
+
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/config/DataSourceConfig.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/config/DataSourceConfig.java
new file mode 100644
index 0000000..af53c49
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/config/DataSourceConfig.java
@@ -0,0 +1,61 @@
+package com.baoying.enginex.executor.config;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.mybatis.spring.SqlSessionTemplate;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.core.io.support.ResourcePatternResolver;
+
+import javax.sql.DataSource;
+
+
+@Configuration
+public class DataSourceConfig {
+ @Value("${spring.datasource.default.url}")
+ private String defaultDBUrl;
+ @Value("${spring.datasource.default.username}")
+ private String defaultDBUser;
+ @Value("${spring.datasource.default.password}")
+ private String defaultDBPassword;
+ @Value("${spring.datasource.default.driver-class-name}")
+ private String defaultDBDreiverName;
+
+ @Bean
+ public DruidDataSource druidDataSource(){
+ DruidDataSource defaultDataSource = new DruidDataSource();
+ defaultDataSource.setUrl(defaultDBUrl);
+ defaultDataSource.setUsername(defaultDBUser);
+ defaultDataSource.setPassword(defaultDBPassword);
+ defaultDataSource.setDriverClassName(defaultDBDreiverName);
+
+ return defaultDataSource;
+ }
+
+ @Bean
+ public SqlSessionFactory sqlSessionFactory(
+ @Qualifier("druidDataSource") DataSource druidDataSource)
+ throws Exception {
+ MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
+ ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
+ Resource[] mapperXmlResource = resolver.getResources("classpath*:com/baoying/enginex/executor/*/mapper/*Mapper.xml");
+ bean.setDataSource(druidDataSource);
+ bean.setMapperLocations(mapperXmlResource);
+ bean.setTypeAliasesPackage("com.baoying.enginex.executor.**.model");
+ bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
+ bean.getObject().getConfiguration().setCacheEnabled(false);
+ return bean.getObject();
+ }
+
+ @Bean(name = "sqlSessionTemplate")
+ public SqlSessionTemplate sqlSessionTemplate(
+ @Qualifier("sqlSessionFactory") SqlSessionFactory sqlSessionFactory)
+ throws Exception {
+ return new SqlSessionTemplate(sqlSessionFactory);
+ }
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/config/RestTemplateConfig.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/config/RestTemplateConfig.java
new file mode 100644
index 0000000..00dfa2a
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/config/RestTemplateConfig.java
@@ -0,0 +1,52 @@
+package com.baoying.enginex.executor.config;
+
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.task.SimpleAsyncTaskExecutor;
+import org.springframework.http.client.AsyncClientHttpRequestFactory;
+import org.springframework.http.client.ClientHttpRequestFactory;
+import org.springframework.http.client.SimpleClientHttpRequestFactory;
+import org.springframework.web.client.AsyncRestTemplate;
+import org.springframework.web.client.RestTemplate;
+
+/**
+ * RestTemplate配置
+ */
+@Configuration
+public class RestTemplateConfig {
+
+ @Bean
+ public RestTemplate restTemplate(@Qualifier("clientHttpRequestFactory") ClientHttpRequestFactory factory){
+ return new RestTemplate(factory);
+ }
+
+ @Bean
+ public AsyncRestTemplate asyncRestTemplate(@Qualifier("asyncClientHttpRequestFactory") AsyncClientHttpRequestFactory factory){
+ return new AsyncRestTemplate(factory);
+ }
+
+ @Bean
+ public ClientHttpRequestFactory clientHttpRequestFactory(){
+ // 创建一个 httpCilent 简单工厂
+ SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
+ // 设置连接超时
+ factory.setConnectTimeout(15000);
+ // 设置读取超时
+ factory.setReadTimeout(5000);
+ return factory;
+ }
+
+ @Bean
+ public AsyncClientHttpRequestFactory asyncClientHttpRequestFactory(){
+ // 创建一个 httpCilent 简单工厂
+ SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
+ // 设置连接超时
+// factory.setConnectTimeout(15000);
+ // 设置读取超时
+// factory.setReadTimeout(5000);
+ //设置异步任务(线程不会重用,每次调用时都会重新启动一个新的线程)
+ factory.setTaskExecutor(new SimpleAsyncTaskExecutor());
+ return factory;
+ }
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/FieldMapper.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/FieldMapper.java
new file mode 100644
index 0000000..26afa10
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/FieldMapper.java
@@ -0,0 +1,57 @@
+package com.baoying.enginex.executor.datamanage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baoying.enginex.executor.datamanage.model.Field;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+public interface FieldMapper extends BaseMapper {
+
+ /**
+ * findFieldByIds:(找出一批字段id对应的字段列表).
+ * @author caowenyu
+ * @param paramMap 参数集合
+ * @return 字段列表
+ */
+ public List findFieldByIdsbyorganId(Map paramMap);
+
+ /**
+ * findByFieldEn:(根据引擎和字段英文名找出引擎所用字段对象).
+ * @author yuanlinfeng
+ * @param paramMap 参数集合
+ * @return 字段对象
+ */
+ public Field findByFieldEnbyorganId(Map paramMap);
+
+ /**
+ * findByFieldCn:(根据字段中文名找出字段对象).
+ * @author yuanlinfeng
+ * @param paramMap 参数集合
+ * @return 字段对象
+ */
+ public Field findByFieldCnbyorganId(Map paramMap);
+
+ /**
+ * findByFieldCn:(按中文名查找通用字段).
+ * @author yuanlinfeng
+ * @param paramMap 参数集合
+ * @return 字段对象
+ */
+ public Field findByFieldCnNoEngineIdbyorganId(Map paramMap);
+
+ /**
+ * findByFieldId:(根据字段Id查找字段对象).
+ * @author caowenyu
+ * @param paramMap 参数集合
+ * @return 字段对象
+ */
+ public Field findByFieldIdbyorganId(Map paramMap);
+
+ List selectFieldListByIds(@Param("ids") List ids);
+
+ List selectFieldListByEns(@Param("ens")List ens);
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/FieldMapper.xml b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/FieldMapper.xml
new file mode 100644
index 0000000..c3007df
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/FieldMapper.xml
@@ -0,0 +1,147 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/FieldTypeMapper.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/FieldTypeMapper.java
new file mode 100644
index 0000000..c944126
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/FieldTypeMapper.java
@@ -0,0 +1,128 @@
+
+
+package com.baoying.enginex.executor.datamanage.mapper;
+
+
+import com.baoying.enginex.executor.common.mapper.BaseMapper;
+import com.baoying.enginex.executor.datamanage.model.FieldType;
+
+import java.util.List;
+import java.util.Map;
+
+public interface FieldTypeMapper extends BaseMapper {
+
+ /**
+ * getFieldTypeList:(查找用户的字段类型列表).
+ * @author yuanlinfeng
+ * @param paramMap 参数集合
+ * @return 字段类型列表
+ */
+ public List getFieldTypeList(Map paramMap);
+
+ /**
+ * getSubFieldTypeList:(根据传入的字段父类型查找子类型列表).
+ * @author yuanlinfeng
+ * @param paramMap 参数集合
+ * @return 字段类型列表
+ */
+ public List getSubFieldTypeList(Map paramMap);
+
+ /**
+ * findFieldTypeById:(根据传入的字段类型ID查找字段类型名).
+ * @author yuanlinfeng
+ * @param paramMap 参数集合
+ * @return 字段类型列表
+ */
+ public FieldType findFieldTypeById(Map paramMap);
+
+ /**
+ * findTypeIdByParentId:(根据传入的字段类型父ID查找子类型ID).
+ * @author yuanlinfeng
+ * @param paramMap 参数集合
+ * @return 子字段类型ID
+ */
+ public String findTypeIdByParentId(Map paramMap);
+
+ /**
+ * findTypeIdByParentId:(根据传入的字段类型类型ID查找父ID).
+ * @author yuanlinfeng
+ * @param paramMap 参数集合
+ * @return 子字段类型ID
+ */
+ public String findParentIdByTypeId(Map paramMap);
+
+ /**
+ * findFieldType:(查找用户可用的字段类型列表,通用组织所有,引擎只有自定义).
+ * @author yuanlinfeng
+ * @param paramMap 参数集合
+ * @return 字段类型列表
+ */
+ public List findFieldType(Map paramMap);
+
+ /**
+ * createFieldType:(新增字段类型).
+ * @author yuanlinfeng
+ * @param fieldTypeVo 字段类型实体类
+ * @return 插入成功
+ */
+ public boolean createFieldType(FieldType fieldTypeVo);
+
+ /**
+ * findIdByFieldType:(新增字段类型).
+ * @author yuanlinfeng
+ * @param paramMap paramMap
+ * @return 字段类型编号
+ */
+ public long findIdByFieldType(Map paramMap);
+
+ /**
+ * updateFieldType:(更新字段类型名).
+ * @author yuanlinfeng
+ * @param paramMap 参数集合
+ * @return 更新成功
+ */
+ public boolean updateFieldType(Map paramMap);
+
+ /**
+ * updateFieldTypeByTypeIds:(更新字段类型为删除状态(-1)).
+ * @author yuanlinfeng
+ * @param paramMap 参数集合
+ * @return 更新成功
+ */
+ public boolean updateFieldTypeByTypeIds(Map paramMap);
+
+ /**
+ * deleteFieldTypeByTypeIds:(删除字段类型下没有字段的空节点)).
+ * @author yuanlinfeng
+ * @param paramMap 参数集合
+ * @return 更新成功
+ */
+ public boolean deleteFieldTypeByTypeIds(Map paramMap);
+
+ /**
+ * backFieldTypeByTypeIds:(更新字段类型状态为启用状态(1)).
+ * @author yuanlinfeng
+ * @param paramMap 参数集合
+ * @return 更新成功
+ */
+ public boolean backFieldTypeByTypeIds(Map paramMap);
+
+ /**
+ * isExists:(查找字段名是否存在).
+ * @author yuanlinfeng
+ * @param paramMap 参数集合
+ * @return 存在的记录条数
+ */
+ public int isExists(Map paramMap);
+
+
+ /**
+ * isExistsDefaultTreeName:(查找默认节点名是否存在).
+ * @author yuanlinfeng
+ * @param paramMap 参数集合
+ * @return 存在的记录条数
+ */
+ public int isExistsDefaultTreeName(Map paramMap);
+
+
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/FieldTypeMapper.xml b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/FieldTypeMapper.xml
new file mode 100644
index 0000000..ca38dc0
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/FieldTypeMapper.xml
@@ -0,0 +1,201 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ insert into t_field_type ( field_type, parent_id, is_common )
+ values ( #{fieldType}, #{parentId}, #{isCommon} )
+
+
+
+ update t_field_type
+ set field_type = #{fieldType}
+ where id = (select field_typeid
+ from t_field_type_user_rel
+ where organ_id = ( select organ_id from t_user where user_id = #{userId} )
+
+ and engine_id = #{engineId}
+
+
+ and engine_id is null
+
+ and field_typeid = #{id}
+ )
+
+
+
+ update t_field_type_user_rel
+ set status = -1
+ where organ_id = ( select organ_id from t_user where user_id = #{userId} )
+ and engine_id = #{engineId}
+ and field_typeid in
+
+ #{item}
+
+ and status = 1
+
+
+
+ delete from t_field_type_user_rel
+ where organ_id = ( select organ_id from t_user where user_id = #{userId} )
+ and engine_id = #{engineId}
+ and field_typeid in
+
+ #{item}
+
+ and field_typeid not in
+ ( select field_typeid
+ from t_field f,t_field_user_rel r
+ where f.id = r.field_id
+ and f.field_typeid in
+
+ #{item}
+
+ )
+
+
+
+ update t_field_type_user_rel
+ set status = 1
+ where organ_id = ( select organ_id from t_user where user_id = #{userId} )
+ and engine_id = #{engineId}
+ and field_typeid in
+
+ #{item}
+
+ and status = -1
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/FieldTypeUserMapper.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/FieldTypeUserMapper.java
new file mode 100644
index 0000000..3487ced
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/FieldTypeUserMapper.java
@@ -0,0 +1,54 @@
+
+
+package com.baoying.enginex.executor.datamanage.mapper;
+
+
+import com.baoying.enginex.executor.common.mapper.BaseMapper;
+import com.baoying.enginex.executor.datamanage.model.FieldTypeUser;
+
+import java.util.Map;
+
+public interface FieldTypeUserMapper extends BaseMapper {
+
+ /**
+ * createFieldTypeUserRel:(新增字段类型).
+ * @author yuanlinfeng
+ * @param paramMap 参数集合
+ * @return 插入成功
+ */
+ public boolean createFieldTypeUserRel(Map paramMap);
+
+ /**
+ * batchBindEngineFieldTypeUserRel:(把一批通用字段类型id中不存在的类型id批量绑定到引擎).
+ * @author yuanlinfeng
+ * @param paramMap 参数集合
+ * @return 插入成功
+ */
+ public boolean batchBindEngineFieldTypeUserRel(Map paramMap);
+
+ /**
+ * deleteFieldTypeUserRel:(取消字段类型).
+ * @author yuanlinfeng
+ * @param paramMap 参数集合
+ * @return 删除成功
+ */
+ public boolean deleteFieldTypeUserRel(Map paramMap);
+
+ /**
+ * updateFieldTypeUserRel:(更新字段类型名).
+ * @author yuanlinfeng
+ * @param paramMap 参数集合
+ * @return 更新成功
+ */
+ public boolean updateFieldTypeUserRel(Map paramMap);
+
+ /**
+ * findNodeIds:(查找引擎在用的节点集合).
+ * @author yuanlinfeng
+ * @param paramMap 参数集合
+ * @return
+ */
+ public String findNodeIds(Map paramMap);
+
+
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/FieldTypeUserMapper.xml b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/FieldTypeUserMapper.xml
new file mode 100644
index 0000000..d37e5d7
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/FieldTypeUserMapper.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ insert into t_field_type_user_rel ( field_typeid, organ_id, engine_id, user_id, created )
+ values ( #{fieldTypeId}, #{organId}, #{engineId}, #{userId}, now() )
+
+
+
+ insert into t_field_type_user_rel ( field_typeid, organ_id, engine_id, user_id, created )
+ select field_typeid, organ_id, #{engineId}, #{userId}, now()
+ from t_field_type_user_rel r
+ where r.field_typeid in
+
+ #{item}
+
+ and field_typeid not in ( select field_typeid from t_field_type_user_rel where engine_id = #{engineId})
+ and engine_id is null
+
+
+
+
+
+ delete from t_field_type_user_rel
+ where
+ organ_id = ( select organ_id from t_user where user_id = #{userId} )
+
+ and engine_id = #{engineId}
+
+
+ and engine_id is null
+
+ and field_typeid = #{fieldTypeId}
+
+
+
+ update t_field_type_user_rel
+ set user_id = #{userId}, created = now()
+ where organ_id = ( select organ_id from t_user where user_id = #{userId} )
+
+ and engine_id = #{engineId}
+
+
+ and engine_id is null
+
+ and field_typeid = #{id}
+
+
+
\ No newline at end of file
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/FieldUserMapper.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/FieldUserMapper.java
new file mode 100644
index 0000000..b95260b
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/FieldUserMapper.java
@@ -0,0 +1,77 @@
+
+
+package com.baoying.enginex.executor.datamanage.mapper;
+
+
+import com.baoying.enginex.executor.common.mapper.BaseMapper;
+import com.baoying.enginex.executor.datamanage.model.FieldUser;
+
+import java.util.Map;
+
+public interface FieldUserMapper extends BaseMapper {
+
+ /**
+ * createFieldUserRel:(绑定字段和用户关系).
+ * @author yuanlinfeng
+ * @param fieldUser 用户字段实体类
+ * @return 插入成功
+ * */
+ public boolean createFieldUserRel(FieldUser fieldUserVo);
+
+ /**
+ * batchCreateFieldUserRel:(批量导入字段信息后批量绑定字段和用户关系).
+ * @author yuanlinfeng
+ * @param paramMap 参数集合
+ * @return 插入成功
+ * */
+ public boolean batchCreateFieldUserRel(Map paramMap);
+
+ /**
+ * batchBindEngineFieldUserRel:(把一批通用字段id中未绑定的字段id批量绑定到引擎).
+ * @author yuanlinfeng
+ * @param paramMap 参数集合
+ * @return 插入成功
+ * */
+ public boolean batchBindEngineFieldUserRel(Map paramMap);
+
+ /**
+ * batchCreateEngineFieldUserRel:(把id、英文名、中文名不重复的组织字段批量绑定到引擎).
+ * @author yuanlinfeng
+ * @param paramMap 参数集合
+ * @return 插入成功
+ * */
+ public boolean batchCreateEngineFieldUserRel(Map paramMap);
+
+ /**
+ * updateFieldUserRel:(更新字段).
+ * @author yuanlinfeng
+ * @param paramMap 参数集合
+ * @return 更新成功
+ * */
+ public boolean updateFieldUserRel(Map paramMap);
+
+ /**
+ * updateStatus:(单个或批量更新用户字段关系).
+ * @author yuanlinfeng
+ * @param paramMap 参数集合
+ * @return 更新成功
+ * */
+ public boolean updateStatus(Map paramMap);
+
+ /**
+ * deleteFieldByIds:(批量修改字段启用状态为删除状态(-1)).
+ * @author yuanlinfeng
+ * @param paramMap 参数集合
+ * @return 更新是否成功
+ */
+ public boolean deleteFieldByIds(Map paramMap);
+
+ /**
+ * deleteFieldByIds:(批量修改字段删除状态为启用状态(1)).
+ * @author yuanlinfeng
+ * @param paramMap 参数集合
+ * @return 更新是否成功
+ */
+ public boolean backFieldByIds(Map paramMap);
+
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/FieldUserMapper.xml b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/FieldUserMapper.xml
new file mode 100644
index 0000000..0a982d9
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/FieldUserMapper.xml
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ insert into t_field_user_rel (field_id, organ_id, engine_id, user_id, status, created, updated)
+ values (#{fieldId}, #{organId}, #{engineId}, #{userId}, #{status}, now(), now())
+
+
+
+ insert into t_field_user_rel (field_id, organ_id, engine_id, user_id, status, created, updated)
+ select id, #{organId}, #{engineId}, #{userId}, #{status}, now(), now()
+ from t_field t
+ where t.author = #{author}
+ and not exists ( select r.field_id from t_field_user_rel r where t.id = r.field_id )
+
+
+
+ insert into t_field_user_rel (field_id, organ_id, engine_id, user_id, status, created, updated)
+ select id, #{organId}, #{engineId}, #{userId}, #{status}, now(), now()
+ from t_field f
+ where f.field_typeid in
+
+ #{item}
+
+ and not exists ( select 1
+ from ( select f.id,f.field_en,f.field_cn
+ from t_field f,t_field_user_rel fu
+ where f.id = fu.field_id
+ and fu.organ_id = ( select organ_id from t_user where user_id = #{userId} )
+ and fu.engine_id = ${engineId} )y
+ where f.field_en = y.field_en or f.field_cn = y.field_cn or f.id = y.id
+ )
+
+
+
+ insert into t_field_user_rel (field_id, organ_id, engine_id, user_id, status, created, updated)
+ select id, #{organId}, #{engineId}, #{userId}, 1, now(), now()
+ from t_field f
+ where f.id in
+
+ #{item}
+
+ and not exists ( select 1
+ from ( select f.id,f.field_en,f.field_cn
+ from t_field f,t_field_user_rel fu
+ where f.id = fu.field_id
+ and fu.organ_id = ( select organ_id from t_user where user_id = #{userId} )
+ and fu.engine_id = ${engineId} )y
+ where f.field_en = y.field_en or f.field_cn = y.field_cn or f.id = y.id
+ )
+
+
+
+ update t_field_user_rel
+ set user_id = #{userId} , updated = now()
+ where organ_id = ( select organ_id from t_user where user_id = #{userId} )
+
+ and engine_id = #{engineId}
+
+
+ and engine_id is null
+
+ and field_id = #{Id}
+
+
+
+ update t_field_user_rel
+ set status=#{status}
+ where organ_id = ( select organ_id from t_user where user_id = #{userId} )
+
+ and engine_id = #{engineId}
+
+
+ and engine_id is null
+
+ and field_id in
+
+ #{item}
+
+
+
+
+ update t_field_user_rel
+ set status = -1
+ where organ_id = ( select organ_id from t_user where user_id = #{userId} )
+ and engine_id = #{engineId}
+ and field_id in
+
+ #{item}
+
+ and status = 1
+
+
+
+ update t_field_user_rel
+ set status = 1
+ where organ_id = ( select organ_id from t_user where user_id = #{userId} )
+ and engine_id = #{engineId}
+ and field_id in
+
+ #{item}
+
+ and status = -1
+
+
+
\ No newline at end of file
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/SimpleMapper.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/SimpleMapper.java
new file mode 100644
index 0000000..a168cfe
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/SimpleMapper.java
@@ -0,0 +1,11 @@
+package com.baoying.enginex.executor.datamanage.mapper;
+
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+public interface SimpleMapper {
+
+ List> customSelect(Map paramsMap);
+ List> test(Map paramsMap);
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/SimpleMapper.xml b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/SimpleMapper.xml
new file mode 100644
index 0000000..9882a70
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/mapper/SimpleMapper.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/model/CustList.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/model/CustList.java
new file mode 100644
index 0000000..d70b691
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/model/CustList.java
@@ -0,0 +1,236 @@
+package com.baoying.enginex.executor.datamanage.model;
+
+import com.baoying.enginex.executor.common.model.BasePage;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class CustList extends BasePage implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ * */
+ private Long id;
+
+ /**
+ * 以下20个t开头为匿名字段
+ * */
+ private String t0;
+ private String t1;
+ private String t2;
+ private String t3;
+ private String t4;
+ private String t5;
+ private String t6;
+ private String t7;
+ private String t8;
+ private String t9;
+ private String t10;
+ private String t11;
+ private String t12;
+ private String t13;
+ private String t14;
+ private String t15;
+ private String t16;
+ private String t17;
+ private String t18;
+ private String t19;
+
+ /**
+ * 创建人编号
+ * */
+ private Long userId;
+
+ /**
+ * 创建人昵称
+ * */
+ private String nickName;
+
+ /**
+ * 创建时间
+ * */
+ private Date created;
+
+ /**
+ * 检索客户信息是否存在的定制条件
+ */
+ private String checkCol;
+
+ /**
+ * 检索名单库的表名称
+ */
+ private String tableName;
+
+ public Long getId() {
+ return id;
+ }
+ public void setId(Long id) {
+ this.id = id;
+ }
+ public String getT0() {
+ return t0;
+ }
+ public void setT0(String t0) {
+ this.t0 = t0;
+ }
+ public String getT1() {
+ return t1;
+ }
+ public void setT1(String t1) {
+ this.t1 = t1;
+ }
+ public String getT2() {
+ return t2;
+ }
+ public void setT2(String t2) {
+ this.t2 = t2;
+ }
+ public String getT3() {
+ return t3;
+ }
+ public void setT3(String t3) {
+ this.t3 = t3;
+ }
+ public String getT4() {
+ return t4;
+ }
+ public void setT4(String t4) {
+ this.t4 = t4;
+ }
+ public String getT5() {
+ return t5;
+ }
+ public void setT5(String t5) {
+ this.t5 = t5;
+ }
+ public String getT6() {
+ return t6;
+ }
+ public void setT6(String t6) {
+ this.t6 = t6;
+ }
+ public String getT7() {
+ return t7;
+ }
+ public void setT7(String t7) {
+ this.t7 = t7;
+ }
+ public String getT8() {
+ return t8;
+ }
+ public void setT8(String t8) {
+ this.t8 = t8;
+ }
+ public String getT9() {
+ return t9;
+ }
+ public void setT9(String t9) {
+ this.t9 = t9;
+ }
+ public String getT10() {
+ return t10;
+ }
+ public void setT10(String t10) {
+ this.t10 = t10;
+ }
+ public String getT11() {
+ return t11;
+ }
+ public void setT11(String t11) {
+ this.t11 = t11;
+ }
+ public String getT12() {
+ return t12;
+ }
+ public void setT12(String t12) {
+ this.t12 = t12;
+ }
+ public String getT13() {
+ return t13;
+ }
+ public void setT13(String t13) {
+ this.t13 = t13;
+ }
+ public String getT14() {
+ return t14;
+ }
+ public void setT14(String t14) {
+ this.t14 = t14;
+ }
+ public String getT15() {
+ return t15;
+ }
+ public void setT15(String t15) {
+ this.t15 = t15;
+ }
+ public String getT16() {
+ return t16;
+ }
+ public void setT16(String t16) {
+ this.t16 = t16;
+ }
+ public String getT17() {
+ return t17;
+ }
+ public void setT17(String t17) {
+ this.t17 = t17;
+ }
+ public String getT18() {
+ return t18;
+ }
+ public void setT18(String t18) {
+ this.t18 = t18;
+ }
+ public String getT19() {
+ return t19;
+ }
+ public void setT19(String t19) {
+ this.t19 = t19;
+ }
+ public Long getUserId() {
+ return userId;
+ }
+ public void setUserId(Long userId) {
+ this.userId = userId;
+ }
+ public Date getCreated() {
+ return created;
+ }
+ public void setCreated(Date created) {
+ this.created = created;
+ }
+ public String getNickName() {
+ return nickName;
+ }
+ public void setNickName(String nickName) {
+ this.nickName = nickName;
+ }
+ public String getCheckCol() {
+ return checkCol;
+ }
+ public void setCheckCol(String checkCol) {
+ this.checkCol = checkCol;
+ }
+ public String getTableName() {
+ return tableName;
+ }
+ public void setTableName(String tableName) {
+ this.tableName = tableName;
+ }
+ @Override
+ public String toString() {
+ return "CustList [id=" + id + ", t0=" + t0 + ", t1=" + t1 + ", t2=" + t2
+ + ", t3=" + t3 + ", t4=" + t4 + ", t5=" + t5 + ", t6=" + t6
+ + ", t7=" + t7 + ", t8=" + t8 + ", t9=" + t9 + ", t10=" + t10
+ + ", t11=" + t11 + ", t12=" + t12 + ", t13=" + t13 + ", t14="
+ + t14 + ", t15=" + t15 + ", t16=" + t16 + ", t17=" + t17
+ + ", t18=" + t18 + ", t19=" + t19 + ", userId=" + userId
+ + ", nickName=" + nickName + ", created=" + created
+ + ", checkCol=" + checkCol + ", tableName=" + tableName + "]";
+ }
+
+
+
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/model/Field.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/model/Field.java
new file mode 100644
index 0000000..bf68b24
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/model/Field.java
@@ -0,0 +1,203 @@
+package com.baoying.enginex.executor.datamanage.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+@Data
+@TableName("t_field")
+public class Field implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ * */
+ private Long id;
+
+ /**
+ * 字段英文名
+ * */
+ private String fieldEn;
+
+ /**
+ * 字段中文名
+ * */
+ private String fieldCn;
+
+ /**
+ * 字段类型编号
+ * */
+ @TableField("field_typeid")
+ private Long fieldTypeId;
+
+ /**
+ * 字段类型名
+ * */
+ @TableField(exist = false)
+ private String fieldType;
+
+ /**
+ * 字段存值类型
+ * */
+ private Integer valueType;
+
+ /**
+ * 字段存值类型中文
+ * */
+ @TableField(exist = false)
+ private String valueTypeName;
+
+ /**
+ * 字段约束范围
+ * */
+ private String valueScope;
+
+ /**
+ * 是否衍生字段
+ * */
+ private Integer isDerivative;
+
+ /**
+ * 是否衍生字段
+ * */
+ @TableField(exist = false)
+ private String isDerivativeName;
+
+ /**
+ * 是否输出字段
+ * */
+ private Integer isOutput;
+
+ /**
+ * 是否输出字段
+ * */
+ @TableField(exist = false)
+ private String isOutputName;
+
+ /**
+ * 是否组织定义的通用字段
+ * */
+ private Integer isCommon;
+
+ /**
+ * 衍生字段公式
+ * */
+ private String formula;
+
+ /**
+ * 衍生字段公式回显信息
+ * */
+ private String formulaShow;
+
+ /**
+ * 衍生字段引用的字段id
+ * */
+ @TableField("used_fieldid")
+ private String usedFieldId;
+
+ /**
+ * 衍生字段引用的原生字段id
+ * */
+ @TableField("orig_fieldid")
+ private String origFieldId;
+
+ /**
+ * 创建人
+ * */
+ private Long author;
+
+ /**
+ * 创建人昵称
+ * */
+ @TableField(exist = false)
+ private String nickName;
+
+ /**
+ * 创建时间
+ * */
+ private Date created;
+
+ /**
+ * 归属的引擎ID
+ * */
+ @TableField(exist = false)
+ private Long engineId;
+
+ /**
+ * 归属的引擎名称
+ * */
+ @TableField(exist = false)
+ private String engineName;
+
+ /**
+ * 字段状态(启用、停用、删除、未知)
+ * */
+ @TableField(exist = false)
+ private String status;
+
+ /**
+ * 字段条件设置集合
+ * */
+ @TableField(exist = false)
+ private List fieldCondList;
+
+ /**
+ * 字段用户关系编号
+ * */
+ @TableField(exist = false)
+ private Long fieldRelId;
+
+ /**
+ * 是否使用sql获取指标
+ */
+ private Boolean isUseSql;
+
+ /**
+ * 使用sql获取指标时对应的数据源
+ */
+ private Integer dataSourceId;
+
+ /**
+ * 使用sql获取指标时对应的sql语句
+ */
+ private String sqlStatement;
+
+ /**
+ * sql变量配置
+ */
+ private String sqlVariable;
+
+ /**
+ * 是否使用接口
+ */
+ private Boolean isInterface;
+
+ /**
+ * 接口id
+ */
+ private Integer interfaceId;
+
+ /**
+ * 接口解析指标
+ */
+ private String interfaceParseField;
+
+ /**
+ * json类型对应的json值
+ */
+ private String jsonValue;
+ /**
+ * 字典变量例如 日期:date
+ */
+ private String dictVariable;
+
+ /**
+ * 该字段归属的组织编号
+ * */
+ private Long organId;
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/model/FieldCond.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/model/FieldCond.java
new file mode 100644
index 0000000..ba07b14
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/model/FieldCond.java
@@ -0,0 +1,142 @@
+package com.baoying.enginex.executor.datamanage.model;
+
+
+import com.baoying.enginex.executor.common.model.BasePage;
+import com.baoying.enginex.executor.datamanage.vo.FieldSubCondVo;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+public class FieldCond extends BasePage implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 条件编号
+ * */
+ private Long id;
+
+ /**
+ * 字段编号
+ * */
+ private Long fieldId;
+
+ /**
+ * 字段条件值
+ * */
+ private String conditionValue;
+
+ /**
+ * 字段条件区域设置json格式
+ * */
+ private String content;
+
+ /**
+ * 条件字段编号
+ * */
+ private Long condFieldId;
+
+ /**
+ * 条件字段的运算符
+ * */
+ private String condFieldOperator;
+
+ /**
+ * 条件字段的条件设置值
+ * */
+ private String condFieldValue;
+
+ /**
+ * 条件字段间的逻辑符
+ * */
+ private String condFieldLogical;
+
+ /**
+ * 创建时间
+ * */
+ private Date created;
+
+ private List fieldSubCond;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public Long getFieldId() {
+ return fieldId;
+ }
+
+ public void setFieldId(Long fieldId) {
+ this.fieldId = fieldId;
+ }
+
+ public String getConditionValue() {
+ return conditionValue;
+ }
+
+ public void setConditionValue(String conditionValue) {
+ this.conditionValue = conditionValue;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+
+ public Date getCreated() {
+ return created;
+ }
+
+ public void setCreated(Date created) {
+ this.created = created;
+ }
+
+ public Long getCondFieldId() {
+ return condFieldId;
+ }
+
+ public void setCondFieldId(Long condFieldId) {
+ this.condFieldId = condFieldId;
+ }
+
+ public String getCondFieldOperator() {
+ return condFieldOperator;
+ }
+
+ public void setCondFieldOperator(String condFieldOperator) {
+ this.condFieldOperator = condFieldOperator;
+ }
+
+ public String getCondFieldValue() {
+ return condFieldValue;
+ }
+
+ public void setCondFieldValue(String condFieldValue) {
+ this.condFieldValue = condFieldValue;
+ }
+
+ public String getCondFieldLogical() {
+ return condFieldLogical;
+ }
+
+ public void setCondFieldLogical(String condFieldLogical) {
+ this.condFieldLogical = condFieldLogical;
+ }
+
+ public List getFieldSubCond() {
+ return fieldSubCond;
+ }
+
+ public void setFieldSubCond(List fieldSubCond) {
+ this.fieldSubCond = fieldSubCond;
+ }
+
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/model/FieldInter.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/model/FieldInter.java
new file mode 100644
index 0000000..2ce413c
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/model/FieldInter.java
@@ -0,0 +1,104 @@
+package com.baoying.enginex.executor.datamanage.model;
+
+
+import com.baoying.enginex.executor.common.model.BasePage;
+
+import java.io.Serializable;
+
+public class FieldInter extends BasePage implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ * */
+ private Integer id;
+
+ /**
+ * 衍生字段编号
+ * */
+ private Integer fieldRelId;
+
+ /**
+ * 公式引用的字段编号
+ * */
+ private Integer interFieldId;
+
+ /**
+ * 公式引用的字段用户关系编号
+ * */
+ private Integer interFieldRelId;
+
+ /**
+ * 同名字段的顺序
+ * */
+ private Integer seq;
+
+ /**
+ * 字段值区间划分
+ * */
+ private String interval;
+
+ /**
+ * 对应区间的值定义
+ * */
+ private String value;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public Integer getFieldRelId() {
+ return fieldRelId;
+ }
+
+ public void setFieldRelId(Integer fieldRelId) {
+ this.fieldRelId = fieldRelId;
+ }
+
+ public Integer getInterFieldId() {
+ return interFieldId;
+ }
+
+ public void setInterFieldId(Integer interFieldId) {
+ this.interFieldId = interFieldId;
+ }
+
+ public Integer getInterFieldRelId() {
+ return interFieldRelId;
+ }
+
+ public void setInterFieldRelId(Integer interFieldRelId) {
+ this.interFieldRelId = interFieldRelId;
+ }
+
+ public Integer getSeq() {
+ return seq;
+ }
+
+ public void setSeq(Integer seq) {
+ this.seq = seq;
+ }
+
+ public String getInterval() {
+ return interval;
+ }
+
+ public void setInterval(String interval) {
+ this.interval = interval;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+}
+
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/model/FieldType.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/model/FieldType.java
new file mode 100644
index 0000000..1b62fd5
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/model/FieldType.java
@@ -0,0 +1,106 @@
+package com.baoying.enginex.executor.datamanage.model;
+
+
+import com.baoying.enginex.executor.common.model.BasePage;
+
+import java.io.Serializable;
+
+public class FieldType extends BasePage implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ * */
+ private Integer id;
+
+ /**
+ * 字段类型名
+ * */
+ private String fieldType;
+
+ /**
+ * 父节点编号
+ * */
+ private Integer parentId;
+
+ /**
+ * 是否组织定义的通用字段类型
+ * */
+ private Integer isCommon;
+
+ /**
+ * 字段类型的子类集合
+ * */
+ private FieldType[] children;
+
+ /**
+ * 是否为父类
+ * */
+ private String isParent = "true";
+
+ /**
+ * 引擎编号
+ * */
+ private Integer engineId;
+
+ /**
+ *文件夹图片路径
+ * */
+ private String icon;
+
+ public Integer getId() {
+ return id;
+ }
+ public void setId(Integer id) {
+ this.id = id;
+ }
+ public String getFieldType() {
+ return fieldType;
+ }
+ public void setFieldType(String fieldType) {
+ this.fieldType = fieldType;
+ }
+ public Integer getParentId() {
+ return parentId;
+ }
+ public void setParentId(Integer parentId) {
+ this.parentId = parentId;
+ }
+ public Integer getIsCommon() {
+ return isCommon;
+ }
+ public void setIsCommon(Integer isCommon) {
+ this.isCommon = isCommon;
+ }
+ public FieldType[] getChildren() {
+ return children;
+ }
+ public void setChildren(FieldType[] children) {
+ this.children = children;
+ }
+ public String getIsParent() {
+ return isParent;
+ }
+ public void setIsParent(String isParent) {
+ this.isParent = isParent;
+ }
+ public Integer getEngineId() {
+ return engineId;
+ }
+ public void setEngineId(Integer engineId) {
+ this.engineId = engineId;
+ }
+ public String getIcon() {
+// if(engineId!=null)
+// icon = "../../resource/images/authority/folder.png";
+// else
+ icon = "../resource/images/authority/folder.png";
+ return icon;
+ }
+ public void setIcon(String icon) {
+ this.icon = icon;
+ }
+
+
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/model/FieldTypeUser.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/model/FieldTypeUser.java
new file mode 100644
index 0000000..db8b115
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/model/FieldTypeUser.java
@@ -0,0 +1,80 @@
+package com.baoying.enginex.executor.datamanage.model;
+
+
+import com.baoying.enginex.executor.common.model.BasePage;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class FieldTypeUser extends BasePage implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ * */
+ private Integer id;
+
+ /**
+ * 字段类型编号(表主键)
+ * */
+ private Integer fieldTypeId;
+
+ /**
+ * 该字段类型归属的组织编号
+ * */
+ private Long organId;
+
+ /**
+ * 该字段类型归属的引擎id(表主键)
+ * */
+ private Integer engineId;
+
+ /**
+ * 创建或修改该字段的用户编号
+ * */
+ private Long userId;
+
+ /**
+ * 创建时间
+ * */
+ private Date created;
+
+ public Integer getId() {
+ return id;
+ }
+ public void setId(Integer id) {
+ this.id = id;
+ }
+ public Integer getFieldTypeId() {
+ return fieldTypeId;
+ }
+ public void setFieldTypeId(Integer fieldTypeId) {
+ this.fieldTypeId = fieldTypeId;
+ }
+ public Long getOrganId() {
+ return organId;
+ }
+ public void setOrganId(Long organId) {
+ this.organId = organId;
+ }
+ public Integer getEngineId() {
+ return engineId;
+ }
+ public void setEngineId(Integer engineId) {
+ this.engineId = engineId;
+ }
+ public Long getUserId() {
+ return userId;
+ }
+ public void setUserId(Long userId) {
+ this.userId = userId;
+ }
+ public Date getCreated() {
+ return created;
+ }
+ public void setCreated(Date created) {
+ this.created = created;
+ }
+
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/model/FieldUser.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/model/FieldUser.java
new file mode 100644
index 0000000..c887839
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/model/FieldUser.java
@@ -0,0 +1,102 @@
+package com.baoying.enginex.executor.datamanage.model;
+
+
+import com.baoying.enginex.executor.common.model.BasePage;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class FieldUser extends BasePage implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ * */
+ private Long id;
+
+ /**
+ * 字段编号(表主键)
+ * */
+ private Long fieldId;
+
+ /**
+ * 该字段归属的组织编号
+ * */
+ private Long organId;
+
+ /**
+ * 该字段归属的引擎id(表主键)
+ * */
+ private Long engineId;
+
+ /**
+ * 创建或修改该字段的用户编号
+ * */
+ private Long userId;
+
+ /**
+ * 启用停用删除标志
+ * */
+ private int status;
+
+ /**
+ * 创建时间
+ * */
+ private Date created;
+
+ /**
+ * 更新时间
+ * */
+ private Date updated;
+
+ public Long getId() {
+ return id;
+ }
+ public void setId(Long id) {
+ this.id = id;
+ }
+ public Long getFieldId() {
+ return fieldId;
+ }
+ public void setFieldId(Long fieldId) {
+ this.fieldId = fieldId;
+ }
+ public Long getOrganId() {
+ return organId;
+ }
+ public void setOrganId(Long organId) {
+ this.organId = organId;
+ }
+ public Long getEngineId() {
+ return engineId;
+ }
+ public void setEngineId(Long engineId) {
+ this.engineId = engineId;
+ }
+ public Long getUserId() {
+ return userId;
+ }
+ public void setUserId(Long userId) {
+ this.userId = userId;
+ }
+ public int getStatus() {
+ return status;
+ }
+ public void setStatus(int status) {
+ this.status = status;
+ }
+ public Date getCreated() {
+ return created;
+ }
+ public void setCreated(Date created) {
+ this.created = created;
+ }
+ public Date getUpdated() {
+ return updated;
+ }
+ public void setUpdated(Date updated) {
+ this.updated = updated;
+ }
+
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/model/FormulaField.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/model/FormulaField.java
new file mode 100644
index 0000000..b655d49
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/model/FormulaField.java
@@ -0,0 +1,45 @@
+package com.baoying.enginex.executor.datamanage.model;
+
+
+import com.baoying.enginex.executor.common.model.BasePage;
+
+import java.io.Serializable;
+
+public class FormulaField extends BasePage implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ * */
+ private Long id;
+
+ /**
+ * 字段编号(表主键)
+ * */
+ private Long fieldId;
+ /**
+ * 公式用到的字段编号(表主键)
+ * */
+ private Long formulaFieldId;
+
+ public Long getId() {
+ return id;
+ }
+ public void setId(Long id) {
+ this.id = id;
+ }
+ public Long getFieldId() {
+ return fieldId;
+ }
+ public void setFieldId(Long fieldId) {
+ this.fieldId = fieldId;
+ }
+ public Long getFormulaFieldId() {
+ return formulaFieldId;
+ }
+ public void setFormulaFieldId(Long formulaFieldId) {
+ this.formulaFieldId = formulaFieldId;
+ }
+
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/service/FieldService.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/service/FieldService.java
new file mode 100644
index 0000000..f7e08e6
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/service/FieldService.java
@@ -0,0 +1,19 @@
+package com.baoying.enginex.executor.datamanage.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baoying.enginex.executor.datamanage.model.Field;
+
+import java.util.List;
+
+public interface FieldService extends IService {
+
+ Field queryById(Long id);
+
+ List findFieldByIdsbyorganId(Long organId, List ids);
+
+ List selectFieldListByEns(List fieldEnList);
+
+ Field findByFieldEnbyorganId(Long organId, String fieldEn);
+
+ Field findByFieldCnbyorganId(Long organId, String fieldCn);
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/service/impl/FieldServiceImpl.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/service/impl/FieldServiceImpl.java
new file mode 100644
index 0000000..cfeb580
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/service/impl/FieldServiceImpl.java
@@ -0,0 +1,112 @@
+package com.baoying.enginex.executor.datamanage.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baoying.enginex.executor.canal.TableEnum;
+import com.baoying.enginex.executor.common.constants.Constants;
+import com.baoying.enginex.executor.common.session.SessionManager;
+import com.baoying.enginex.executor.config.ConfigHolder;
+import com.baoying.enginex.executor.datamanage.mapper.FieldMapper;
+import com.baoying.enginex.executor.datamanage.model.Field;
+import com.baoying.enginex.executor.datamanage.service.FieldService;
+import com.baoying.enginex.executor.redis.RedisManager;
+import com.baoying.enginex.executor.redis.RedisUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Service
+public class FieldServiceImpl extends ServiceImpl implements FieldService {
+
+ @Autowired
+ public FieldMapper fieldMapper;
+ @Autowired
+ private ConfigHolder configHolder;
+ @Autowired
+ private RedisManager redisManager;
+
+ @Override
+ public Field queryById(Long id) {
+ Field field = null;
+ if(Constants.switchFlag.ON.equals(configHolder.getCacheSwitch())){
+ String key = RedisUtils.getPrimaryKey(TableEnum.T_FIELD, id);
+ field = redisManager.getByPrimaryKey(key, Field.class);
+ } else {
+ field = fieldMapper.selectById(id);
+ }
+
+ return field;
+ }
+
+ @Override
+ public List findFieldByIdsbyorganId(Long organId, List ids) {
+ List fieldList = null;
+ if(Constants.switchFlag.ON.equals(configHolder.getCacheSwitch())){
+ List keys = RedisUtils.getPrimaryKey(TableEnum.T_FIELD, ids);
+ fieldList = redisManager.hgetAllBatchByPrimaryKeys(keys, Field.class);
+ } else {
+ Map paramMap = new HashMap<>();
+ paramMap.put("organId", organId);
+ paramMap.put("Ids", ids);
+ fieldList = fieldMapper.findFieldByIdsbyorganId(paramMap);
+ }
+ return fieldList;
+ }
+
+ @Override
+ public List selectFieldListByEns(List fieldEnList) {
+ List fieldList = null;
+ if(Constants.switchFlag.ON.equals(configHolder.getCacheSwitch())){
+ Long organId = SessionManager.getSession().getOrganId();
+ List keys = fieldEnList.stream().map(item -> {
+ String fieldEnStr = Constants.fieldName.fieldEn + ":" + organId + ":" + item;
+ String fieldEnKey = RedisUtils.getPrimaryKey(TableEnum.T_FIELD, fieldEnStr);
+ return fieldEnKey;
+ }).collect(Collectors.toList());
+
+ fieldList = redisManager.hgetAllBatchByPrimaryKeys(keys, Field.class);
+
+ } else {
+ fieldList = fieldMapper.selectFieldListByEns(fieldEnList);
+ }
+ return fieldList;
+ }
+
+ @Override
+ public Field findByFieldEnbyorganId(Long organId, String fieldEn) {
+ Field field = null;
+ if(Constants.switchFlag.ON.equals(configHolder.getCacheSwitch())){
+ String fieldEnStr = Constants.fieldName.fieldEn + ":" + organId + ":" + fieldEn;
+ String fieldEnKey = RedisUtils.getPrimaryKey(TableEnum.T_FIELD, fieldEnStr);
+ field = redisManager.getByPrimaryKey(fieldEnKey, Field.class);
+ // todo 是否需要status = 1判断
+ } else {
+ Map paramMap = new HashMap();
+ paramMap.put("organId", organId);
+ paramMap.put("fieldEn", fieldEn);
+ field = fieldMapper.findByFieldEnbyorganId(paramMap);
+ }
+ return field;
+ }
+
+ @Override
+ public Field findByFieldCnbyorganId(Long organId, String fieldCn) {
+ Field field = null;
+ if(Constants.switchFlag.ON.equals(configHolder.getCacheSwitch())){
+ String fieldCnStr = Constants.fieldName.fieldCn + ":" + organId + ":" + fieldCn;
+ String fieldCnKey = RedisUtils.getPrimaryKey(TableEnum.T_FIELD, fieldCnStr);
+ field = redisManager.getByPrimaryKey(fieldCnKey, Field.class);
+ // todo 是否需要status = 1判断
+ } else {
+ Map paramMap = new HashMap();
+ paramMap.put("organId", organId);
+ paramMap.put("fieldCn", fieldCn);
+ field = fieldMapper.findByFieldCnbyorganId(paramMap);
+ }
+ return field;
+ }
+
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/vo/FieldEnumVo.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/vo/FieldEnumVo.java
new file mode 100644
index 0000000..dcab312
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/vo/FieldEnumVo.java
@@ -0,0 +1,29 @@
+package com.baoying.enginex.executor.datamanage.vo;
+
+import com.baoying.enginex.executor.datamanage.model.Field;
+
+import java.util.List;
+
+
+public class FieldEnumVo {
+
+ private Field field;
+
+ private List enums;
+
+ public Field getField() {
+ return field;
+ }
+
+ public void setField(Field field) {
+ this.field = field;
+ }
+
+ public List getEnums() {
+ return enums;
+ }
+
+ public void setEnums(List enums) {
+ this.enums = enums;
+ }
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/vo/FieldExcelVo.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/vo/FieldExcelVo.java
new file mode 100644
index 0000000..be106f7
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/vo/FieldExcelVo.java
@@ -0,0 +1,150 @@
+package com.baoying.enginex.executor.datamanage.vo;
+
+import java.util.Date;
+
+public class FieldExcelVo {
+
+ /**
+ * 主键
+ * */
+ private Integer id;
+
+ /**
+ * 字段英文名
+ * */
+ private String fieldEn;
+
+ /**
+ * 字段中文名
+ * */
+ private String fieldCn;
+
+ /**
+ * 字段类型名称
+ * */
+ private String fieldType;
+
+ /**
+ * 字段存值类型
+ * */
+ private String valueType;
+
+ /**
+ * 字段约束范围
+ * */
+ private String valueScope;
+
+ /**
+ * 是否衍生字段
+ * */
+ private String isDerivative;
+
+ /**
+ * 是否输出字段
+ * */
+ private String isOutput;
+
+ /**
+ * 衍生字段公式
+ * */
+ private String formula;
+
+ /**
+ * 创建人
+ * */
+ private String author;
+
+ /**
+ * 创建时间
+ * */
+ private Date created;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getFieldEn() {
+ return fieldEn;
+ }
+
+ public void setFieldEn(String fieldEn) {
+ this.fieldEn = fieldEn;
+ }
+
+ public String getFieldCn() {
+ return fieldCn;
+ }
+
+ public void setFieldCn(String fieldCn) {
+ this.fieldCn = fieldCn;
+ }
+
+ public String getFieldType() {
+ return fieldType;
+ }
+
+ public void setFieldType(String fieldType) {
+ this.fieldType = fieldType;
+ }
+
+ public String getValueType() {
+ return valueType;
+ }
+
+ public void setValueType(String valueType) {
+ this.valueType = valueType;
+ }
+
+ public String getValueScope() {
+ return valueScope;
+ }
+
+ public void setValueScope(String valueScope) {
+ this.valueScope = valueScope;
+ }
+
+ public String getIsDerivative() {
+ return isDerivative;
+ }
+
+ public void setIsDerivative(String isDerivative) {
+ this.isDerivative = isDerivative;
+ }
+
+ public String getIsOutput() {
+ return isOutput;
+ }
+
+ public void setIsOutput(String isOutput) {
+ this.isOutput = isOutput;
+ }
+
+ public String getFormula() {
+ return formula;
+ }
+
+ public void setFormula(String formula) {
+ this.formula = formula;
+ }
+
+ public String getAuthor() {
+ return author;
+ }
+
+ public void setAuthor(String author) {
+ this.author = author;
+ }
+
+ public Date getCreated() {
+ return created;
+ }
+
+ public void setCreated(Date created) {
+ this.created = created;
+ }
+
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/vo/FieldFormulaVo.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/vo/FieldFormulaVo.java
new file mode 100644
index 0000000..1a58aff
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/vo/FieldFormulaVo.java
@@ -0,0 +1,89 @@
+package com.baoying.enginex.executor.datamanage.vo;
+
+import java.io.Serializable;
+
+public class FieldFormulaVo implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ // [{fvalue: "0",formula: "a",farr: [{fieldCN:"引擎字段1-1",fieldCond:[{"inputOne":"c","inputThree":"5"},{"inputOne":"b","inputThree":"12"}]},{fieldCN:"通用字段2贷前",fieldCond:[{"inputOne":"(30,40]","inputThree":"5"},{"inputOne":"[45,51)","inputThree":"12"}]}]}];
+
+ /**
+ * 衍生字段公式设置对应的值
+ * */
+ private String fvalue;
+
+ /**
+ * 衍生字段公式
+ * */
+ private String formula;
+
+ /**
+ * 衍生字段公式里字段的条件区域设置
+ * */
+ private Integer idx;
+
+ /**
+ * 衍生字段公式里字段的条件区域设置
+ * */
+ private String farr;
+
+ /**
+ * 衍生字段公式里条件区域设置的某个字段中文名
+ * */
+ private String fieldCN;
+
+ /**
+ * 衍生字段公式里条件区域设置的某个字段的具体设置
+ * */
+ private String fieldCond;
+
+ public String getFvalue() {
+ return fvalue;
+ }
+
+ public void setFvalue(String fvalue) {
+ this.fvalue = fvalue;
+ }
+
+ public String getFormula() {
+ return formula;
+ }
+
+ public void setFormula(String formula) {
+ this.formula = formula;
+ }
+
+ public Integer getIdx() {
+ return idx;
+ }
+
+ public void setIdx(Integer idx) {
+ this.idx = idx;
+ }
+
+ public String getFarr() {
+ return farr;
+ }
+
+ public void setFarr(String farr) {
+ this.farr = farr;
+ }
+
+ public String getFieldCN() {
+ return fieldCN;
+ }
+
+ public void setFieldCN(String fieldCN) {
+ this.fieldCN = fieldCN;
+ }
+
+ public String getFieldCond() {
+ return fieldCond;
+ }
+
+ public void setFieldCond(String fieldCond) {
+ this.fieldCond = fieldCond;
+ }
+
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/vo/FieldSubCondVo.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/vo/FieldSubCondVo.java
new file mode 100644
index 0000000..12955c3
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/datamanage/vo/FieldSubCondVo.java
@@ -0,0 +1,108 @@
+package com.baoying.enginex.executor.datamanage.vo;
+
+import java.io.Serializable;
+
+public class FieldSubCondVo implements Serializable{
+
+ private static final long serialVersionUID = 1L;
+
+ //[{"fieldId":"43","operator":"in","fieldValue":"b","logical":"and"}]
+
+ /**
+ * 条件字段编号
+ * */
+ private Integer fieldId;
+
+ /**
+ * 条件字段的运算符
+ * */
+ private String operator;
+
+ /**
+ * 条件字段的条件设置值
+ * */
+ private String fieldValue;
+
+ /**
+ * 条件字段间的逻辑符
+ * */
+ private String logical;
+
+ /**
+ * 条件字段的值类型
+ * */
+ private Integer valueType;
+
+ /**
+ * 条件字段的取值范围
+ * */
+ private String valueScope;
+
+ /**
+ * 条件字段的取值范围拆解后的数组
+ * */
+ private String[] values;
+
+ /**
+ * 条件字段的字段名
+ */
+ private String fieldCn;
+
+
+ public Integer getFieldId() {
+ return fieldId;
+ }
+ public void setFieldId(Integer fieldId) {
+ this.fieldId = fieldId;
+ }
+ public String getOperator() {
+ return operator;
+ }
+ public void setOperator(String operator) {
+ this.operator = operator;
+ }
+ public String getFieldValue() {
+ return fieldValue;
+ }
+ public void setFieldValue(String fieldValue) {
+ this.fieldValue = fieldValue;
+ }
+ public String getLogical() {
+ return logical;
+ }
+ public void setLogical(String logical) {
+ this.logical = logical;
+ }
+ public Integer getValueType() {
+ return valueType;
+ }
+ public void setValueType(Integer valueType) {
+ this.valueType = valueType;
+ }
+ public String getValueScope() {
+ return valueScope;
+ }
+ public void setValueScope(String valueScope) {
+ this.valueScope = valueScope;
+ }
+ public String[] getValues() {
+ if(valueType == 3){
+ values = valueScope.split(",");
+ }else{
+ values = new String[]{valueScope};
+ }
+ return values;
+ }
+ public void setValues(String[] values) {
+ this.values = values;
+ }
+ public String getFieldCn() {
+ return fieldCn;
+ }
+ public void setFieldCn(String fieldCn) {
+ this.fieldCn = fieldCn;
+ }
+
+
+
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/engine/consts/EngineConst.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/engine/consts/EngineConst.java
new file mode 100644
index 0000000..d94a29f
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/engine/consts/EngineConst.java
@@ -0,0 +1,20 @@
+package com.baoying.enginex.executor.engine.consts;
+
+
+public class EngineConst {
+
+ /**
+ * 版本部署状态
+ */
+ public static final int BOOT_STATE_DEPLOY = 1;
+
+ /**
+ * 版本未部署状态
+ */
+ public static final int BOOT_STATE_UNDEPLOY = 0;
+
+ /**
+ * 决策选项结果集key
+ */
+ public static final String DECISION_COLLECTION_KEY = "formulaList";
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/engine/consts/EngineMsg.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/engine/consts/EngineMsg.java
new file mode 100644
index 0000000..564e1cb
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/engine/consts/EngineMsg.java
@@ -0,0 +1,29 @@
+package com.baoying.enginex.executor.engine.consts;
+
+public class EngineMsg {
+
+ /**
+ * 部署成功
+ */
+ public static final int STATUS_SUCCESS = 1;
+
+ public static final String DEPLOY_SUCCESS = "部署成功!";
+
+ public static final String UNDEPLOY_SUCCESS = "当前版本已停用!";
+
+ /**
+ * 部署失败
+ */
+ public static final int STATUS_FAILED = 0;
+
+ public static final String DEPLOY_FAILED = "部署失败!";
+
+ public static final String UNDEPLOY_FAILED = "停用当前版本失败!";
+
+ public static final String DELETE_RUNNING_FAILED = "当前版本正在运行,不能删除!";
+
+ public static final String DELETE_VERSION_SUCCESS = "当前版本删除成功!";
+
+ public static final String DELETE_VERSION_FAILED = "未知异常,当前版本删除失败!";
+
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/engine/consts/EngineOperator.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/engine/consts/EngineOperator.java
new file mode 100644
index 0000000..7f9bbc3
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/engine/consts/EngineOperator.java
@@ -0,0 +1,151 @@
+package com.baoying.enginex.executor.engine.consts;
+
+
+public class EngineOperator {
+
+ /*---------------------------- 关系运算符 ----------------------------*/
+
+ public static final String OPERATOR_AND_RELATION = "&&";
+
+ public static final String OPERATOR_OR_RELATION = "||";
+
+ public static final String OPERATOR_NOT_RELATION = "!";
+
+ public static final String OPERATOR_EQUALS_RELATION = "==";
+
+ public static final String OPERATOR_GREATER_RELATION = ">";
+
+ public static final String OPERATOR_GREATER_EQUALS_RELATION = ">=";
+
+ public static final String OPERATOR_LESS_RELATION = "<";
+
+ public static final String OPERATOR_LESS_EQUALS_RELATION = "<=";
+
+ public static final String OPERATOR_NOT_EQUALS_RELATION = "!=";
+
+ public static final String OPERATOR_AND_STRING_RELATION = "AND";
+
+ public static final String OPERATOR_OR_STRING_RELATION = "OR";
+
+ /*---------------------------- 数学运算符 ----------------------------*/
+
+ public static final String OPERATOR_ADD_MATH = "+";
+
+ public static final String OPERATOR_MINUS_MATH = "-";
+
+ public static final String OPERATOR_MULITI_MATH = "*";
+
+ public static final String OPERATOR_DIVIDE_MATH = "/";
+
+ public static final String OPERATOR_MODULU_MATH = "%";
+
+ public static final String OPERATOR_ABS_MATH = "abs";
+
+ public static final String OPERATOR_ACOS_MATH = "acos";
+
+ public static final String OPERATOR_ASIN_MATH = "asin";
+
+ public static final String OPERATOR_ATAN_MATH = "atan";
+
+ public static final String OPERATOR_ATAN2_MATH = "atan2";
+
+ public static final String OPERATOR_AVERAGE_MATH = "avg";
+
+ public static final String OPERATOR_CEIL_MATH = "ceil";
+
+ public static final String OPERATOR_COS_MATH = "cos";
+
+ public static final String OPERATOR_EXP_MATH = "exp";
+
+ public static final String OPERATOR_FLOOR_MATH = "floor";
+
+ public static final String OPERATOR_IEEE_MATH = "IEEEremainder";
+
+ public static final String OPERATOR_LN_MATH = "ln";
+
+ public static final String OPERATOR_LOG_MATH = "log";
+
+ public static final String OPERATOR_MAX_MATH = "max";
+
+ public static final String OPERATOR_MIN_MATH = "min";
+
+ public static final String OPERATOR_POW_MATH = "pow";
+
+ public static final String OPERATOR_RANDOM_MATH = "random";
+
+ public static final String OPERATOR_RINT_MATH = "rint";
+
+ public static final String OPERATOR_ROUND_MATH = "round";
+
+ public static final String OPERATOR_SIN_MATH = "sin";
+
+ public static final String OPERATOR_SQRT_MATH = "sqrt";
+
+ public static final String OPERATOR_SUM_MATH = "sum";
+
+ public static final String OPERATOR_TAN_MATH = "tan";
+
+ public static final String OPERATOR_TODEGREES_MATH = "toDegrees";
+
+ public static final String OPERATOR_TORADIANS_MATH = "toRadians";
+
+ /*---------------------------- 字符串运算符 ----------------------------*/
+
+ public static final String OPERATOR_CHARAT_STRING = "charAt";
+
+ public static final String OPERATOR_COMPARE_STRING = "compareTo";
+
+ public static final String OPERATOR_CTIC_STRING = "compareToIgnoreCase";
+
+ public static final String OPERATOR_CONCAT_STRING = "concat";
+
+ public static final String OPERATOR_ENDSWITH_STRING = "endsWith";
+
+ public static final String OPERATOR_EIC_STRING = "equalsIgnoreCase";
+
+ public static final String OPERATOR_EVAL_STRING = "eval";
+
+ public static final String OPERATOR_INDEXOF_STRING = "indexOf";
+
+ public static final String OPERATOR_LASTINDEXOF_STRING = "lastIndexOf";
+
+ public static final String OPERATOR_LENGTH_STRING = "length";
+
+ public static final String OPERATOR_REPLACE_STRING = "replace";
+
+ public static final String OPERATOR_STARTSWITH_STRING = "startsWith";
+
+ public static final String OPERATOR_SUB_STRING = "substring";
+
+ public static final String OPERATOR_TLC_STRING = "toLowerCase";
+
+ public static final String OPERATOR_TUC_STRING = "toUpperCase";
+
+ public static final String OPERATOR_TRIM_STRING = "trim";
+
+ public static final String OPERATOR_CONTAINS_STRING = "contains";
+
+ public static final String OPERATOR_UNCONTAINS_STRING = "notContains";
+
+ public static final String OPERATOR_EQUALS_STRING = "equals";
+
+ public static final String OPERATOR_UNEQUALS_STRING = "notEquals";
+
+ /*---------------------------- 符号 ----------------------------*/
+
+ public static final String OPERATOR_LEFT_BRACE = "{";
+
+ public static final String OPERATOR_RIGHT_BRACE = "}";
+
+ public static final String OPERATOR_VARIABLE_LEFT = "#"+OPERATOR_LEFT_BRACE;
+
+ public static final String OPERATOR_VARIABLE_RIGHT = "}";
+
+ public static final String OPERATOR_LEFT_PARENTHESES = "(";
+
+ public static final String OPERATOR_RIGHT_PARENTHESES = ")";
+
+ public static final String OPERATOR_LEFT_BRACKET = "[";
+
+ public static final String OPERATOR_RIGHT_BRACKET = "]";
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/engine/consts/EnumConst.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/engine/consts/EnumConst.java
new file mode 100644
index 0000000..d57c954
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/engine/consts/EnumConst.java
@@ -0,0 +1,47 @@
+package com.baoying.enginex.executor.engine.consts;
+
+
+public class EnumConst {
+
+ public static final String NODE_START = "开始";
+
+ public static final String NODE_POLICY = "政策规则";
+
+ public static final String NODE_CLASSIFY = "客户分群";
+
+ public static final String NODE_SCORECARD = "评分卡";
+
+ public static final String NODE_BLACK = "黑名单";
+
+ public static final String NODE_WHITE = "白名单";
+
+ public static final String NODE_SANDBOX = "沙盒比例";
+
+ public static final String NODE_CREDIT_LEVEL = "信用评级";
+
+ public static final String NODE_DECISION = "决策选项";
+
+ public static final String NODE_QUOTA_CALC = "额度计算";
+
+ public static final String NODE_REPORT = "报表分析";
+
+ public static final String NODE_CUSTOMIZE = "自定义按钮";
+
+ public static final String NODE_COMPLEXRULE = "复杂规则";
+
+ public static final String NODE_CHILD_ENGINE = "子引擎";
+
+ public static final String NODE_MODEL = "模型";
+
+ public static final String DECISION_TABLES = "决策表";
+
+ public static final String DECISION_TREE = "决策树";
+
+ public static final String NODE_RPC = "远程调用";
+
+ public static final String NODE_PARALLEL = "并行";
+
+ public static final String NODE_AGGREGATION = "聚合";
+
+ public static final String NODE_CHAMPION_CHALLENGE= "冠军挑战";
+}
diff --git a/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/engine/controller/ApiController.java b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/engine/controller/ApiController.java
new file mode 100644
index 0000000..fb2a01b
--- /dev/null
+++ b/jar-enginex-runner/src/main/java/com/baoying/enginex/executor/engine/controller/ApiController.java
@@ -0,0 +1,119 @@
+package com.baoying.enginex.executor.engine.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baoying.enginex.executor.engine.model.DecisionReqModel;
+import com.baoying.enginex.executor.engine.service.EngineApiService;
+import com.baoying.enginex.executor.engine.thread.EngineCallable;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+
+@Controller
+@RequestMapping("/QueryString")
+public class ApiController {
+
+ private static final Logger logger = LoggerFactory.getLogger(ApiController.class);
+
+ @Autowired
+ public EngineApiService engineApiService;
+
+ @RequestMapping(value = "/decision", method = {RequestMethod.POST, RequestMethod.GET}, produces = "application/json;charset=UTF-8")
+ @ResponseBody
+ public String decision(String ts, String nonce, String act, String pid, String uid, String sign, String token, String paramJson, String fields) {
+ logger.info("请求参数--" + "ts:" + ts + ",nonce:" + nonce + ",act:" + act + ",pid:" + pid + ",uid:" + uid + ", sign:" + sign + ",token:" + token + ",paramJson" + paramJson);
+ Map map = new HashMap<>();
+ map.put("ts", ts);
+ map.put("nonce", nonce);
+ map.put("act", act);
+ map.put("pid", pid);
+ map.put("uid", uid);
+ map.put("token", token);
+ JSONObject jsonObject = JSONObject.parseObject(paramJson);
+ if (jsonObject.getInteger("reqType") == 2) {
+ map.put("version", jsonObject.getInteger("version"));
+ map.put("subversion", jsonObject.getInteger("subversion"));
+ }
+ map.put("reqType", jsonObject.getInteger("reqType"));
+ map.put("engineId", jsonObject.getLong("engineId"));
+ map.put("organId", jsonObject.getLong("organId"));
+ map.put("sign", jsonObject.getString("sign"));
+
+ Map requestFields = new HashMap<>();
+ if(StringUtils.isNotBlank(fields)){
+ requestFields = JSONObject.parseObject(fields, Map.class);
+ }
+ map.put("fields", requestFields);
+ String result = engineApiService.engineApi(map);
+ logger.info("uid:" + uid + " 响应参数--" + "result:" + result);
+ return result;
+ }
+
+ @RequestMapping(value = "/batchDecision", method = {RequestMethod.POST, RequestMethod.GET}, produces = "application/json;charset=UTF-8")
+ @ResponseBody
+ public String batchDecision(HttpServletResponse response, String ts, String nonce, String act, String sign, String token, int reqType, Long engineId, Long organId, String paramJson) {
+ List resultList = new ArrayList<>();
+ Map resultMap = new HashMap<>();
+
+ List