├── .flattened-pom.xml ├── .gitignore ├── Dockerfile ├── LICENSE ├── README.md ├── doc ├── SERVER_DOC_V1.md └── images │ ├── image-20240723163558318.png │ ├── image-20240723164526576.png │ ├── image-20240723164715964.png │ ├── image-20241224164743320.png │ ├── image-20250304110242562.png │ ├── image-20250310141748125.png │ ├── image-20250310142133613.png │ ├── image-20250310142537115.png │ ├── image-20250310143025315.png │ ├── image-20250310144422419.png │ ├── image-20250310145013080.png │ ├── liuchengtu_1.png │ └── test-rule-mind.png ├── expression-mind-map-client-starter ├── .flattened-pom.xml ├── README.md ├── READMEV2.md ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── liukx │ │ │ └── expression │ │ │ └── engine │ │ │ └── client │ │ │ ├── api │ │ │ ├── ClientEngineInvokeService.java │ │ │ ├── ConfigRefreshService.java │ │ │ ├── DocumentApiExecutor.java │ │ │ ├── ExpressFunctionDocumentLoader.java │ │ │ ├── ExpressVariableDocumentLoader.java │ │ │ ├── ExpressVariableTypeDocumentLoader.java │ │ │ ├── ExpressionAsyncThreadExecutor.java │ │ │ ├── ExpressionConfigExecutorIntercept.java │ │ │ ├── ExpressionExecutorFilter.java │ │ │ ├── ExpressionExecutorPostProcessor.java │ │ │ ├── ExpressionFunctionFilter.java │ │ │ ├── ExpressionFunctionPostProcessor.java │ │ │ ├── ExpressionFunctionRegister.java │ │ │ ├── ExpressionVariableRegister.java │ │ │ ├── GroupNameService.java │ │ │ ├── RemoteExpressionConfigService.java │ │ │ ├── RemoteHttpService.java │ │ │ ├── config │ │ │ │ ├── ExpressionConfigCallManager.java │ │ │ │ ├── HttpCacheExpressionConfigService.java │ │ │ │ ├── HttpExpressionConfigService.java │ │ │ │ └── RedisExpressionConfigService.java │ │ │ ├── configurability │ │ │ │ ├── AbstractExecutorConfigurabilityProcessor.java │ │ │ │ ├── AbstractExpressionConfigurabilityProcessor.java │ │ │ │ └── TraceSwitchConfigurabilityProcessor.java │ │ │ └── thread │ │ │ │ └── ExpressionSpringThreadExecutor.java │ │ │ ├── collect │ │ │ ├── ExecutorTraceCollectIntercept.java │ │ │ └── ExpressionDocCollect.java │ │ │ ├── config │ │ │ ├── ExpClientEnginAutoConfiguration.java │ │ │ ├── ExpressionConfiguration.java │ │ │ └── props │ │ │ │ └── ExpressionProperties.java │ │ │ ├── engine │ │ │ ├── ClientEngineFactory.java │ │ │ ├── DiscoveryClientService.java │ │ │ ├── ExpressionEnvContext.java │ │ │ ├── LocalEngineServiceImpl.java │ │ │ ├── RemoteASyncEngineServiceImpl.java │ │ │ └── RemoteSyncEngineServiceImpl.java │ │ │ ├── enums │ │ │ ├── EnginCacheKeyEnums.java │ │ │ ├── EngineCallType.java │ │ │ ├── ExecutorCoxnfigurabilitySwitchEnum.java │ │ │ ├── ExpressionConfigCallEnum.java │ │ │ └── ExpressionCoxnfigurabilitySwitchEnum.java │ │ │ ├── example │ │ │ ├── DemoEnvRegister.java │ │ │ ├── DemoFunDescDefinitionService.java │ │ │ └── DemoSendPointFunction.java │ │ │ ├── factory │ │ │ └── ExpressionExecutorFactory.java │ │ │ ├── feature │ │ │ ├── ExpressionConfigIdFilterSupport.java │ │ │ ├── ExpressionFunctionNameFilterSupport.java │ │ │ └── ExpressionVarConfigRegisterSupport.java │ │ │ ├── function │ │ │ ├── BaseFunctionDescEnum.java │ │ │ ├── FnDayRangeFunction.java │ │ │ ├── FnDebugObjectFunction.java │ │ │ ├── FnDebugRequestFunction.java │ │ │ ├── FnEnvAddListFunction.java │ │ │ ├── FnEnvGetFunction.java │ │ │ ├── FnEnvMethodExecutorFunction.java │ │ │ ├── FnEnvPutValueFunction.java │ │ │ ├── FnForceEndFunction.java │ │ │ ├── FnHoursRangeFunction.java │ │ │ ├── FnInEndFunction.java │ │ │ ├── FnObjectIsNotNull.java │ │ │ ├── FnRecordResultContextFunction.java │ │ │ ├── FnReturnFunction.java │ │ │ └── FnTopEndFunction.java │ │ │ ├── helper │ │ │ └── ConfigurabilityHelper.java │ │ │ ├── http │ │ │ └── RestRemoteHttpService.java │ │ │ ├── log │ │ │ ├── LogEventEnum.java │ │ │ ├── LogHelper.java │ │ │ ├── LogTraceService.java │ │ │ └── Sl4jLogServiceImpl.java │ │ │ ├── process │ │ │ ├── AbstractDynamicVariableDefinition.java │ │ │ ├── AbstractExpressionFunctionDefinition.java │ │ │ ├── AbstractExpressionService.java │ │ │ ├── AbstractJavaTypeFunction.java │ │ │ ├── AbstractSimpleFunction.java │ │ │ ├── AviatorEvaluatorServiceImpl.java │ │ │ ├── ExpressDocumentManager.java │ │ │ ├── ExpressVariableTypeDocumentLoaderImpl.java │ │ │ ├── ExpressionFilterChain.java │ │ │ ├── ExpressionVariableManager.java │ │ │ ├── ExpressionVariableProcessAdaptor.java │ │ │ └── FunctionFilterChain.java │ │ │ ├── router │ │ │ └── RouterController.java │ │ │ └── variable │ │ │ ├── AbstractExpressionVariableContextProcessor.java │ │ │ ├── BaseEnvDateLocalDateTimeVariable.java │ │ │ ├── BaseVariableEnums.java │ │ │ └── VariableDefinitionalService.java │ └── resources │ │ └── META-INF │ │ ├── spring.factories │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ └── test │ ├── java │ └── com │ │ └── liukx │ │ └── expression │ │ └── engine │ │ ├── AviatorCase.java │ │ ├── ClientServer.java │ │ └── ClientSpringCase.java │ └── resources │ └── application.yml ├── expression-mind-map-core ├── .flattened-pom.xml ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── liukx │ │ └── expression │ │ └── engine │ │ └── core │ │ ├── anno │ │ ├── FunctionKey.java │ │ ├── PropertyDefinition.java │ │ └── VariableKey.java │ │ ├── api │ │ └── model │ │ │ ├── ApiResult.java │ │ │ ├── ClientExpressionSubmitRequest.java │ │ │ ├── ConfigDiscoverRequest.java │ │ │ ├── ExpressionBaseRequest.java │ │ │ ├── ExpressionConfigInfo.java │ │ │ ├── ExpressionConfigTreeModel.java │ │ │ ├── ExpressionExecutorService.java │ │ │ ├── ExpressionService.java │ │ │ ├── FunctionRequestDocumentModel.java │ │ │ ├── TranslateResult.java │ │ │ ├── ValidatorResult.java │ │ │ └── api │ │ │ ├── ExpressionExecutorResultDTO.java │ │ │ ├── ExpressionFunctionResultDTO.java │ │ │ ├── ExpressionResultLogCollect.java │ │ │ ├── ExpressionResultLogDTO.java │ │ │ ├── FunctionApiModel.java │ │ │ ├── GlobalExpressionDocInfo.java │ │ │ ├── RemoteExecutorRequest.java │ │ │ ├── RemoteExpressionModel.java │ │ │ └── VariableApiModel.java │ │ ├── consts │ │ └── ExpressionConstants.java │ │ ├── enums │ │ ├── ExpressionKeyTypeEnums.java │ │ ├── ExpressionLogTypeEnum.java │ │ ├── ExpressionTypeEnum.java │ │ └── ExpressionVariableTypeEnums.java │ │ ├── helper │ │ └── ExpressionContextHelper.java │ │ ├── model │ │ └── ContextTemplateRequest.java │ │ ├── provider │ │ ├── JavadocProvider.java │ │ └── SpringDocJavadocProvider.java │ │ └── utils │ │ ├── ClassUtils.java │ │ ├── Jsons.java │ │ └── Jsons2.java │ └── test │ └── java │ └── com │ └── liukx │ └── expression │ └── engine │ └── core │ └── utils │ └── JsonsTest.java ├── expression-mind-map-server ├── .flattened-pom.xml ├── README.md ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── liukx │ │ └── expression │ │ └── engine │ │ └── server │ │ ├── BootApplication.java │ │ ├── components │ │ ├── SpringHelper.java │ │ ├── SyncDataManager.java │ │ ├── TraceLogHelper.java │ │ └── html │ │ │ ├── DataRender.java │ │ │ ├── DefaultDataRender.java │ │ │ └── HtmlComponentHelper.java │ │ ├── config │ │ ├── AsyncTaskExecutePoolConfig.java │ │ ├── MvcConfigBean.java │ │ ├── RedisConfig.java │ │ ├── ServiceConfiguration.java │ │ ├── Swagger3Config.java │ │ ├── handler │ │ │ └── GlobalErrorHandler.java │ │ └── props │ │ │ └── ExpressionServerProperties.java │ │ ├── constants │ │ ├── BaseConstants.java │ │ └── enums │ │ │ ├── ErrorEnum.java │ │ │ └── ResponseCodeEnum.java │ │ ├── controller │ │ ├── ApiController.java │ │ ├── ClientExecutorController.java │ │ ├── ComponentsController.java │ │ ├── ExecutorExpressionController.java │ │ ├── ExecutorManagerController.java │ │ ├── ExecutorTraceController.java │ │ ├── ExpressionDocController.java │ │ ├── FunctionConfigController.java │ │ ├── GlobalTraceLogController.java │ │ ├── IndexController.java │ │ ├── LinkResultLogController.java │ │ ├── NodeConfigController.java │ │ ├── VariableConfigController.java │ │ └── model │ │ │ └── expression │ │ │ └── ExpressionApiModel.java │ │ ├── enums │ │ ├── RemoteInvokeTypeEnums.java │ │ ├── SyncDataEnums.java │ │ └── TraceStageEnums.java │ │ ├── event │ │ ├── ExecutorConfigRefreshEvent.java │ │ └── listener │ │ │ └── ExecutorConfigRefreshListener.java │ │ ├── exception │ │ ├── BusinessException.java │ │ └── Throws.java │ │ ├── executor │ │ ├── ExpressionExecutor.java │ │ ├── ExpressionRemoteInvoker.java │ │ ├── RemoteNodeExecutor.java │ │ ├── RemoteTypeManager.java │ │ └── impl │ │ │ ├── HttpRemoteInvoke.java │ │ │ └── InternalServiceInvoke.java │ │ ├── expression │ │ ├── LocalFunctionRegister.java │ │ ├── LocalVariableRegister.java │ │ ├── RemoteFunctionRegister.java │ │ └── model │ │ │ └── function │ │ │ └── TestUserModel.java │ │ ├── handler │ │ └── LoginHandler.java │ │ ├── mapper │ │ ├── ExpressionConfigMapper.java │ │ ├── ExpressionExecutorConfigMapper.java │ │ ├── ExpressionFunctionConfigMapper.java │ │ ├── ExpressionGlobalTraceLogMapper.java │ │ ├── ExpressionLinkResultLogMapper.java │ │ ├── ExpressionNodeConfigMapper.java │ │ ├── ExpressionTraceLogIndexMapper.java │ │ ├── ExpressionTraceLogInfoMapper.java │ │ ├── ExpressionVariableConfigMapper.java │ │ └── entity │ │ │ ├── BaseTableEntity.java │ │ │ ├── ExpressionExecutorBaseInfo.java │ │ │ ├── ExpressionExecutorInfoConfig.java │ │ │ ├── ExpressionFunctionConfig.java │ │ │ ├── ExpressionGlobalTraceLog.java │ │ │ ├── ExpressionLinkResultLog.java │ │ │ ├── ExpressionNodeConfig.java │ │ │ ├── ExpressionTraceLogIndex.java │ │ │ ├── ExpressionTraceLogInfo.java │ │ │ └── ExpressionVariableConfig.java │ │ ├── model │ │ └── dto │ │ │ ├── request │ │ │ ├── AddExpressionConfigRequest.java │ │ │ ├── AddExpressionExecutorRequest.java │ │ │ ├── AddExpressionFunctionRequest.java │ │ │ ├── AddExpressionNodeRequest.java │ │ │ ├── AddExpressionVariableRequest.java │ │ │ ├── AddGlobalTraceLogRequest.java │ │ │ ├── AddLinkResultLogRequest.java │ │ │ ├── DeleteByIdListRequest.java │ │ │ ├── EditExpressionConfigRequest.java │ │ │ ├── EditExpressionExecutorRequest.java │ │ │ ├── EditExpressionFunctionRequest.java │ │ │ ├── EditExpressionNodeRequest.java │ │ │ ├── EditExpressionVariableRequest.java │ │ │ ├── EditGlobalTraceLogRequest.java │ │ │ ├── EditLinkResultLogRequest.java │ │ │ ├── LoginModel.java │ │ │ ├── PageQuery.java │ │ │ ├── ParamDTO.java │ │ │ ├── QueryExpressionConfigRequest.java │ │ │ ├── QueryExpressionExecutorRequest.java │ │ │ ├── QueryExpressionFunctionRequest.java │ │ │ ├── QueryExpressionNodeRequest.java │ │ │ ├── QueryExpressionTraceRequest.java │ │ │ ├── QueryExpressionVariableRequest.java │ │ │ ├── QueryGlobalTraceLogRequest.java │ │ │ └── QueryLinkResultLogRequest.java │ │ │ └── response │ │ │ ├── ExpressionExecutorBaseDTO.java │ │ │ ├── ExpressionExecutorDetailConfigDTO.java │ │ │ ├── ExpressionFunctionDTO.java │ │ │ ├── ExpressionGlobalTraceLogDTO.java │ │ │ ├── ExpressionLinkResultLogDTO.java │ │ │ ├── ExpressionNodeDTO.java │ │ │ ├── ExpressionTraceInfoDTO.java │ │ │ ├── ExpressionVariableDTO.java │ │ │ └── RestResult.java │ │ ├── service │ │ ├── ExpressionConfigService.java │ │ ├── ExpressionDocService.java │ │ ├── ExpressionExecutorConfigService.java │ │ ├── ExpressionFunctionConfigService.java │ │ ├── ExpressionKeyService.java │ │ ├── ExpressionLinkResultLogService.java │ │ ├── ExpressionNodeConfigService.java │ │ ├── ExpressionTraceLogIndexService.java │ │ ├── ExpressionTraceLogInfoService.java │ │ ├── ExpressionVarTypeService.java │ │ ├── ExpressionVariableConfigService.java │ │ ├── FunctionService.java │ │ ├── GlobalTraceLogService.java │ │ ├── IExpressionLoginService.java │ │ ├── IExpressionTokenService.java │ │ ├── NodeService.java │ │ ├── SyncDataService.java │ │ ├── TraceLogService.java │ │ ├── VariableService.java │ │ ├── impl │ │ │ ├── DefaultExpressionKeyService.java │ │ │ ├── DefaultTraceLogServiceImpl.java │ │ │ ├── ExpressionConfigServiceImpl.java │ │ │ ├── ExpressionExecutorConfigServiceImpl.java │ │ │ ├── ExpressionFunctionConfigServiceImpl.java │ │ │ ├── ExpressionGlobalTraceLogServiceImpl.java │ │ │ ├── ExpressionLinkResultLogServiceImpl.java │ │ │ ├── ExpressionLoginServiceImpl.java │ │ │ ├── ExpressionMd5TokenServiceImpl.java │ │ │ ├── ExpressionNodeConfigServiceImpl.java │ │ │ ├── ExpressionTraceLogIndexServiceImpl.java │ │ │ ├── ExpressionTraceLogInfoServiceImpl.java │ │ │ ├── ExpressionVariableConfigServiceImpl.java │ │ │ ├── doc │ │ │ │ ├── RedisFunctionService.java │ │ │ │ └── RedisVarTypeService.java │ │ │ └── syncData │ │ │ │ └── ExpressionConfigSyncDataServiceImpl.java │ │ └── model │ │ │ ├── doc │ │ │ └── ExpressionDocDto.java │ │ │ ├── function │ │ │ └── FunctionInfoDto.java │ │ │ ├── node │ │ │ └── NodeServiceDto.java │ │ │ ├── sync │ │ │ ├── BaseSyncData.java │ │ │ └── ExpressionExecutorSyncData.java │ │ │ ├── trace │ │ │ └── TraceLogDto.java │ │ │ └── variable │ │ │ └── VariableInfoDto.java │ │ └── util │ │ ├── CodeUtils.java │ │ ├── ConvertObjectUtils.java │ │ ├── CookiesUtil.java │ │ ├── ExpressionUtils.java │ │ ├── MapFlattenUtil.java │ │ └── ServiceCommonUtil.java │ └── resources │ ├── application.yml │ ├── bootstrap.yml │ ├── logback-plus.xml │ ├── mapper │ ├── ExpressionConfigMapper.xml │ ├── ExpressionExecutorConfigMapper.xml │ ├── ExpressionGlobalTraceLogMapper.xml │ ├── ExpressionLinkResultLogMapper.xml │ ├── ExpressionNodeConfigMapper.xml │ ├── ExpressionTraceLogIndexMapper.xml │ ├── ExpressionTraceLogInfoMapper.xml │ ├── ExpressionVariableConfigMapper.xml │ └── GlobalTraceLogService.xml │ ├── static │ └── js │ │ ├── Utils.js │ │ ├── cdn │ │ ├── axios.js │ │ ├── element-plus │ │ │ ├── index.css │ │ │ └── index.full.min.js │ │ ├── jquery-3.3.1.min.js │ │ ├── jsmind │ │ │ ├── jsmind.css │ │ │ ├── jsmind.draggable-node.js │ │ │ ├── jsmind.js │ │ │ └── jsmind.menu.js │ │ ├── json-viewer │ │ │ ├── jquery.json-viewer.css │ │ │ └── jquery.json-viewer.js │ │ ├── layui │ │ │ ├── ext │ │ │ │ └── yutons_sug.js │ │ │ ├── layui.css │ │ │ └── layui.js │ │ └── vue │ │ │ └── vue.global.min.js │ │ ├── engine-const.js │ │ └── httpUtil.js │ └── template │ ├── executor-form.html │ ├── executor-list.html │ ├── expression-rule-config.html │ ├── expressionForm.html │ ├── login.html │ └── trace-list.html ├── pom.xml └── script ├── expression-mind-map-server.yml └── expression_mysql.sql /.gitignore: -------------------------------------------------------------------------------- 1 | target/ 2 | !.mvn/wrapper/maven-wrapper.jar 3 | logs/ 4 | ### STS ### 5 | .apt_generated 6 | .classpath 7 | .factorypath 8 | .project 9 | .settings 10 | .springBeans 11 | 12 | ### IntelliJ IDEA ### 13 | .idea 14 | *.iws 15 | *.iml 16 | *.ipr 17 | 18 | 19 | ### NetBeans ### 20 | nbproject/private/ 21 | build/ 22 | nbbuild/ 23 | dist/ 24 | nbdist/ 25 | .nb-gradle/ 26 | /bin/ 27 | src/main/resources/generator/generatorConfig.xml 28 | /test-output/ 29 | /generator/ 30 | ### LibreOffice template 31 | # LibreOffice locks 32 | .~lock.*# 33 | 34 | ### MicrosoftOffice template 35 | *.tmp 36 | 37 | # Word temporary 38 | ~$*.doc* 39 | 40 | # Word Auto Backup File 41 | Backup of *.doc* 42 | 43 | # Excel temporary 44 | ~$*.xls* 45 | 46 | # Excel Backup File 47 | *.xlk 48 | 49 | # PowerPoint temporary 50 | ~$*.ppt* 51 | 52 | # Visio autosave temporary files 53 | *.~vsd* 54 | 55 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM feifan-cont-registry-vpc.cn-shanghai.cr.aliyuncs.com/hub/openjdk:8-bundle-230315 2 | 3 | COPY ./expression-mind-map-server/target/expression-mind-map-server.jar /app.jar 4 | ENV LANG C.UTF-8 5 | ENV TZ=Asia/Shanghai 6 | ENV JAVA_OPTS="-XX:+UnlockExperimentalVMOptions -XX:+UseContainerSupport -XX:-UseAdaptiveSizePolicy -XX:MaxRAMPercentage=75.00 -XX:InitialRAMPercentage=75.00 -XX:MinRAMPercentage=75.00 -XX:MetaspaceSize=512M -XX:+UseConcMarkSweepGC -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses -XX:+CMSClassUnloadingEnabled -XX:+ParallelRefProcEnabled -XX:+CMSScavengeBeforeRemark -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/root/ -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:+PrintGCApplicationStoppedTime -XX:ErrorFile=/root/hs_err_pid%p.log -Xloggc:/root/gc%t.log -Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Dfile.encoding=UTF-8" 7 | RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone 8 | 9 | WORKDIR / 10 | 11 | EXPOSE 8090 12 | 13 | CMD java $IAST_OPTS $JACOCO_OPTS -server -Djava.security.egd=file:/dev/./urandom $JAVA_OPTS -jar app.jar 14 | -------------------------------------------------------------------------------- /doc/images/image-20240723163558318.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liukaixiong/expression-mind-map-engine/20bee03da597edbf8d013659176df51ba5107bea/doc/images/image-20240723163558318.png -------------------------------------------------------------------------------- /doc/images/image-20240723164526576.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liukaixiong/expression-mind-map-engine/20bee03da597edbf8d013659176df51ba5107bea/doc/images/image-20240723164526576.png -------------------------------------------------------------------------------- /doc/images/image-20240723164715964.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liukaixiong/expression-mind-map-engine/20bee03da597edbf8d013659176df51ba5107bea/doc/images/image-20240723164715964.png -------------------------------------------------------------------------------- /doc/images/image-20241224164743320.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liukaixiong/expression-mind-map-engine/20bee03da597edbf8d013659176df51ba5107bea/doc/images/image-20241224164743320.png -------------------------------------------------------------------------------- /doc/images/image-20250304110242562.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liukaixiong/expression-mind-map-engine/20bee03da597edbf8d013659176df51ba5107bea/doc/images/image-20250304110242562.png -------------------------------------------------------------------------------- /doc/images/image-20250310141748125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liukaixiong/expression-mind-map-engine/20bee03da597edbf8d013659176df51ba5107bea/doc/images/image-20250310141748125.png -------------------------------------------------------------------------------- /doc/images/image-20250310142133613.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liukaixiong/expression-mind-map-engine/20bee03da597edbf8d013659176df51ba5107bea/doc/images/image-20250310142133613.png -------------------------------------------------------------------------------- /doc/images/image-20250310142537115.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liukaixiong/expression-mind-map-engine/20bee03da597edbf8d013659176df51ba5107bea/doc/images/image-20250310142537115.png -------------------------------------------------------------------------------- /doc/images/image-20250310143025315.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liukaixiong/expression-mind-map-engine/20bee03da597edbf8d013659176df51ba5107bea/doc/images/image-20250310143025315.png -------------------------------------------------------------------------------- /doc/images/image-20250310144422419.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liukaixiong/expression-mind-map-engine/20bee03da597edbf8d013659176df51ba5107bea/doc/images/image-20250310144422419.png -------------------------------------------------------------------------------- /doc/images/image-20250310145013080.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liukaixiong/expression-mind-map-engine/20bee03da597edbf8d013659176df51ba5107bea/doc/images/image-20250310145013080.png -------------------------------------------------------------------------------- /doc/images/liuchengtu_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liukaixiong/expression-mind-map-engine/20bee03da597edbf8d013659176df51ba5107bea/doc/images/liuchengtu_1.png -------------------------------------------------------------------------------- /doc/images/test-rule-mind.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liukaixiong/expression-mind-map-engine/20bee03da597edbf8d013659176df51ba5107bea/doc/images/test-rule-mind.png -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/api/ClientEngineInvokeService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.api; 2 | 3 | import com.liukx.expression.engine.client.engine.ExpressionEnvContext; 4 | import com.liukx.expression.engine.client.enums.EngineCallType; 5 | import com.liukx.expression.engine.core.api.model.ClientExpressionSubmitRequest; 6 | 7 | import java.util.Map; 8 | 9 | public interface ClientEngineInvokeService { 10 | 11 | EngineCallType type(); 12 | 13 | /** 14 | * 引擎执行方法 15 | * {@link ClientEngineInvokeService#invoke(ClientExpressionSubmitRequest, ExpressionEnvContext)} 16 | * 17 | * @param request 请求参数 18 | * @param envContext 上下文事件 19 | * @return 20 | */ 21 | @Deprecated 22 | default Object invoke(ClientExpressionSubmitRequest request, Map envContext) { 23 | return invoke(request, new ExpressionEnvContext(envContext)); 24 | } 25 | 26 | /** 27 | * 执行引擎的入口 28 | * @param request 29 | * @param envContext 30 | * @return 31 | */ 32 | Object invoke(ClientExpressionSubmitRequest request, ExpressionEnvContext envContext); 33 | } 34 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/api/ConfigRefreshService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.api; 2 | 3 | /** 4 | * 配置更新事件 5 | * 6 | * @author liukaixiong 7 | * @date 2023/12/13 8 | */ 9 | public interface ConfigRefreshService { 10 | 11 | 12 | /** 13 | * 事件更新触发 14 | * 15 | * @param businessCode 业务编码 16 | */ 17 | public void trigger(String businessCode); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/api/DocumentApiExecutor.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.api; 2 | 3 | 4 | import com.liukx.expression.engine.core.api.model.api.FunctionApiModel; 5 | import com.liukx.expression.engine.core.api.model.api.VariableApiModel; 6 | 7 | import java.util.List; 8 | 9 | public interface DocumentApiExecutor { 10 | 11 | public VariableApiModel getVariableApi(String groupName, String name); 12 | 13 | public FunctionApiModel getFunctionApi(String functionName); 14 | 15 | public List getGroupVariableApi(String group); 16 | 17 | public List getAllVariableApi(); 18 | 19 | public List getAllFunctionApi(); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/api/ExpressFunctionDocumentLoader.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.api; 2 | 3 | import com.liukx.expression.engine.core.api.model.api.FunctionApiModel; 4 | 5 | import java.util.Collections; 6 | import java.util.List; 7 | 8 | public interface ExpressFunctionDocumentLoader { 9 | 10 | /** 11 | * 是否需要动态刷新 12 | * 13 | * @return 14 | */ 15 | default boolean isDynamicRefresh() { 16 | return false; 17 | } 18 | 19 | /** 20 | * 加载函数表 21 | * 22 | * @return 23 | */ 24 | default List loadFunctionList() { 25 | FunctionApiModel functionApiModel = loadFunctionInfo(); 26 | if (functionApiModel != null) { 27 | return Collections.singletonList(functionApiModel); 28 | } 29 | return Collections.emptyList(); 30 | } 31 | 32 | default FunctionApiModel loadFunctionInfo() { 33 | return null; 34 | } 35 | 36 | 37 | } 38 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/api/ExpressVariableDocumentLoader.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.api; 2 | 3 | import com.liukx.expression.engine.core.api.model.api.VariableApiModel; 4 | 5 | import java.util.List; 6 | 7 | public interface ExpressVariableDocumentLoader extends GroupNameService { 8 | 9 | /** 10 | * 是否需要动态刷新 11 | * 12 | * @return 13 | */ 14 | default boolean isDynamicRefresh() { 15 | return false; 16 | } 17 | 18 | /** 19 | * 加载变量列表 20 | * 21 | * @return 22 | */ 23 | public List loadVariableList(); 24 | 25 | /** 26 | * 查看变量信息 27 | * 28 | * @param name 29 | * @return 30 | */ 31 | default VariableApiModel getVariableInfo(String group, String name) { 32 | return null; 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/api/ExpressVariableTypeDocumentLoader.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.api; 2 | 3 | import com.liukx.expression.engine.core.api.model.api.VariableApiModel; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 变量类型加载 9 | */ 10 | public interface ExpressVariableTypeDocumentLoader { 11 | 12 | /** 13 | * 加载函数表 14 | * 15 | * @return 16 | */ 17 | List loadList(); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/api/ExpressionAsyncThreadExecutor.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.api; 2 | 3 | import java.util.concurrent.ExecutorService; 4 | 5 | /** 6 | * 7 | * 8 | * @author liukaixiong 9 | * @date 2025/1/15 - 11:18 10 | */ 11 | public interface ExpressionAsyncThreadExecutor { 12 | 13 | /** 14 | * 异步执行 15 | */ 16 | ExecutorService executorService(); 17 | } 18 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/api/ExpressionConfigExecutorIntercept.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.api; 2 | 3 | import com.liukx.expression.engine.client.engine.ExpressionEnvContext; 4 | import com.liukx.expression.engine.core.api.model.ExpressionBaseRequest; 5 | import com.liukx.expression.engine.core.api.model.ExpressionConfigTreeModel; 6 | 7 | /** 8 | * 表达式类型回调 9 | * 10 | * @author liukaixiong 11 | * @date 2024/6/24 - 17:38 12 | */ 13 | public interface ExpressionConfigExecutorIntercept { 14 | 15 | default void before(ExpressionConfigTreeModel expressionType, ExpressionBaseRequest baseRequest, ExpressionEnvContext envContext) { 16 | 17 | } 18 | 19 | /** 20 | * 执行器回调 21 | * 22 | * @param expressionType 表达式对象 23 | * @param baseRequest 请求参数 24 | * @param envContext 上下文参数 25 | * @param execute 执行结果 26 | */ 27 | default void after(ExpressionConfigTreeModel expressionType, ExpressionBaseRequest baseRequest, ExpressionEnvContext envContext, Object execute) { 28 | 29 | } 30 | 31 | 32 | /** 33 | * 执行器出现异常的情况 34 | * 35 | * @param expressionType 36 | * @param baseRequest 37 | * @param envContext 38 | * @param e 39 | */ 40 | default void error(ExpressionConfigTreeModel expressionType, ExpressionBaseRequest baseRequest, ExpressionEnvContext envContext, Exception e) { 41 | 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/api/ExpressionExecutorFilter.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.api; 2 | 3 | import com.liukx.expression.engine.client.engine.ExpressionEnvContext; 4 | import com.liukx.expression.engine.client.process.ExpressionFilterChain; 5 | import com.liukx.expression.engine.core.api.model.ExpressionBaseRequest; 6 | import com.liukx.expression.engine.core.api.model.ExpressionConfigInfo; 7 | import com.liukx.expression.engine.core.api.model.ExpressionConfigTreeModel; 8 | 9 | /** 10 | * 表达式过滤链条 11 | * 12 | * @author liukaixiong 13 | * @date 2024/8/23 - 10:10 14 | */ 15 | public interface ExpressionExecutorFilter { 16 | 17 | Object doExpressionFilter(ExpressionEnvContext env, ExpressionConfigInfo configInfo, ExpressionConfigTreeModel configTreeModel, ExpressionBaseRequest request, ExpressionFilterChain chain); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/api/ExpressionExecutorPostProcessor.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.api; 2 | 3 | import com.liukx.expression.engine.client.engine.ExpressionEnvContext; 4 | import com.liukx.expression.engine.core.api.model.ExpressionBaseRequest; 5 | import com.liukx.expression.engine.core.api.model.ExpressionConfigInfo; 6 | 7 | /** 8 | * 执行器拦截处理器 9 | * 10 | * @author liukaixiong 11 | * @date 2024/7/18 - 13:13 12 | */ 13 | public interface ExpressionExecutorPostProcessor { 14 | 15 | 16 | /** 17 | * 前置执行器 18 | * 19 | * @param envContext 20 | * @param baseRequest 21 | * @param configInfo 22 | */ 23 | void beforeExecutor(ExpressionEnvContext envContext, ExpressionBaseRequest baseRequest, ExpressionConfigInfo configInfo); 24 | 25 | 26 | /** 27 | * 后置执行器 28 | * 29 | * @param envContext 30 | * @param baseRequest 31 | * @param configTreeModelList 32 | */ 33 | void afterExecutor(ExpressionEnvContext envContext, ExpressionBaseRequest baseRequest, ExpressionConfigInfo configTreeModelList); 34 | 35 | } 36 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/api/ExpressionFunctionFilter.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.api; 2 | 3 | import com.liukx.expression.engine.client.engine.ExpressionEnvContext; 4 | import com.liukx.expression.engine.client.process.FunctionFilterChain; 5 | import com.liukx.expression.engine.core.api.model.ExpressionBaseRequest; 6 | import com.liukx.expression.engine.core.api.model.ExpressionConfigTreeModel; 7 | import com.liukx.expression.engine.core.api.model.api.FunctionApiModel; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | * 表达式函数过滤 13 | * 14 | * @author liukaixiong 15 | * @date 2024/8/23 - 10:10 16 | */ 17 | public interface ExpressionFunctionFilter { 18 | 19 | Object doFunctionFilter(ExpressionEnvContext env, ExpressionConfigTreeModel configTreeModel, ExpressionBaseRequest request, FunctionApiModel functionInfo, List funcArgs, FunctionFilterChain chain); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/api/ExpressionFunctionRegister.java: -------------------------------------------------------------------------------- 1 | //package com.liukx.expression.engine.client.api; 2 | // 3 | //import model.com.liukx.expression.engine.core.ContextTemplateRequest; 4 | // 5 | //import java.util.Map; 6 | // 7 | //public interface ExpressionFunctionRegister { 8 | // 9 | // /** 10 | // * 是否匹配 11 | // * 12 | // * @param groupName 13 | // * @return 14 | // */ 15 | // default boolean isMatch(String groupName) { 16 | // return true; 17 | // } 18 | // 19 | // /** 20 | // * 查找函数对象 21 | // * 22 | // * @param functionName 函数名称 23 | // * @return 24 | // */ 25 | // public boolean finderFunction(String functionName); 26 | // 27 | // /** 28 | // * 函数执行 29 | // * 30 | // * @param functionName 函数名称 31 | // * @param env 环境变量 32 | // * @param request 请求参数 33 | // * @return 34 | // */ 35 | // public Object call(String functionName, ContextTemplateRequest env, Map request) throws Exception; 36 | // 37 | //} 38 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/api/ExpressionVariableRegister.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.api; 2 | 3 | import com.liukx.expression.engine.core.model.ContextTemplateRequest; 4 | 5 | /** 6 | * 表达式变量 7 | * 8 | * @author liukaixiong 9 | */ 10 | public interface ExpressionVariableRegister extends ExpressVariableDocumentLoader { 11 | 12 | /** 13 | * 组名称 14 | * 15 | * @return 16 | */ 17 | default boolean isMatch(String groupName) { 18 | return true; 19 | } 20 | 21 | /** 22 | * 查找对象 23 | * 24 | * @param name 25 | * @return 26 | */ 27 | public boolean finderVariable(String name); 28 | 29 | /** 30 | * 变量搜索器 31 | * 32 | * @param cache 变量参数 33 | * @return 34 | */ 35 | public Object invoke(String name, ContextTemplateRequest cache); 36 | 37 | 38 | } 39 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/api/GroupNameService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.api; 2 | 3 | public interface GroupNameService { 4 | 5 | String groupName(); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/api/RemoteExpressionConfigService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.api; 2 | 3 | import com.liukx.expression.engine.client.config.props.ExpressionProperties; 4 | import com.liukx.expression.engine.core.api.model.ExpressionConfigInfo; 5 | 6 | /** 7 | * 远端表达式配置获取 8 | * 9 | * @author liukaixiong 10 | * @date 2024/9/10 - 13:33 11 | */ 12 | public interface RemoteExpressionConfigService { 13 | 14 | 15 | /** 16 | * 获取远端配置信息key 17 | * {@link ExpressionProperties#setExpressionConfigCall} 可通过配置文件指定具体实现 18 | * @return 19 | */ 20 | public String configKey(); 21 | 22 | /** 23 | * 获取远端配置信息 24 | * @param serviceName 服务名称 25 | * @param businessCode 业务组编码 26 | * @param executorCode 执行器编码 27 | * @return 28 | */ 29 | public ExpressionConfigInfo getConfigInfo(String serviceName, String businessCode, String executorCode); 30 | 31 | } 32 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/api/RemoteHttpService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.api; 2 | 3 | /** 4 | * 远端访问方式 5 | * 6 | * @author liukaixiong 7 | * @date 2023/12/12 8 | */ 9 | public interface RemoteHttpService { 10 | 11 | public T call(String service, String path, Object body, Class clazz); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/api/config/ExpressionConfigCallManager.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.api.config; 2 | 3 | import com.liukx.expression.engine.client.api.RemoteExpressionConfigService; 4 | import com.liukx.expression.engine.client.config.props.ExpressionProperties; 5 | import com.liukx.expression.engine.core.api.model.ExpressionConfigInfo; 6 | import org.springframework.beans.factory.InitializingBean; 7 | import org.springframework.beans.factory.annotation.Autowired; 8 | 9 | import java.util.List; 10 | import java.util.Map; 11 | import java.util.stream.Collectors; 12 | 13 | /** 14 | * 表达式配置调用管理 15 | * 16 | * @author liukaixiong 17 | * @date 2024/9/11 - 15:41 18 | */ 19 | public class ExpressionConfigCallManager implements InitializingBean { 20 | 21 | @Autowired 22 | private List remoteExpressionConfigServiceList; 23 | 24 | private Map keyMap; 25 | 26 | @Autowired 27 | private ExpressionProperties expressionProperties; 28 | 29 | @Override 30 | public void afterPropertiesSet() throws Exception { 31 | this.keyMap = remoteExpressionConfigServiceList.stream().collect(Collectors.toMap(RemoteExpressionConfigService::configKey, i -> i)); 32 | } 33 | 34 | public ExpressionConfigInfo getConfigInfo(String serviceName, String businessCode, String executorCode) { 35 | return keyMap.get(expressionProperties.getExpressionConfigCall()).getConfigInfo(serviceName, businessCode, executorCode); 36 | } 37 | 38 | 39 | } 40 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/api/config/HttpExpressionConfigService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.api.config; 2 | 3 | import com.liukx.expression.engine.client.api.RemoteExpressionConfigService; 4 | import com.liukx.expression.engine.client.api.RemoteHttpService; 5 | import com.liukx.expression.engine.client.enums.ExpressionConfigCallEnum; 6 | import com.liukx.expression.engine.core.api.model.ConfigDiscoverRequest; 7 | import com.liukx.expression.engine.core.api.model.ExpressionConfigInfo; 8 | import com.liukx.expression.engine.core.consts.ExpressionConstants; 9 | import org.springframework.beans.factory.annotation.Autowired; 10 | 11 | /** 12 | * 远端获取配置 13 | * 从服务端中获取相应的配置信息 14 | * 15 | * @author liukaixiong 16 | * @date 2024/9/10 - 13:45 17 | */ 18 | public class HttpExpressionConfigService implements RemoteExpressionConfigService { 19 | 20 | @Autowired 21 | private RemoteHttpService remoteHttpService; 22 | 23 | @Override 24 | public String configKey() { 25 | return ExpressionConfigCallEnum.http.name(); 26 | } 27 | 28 | @Override 29 | public ExpressionConfigInfo getConfigInfo(String serviceName, String businessCode, String executorCode) { 30 | ConfigDiscoverRequest request = new ConfigDiscoverRequest(); 31 | request.setServiceName(serviceName); 32 | request.setBusinessCode(businessCode); 33 | request.setExecutorCode(executorCode); 34 | return remoteHttpService.call(ExpressionConstants.ENGINE_SERVER_ID, ExpressionConstants.SERVER_CONFIG_DISCOVERY, request, ExpressionConfigInfo.class); 35 | } 36 | 37 | 38 | } 39 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/api/configurability/TraceSwitchConfigurabilityProcessor.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.api.configurability; 2 | 3 | import com.liukx.expression.engine.client.engine.ExpressionEnvContext; 4 | import com.liukx.expression.engine.client.enums.ExecutorCoxnfigurabilitySwitchEnum; 5 | import com.liukx.expression.engine.core.api.model.ExpressionBaseRequest; 6 | import com.liukx.expression.engine.core.api.model.ExpressionConfigInfo; 7 | 8 | /** 9 | * 动态开关追踪能力 10 | * 11 | * @author liukaixiong 12 | * @date 2024/9/11 - 11:36 13 | */ 14 | public class TraceSwitchConfigurabilityProcessor extends AbstractExecutorConfigurabilityProcessor { 15 | 16 | @Override 17 | public void configurabilityExecutor(ExpressionEnvContext envContext, ExpressionBaseRequest baseRequest, ExpressionConfigInfo configInfo) { 18 | // 开启追踪能力 19 | envContext.enableTrace(); 20 | } 21 | 22 | @Override 23 | public ExecutorCoxnfigurabilitySwitchEnum configurabilityKey() { 24 | return ExecutorCoxnfigurabilitySwitchEnum.enableTrace; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/api/thread/ExpressionSpringThreadExecutor.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.api.thread; 2 | 3 | import com.liukx.expression.engine.client.api.ExpressionAsyncThreadExecutor; 4 | import org.slf4j.Logger; 5 | import org.slf4j.LoggerFactory; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; 8 | import org.springframework.util.CollectionUtils; 9 | 10 | import java.util.List; 11 | import java.util.concurrent.ExecutorService; 12 | import java.util.concurrent.ForkJoinPool; 13 | 14 | /** 15 | * 线程池配置 16 | * 17 | * @author liukaixiong 18 | * @date 2025/1/15 - 11:19 19 | */ 20 | public class ExpressionSpringThreadExecutor implements ExpressionAsyncThreadExecutor { 21 | private final Logger log = LoggerFactory.getLogger(ExpressionSpringThreadExecutor.class); 22 | 23 | @Autowired(required = false) 24 | private List threadPoolTaskExecutor; 25 | 26 | @Override 27 | public ExecutorService executorService() { 28 | if (CollectionUtils.isEmpty(threadPoolTaskExecutor)) { 29 | log.debug("尝试启用jdk自带的ForkJoinPool线程池!"); 30 | return ForkJoinPool.commonPool(); 31 | } 32 | return threadPoolTaskExecutor.get(0).getThreadPoolExecutor(); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/enums/EnginCacheKeyEnums.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.enums; 2 | 3 | import com.liukx.expression.engine.core.consts.ExpressionConstants; 4 | import org.apache.commons.lang3.StringUtils; 5 | 6 | import java.time.Duration; 7 | 8 | /** 9 | * @author liukaixiong 10 | * @date 2024/2/20 11 | */ 12 | public enum EnginCacheKeyEnums { 13 | 14 | EXECUTOR_REFRESH_KEY("client_query_config", null), 15 | EXPRESSION_DOC_KEY("expression_doc", null), 16 | EXPRESSION_VAR_TYPE_KEY("expression_var_type", null), 17 | 18 | 19 | ; 20 | 21 | private final String prefix; 22 | private final Duration timeOut; 23 | 24 | EnginCacheKeyEnums(String prefix, Duration timeOut) { 25 | this.prefix = prefix; 26 | this.timeOut = timeOut; 27 | } 28 | 29 | public Duration getTimeOut() { 30 | return timeOut; 31 | } 32 | 33 | public String generateKey(String... key) { 34 | String prefixString = StringUtils.joinWith(":", ExpressionConstants.ENGINE_SERVER_ID, this.prefix); 35 | String keys = StringUtils.join(key, ":"); 36 | return prefixString + ":" + keys; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/enums/EngineCallType.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.enums; 2 | 3 | /** 4 | * @author liukaixiong 5 | * @date 2023/12/12 6 | */ 7 | public enum EngineCallType { 8 | LOCAL, REMOTE_SYNC, REMOTE_ASYNC 9 | } 10 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/enums/ExecutorCoxnfigurabilitySwitchEnum.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.enums; 2 | 3 | /** 4 | * @author liukaixiong 5 | * @date 2024/9/11 - 11:19 6 | */ 7 | public enum ExecutorCoxnfigurabilitySwitchEnum { 8 | 9 | /** 10 | * 开启追踪 11 | */ 12 | enableTrace, 13 | 14 | } 15 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/enums/ExpressionConfigCallEnum.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.enums; 2 | 3 | /** 4 | * 表达式配置调用方式 5 | * 6 | * @author liukaixiong 7 | * @date 2024/9/10 - 13:35 8 | */ 9 | public enum ExpressionConfigCallEnum { 10 | /** 11 | * 实时通过远端调用去获取服务端的配置 12 | */ 13 | http, 14 | /** 15 | * 如果引擎服务端和客户端都在一个redis中,可以尝试直接从缓存中获取,省略中间调用部分 16 | */ 17 | redis, 18 | /** 19 | * 实时通过http远端调用之后,将配置暂存到本地,一旦远端超时或者异常,直接启用redis缓存 20 | */ 21 | http_cache 22 | } 23 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/enums/ExpressionCoxnfigurabilitySwitchEnum.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.enums; 2 | 3 | /** 4 | * 表达式能力开关定义 5 | * @author liukaixiong 6 | * @date 2024/9/11 - 11:19 7 | */ 8 | public enum ExpressionCoxnfigurabilitySwitchEnum { 9 | 10 | /** 11 | * 开启节点异步能力 12 | */ 13 | enableNodeAsync, 14 | enableSampleBody, 15 | 16 | } 17 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/example/DemoEnvRegister.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.example; 2 | 3 | import com.liukx.expression.engine.client.api.ExpressionVariableRegister; 4 | import com.liukx.expression.engine.core.api.model.api.VariableApiModel; 5 | import com.liukx.expression.engine.core.model.ContextTemplateRequest; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * 11 | * 12 | * @author liukaixiong 13 | * @date 2024/12/20 - 16:04 14 | */ 15 | public class DemoEnvRegister implements ExpressionVariableRegister { 16 | 17 | @Override 18 | public List loadVariableList() { 19 | // 如果有多个变量,则返回多个 20 | return null; 21 | } 22 | 23 | @Override 24 | public VariableApiModel getVariableInfo(String group, String name) { 25 | // 定义变量信息 26 | return null; 27 | } 28 | 29 | @Override 30 | public boolean finderVariable(String name) { 31 | // 查询数据库是否存在 32 | return false; 33 | } 34 | 35 | @Override 36 | public Object invoke(String name, ContextTemplateRequest cache) { 37 | // 处理业务逻辑 38 | return null; 39 | } 40 | 41 | @Override 42 | public String groupName() { 43 | return "db"; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/example/DemoFunDescDefinitionService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.example; 2 | 3 | import com.liukx.expression.engine.client.api.ExpressFunctionDocumentLoader; 4 | import com.liukx.expression.engine.core.api.model.api.FunctionApiModel; 5 | 6 | import java.util.Arrays; 7 | 8 | 9 | /** 10 | * 基础使用方式 11 | * 12 | * @author liukaixiong 13 | * @date 2023/12/7 14 | */ 15 | public enum DemoFunDescDefinitionService implements ExpressFunctionDocumentLoader { 16 | 17 | SEND_POINT("activity", "send_point", "赠送积分", new String[]{"积分编码", "积分值"}, "true || false", "send_point('aa','50')"); 18 | 19 | private FunctionApiModel functionApiModel; 20 | 21 | DemoFunDescDefinitionService(String group, String code, String describe, String[] requestDesc, String returnDescribe, String example) { 22 | FunctionApiModel def = new FunctionApiModel(); 23 | def.setName(code); 24 | def.setGroupName(group); 25 | def.setDescribe(describe); 26 | def.setResultClassType(returnDescribe); 27 | def.setArgs(Arrays.asList(requestDesc)); 28 | def.setExample(example); 29 | this.functionApiModel = def; 30 | } 31 | 32 | 33 | @Override 34 | public FunctionApiModel loadFunctionInfo() { 35 | return this.functionApiModel; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/feature/ExpressionFunctionNameFilterSupport.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.feature; 2 | 3 | import com.liukx.expression.engine.client.api.ExpressionFunctionFilter; 4 | import com.liukx.expression.engine.client.engine.ExpressionEnvContext; 5 | import com.liukx.expression.engine.client.process.FunctionFilterChain; 6 | import com.liukx.expression.engine.core.api.model.ExpressionBaseRequest; 7 | import com.liukx.expression.engine.core.api.model.ExpressionConfigTreeModel; 8 | import com.liukx.expression.engine.core.api.model.api.FunctionApiModel; 9 | import org.springframework.stereotype.Component; 10 | import org.springframework.util.CollectionUtils; 11 | 12 | import java.util.List; 13 | import java.util.Set; 14 | 15 | /** 16 | * 表达式函数名称过滤能力支持 17 | * 开启能力可通过: ExpressionEnvContext#enableExpressionFunctionNameSkipFilter(Set) 18 | * 19 | * @author liukaixiong 20 | * @date 2024/8/23 - 10:59 21 | */ 22 | @Component 23 | public class ExpressionFunctionNameFilterSupport implements ExpressionFunctionFilter { 24 | 25 | @Override 26 | public Object doFunctionFilter(ExpressionEnvContext env, ExpressionConfigTreeModel configTreeModel, ExpressionBaseRequest request, FunctionApiModel functionInfo, List funcArgs, FunctionFilterChain chain) { 27 | final Set expressionFunctionNameSkipFilterList = env.getExpressionFunctionNameSkipFilterList(); 28 | if (!CollectionUtils.isEmpty(expressionFunctionNameSkipFilterList)) { 29 | if (expressionFunctionNameSkipFilterList.contains(functionInfo.getName())) { 30 | env.recordTraceDebugContent(functionInfo.getName(), "function_name_skip", "触发函数名称跳过能力,默认true!"); 31 | return true; 32 | } 33 | } 34 | return chain.doFilter(env, configTreeModel, request, functionInfo, funcArgs); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/function/FnDebugObjectFunction.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.function; 2 | 3 | import com.liukx.expression.engine.client.api.ExpressFunctionDocumentLoader; 4 | import com.liukx.expression.engine.client.engine.ExpressionEnvContext; 5 | import com.liukx.expression.engine.client.process.AbstractSimpleFunction; 6 | import com.liukx.expression.engine.core.api.model.ExpressionBaseRequest; 7 | import com.liukx.expression.engine.core.api.model.ExpressionConfigTreeModel; 8 | import com.liukx.expression.engine.core.utils.Jsons; 9 | import org.springframework.stereotype.Component; 10 | 11 | import java.util.List; 12 | 13 | /** 14 | * 打印调试信息 15 | * 16 | * @author liukaixiong 17 | * @date 2024/8/23 - 15:41 18 | */ 19 | @Component 20 | public class FnDebugObjectFunction extends AbstractSimpleFunction { 21 | 22 | @Override 23 | public Object processor(ExpressionEnvContext env, ExpressionConfigTreeModel configTreeModel, ExpressionBaseRequest request, List funArgs) { 24 | final Object envContextKey = getArgsIndexValue(funArgs, 0, env.getRequest()); 25 | env.recordTraceDebugContent(getName(), "debug_object", envContextKey == null ? "" : Jsons.objToMap(envContextKey)); 26 | return true; 27 | } 28 | 29 | @Override 30 | public Enum documentRegister() { 31 | return BaseFunctionDescEnum.DEBUG_OBJECT; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/function/FnDebugRequestFunction.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.function; 2 | 3 | import com.liukx.expression.engine.client.api.ExpressFunctionDocumentLoader; 4 | import com.liukx.expression.engine.client.engine.ExpressionEnvContext; 5 | import com.liukx.expression.engine.client.process.AbstractSimpleFunction; 6 | import com.liukx.expression.engine.core.api.model.ExpressionBaseRequest; 7 | import com.liukx.expression.engine.core.api.model.ExpressionConfigTreeModel; 8 | import com.liukx.expression.engine.core.utils.Jsons; 9 | import org.springframework.stereotype.Component; 10 | 11 | import java.util.List; 12 | 13 | /** 14 | * 打印调试信息 15 | * 16 | * @author liukaixiong 17 | * @date 2024/8/23 - 15:41 18 | */ 19 | @Component 20 | public class FnDebugRequestFunction extends AbstractSimpleFunction { 21 | 22 | @Override 23 | public Object processor(ExpressionEnvContext env, ExpressionConfigTreeModel configTreeModel, ExpressionBaseRequest request, List funArgs) { 24 | final String envContextKey = getArgsIndexValue(funArgs, 0, "request"); 25 | final Object objectValue = env.getObjectValue(envContextKey); 26 | env.recordTraceDebugContent(getName(), envContextKey, objectValue == null ? "" : Jsons.objToMap(objectValue)); 27 | return true; 28 | } 29 | 30 | @Override 31 | public Enum documentRegister() { 32 | return BaseFunctionDescEnum.DEBUG_BODY; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/function/FnEnvAddListFunction.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.function; 2 | 3 | import com.liukx.expression.engine.client.api.ExpressFunctionDocumentLoader; 4 | import com.liukx.expression.engine.client.engine.ExpressionEnvContext; 5 | import com.liukx.expression.engine.client.process.AbstractSimpleFunction; 6 | import com.liukx.expression.engine.core.api.model.ExpressionBaseRequest; 7 | import com.liukx.expression.engine.core.api.model.ExpressionConfigTreeModel; 8 | import org.springframework.stereotype.Component; 9 | 10 | import java.util.HashSet; 11 | import java.util.List; 12 | import java.util.Set; 13 | 14 | /** 15 | * 设置集合到上下文变量中 16 | * 17 | * @author liukaixiong 18 | * @date 2024/9/24 - 17:41 19 | */ 20 | @Component 21 | public class FnEnvAddListFunction extends AbstractSimpleFunction { 22 | @Override 23 | public Enum documentRegister() { 24 | return BaseFunctionDescEnum.ENV_ADD_LIST; 25 | } 26 | @Override 27 | public Object processor(ExpressionEnvContext env, ExpressionConfigTreeModel configTreeModel, ExpressionBaseRequest request, List funArgs) { 28 | String key = getConvertValue(funArgs, 0, String.class); 29 | Object value = getConvertValue(funArgs, 1, Object.class); 30 | final Set code = (Set) env.getSourceMap().computeIfAbsent(key, k -> new HashSet<>()); 31 | code.add(value); 32 | env.recordTraceDebugContent(getName(), "debug", String.format("新增属性到上下文中: %s = %s", key, code)); 33 | return true; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/function/FnEnvGetFunction.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.function; 2 | 3 | import com.liukx.expression.engine.client.api.ExpressFunctionDocumentLoader; 4 | import com.liukx.expression.engine.client.engine.ExpressionEnvContext; 5 | import com.liukx.expression.engine.client.process.AbstractSimpleFunction; 6 | import com.liukx.expression.engine.core.api.model.ExpressionBaseRequest; 7 | import com.liukx.expression.engine.core.api.model.ExpressionConfigTreeModel; 8 | import org.springframework.stereotype.Component; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | * 获取变量 14 | * 15 | * @author liukaixiong 16 | * @date 2024/9/24 - 17:41 17 | */ 18 | @Component 19 | public class FnEnvGetFunction extends AbstractSimpleFunction { 20 | @Override 21 | public Enum documentRegister() { 22 | return BaseFunctionDescEnum.ENV_GET_VALUE; 23 | } 24 | @Override 25 | public Object processor(ExpressionEnvContext env, ExpressionConfigTreeModel configTreeModel, ExpressionBaseRequest request, List funArgs) { 26 | String key = getConvertValue(funArgs, 0, String.class); 27 | final Object objectValue = env.getObjectValue(key); 28 | env.recordTraceDebugContent(getName(), "debug", String.format("上下文中获取值: %s = %s", key, objectValue)); 29 | return objectValue; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/function/FnEnvPutValueFunction.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.function; 2 | 3 | import com.liukx.expression.engine.client.api.ExpressFunctionDocumentLoader; 4 | import com.liukx.expression.engine.client.engine.ExpressionEnvContext; 5 | import com.liukx.expression.engine.client.process.AbstractSimpleFunction; 6 | import com.liukx.expression.engine.core.api.model.ExpressionBaseRequest; 7 | import com.liukx.expression.engine.core.api.model.ExpressionConfigTreeModel; 8 | import org.springframework.stereotype.Component; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | * 设置变量 14 | * 15 | * @author liukaixiong 16 | * @date 2024/9/24 - 17:41 17 | */ 18 | @Component 19 | public class FnEnvPutValueFunction extends AbstractSimpleFunction { 20 | @Override 21 | public Enum documentRegister() { 22 | return BaseFunctionDescEnum.ENV_PUT_VALUE; 23 | } 24 | 25 | @Override 26 | public Object processor(ExpressionEnvContext env, ExpressionConfigTreeModel configTreeModel, ExpressionBaseRequest request, List funArgs) { 27 | String key = getConvertValue(funArgs, 0, String.class); 28 | Object value = getConvertValue(funArgs, 1, Object.class); 29 | env.addEnvContext(key, value); 30 | env.recordTraceDebugContent(getName(), "debug", String.format("新增属性到上下文中: %s = %s", key, value)); 31 | return true; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/function/FnForceEndFunction.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.function; 2 | 3 | import com.liukx.expression.engine.client.api.ExpressFunctionDocumentLoader; 4 | import com.liukx.expression.engine.client.engine.ExpressionEnvContext; 5 | import com.liukx.expression.engine.client.process.AbstractSimpleFunction; 6 | import com.liukx.expression.engine.core.api.model.ExpressionBaseRequest; 7 | import com.liukx.expression.engine.core.api.model.ExpressionConfigTreeModel; 8 | import org.springframework.stereotype.Component; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | * 基础的函数定义 14 | * 15 | * @author liukaixiong 16 | * @date 2024/8/16 - 13:56 17 | */ 18 | @Component 19 | public class FnForceEndFunction extends AbstractSimpleFunction { 20 | 21 | @Override 22 | public Object processor(ExpressionEnvContext env, ExpressionConfigTreeModel configTreeModel, ExpressionBaseRequest request, List funArgs) { 23 | env.forceEnd(); 24 | return true; 25 | } 26 | 27 | @Override 28 | public Enum documentRegister() { 29 | return BaseFunctionDescEnum.END_FORCE; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/function/FnInEndFunction.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.function; 2 | 3 | import com.liukx.expression.engine.client.api.ExpressFunctionDocumentLoader; 4 | import org.springframework.stereotype.Component; 5 | 6 | /** 7 | * 基础的函数定义 8 | * 9 | * @author liukaixiong 10 | * @date 2024/8/16 - 13:56 11 | */ 12 | @Component 13 | public class FnInEndFunction extends FnTopEndFunction { 14 | @Override 15 | public Enum documentRegister() { 16 | return BaseFunctionDescEnum.END_IN; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/function/FnObjectIsNotNull.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.function; 2 | 3 | import com.liukx.expression.engine.client.api.ExpressFunctionDocumentLoader; 4 | import com.liukx.expression.engine.client.engine.ExpressionEnvContext; 5 | import com.liukx.expression.engine.client.process.AbstractSimpleFunction; 6 | import com.liukx.expression.engine.core.api.model.ExpressionBaseRequest; 7 | import com.liukx.expression.engine.core.api.model.ExpressionConfigTreeModel; 8 | import org.apache.commons.lang3.ObjectUtils; 9 | import org.springframework.stereotype.Component; 10 | 11 | import java.util.List; 12 | 13 | /** 14 | * 判断给定的参数是否不为空 15 | * 16 | * @author liukaixiong 17 | * @date 2024/8/16 - 13:56 18 | */ 19 | @Component 20 | public class FnObjectIsNotNull extends AbstractSimpleFunction { 21 | 22 | @Override 23 | public Object processor(ExpressionEnvContext env, ExpressionConfigTreeModel configTreeModel, ExpressionBaseRequest request, List funArgs) { 24 | return ObjectUtils.allNotNull(funArgs.toArray()); 25 | } 26 | 27 | @Override 28 | public Enum documentRegister() { 29 | return BaseFunctionDescEnum.OBJECT_IS_NOT_NULL; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/function/FnRecordResultContextFunction.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.function; 2 | 3 | import com.liukx.expression.engine.client.api.ExpressFunctionDocumentLoader; 4 | import com.liukx.expression.engine.client.engine.ExpressionEnvContext; 5 | import com.liukx.expression.engine.client.process.AbstractSimpleFunction; 6 | import com.liukx.expression.engine.core.api.model.ExpressionBaseRequest; 7 | import com.liukx.expression.engine.core.api.model.ExpressionConfigTreeModel; 8 | import lombok.extern.slf4j.Slf4j; 9 | import org.springframework.stereotype.Component; 10 | 11 | import java.util.List; 12 | 13 | /** 14 | * 记录结果到上下文能力 15 | * 16 | * @author liukaixiong 17 | * @date 2024/8/15 - 14:15 18 | */ 19 | @Component 20 | @Slf4j 21 | public class FnRecordResultContextFunction extends AbstractSimpleFunction { 22 | @Override 23 | public Enum documentRegister() { 24 | return BaseFunctionDescEnum.RECORD_RESULT_CONTEXT; 25 | } 26 | 27 | @Override 28 | public Object processor(ExpressionEnvContext env, ExpressionConfigTreeModel configTreeModel, ExpressionBaseRequest request, List funArgs) { 29 | final String key = getConvertValue(funArgs, 0, String.class); 30 | final Object val = getArgsIndexValue(funArgs, 1); 31 | env.recordResult(key, val); 32 | env.recordTraceDebugContent(getName(), "record", String.format("k=%s;v=%s", key, val)); 33 | return true; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/function/FnReturnFunction.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.function; 2 | 3 | import com.liukx.expression.engine.client.api.ExpressFunctionDocumentLoader; 4 | import com.liukx.expression.engine.client.engine.ExpressionEnvContext; 5 | import com.liukx.expression.engine.client.process.AbstractSimpleFunction; 6 | import com.liukx.expression.engine.core.api.model.ExpressionBaseRequest; 7 | import com.liukx.expression.engine.core.api.model.ExpressionConfigTreeModel; 8 | import org.springframework.stereotype.Component; 9 | 10 | import java.util.List; 11 | 12 | 13 | /** 14 | * 描述: 执行完成当前,不继续往下走,而是返回上层分支继续 15 | * 16 | * @author liukx 17 | * @date 2025/2/13 14:22 18 | */ 19 | @Component 20 | public class FnReturnFunction extends AbstractSimpleFunction { 21 | 22 | @Override 23 | protected boolean isAllowedCache() { 24 | return false; 25 | } 26 | 27 | @Override 28 | public Object processor(ExpressionEnvContext env, ExpressionConfigTreeModel configTreeModel, ExpressionBaseRequest request, List funArgs) { 29 | env.returnEnd(); 30 | return true; 31 | } 32 | 33 | @Override 34 | public Enum documentRegister() { 35 | return BaseFunctionDescEnum.END_RETURN; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/function/FnTopEndFunction.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.function; 2 | 3 | import com.liukx.expression.engine.client.api.ExpressFunctionDocumentLoader; 4 | import com.liukx.expression.engine.client.engine.ExpressionEnvContext; 5 | import com.liukx.expression.engine.client.process.AbstractSimpleFunction; 6 | import com.liukx.expression.engine.core.api.model.ExpressionBaseRequest; 7 | import com.liukx.expression.engine.core.api.model.ExpressionConfigTreeModel; 8 | import org.springframework.stereotype.Component; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | * 基础的函数定义 14 | * 15 | * @author liukaixiong 16 | * @date 2024/8/16 - 13:56 17 | */ 18 | @Component 19 | public class FnTopEndFunction extends AbstractSimpleFunction { 20 | 21 | @Override 22 | protected boolean isAllowedCache() { 23 | return false; 24 | } 25 | 26 | @Override 27 | public Object processor(ExpressionEnvContext env, ExpressionConfigTreeModel configTreeModel, ExpressionBaseRequest request, List funArgs) { 28 | env.topEnd(); 29 | return true; 30 | } 31 | 32 | @Override 33 | public Enum documentRegister() { 34 | return BaseFunctionDescEnum.END; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/helper/ConfigurabilityHelper.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.helper; 2 | 3 | import com.liukx.expression.engine.client.enums.ExecutorCoxnfigurabilitySwitchEnum; 4 | import com.liukx.expression.engine.client.enums.ExpressionCoxnfigurabilitySwitchEnum; 5 | 6 | import java.util.Collections; 7 | import java.util.List; 8 | import java.util.Map; 9 | 10 | /** 11 | * 能力使用帮助类 12 | * 13 | * @author liukaixiong 14 | * @date 2025/1/15 - 11:08 15 | */ 16 | public class ConfigurabilityHelper { 17 | 18 | /** 19 | * 是否开启执行器配置能力 20 | * @param configurabilityMap 21 | * @param key 22 | * @return 23 | */ 24 | public static boolean isEnableExecutorConfigurability(Map configurabilityMap, ExecutorCoxnfigurabilitySwitchEnum key) { 25 | return isEnableConfigurability(configurabilityMap, key.name()); 26 | } 27 | 28 | /** 29 | * 是否开启表达式配置能力 30 | * @param configurabilityMap 31 | * @param key 32 | * @return 33 | */ 34 | public static boolean isEnableExpressionConfigurability(Map configurabilityMap, ExpressionCoxnfigurabilitySwitchEnum key) { 35 | return isEnableConfigurability(configurabilityMap, key.name()); 36 | } 37 | 38 | /** 39 | * 是否开启配置能力 40 | * 41 | * @param configurabilityMap 能力配置信息 42 | * @param key 配置key 43 | * @return 44 | */ 45 | public static boolean isEnableConfigurability(Map configurabilityMap, String key) { 46 | if (configurabilityMap != null) { 47 | List list = (List) configurabilityMap.getOrDefault("enableSwitch", Collections.emptyList()); 48 | return !list.isEmpty() && list.contains(key); 49 | } 50 | return false; 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/log/LogEventEnum.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.log; 2 | 3 | /** 4 | * 日志事件统一管理 5 | * @author liukaixiong 6 | * @date 2023/12/22 7 | */ 8 | public enum LogEventEnum { 9 | /** 10 | * 定义一些关键事件 11 | */ 12 | CALL_ERROR, VARIABLE_CALL, FUNCTION_CALL, EXPRESSION_CALL 13 | } 14 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/log/LogHelper.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.log; 2 | 3 | import com.liukx.expression.engine.client.engine.ExpressionEnvContext; 4 | import com.liukx.expression.engine.core.api.model.ExpressionBaseRequest; 5 | import org.springframework.beans.BeansException; 6 | import org.springframework.context.ApplicationContext; 7 | import org.springframework.context.ApplicationContextAware; 8 | 9 | /** 10 | * 日志帮助类 11 | * @author liukaixiong 12 | * @date 2023/12/22 13 | */ 14 | public class LogHelper implements ApplicationContextAware { 15 | private static ApplicationContext applicationContext; 16 | 17 | public static void trace(ExpressionEnvContext envContext, ExpressionBaseRequest request, LogEventEnum logType, String text, Object... logParam) { 18 | if (envContext.isEnableTrace()) { 19 | trace(request, logType, text, logParam); 20 | } 21 | } 22 | 23 | public static void trace(ExpressionBaseRequest request, LogEventEnum logType, String text, Object... logParam) { 24 | // 可能在非Spring的环境下,比如单元测试 25 | if (LogHelper.applicationContext != null) { 26 | LogHelper.applicationContext.getBean(LogTraceService.class).trace(request, logType, text, logParam); 27 | } 28 | } 29 | 30 | @Override 31 | public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { 32 | LogHelper.applicationContext = applicationContext; 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/log/LogTraceService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.log; 2 | 3 | import com.liukx.expression.engine.core.api.model.ExpressionBaseRequest; 4 | 5 | /** 6 | * @author liukaixiong 7 | * @date 2023/12/22 8 | */ 9 | public interface LogTraceService { 10 | 11 | 12 | /** 13 | * 日志规范追踪 14 | * 15 | * @param request 请求入参 16 | * @param logEventType 关键事件 17 | * @param text 日志描述 18 | * @param logParam 日志参数 19 | */ 20 | void trace(ExpressionBaseRequest request, LogEventEnum logEventType, String text, Object... logParam); 21 | 22 | 23 | } 24 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/process/AbstractExpressionService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.process; 2 | 3 | 4 | import com.liukx.expression.engine.client.api.DocumentApiExecutor; 5 | import com.liukx.expression.engine.core.api.model.ExpressionService; 6 | 7 | public abstract class AbstractExpressionService implements ExpressionService { 8 | private DocumentApiExecutor documentApiExecutor; 9 | 10 | private String nameSpace; 11 | 12 | public AbstractExpressionService(String nameSpace) { 13 | this.nameSpace = nameSpace; 14 | } 15 | 16 | public String getNameSpace() { 17 | return nameSpace; 18 | } 19 | 20 | public DocumentApiExecutor getDocumentApiExecutor() { 21 | return documentApiExecutor; 22 | } 23 | 24 | public void setDocumentRegister(DocumentApiExecutor documentRegister) { 25 | this.documentApiExecutor = documentRegister; 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/process/AbstractJavaTypeFunction.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.process; 2 | 3 | import com.googlecode.aviator.runtime.function.AbstractFunction; 4 | import com.liukx.expression.engine.client.api.ExpressFunctionDocumentLoader; 5 | import com.liukx.expression.engine.core.api.model.api.FunctionApiModel; 6 | 7 | import java.util.Collections; 8 | import java.util.List; 9 | 10 | /** 11 | * 抽象普通类型的函数 12 | * 13 | * @author liukaixiong 14 | * @date 2022/9/23 - 14:44 15 | */ 16 | @Deprecated 17 | public abstract class AbstractJavaTypeFunction extends AbstractFunction implements ExpressFunctionDocumentLoader { 18 | 19 | protected String prefix() { 20 | return "fn"; 21 | } 22 | 23 | @Override 24 | public String getName() { 25 | final FunctionApiModel functionApiModel = functionInfo(); 26 | functionApiModel.setGroupName(prefix()); 27 | return prefix() + functionApiModel.getName(); 28 | } 29 | 30 | 31 | /** 32 | * 函数定义的详细描述 33 | * 34 | * @return 35 | */ 36 | protected abstract FunctionApiModel functionInfo(); 37 | 38 | @Override 39 | public List loadFunctionList() { 40 | final FunctionApiModel functionApiModel = functionInfo(); 41 | functionApiModel.setName(getName()); 42 | return Collections.singletonList(functionApiModel); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/process/ExpressionFilterChain.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.process; 2 | 3 | import com.liukx.expression.engine.client.api.ExpressionExecutorFilter; 4 | import com.liukx.expression.engine.client.engine.ExpressionEnvContext; 5 | import com.liukx.expression.engine.core.api.model.ExpressionBaseRequest; 6 | import com.liukx.expression.engine.core.api.model.ExpressionConfigInfo; 7 | import com.liukx.expression.engine.core.api.model.ExpressionConfigTreeModel; 8 | import org.springframework.util.CollectionUtils; 9 | 10 | import java.util.List; 11 | import java.util.function.Supplier; 12 | 13 | /** 14 | * 表达式过滤器责任链 15 | * 16 | * @author liukaixiong 17 | * @date 2024/8/23 - 10:09 18 | */ 19 | public class ExpressionFilterChain { 20 | /** 21 | * 拦截器 22 | */ 23 | private final List expressionExecutorFilters; 24 | /** 25 | * 具体的执行方法 26 | */ 27 | private final Supplier supplier; 28 | 29 | private int index = 0; 30 | 31 | public ExpressionFilterChain(List expressionExecutorFilters, Supplier supplier) { 32 | this.expressionExecutorFilters = expressionExecutorFilters; 33 | this.supplier = supplier; 34 | } 35 | 36 | 37 | public Object doFilter(ExpressionEnvContext env, ExpressionConfigInfo configInfo, ExpressionConfigTreeModel configTreeModel, ExpressionBaseRequest request) { 38 | 39 | if (CollectionUtils.isEmpty(expressionExecutorFilters) || expressionExecutorFilters.size() == index) { 40 | return supplier.get(); 41 | } 42 | 43 | return expressionExecutorFilters.get(index++).doExpressionFilter(env, configInfo,configTreeModel, request, this); 44 | } 45 | 46 | } 47 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/process/ExpressionVariableProcessAdaptor.java: -------------------------------------------------------------------------------- 1 | //package com.liukx.expression.engine.client.process; 2 | // 3 | //import enums.com.liukx.expression.engine.core.ExpressionVariableTypeEnums; 4 | // 5 | //public class ExpressionVariableProcessAdaptor extends AbstractExpressionVariableDefinition { 6 | // 7 | // @Override 8 | // public String groupName() { 9 | // return ExpressionVariableTypeEnums.DEFAULT.name(); 10 | // } 11 | // 12 | //} 13 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/process/FunctionFilterChain.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.process; 2 | 3 | import com.liukx.expression.engine.client.api.ExpressionFunctionFilter; 4 | import com.liukx.expression.engine.client.engine.ExpressionEnvContext; 5 | import com.liukx.expression.engine.core.api.model.ExpressionBaseRequest; 6 | import com.liukx.expression.engine.core.api.model.ExpressionConfigTreeModel; 7 | import com.liukx.expression.engine.core.api.model.api.FunctionApiModel; 8 | import org.springframework.util.CollectionUtils; 9 | 10 | import java.util.List; 11 | import java.util.function.Supplier; 12 | 13 | /** 14 | * 函数过滤器责任链 15 | * 16 | * @author liukaixiong 17 | * @date 2024/8/23 - 10:09 18 | */ 19 | public class FunctionFilterChain { 20 | /** 21 | * 拦截器 22 | */ 23 | private final List functionFilters; 24 | /** 25 | * 具体的执行方法 26 | */ 27 | private final Supplier supplier; 28 | 29 | private int index = 0; 30 | 31 | public FunctionFilterChain(List functionFilters, Supplier supplier) { 32 | this.functionFilters = functionFilters; 33 | this.supplier = supplier; 34 | } 35 | 36 | 37 | public Object doFilter(ExpressionEnvContext env, ExpressionConfigTreeModel configTreeModel, ExpressionBaseRequest request, FunctionApiModel functionInfo, List funcArgs) { 38 | 39 | if (CollectionUtils.isEmpty(functionFilters) || functionFilters.size() == index) { 40 | return supplier.get(); 41 | } 42 | 43 | return functionFilters.get(index++).doFunctionFilter(env, configTreeModel, request, functionInfo, funcArgs, this); 44 | } 45 | 46 | } 47 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/variable/BaseEnvDateLocalDateTimeVariable.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.variable; 2 | 3 | import com.liukx.expression.engine.core.api.model.ExpressionBaseRequest; 4 | import org.springframework.stereotype.Component; 5 | 6 | import java.time.LocalDateTime; 7 | import java.util.Map; 8 | 9 | /** 10 | * 获取当前系统时间 11 | * 12 | * @code env_date_local_date.year 获取年份 13 | * @code env_date_local_date.monthValue 获取月份 14 | * @code env_date_local_date.dayOfMonth 获取月份第几天 15 | * @code env_date_local_date.hour 获取当前小时数 16 | * @code env_date_local_date.minute 获取当前分钟数 17 | * @author liukaixiong 18 | * @date 2025/2/27 - 15:51 19 | */ 20 | @Component 21 | public class BaseEnvDateLocalDateTimeVariable extends AbstractExpressionVariableContextProcessor { 22 | 23 | @Override 24 | public Enum variableName() { 25 | return BaseVariableEnums.env_date_local_date_time; 26 | } 27 | 28 | @Override 29 | public Object processor(String name, ExpressionBaseRequest request, Map envContext) { 30 | return LocalDateTime.now(); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/variable/BaseVariableEnums.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.variable; 2 | 3 | import lombok.Getter; 4 | 5 | import java.time.LocalDate; 6 | 7 | /** 8 | * 表达式全局上下文配置 9 | * 10 | * @author liukaixiong 11 | * @date 2024/11/5 - 15:47 12 | */ 13 | @Getter 14 | public enum BaseVariableEnums implements VariableDefinitionalService { 15 | env_date_local_date_time("获取LocalDate对象", LocalDate.class), 16 | ; 17 | 18 | 19 | private final String desc; 20 | private final Class returnType; 21 | 22 | BaseVariableEnums(String desc, Class returnType) { 23 | this.desc = desc; 24 | this.returnType = returnType; 25 | } 26 | 27 | 28 | @Override 29 | public String getVariableName() { 30 | return this.name(); 31 | } 32 | 33 | @Override 34 | public String getVariableDescription() { 35 | return getDesc(); 36 | } 37 | 38 | @Override 39 | public Class getVariableReturnType() { 40 | return getReturnType(); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/java/com/liukx/expression/engine/client/variable/VariableDefinitionalService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.client.variable; 2 | 3 | /** 4 | * 变量定义 5 | * 6 | * @author liukaixiong 7 | * @date 2025/2/27 - 15:39 8 | */ 9 | public interface VariableDefinitionalService { 10 | 11 | public String getVariableName(); 12 | 13 | public String getVariableDescription(); 14 | 15 | public Class getVariableReturnType(); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.liukx.expression.engine.client.config.ExpressionConfiguration 2 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | com.liukx.expression.engine.client.config.ExpressionConfiguration 2 | -------------------------------------------------------------------------------- /expression-mind-map-client-starter/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | plugin: 3 | express: 4 | debug: true 5 | remote-engine-url: http://localhost:20888 6 | logger-trace-level: debug 7 | expression-config-call: http_redis 8 | enable-trace-log: true 9 | inject-type-package: com.smp.service.function.control 10 | application: 11 | name: expression-mind-map-client 12 | main: 13 | allow-bean-definition-overriding: true 14 | server: 15 | port: 9898 16 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/anno/FunctionKey.java: -------------------------------------------------------------------------------- 1 | //package com.liukx.expression.engine.core.anno; 2 | // 3 | //import java.lang.annotation.ElementType; 4 | //import java.lang.annotation.Retention; 5 | //import java.lang.annotation.RetentionPolicy; 6 | //import java.lang.annotation.Target; 7 | // 8 | ///** 9 | // * 函数注册 10 | // */ 11 | //@Retention(RetentionPolicy.RUNTIME) 12 | //@Target({ElementType.METHOD, ElementType.TYPE}) 13 | //public @interface FunctionKey { 14 | // 15 | // /** 16 | // * 名称 17 | // * 18 | // * @return 19 | // */ 20 | // String name(); 21 | // 22 | // /** 23 | // * 描述 24 | // * 25 | // * @return 26 | // */ 27 | // String describe(); 28 | // 29 | // /** 30 | // * 请求类型 31 | // * @return 32 | // */ 33 | // Class requestClass(); 34 | // 35 | // String requestExample() default ""; 36 | //} 37 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/anno/PropertyDefinition.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.core.anno; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Retention(RetentionPolicy.RUNTIME) 9 | @Target({ElementType.FIELD}) 10 | public @interface PropertyDefinition { 11 | 12 | String value(); 13 | 14 | boolean required() default false; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/anno/VariableKey.java: -------------------------------------------------------------------------------- 1 | //package com.liukx.expression.engine.core.anno; 2 | // 3 | //import java.lang.annotation.ElementType; 4 | //import java.lang.annotation.Retention; 5 | //import java.lang.annotation.RetentionPolicy; 6 | //import java.lang.annotation.Target; 7 | // 8 | ///** 9 | // * 变量注解 10 | // */ 11 | //@Retention(RetentionPolicy.RUNTIME) 12 | //@Target({ElementType.METHOD, ElementType.TYPE}) 13 | //public @interface VariableKey { 14 | // /** 15 | // * 变量名称 16 | // * 17 | // * @return 18 | // */ 19 | // String name(); 20 | // 21 | // /** 22 | // * 描述 23 | // * 24 | // * @return 25 | // */ 26 | // String describe(); 27 | // 28 | // 29 | //} 30 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/api/model/ClientExpressionSubmitRequest.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.core.api.model; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 客户端表达式提交 7 | * 8 | * @author liukaixiong 9 | * @date 2024/7/19 - 11:44 10 | */ 11 | @Data 12 | public class ClientExpressionSubmitRequest { 13 | /** 14 | * 确定组名称,比如活动code 15 | */ 16 | private String businessCode; 17 | 18 | /** 19 | * 确定业务编码 20 | */ 21 | private String executorCode; 22 | 23 | /** 24 | * 代表事件名称,确定业务事件 25 | */ 26 | private String eventName; 27 | 28 | /** 29 | * 用户编号 30 | */ 31 | private Long userId; 32 | /** 33 | * 唯一编号 34 | */ 35 | private String unionId; 36 | /** 37 | * 链路编号 38 | */ 39 | private String traceId; 40 | 41 | /** 42 | * 请求入参 43 | */ 44 | private Object request; 45 | } 46 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/api/model/ConfigDiscoverRequest.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.core.api.model; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 配置发现请求模型 7 | * 8 | * @author liukaixiong 9 | * @date 2023/12/11 10 | */ 11 | @Data 12 | public class ConfigDiscoverRequest { 13 | /** 14 | * 服务名称 15 | */ 16 | private String serviceName; 17 | 18 | /** 19 | * 配置编码 20 | */ 21 | private String businessCode; 22 | 23 | /** 24 | * 执行器编码 25 | */ 26 | private String executorCode; 27 | 28 | /** 29 | * 时间戳版本 30 | */ 31 | private Long timestamp; 32 | 33 | } 34 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/api/model/ExpressionBaseRequest.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.core.api.model; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 基础参数模型 7 | */ 8 | @Data 9 | public class ExpressionBaseRequest { 10 | 11 | /** 12 | * 服务名称 13 | */ 14 | private String serviceName; 15 | 16 | /** 17 | * 确定组名称,比如活动code 18 | */ 19 | private String businessCode; 20 | 21 | /** 22 | * 执行器名称 23 | */ 24 | private String executorCode; 25 | 26 | /** 27 | * 代表事件名称,确定业务事件 28 | */ 29 | private String eventName; 30 | 31 | /** 32 | * 用户编号 33 | */ 34 | private Long userId; 35 | /** 36 | * 唯一编号 37 | */ 38 | private String unionId; 39 | /** 40 | * 链路编号 41 | */ 42 | private String traceId; 43 | 44 | } 45 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/api/model/ExpressionConfigInfo.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.core.api.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.util.List; 9 | import java.util.Map; 10 | 11 | /** 12 | * @author liukaixiong 13 | * @date 2023/12/12 14 | */ 15 | @Data 16 | @Builder 17 | @AllArgsConstructor 18 | @NoArgsConstructor 19 | public class ExpressionConfigInfo { 20 | 21 | private Long executorId; 22 | 23 | private String serviceName; 24 | 25 | private String businessCode; 26 | 27 | private String executorCode; 28 | 29 | private String executorName; 30 | 31 | private String varDefinition; 32 | 33 | /** 34 | * 拓展能力 35 | */ 36 | private Map configurabilityMap; 37 | 38 | private List configTreeModelList; 39 | 40 | private Long timestamp; 41 | 42 | } 43 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/api/model/ExpressionConfigTreeModel.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.core.api.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.util.List; 9 | import java.util.Map; 10 | 11 | /** 12 | * @author liukaixiong 13 | * @date 2023/12/11 14 | */ 15 | @Data 16 | @Builder 17 | @AllArgsConstructor 18 | @NoArgsConstructor 19 | public class ExpressionConfigTreeModel { 20 | 21 | private Long executorId; 22 | 23 | /** 24 | * 表达式编号 25 | */ 26 | private Long expressionId; 27 | 28 | /** 29 | * 标题 30 | */ 31 | private String title; 32 | 33 | /** 34 | * 表达式 35 | */ 36 | private String expression; 37 | 38 | /** 39 | * 表达式类型 40 | */ 41 | private String expressionType; 42 | 43 | /** 44 | * 表达式编码 45 | */ 46 | private String expressionCode; 47 | 48 | private List nodeExpression; 49 | 50 | /** 51 | * 拓展能力 52 | */ 53 | private Map configurabilityMap; 54 | } 55 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/api/model/ExpressionExecutorService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.core.api.model; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * 表达式执行 7 | * 8 | * @author liukaixiong 9 | * @date 2023/12/12 10 | */ 11 | public interface ExpressionExecutorService { 12 | 13 | 14 | /** 15 | * 执行表达式任务 16 | * 17 | * @param serviceName 服务名称 18 | * @param businessCode 业务编码 19 | * @param eventName 事件名称 20 | * @param unionId 唯一编号 21 | * @param traceId 追踪编号 22 | * @param request 请求模型 23 | * @return 24 | */ 25 | public Map invoke(String serviceName, String businessCode, String eventName, String unionId, String traceId, Object request); 26 | 27 | 28 | } 29 | 30 | 31 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/api/model/ExpressionService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.core.api.model; 2 | 3 | import java.util.Map; 4 | 5 | public interface ExpressionService { 6 | 7 | /** 8 | * 执行表达式 9 | * 10 | * @param expression 表达式 11 | * @param env 上下文参数 12 | * @return 13 | */ 14 | public Object execute(final String expression, final Map env); 15 | 16 | /** 17 | * 是否开启debug模式 18 | * 19 | * @param isEnableDebug 20 | */ 21 | public void enableDebug(boolean isEnableDebug); 22 | 23 | /** 24 | * 校验表达式是否符合 25 | * 26 | * @param expression 27 | * @return 28 | */ 29 | public ValidatorResult validator(String expression); 30 | 31 | 32 | /** 33 | * 翻译表达式 34 | * 35 | * @param expression 36 | */ 37 | public TranslateResult translate(String expression); 38 | 39 | } 40 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/api/model/FunctionRequestDocumentModel.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.core.api.model; 2 | 3 | /** 4 | * 函数请求文档模型 5 | */ 6 | public class FunctionRequestDocumentModel { 7 | /** 8 | * 函数名称 9 | */ 10 | private String name; 11 | /** 12 | * 函数类型 13 | */ 14 | private String type; 15 | /** 16 | * 函数描述 17 | */ 18 | private String describe; 19 | /** 20 | * 是否必填项 21 | */ 22 | private boolean require; 23 | 24 | public String getName() { 25 | return name; 26 | } 27 | 28 | public void setName(String name) { 29 | this.name = name; 30 | } 31 | 32 | public String getType() { 33 | return type; 34 | } 35 | 36 | public void setType(String type) { 37 | this.type = type; 38 | } 39 | 40 | public String getDescribe() { 41 | return describe; 42 | } 43 | 44 | public void setDescribe(String describe) { 45 | this.describe = describe; 46 | } 47 | 48 | public boolean isRequire() { 49 | return require; 50 | } 51 | 52 | public void setRequire(boolean require) { 53 | this.require = require; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/api/model/TranslateResult.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.core.api.model; 2 | 3 | import com.liukx.expression.engine.core.api.model.api.FunctionApiModel; 4 | import com.liukx.expression.engine.core.api.model.api.VariableApiModel; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 翻译表达式 10 | */ 11 | public class TranslateResult { 12 | 13 | /** 14 | * 变量类型 15 | */ 16 | public List variableApiList; 17 | /** 18 | * 简单的翻译 19 | */ 20 | private String simpleTranslateText; 21 | /** 22 | * 函数API 23 | */ 24 | private List functionApiList; 25 | 26 | public String getSimpleTranslateText() { 27 | return simpleTranslateText; 28 | } 29 | 30 | public void setSimpleTranslateText(String simpleTranslateText) { 31 | this.simpleTranslateText = simpleTranslateText; 32 | } 33 | 34 | public List getVariableApiList() { 35 | return variableApiList; 36 | } 37 | 38 | public void setVariableApiList(List variableApiList) { 39 | this.variableApiList = variableApiList; 40 | } 41 | 42 | public List getFunctionApiList() { 43 | return functionApiList; 44 | } 45 | 46 | public void setFunctionApiList(List functionApiList) { 47 | this.functionApiList = functionApiList; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/api/model/ValidatorResult.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.core.api.model; 2 | 3 | public class ValidatorResult { 4 | 5 | private boolean success; 6 | 7 | private String message; 8 | 9 | public static ValidatorResult OK() { 10 | ValidatorResult result = new ValidatorResult(); 11 | result.setSuccess(true); 12 | return result; 13 | } 14 | 15 | public static ValidatorResult NO(String message) { 16 | ValidatorResult result = new ValidatorResult(); 17 | result.setSuccess(false); 18 | result.setMessage(message); 19 | return result; 20 | } 21 | 22 | public boolean isSuccess() { 23 | return success; 24 | } 25 | 26 | public void setSuccess(boolean success) { 27 | this.success = success; 28 | } 29 | 30 | public String getMessage() { 31 | return message; 32 | } 33 | 34 | public void setMessage(String message) { 35 | this.message = message; 36 | } 37 | 38 | @Override 39 | public String toString() { 40 | return "ValidatorResult{" + 41 | "success=" + success + 42 | ", message='" + message + '\'' + 43 | '}'; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/api/model/api/ExpressionExecutorResultDTO.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.core.api.model.api; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.ArrayList; 6 | import java.util.List; 7 | 8 | /** 9 | * @author liukaixiong 10 | * @date 2024/7/18 - 15:19 11 | */ 12 | @Data 13 | public class ExpressionExecutorResultDTO { 14 | 15 | /** 16 | * 执行器编号 17 | */ 18 | private Long executorId; 19 | /** 20 | * 服务名称 21 | */ 22 | private String serviceName; 23 | 24 | /** 25 | * 确定组名称,比如活动code 26 | */ 27 | private String businessCode; 28 | 29 | /** 30 | * 代表事件名称,确定业务事件 31 | */ 32 | private String eventName; 33 | 34 | /** 35 | * 执行器编码 36 | */ 37 | private String executorCode; 38 | 39 | /** 40 | * 执行器名称 41 | */ 42 | private String executorName; 43 | 44 | /** 45 | * 用户编号 46 | */ 47 | private Long userId; 48 | /** 49 | * 唯一编号 50 | */ 51 | private String unionId; 52 | /** 53 | * 链路编号 54 | */ 55 | private String traceId; 56 | 57 | /** 58 | * 上下文参数 59 | */ 60 | private String envBody; 61 | 62 | /** 63 | * 表达式执行列表 64 | */ 65 | private List resultLogList = new ArrayList<>(); 66 | } 67 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/api/model/api/ExpressionFunctionResultDTO.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.core.api.model.api; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 表达式函数结果数据转换层 10 | * 11 | * @author liukaixiong 12 | * @date 2024/7/19 - 13:27 13 | */ 14 | @EqualsAndHashCode(callSuper = true) 15 | @Data 16 | public class ExpressionFunctionResultDTO extends ExpressionResultLogDTO { 17 | 18 | /** 19 | * 函数信息 20 | */ 21 | private FunctionApiModel functionApiModel; 22 | 23 | /** 24 | * 函数参数 25 | */ 26 | private List funcArgs; 27 | } 28 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/api/model/api/ExpressionResultLogCollect.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.core.api.model.api; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | import java.util.concurrent.ArrayBlockingQueue; 6 | 7 | /** 8 | * @author liukaixiong 9 | * @date 2024/7/17 - 17:46 10 | */ 11 | public class ExpressionResultLogCollect { 12 | 13 | private static final ExpressionResultLogCollect INSTANCE = new ExpressionResultLogCollect(); 14 | private final ArrayBlockingQueue dataQueue = new ArrayBlockingQueue<>(10000); 15 | 16 | public static ExpressionResultLogCollect getInstance() { 17 | return INSTANCE; 18 | } 19 | 20 | public void add(ExpressionExecutorResultDTO dto) { 21 | dataQueue.offer(dto); 22 | } 23 | 24 | public ExpressionExecutorResultDTO poll() { 25 | return dataQueue.poll(); 26 | } 27 | 28 | public List pollBatch(int size) { 29 | List resultList = new ArrayList<>(); 30 | dataQueue.drainTo(resultList, size); 31 | return resultList; 32 | } 33 | 34 | 35 | } 36 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/api/model/api/ExpressionResultLogDTO.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.core.api.model.api; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.List; 6 | import java.util.Map; 7 | 8 | /** 9 | * 表达式结果实体 10 | * 11 | * @author liukaixiong 12 | * @date 2024/7/17 - 17:47 13 | */ 14 | @Data 15 | public class ExpressionResultLogDTO { 16 | 17 | /** 18 | * 执行器编号 19 | */ 20 | private Long executorId; 21 | 22 | /** 23 | * 结果类型 : 表达式、函数 24 | */ 25 | private String resultType; 26 | 27 | /** 28 | * 表达式编号 29 | */ 30 | private Long expressionConfigId; 31 | 32 | /** 33 | * 表达式 34 | */ 35 | private String expression; 36 | 37 | /** 38 | * 函数信息 39 | */ 40 | private FunctionApiModel functionApiModel; 41 | 42 | /** 43 | * 调试追踪内容 44 | */ 45 | private Map debugTraceContent; 46 | 47 | /** 48 | * 函数参数 49 | */ 50 | private List funcArgs; 51 | 52 | /** 53 | * 函数结果 54 | */ 55 | private Object result; 56 | 57 | /** 58 | * 描述 59 | */ 60 | private String description; 61 | 62 | } 63 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/api/model/api/GlobalExpressionDocInfo.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.core.api.model.api; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 全局表达式信息 7 | * @author liukaixiong 8 | * @date : 2022/6/9 - 17:19 9 | */ 10 | public class GlobalExpressionDocInfo { 11 | 12 | private String serviceName; 13 | private List functionApi; 14 | private List variableApi; 15 | private List variableTypeApi; 16 | 17 | public List getVariableTypeApi() { 18 | return variableTypeApi; 19 | } 20 | 21 | public void setVariableTypeApi(List variableTypeApi) { 22 | this.variableTypeApi = variableTypeApi; 23 | } 24 | 25 | public String getServiceName() { 26 | return serviceName; 27 | } 28 | 29 | public void setServiceName(String serviceName) { 30 | this.serviceName = serviceName; 31 | } 32 | 33 | public List getFunctionApi() { 34 | return functionApi; 35 | } 36 | 37 | public void setFunctionApi(List functionApi) { 38 | this.functionApi = functionApi; 39 | } 40 | 41 | public List getVariableApi() { 42 | return variableApi; 43 | } 44 | 45 | public void setVariableApi(List variableApi) { 46 | this.variableApi = variableApi; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/api/model/api/RemoteExecutorRequest.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.core.api.model.api; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | /** 7 | * 远程执行器参数 涵盖函数、变量执行 8 | */ 9 | public class RemoteExecutorRequest { 10 | 11 | private String name; 12 | 13 | private Map params = new HashMap<>(); 14 | 15 | public RemoteExecutorRequest(String name) { 16 | this.name = name; 17 | } 18 | 19 | public RemoteExecutorRequest(String name, Map params) { 20 | this.name = name; 21 | this.params = params; 22 | } 23 | 24 | public Map getParams() { 25 | return params; 26 | } 27 | 28 | public void setParams(Map params) { 29 | this.params = params; 30 | } 31 | 32 | public String getName() { 33 | return name; 34 | } 35 | 36 | public void setName(String name) { 37 | this.name = name; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/api/model/api/RemoteExpressionModel.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.core.api.model.api; 2 | 3 | import com.liukx.expression.engine.core.api.model.ExpressionBaseRequest; 4 | import com.liukx.expression.engine.core.enums.ExpressionKeyTypeEnums; 5 | 6 | import java.util.List; 7 | 8 | public class RemoteExpressionModel { 9 | 10 | /** 11 | * 请求参数 12 | */ 13 | private ExpressionBaseRequest request; 14 | 15 | /** 16 | * 执行类型 17 | */ 18 | private ExpressionKeyTypeEnums keyType; 19 | 20 | /** 21 | * 执行变量或者函数的请求参数 22 | */ 23 | private List executorRequests; 24 | 25 | public ExpressionBaseRequest getRequest() { 26 | return request; 27 | } 28 | 29 | public void setRequest(ExpressionBaseRequest request) { 30 | this.request = request; 31 | } 32 | 33 | public ExpressionKeyTypeEnums getKeyType() { 34 | return keyType; 35 | } 36 | 37 | public void setKeyType(ExpressionKeyTypeEnums keyType) { 38 | this.keyType = keyType; 39 | } 40 | 41 | public List getExecutorRequests() { 42 | return executorRequests; 43 | } 44 | 45 | public void setExecutorRequests(List executorRequests) { 46 | this.executorRequests = executorRequests; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/api/model/api/VariableApiModel.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.core.api.model.api; 2 | 3 | 4 | /** 5 | * 可见变量定义模型 6 | */ 7 | public class VariableApiModel { 8 | /** 9 | * 注册类型 10 | */ 11 | private String registerType = "local"; 12 | /** 13 | * 分组名称 14 | */ 15 | private String groupName; 16 | /** 17 | * 变量名称 18 | */ 19 | private String name; 20 | /** 21 | * 描述 22 | */ 23 | private String describe; 24 | /** 25 | * 变量类型 26 | */ 27 | private String type; 28 | 29 | public String getRegisterType() { 30 | return registerType; 31 | } 32 | 33 | public void setRegisterType(String registerType) { 34 | this.registerType = registerType; 35 | } 36 | 37 | public String getGroupName() { 38 | return groupName; 39 | } 40 | 41 | public void setGroupName(String groupName) { 42 | this.groupName = groupName; 43 | } 44 | 45 | public String getName() { 46 | return name; 47 | } 48 | 49 | public void setName(String name) { 50 | this.name = name; 51 | } 52 | 53 | public String getDescribe() { 54 | return describe; 55 | } 56 | 57 | public void setDescribe(String describe) { 58 | this.describe = describe; 59 | } 60 | 61 | public String getType() { 62 | return type; 63 | } 64 | 65 | public void setType(String type) { 66 | this.type = type; 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/consts/ExpressionConstants.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.core.consts; 2 | 3 | /** 4 | * 表达式常量值 5 | * 6 | * @author liukaixiong 7 | */ 8 | public class ExpressionConstants { 9 | /** 10 | * 默认的请求参数名称key 11 | */ 12 | public static final String PARAMS_REQUEST_KEY = "req"; 13 | 14 | public static final String ENGINE_SERVER_ID = "expression-mind-map-server"; 15 | 16 | public static final String PATH_EXPRESSION = "/expression/api"; 17 | 18 | /** 19 | * 系统函数文档地址 20 | */ 21 | public static final String SYSTEM_FUNCTION_DOC_LINK = "https://www.yuque.com/boyan-avfmj/aviatorscript/ashevw"; 22 | 23 | /** 24 | * 执行器 25 | */ 26 | public static final String PATH_EXPRESSION_EXECUTOR = PATH_EXPRESSION + "/executor"; 27 | 28 | /** 29 | * 变量 30 | */ 31 | public static final String PATH_EXPRESSION_DOCUMENT = PATH_EXPRESSION + "/document"; 32 | 33 | /** 34 | * 引擎端执行路径 35 | */ 36 | public static final String SERVER_EXECUTOR_PATH = "/server/executor"; 37 | /** 38 | * 执行器追踪日志提交 39 | */ 40 | public static final String SERVER_EXECUTOR_TRACE_SUBMIT_PATH = "/server/trace/log/submit"; 41 | public static final String SERVER_ASYNC_EXECUTOR_PATH = "/server/submit"; 42 | /** 43 | * 引擎配置内容 44 | */ 45 | public static final String SERVER_CONFIG_DISCOVERY = "/server/config/discovery"; 46 | /** 47 | * 客户端文档信息提交 48 | */ 49 | public static final String SERVER_DOC_SUBMIT = "/server/doc/submit"; 50 | } 51 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/enums/ExpressionKeyTypeEnums.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.core.enums; 2 | 3 | /** 4 | * 表达式关键字类型 5 | * 6 | * @author liukaixiong 7 | */ 8 | public enum ExpressionKeyTypeEnums { 9 | /** 10 | * 变量和函数 11 | */ 12 | VARIABLE, FUNCTION 13 | 14 | } 15 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/enums/ExpressionLogTypeEnum.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.core.enums; 2 | 3 | /** 4 | * 表达式日志类型 5 | * 6 | * @author liukaixiong 7 | * @date 2024/7/18 - 11:46 8 | */ 9 | public enum ExpressionLogTypeEnum { 10 | 11 | function, expression, variable 12 | 13 | 14 | } 15 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/enums/ExpressionTypeEnum.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.core.enums; 2 | 3 | public enum ExpressionTypeEnum { 4 | CONDITION("condition", "条件表达式"), 5 | CALLBACK("callback", "回调型表达式"), 6 | TRIGGER("trigger", "触发型表达式"), 7 | ACTION("action", "行为表达式"), 8 | ; 9 | private final String code; 10 | private final String description; 11 | 12 | ExpressionTypeEnum(String code, String description) { 13 | this.code = code; 14 | this.description = description; 15 | } 16 | 17 | public String getCode() { 18 | return code; 19 | } 20 | 21 | public String getDescription() { 22 | return description; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/enums/ExpressionVariableTypeEnums.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.core.enums; 2 | 3 | /** 4 | * @author liukaixiong 5 | */ 6 | public enum ExpressionVariableTypeEnums { 7 | /** 8 | * 默认的值 9 | */ 10 | DEFAULT, RULE, CONDITION, INVOKE, AFTER 11 | 12 | } 13 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/model/ContextTemplateRequest.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.core.model; 2 | 3 | import com.liukx.expression.engine.core.api.model.ExpressionBaseRequest; 4 | 5 | import java.util.HashMap; 6 | import java.util.Map; 7 | 8 | public class ContextTemplateRequest { 9 | 10 | /** 11 | * 请求参数 12 | */ 13 | private ExpressionBaseRequest request; 14 | 15 | /** 16 | * 上下文参数 17 | */ 18 | private Map envContext = new HashMap<>(); 19 | 20 | /** 21 | * 缓存参数 22 | */ 23 | private Map cache = new HashMap<>(); 24 | 25 | 26 | public Map getEnvContext() { 27 | return envContext; 28 | } 29 | 30 | public void setEnvContext(Map envContext) { 31 | this.envContext = envContext; 32 | } 33 | 34 | public Map getCache() { 35 | return cache; 36 | } 37 | 38 | public void setCache(Map cache) { 39 | this.cache = cache; 40 | } 41 | 42 | public ExpressionBaseRequest getRequest() { 43 | return request; 44 | } 45 | 46 | public void setRequest(ExpressionBaseRequest request) { 47 | this.request = request; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/utils/ClassUtils.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.core.utils; 2 | 3 | /** 4 | * 5 | * 6 | * @author liukaixiong 7 | * @date 2024/11/14 - 15:00 8 | */ 9 | public class ClassUtils { 10 | 11 | public static void main(String[] args) { 12 | 13 | 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/main/java/com/liukx/expression/engine/core/utils/Jsons2.java: -------------------------------------------------------------------------------- 1 | //package com.liukx.expression.engine.core.utils; 2 | // 3 | //import cn.hutool.core.convert.Convert; 4 | //import cn.hutool.json.JSONArray; 5 | //import cn.hutool.json.JSONUtil; 6 | //import org.apache.commons.lang3.StringUtils; 7 | // 8 | //import java.util.ArrayList; 9 | //import java.util.List; 10 | //import java.util.Map; 11 | // 12 | ///** 13 | // * json解析工具类 14 | // * @author liukaixiong 15 | // * @date : 2022/6/14 - 10:05 16 | // */ 17 | //public class Jsons2 { 18 | // 19 | // 20 | // public static String toJsonString(Object obj){ 21 | // return JSONUtil.toJsonStr(obj); 22 | // } 23 | // 24 | // public static T parseObject(String json,Class clazz){ 25 | // return JSONUtil.toBean(json,clazz); 26 | // } 27 | // public static List parseList(String json,Class clazz){ 28 | // if(StringUtils.isEmpty(json)){ 29 | // return new ArrayList<>(); 30 | // } 31 | // JSONArray array = JSONUtil.parseArray(json); 32 | // return JSONUtil.toList(array,clazz); 33 | // } 34 | // 35 | // public static Map parseMap(String json){ 36 | // return JSONUtil.toBean(json,Map.class); 37 | // } 38 | // 39 | // public static Map objToMap(Object obj){ 40 | // return Convert.convert(Map.class,obj); 41 | // } 42 | // 43 | //} 44 | -------------------------------------------------------------------------------- /expression-mind-map-core/src/test/java/com/liukx/expression/engine/core/utils/JsonsTest.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.core.utils; 2 | 3 | 4 | import com.liukx.expression.engine.core.api.model.ClientExpressionSubmitRequest; 5 | import org.junit.Test; 6 | 7 | import java.util.HashMap; 8 | import java.util.Map; 9 | 10 | public class JsonsTest { 11 | 12 | @Test 13 | public void parseMap() { 14 | Map map = new HashMap<>(); 15 | map.put("a1", "b"); 16 | map.put("a2", "b"); 17 | map.put("a3", "b"); 18 | 19 | final String jsonString = Jsons.toJsonString(map); 20 | 21 | final Map stringObjectMap = Jsons.parseMap(jsonString); 22 | System.out.println(stringObjectMap); 23 | 24 | 25 | } 26 | 27 | @Test 28 | public void objToMap() { 29 | 30 | ClientExpressionSubmitRequest request = new ClientExpressionSubmitRequest(); 31 | request.setBusinessCode("a"); 32 | request.setUnionId("a"); 33 | request.setEventName("a"); 34 | 35 | final Map stringObjectMap = Jsons.objToMap(request); 36 | System.out.println(stringObjectMap); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/BootApplication.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server; 2 | 3 | import cn.hutool.extra.spring.EnableSpringUtil; 4 | import org.mybatis.spring.annotation.MapperScan; 5 | import org.springframework.boot.SpringApplication; 6 | import org.springframework.boot.autoconfigure.SpringBootApplication; 7 | import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; 8 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 9 | import org.springframework.context.annotation.Import; 10 | 11 | @MapperScan({"com.liukx.expression.engine.server.mapper"}) 12 | @SpringBootApplication 13 | @EnableDiscoveryClient 14 | @EnableSpringUtil 15 | @Import({RedisAutoConfiguration.class}) 16 | public class BootApplication { 17 | public static void main(String[] args) { 18 | SpringApplication.run(BootApplication.class, args); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/components/html/DataRender.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.components.html; 2 | 3 | /** 4 | * 渲染数据模型 5 | * 6 | * @author liukaixiong 7 | * @date 2022/7/18 - 13:17 8 | */ 9 | public interface DataRender { 10 | 11 | public Object getCode(); 12 | 13 | public String getLabel(); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/components/html/DefaultDataRender.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.components.html; 2 | 3 | /** 4 | * @author liukaixiong 5 | * @date 2022/7/18 - 13:21 6 | */ 7 | public class DefaultDataRender implements DataRender { 8 | 9 | private Object code; 10 | private String label; 11 | 12 | public DefaultDataRender(Object code, String label) { 13 | this.code = code; 14 | this.label = label; 15 | } 16 | 17 | @Override 18 | public Object getCode() { 19 | return this.code; 20 | } 21 | 22 | public void setCode(Object code) { 23 | this.code = code; 24 | } 25 | 26 | @Override 27 | public String getLabel() { 28 | return this.label; 29 | } 30 | 31 | public void setLabel(String label) { 32 | this.label = label; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/config/AsyncTaskExecutePoolConfig.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.config; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.boot.task.TaskExecutorCustomizer; 8 | import org.springframework.context.annotation.Configuration; 9 | import org.springframework.scheduling.annotation.AsyncConfigurer; 10 | import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; 11 | 12 | import java.util.concurrent.Executor; 13 | import java.util.concurrent.ThreadPoolExecutor; 14 | 15 | 16 | @Configuration 17 | public class AsyncTaskExecutePoolConfig implements AsyncConfigurer, TaskExecutorCustomizer { 18 | 19 | private static final Logger log = LoggerFactory.getLogger(AsyncTaskExecutePoolConfig.class); 20 | 21 | @Autowired 22 | private Executor executor; 23 | 24 | @Override 25 | public void customize(ThreadPoolTaskExecutor executor) { 26 | int processorNum = Runtime.getRuntime().availableProcessors() * 2 + 1; 27 | executor.setCorePoolSize(processorNum); 28 | executor.setMaxPoolSize(processorNum * 4); 29 | executor.setQueueCapacity(100); 30 | executor.setKeepAliveSeconds(300); 31 | executor.setThreadNamePrefix("ENGIN-ASYNC-"); 32 | executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); 33 | } 34 | 35 | @Override 36 | public Executor getAsyncExecutor() { 37 | return executor; 38 | } 39 | 40 | @Override 41 | public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { 42 | return (ex, method, params) -> log.error("ENGIN 异步任务异常!", ex); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/config/RedisConfig.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.config; 2 | 3 | import com.alibaba.fastjson.support.spring.GenericFastJsonRedisSerializer; 4 | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; 5 | import org.springframework.cache.annotation.EnableCaching; 6 | import org.springframework.context.annotation.Bean; 7 | import org.springframework.context.annotation.Configuration; 8 | import org.springframework.data.redis.connection.RedisConnectionFactory; 9 | import org.springframework.data.redis.core.RedisTemplate; 10 | import org.springframework.data.redis.serializer.StringRedisSerializer; 11 | 12 | @Configuration 13 | @EnableCaching 14 | public class RedisConfig { 15 | 16 | @Bean 17 | @ConditionalOnMissingBean(name = "redisTemplate") 18 | public RedisTemplate redisTemplate(RedisConnectionFactory factory) { 19 | RedisTemplate redisTemplate = new RedisTemplate<>(); 20 | //连接redis服务器 21 | redisTemplate.setConnectionFactory(factory); 22 | StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); 23 | 24 | //将redis默认序列化方式转换为json格式 25 | GenericFastJsonRedisSerializer serializer = new GenericFastJsonRedisSerializer(); 26 | // ParserConfig.getGlobalInstance().setAutoTypeSupport(true); 27 | 28 | redisTemplate.setKeySerializer(stringRedisSerializer); 29 | redisTemplate.setHashKeySerializer(stringRedisSerializer); 30 | 31 | redisTemplate.setValueSerializer(serializer); 32 | redisTemplate.setHashValueSerializer(serializer); 33 | return redisTemplate; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/config/ServiceConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.config; 2 | 3 | import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; 4 | import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; 5 | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; 6 | import org.springframework.boot.web.client.RestTemplateBuilder; 7 | import org.springframework.cloud.client.loadbalancer.LoadBalanced; 8 | import org.springframework.context.annotation.Bean; 9 | import org.springframework.context.annotation.Configuration; 10 | import org.springframework.web.client.RestTemplate; 11 | 12 | /** 13 | * @author liukaixiong 14 | * @date 2023/12/12 15 | */ 16 | @Configuration 17 | public class ServiceConfiguration { 18 | 19 | // @Bean( 20 | // name = {"multipartResolver"} 21 | // ) 22 | // @ConditionalOnMissingBean({MultipartResolver.class}) 23 | // public StandardServletMultipartResolver multipartResolver() { 24 | // // multipartResolver.setResolveLazily(this.multipartProperties.isResolveLazily()); 25 | // return new StandardServletMultipartResolver(); 26 | // } 27 | @Bean 28 | public MybatisPlusInterceptor mybatisPlusInterceptor() { 29 | MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); 30 | // 添加分页插件 31 | interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); 32 | return interceptor; 33 | } 34 | 35 | @Bean 36 | @ConditionalOnMissingBean 37 | @LoadBalanced 38 | public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) { 39 | return restTemplateBuilder.build(); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/config/props/ExpressionServerProperties.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.config.props; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | import org.springframework.cloud.context.config.annotation.RefreshScope; 6 | 7 | /** 8 | * 9 | * 10 | * @author liukaixiong 11 | * @date 2025/2/26 - 13:39 12 | */ 13 | @ConfigurationProperties(prefix = "spring.expression.server") 14 | @Data 15 | @RefreshScope 16 | public class ExpressionServerProperties { 17 | /** 18 | * 是否启用登录 19 | */ 20 | private boolean enableLogin; 21 | 22 | /** 23 | * 用户名 24 | */ 25 | private String username; 26 | 27 | /** 28 | * 密码 29 | */ 30 | private String password; 31 | 32 | } 33 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/constants/BaseConstants.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.constants; 2 | 3 | public class BaseConstants { 4 | public static final String BASE_PATH = "/expression-engine"; 5 | public static final String BASE_PROJECT_NAME = "expression-engine"; 6 | public static final String TOKEN_NAME = "Authorization"; 7 | public static final String HTML_LOGIN_PATH = "/template/login.html"; 8 | public static final String LOGIN_URL = "/login"; 9 | 10 | /** 11 | * 代表有效状态 12 | */ 13 | public static final int BASE_VALID_STATUS = 1; 14 | 15 | public static final int BASE_UN_VALID_STATUS = -1; 16 | 17 | public static final int BASE_UNKNOWN_STATUS = 0; 18 | 19 | public static final Long BASE_ROOT_ID = 0L; 20 | 21 | } 22 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/constants/enums/ErrorEnum.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.constants.enums; 2 | 3 | import lombok.Getter; 4 | 5 | @Getter 6 | public enum ErrorEnum { 7 | /** 8 | * Params error error enum. 9 | */ 10 | PARAMS_ERROR(100400, "参数错误"), 11 | OPERATOR_ERROR(100401, "操作异常"), 12 | SYSTEM_ERROR(100500, "系统繁忙,请稍后再试"), 13 | DATA_ERROR(100100, "数据异常:[%s]"), 14 | SYSTEM_SERVICE_ERROR(100503, "內部服务调用异常"), 15 | 16 | VARIABLE_NOT_FOUND(100100, "变量没有找到对应的解释器"), 17 | 18 | EXECUTOR_NOT_FOUND(1001001, "找不到对应的执行器配置"), 19 | EXPRESSION_ILLEGAL_TYPE_ADD(200001, "表达式配置,不合法的表达式类型"), 20 | REPEATED_EXPRESSION_ADD(200002, "表达式编码已存在,请勿重复添加"), 21 | EXPRESSION_CONTENT_NULL(200003, "表达式内容为空,请重新添加"), 22 | EXPRESSION_CODE_NULL(200004, "表达式编码不能为空,请重新添加(需唯一)"), 23 | ADD_TO_DB_ERROR(500001, "数据入库失败,请联系管理员"), 24 | REPEATED_ADD_DB(500002, "该数据已经存在"), 25 | UPDATE_TO_DB_ERROR(500003, "数据更新到数据库发生错误,请联系管理员"), 26 | UPDATE_NOT_EXIST_DATA(500004, "找不到指定id的数据,无法完成更新操作!"), 27 | NON_EXIST_SERVICE_NAME(500005, "服务名称不存在"), 28 | REPEATED_EXECUTOR_NAME_ADD(600001, "执行器已存在,请勿重复添加"), 29 | REPEATED_EXECUTOR_BUSINESS_CODE_ADD(600002, "执行器的业务编码已存在,请勿重复添加"), 30 | ; 31 | 32 | private final String message; 33 | private final Integer code; 34 | 35 | ErrorEnum(Integer code, String message) { 36 | this.code = code; 37 | this.message = message; 38 | } 39 | 40 | /** 41 | * Message string. 42 | * 43 | * @return the string 44 | */ 45 | public String message() { 46 | return message; 47 | } 48 | 49 | /** 50 | * Code int. 51 | * 52 | * @return the int 53 | */ 54 | public Integer code() { 55 | return code; 56 | } 57 | 58 | } 59 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/constants/enums/ResponseCodeEnum.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.constants.enums; 2 | 3 | public enum ResponseCodeEnum { 4 | /* 5 | * 错误信息 6 | * */ 7 | E_200(200, "操作成功"), 8 | E_201(201, "对象创建成功"), 9 | E_202(202, "请求已经被接受"), 10 | E_400(400, "参数列表错误(缺少参数,格式不匹配)"), 11 | E_401(401, "未授权,禁止访问"), 12 | E_403(403, "访问受限,授权过期"), 13 | E_404(404, "资源,服务未找到"), 14 | E_500(500, "发生了错误"); 15 | 16 | private final Integer code; 17 | private final String msg; 18 | 19 | ResponseCodeEnum(Integer code, String msg) { 20 | this.code = code; 21 | this.msg = msg; 22 | } 23 | 24 | public Integer getCode() { 25 | return code; 26 | } 27 | 28 | public String getMsg() { 29 | return msg; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/controller/ApiController.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.controller; 2 | 3 | import com.liukx.expression.engine.server.components.html.DefaultDataRender; 4 | import com.liukx.expression.engine.server.components.html.HtmlComponentHelper; 5 | import com.liukx.expression.engine.server.enums.RemoteInvokeTypeEnums; 6 | import com.liukx.expression.engine.server.model.dto.response.RestResult; 7 | import io.swagger.annotations.Api; 8 | import io.swagger.annotations.ApiOperation; 9 | import org.springframework.beans.factory.InitializingBean; 10 | import org.springframework.validation.annotation.Validated; 11 | import org.springframework.web.bind.annotation.*; 12 | 13 | import java.util.ArrayList; 14 | import java.util.HashMap; 15 | import java.util.List; 16 | import java.util.Map; 17 | 18 | /** 19 | * 远端节点提交执行器 20 | */ 21 | @Api(tags = "远端节点提交执行器") 22 | @Validated 23 | @RestController 24 | @CrossOrigin(origins = "*") 25 | @RequestMapping("/api") 26 | public class ApiController implements InitializingBean { 27 | 28 | private Map> dataMap = new HashMap<>(); 29 | 30 | @ApiOperation("后端枚举常量") 31 | @GetMapping("/enumList") 32 | public RestResult executor( 33 | @RequestParam("code") 34 | String code) { 35 | List defaultDataRenders = dataMap.getOrDefault(code, new ArrayList<>()); 36 | return RestResult.ok(defaultDataRenders); 37 | } 38 | 39 | @Override 40 | public void afterPropertiesSet() throws Exception { 41 | dataMap.put("remoteInvokeType", HtmlComponentHelper.convertDataRender(RemoteInvokeTypeEnums.class)); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/controller/VariableConfigController.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.controller; 2 | 3 | 4 | import com.liukx.expression.engine.server.constants.BaseConstants; 5 | import com.liukx.expression.engine.server.model.dto.request.QueryExpressionVariableRequest; 6 | import com.liukx.expression.engine.server.model.dto.response.ExpressionVariableDTO; 7 | import com.liukx.expression.engine.server.model.dto.response.RestResult; 8 | import com.liukx.expression.engine.server.service.ExpressionVariableConfigService; 9 | import io.swagger.annotations.Api; 10 | import io.swagger.annotations.ApiOperation; 11 | import org.springframework.beans.factory.annotation.Autowired; 12 | import org.springframework.validation.annotation.Validated; 13 | import org.springframework.web.bind.annotation.*; 14 | 15 | import java.util.List; 16 | 17 | /** 18 | *

19 | * 表达式引擎通用变量配置表 前端控制器 20 | *

21 | * 22 | * @author bsy 23 | * @since 2022-06-08 24 | */ 25 | @Api(tags = "变量管理") 26 | @Validated 27 | @RestController 28 | @CrossOrigin(origins = "*") 29 | @RequestMapping(BaseConstants.BASE_PATH + "/variable") 30 | public class VariableConfigController { 31 | @Autowired 32 | private ExpressionVariableConfigService variableConfigService; 33 | 34 | @ApiOperation("查询注册变量") 35 | @PostMapping("/findVar") 36 | public RestResult> findFuncList(@RequestBody QueryExpressionVariableRequest queryRequest) { 37 | return variableConfigService.queryExpressionVariable(queryRequest); 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/controller/model/expression/ExpressionApiModel.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.controller.model.expression; 2 | 3 | /** 4 | * @author liukaixiong 5 | * @date : 2022/6/27 - 13:21 6 | */ 7 | //@Tag(name = "表达式api相关") 8 | //@Data 9 | public class ExpressionApiModel { 10 | 11 | // @Schema(description = "表达式内容", requiredMode = Schema.RequiredMode.REQUIRED) 12 | // @NotEmpty 13 | private String text; 14 | 15 | public String getText() { 16 | return text; 17 | } 18 | 19 | public void setText(String text) { 20 | this.text = text; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/enums/RemoteInvokeTypeEnums.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.enums; 2 | 3 | import com.liukx.expression.engine.server.components.html.DataRender; 4 | 5 | public enum RemoteInvokeTypeEnums implements DataRender { 6 | 7 | HTTP("http调用"), 8 | INTERNAL("内部调用"); 9 | 10 | private String label; 11 | 12 | RemoteInvokeTypeEnums(String describe) { 13 | this.label = describe; 14 | } 15 | 16 | @Override 17 | public Object getCode() { 18 | return this.name(); 19 | } 20 | 21 | @Override 22 | public String getLabel() { 23 | return this.label; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/enums/SyncDataEnums.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.enums; 2 | 3 | /** 4 | * @author liukaixiong 5 | * @date 2024/2/20 6 | */ 7 | public enum SyncDataEnums { 8 | EXPRESSION_EXECUTOR 9 | } 10 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/enums/TraceStageEnums.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.enums; 2 | 3 | public enum TraceStageEnums { 4 | START("开始阶段"), 5 | ACTION("行为阶段"), 6 | CONDITION("条件比较"), 7 | TRIGGER("执行阶段"), 8 | CALLBACK("回调阶段"), 9 | VARIABLE_PARSE("变量解析"), 10 | FUNCTION_PARSE("函数解析"), 11 | START_MATCH("开始匹配"), 12 | END_MATCH("结束阶段"), 13 | ERROR("异常阶段"), 14 | SUCCESS("执行成功"); 15 | 16 | private String describe; 17 | 18 | TraceStageEnums(String describe) { 19 | this.describe = describe; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/event/ExecutorConfigRefreshEvent.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.event; 2 | 3 | import org.springframework.context.ApplicationEvent; 4 | 5 | /** 6 | * 执行配置配置刷新 7 | * 8 | * @author liukaixiong 9 | * @date 2024/2/20 10 | */ 11 | public class ExecutorConfigRefreshEvent extends ApplicationEvent { 12 | 13 | /** 14 | * Create a new {@code ApplicationEvent}. 15 | * 16 | * @param source the object on which the event initially occurred or with 17 | * which the event is associated (never {@code null}) 18 | */ 19 | public ExecutorConfigRefreshEvent(Object source) { 20 | super(source); 21 | } 22 | 23 | 24 | } 25 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/event/listener/ExecutorConfigRefreshListener.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.event.listener; 2 | 3 | import com.liukx.expression.engine.server.event.ExecutorConfigRefreshEvent; 4 | import com.liukx.expression.engine.server.executor.ExpressionExecutor; 5 | import com.liukx.expression.engine.server.mapper.entity.ExpressionExecutorBaseInfo; 6 | import com.liukx.expression.engine.server.service.ExpressionExecutorConfigService; 7 | import org.slf4j.Logger; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.context.ApplicationListener; 10 | import org.springframework.stereotype.Component; 11 | 12 | import static org.slf4j.LoggerFactory.getLogger; 13 | 14 | /** 15 | * 执行器刷新配置 16 | * 17 | * @author liukaixiong 18 | * @date 2024/2/20 19 | */ 20 | @Component 21 | public class ExecutorConfigRefreshListener implements ApplicationListener { 22 | private final Logger log = getLogger(ExecutorConfigRefreshListener.class); 23 | @Autowired 24 | private ExpressionExecutor expressionExecutor; 25 | 26 | @Autowired 27 | private ExpressionExecutorConfigService expressionExecutorConfigService; 28 | 29 | @Override 30 | public void onApplicationEvent(ExecutorConfigRefreshEvent event) { 31 | 32 | Long executorId = (Long) event.getSource(); 33 | 34 | log.info("trigger event refresh ExecutorConfigRefreshEvent -> {}", executorId); 35 | 36 | ExpressionExecutorBaseInfo baseInfo = expressionExecutorConfigService.getById(executorId); 37 | 38 | // 重新构建业务数据 39 | expressionExecutor.getRefreshBusinessConfigInfo(baseInfo.getServiceName(), baseInfo.getBusinessCode(), baseInfo.getExecutorCode()); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/exception/BusinessException.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.exception; 2 | 3 | import com.liukx.expression.engine.server.constants.enums.ErrorEnum; 4 | 5 | /** 6 | * 业务异常 7 | */ 8 | public class BusinessException extends RuntimeException { 9 | 10 | private final Integer code; 11 | 12 | public BusinessException(Integer code) { 13 | super(); 14 | this.code = code; 15 | } 16 | 17 | public BusinessException(String message) { 18 | super(message); 19 | this.code = ErrorEnum.PARAMS_ERROR.getCode(); 20 | } 21 | 22 | public BusinessException(Integer code, String message) { 23 | super(message); 24 | this.code = code; 25 | } 26 | 27 | 28 | public BusinessException(Integer code, Throwable cause) { 29 | super(cause); 30 | this.code = code; 31 | } 32 | 33 | public BusinessException(Integer code, String message, Throwable cause) { 34 | super(message, cause); 35 | this.code = code; 36 | } 37 | 38 | public Integer getCode() { 39 | return code; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/executor/ExpressionRemoteInvoker.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.executor; 2 | 3 | import com.liukx.expression.engine.core.api.model.ApiResult; 4 | import com.liukx.expression.engine.core.api.model.api.RemoteExpressionModel; 5 | import com.liukx.expression.engine.server.enums.RemoteInvokeTypeEnums; 6 | import com.liukx.expression.engine.server.service.model.node.NodeServiceDto; 7 | 8 | /** 9 | * 调用远端执行器定义 10 | * 11 | * @author liukaixiong 12 | * @date : 2022/6/9 - 14:10 13 | */ 14 | public interface ExpressionRemoteInvoker { 15 | 16 | /** 17 | * 执行类型 18 | * 19 | * @return 20 | */ 21 | public RemoteInvokeTypeEnums type(); 22 | 23 | default String parseDomain(NodeServiceDto domain) { 24 | return domain.getDomain(); 25 | } 26 | 27 | /** 28 | * 具体的执行方式 29 | * 30 | * @param url 31 | * @param expressionModel 32 | * @return 33 | * @throws Exception 34 | */ 35 | public ApiResult invoke(String url, RemoteExpressionModel expressionModel) throws Exception; 36 | } 37 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/executor/RemoteTypeManager.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.executor; 2 | 3 | import com.liukx.expression.engine.server.enums.RemoteInvokeTypeEnums; 4 | import lombok.extern.slf4j.Slf4j; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.stereotype.Component; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * 远端类型管理器 12 | * @author liukaixiong 13 | * @date : 2022/6/9 - 14:16 14 | */ 15 | @Component 16 | @Slf4j 17 | public class RemoteTypeManager { 18 | 19 | @Autowired 20 | private List remoteInvokerList; 21 | 22 | public ExpressionRemoteInvoker getExpressionRemoteInvoker(RemoteInvokeTypeEnums invokeType) { 23 | for (ExpressionRemoteInvoker expressionRemoteInvoker : remoteInvokerList) { 24 | if (invokeType == expressionRemoteInvoker.type()) { 25 | return expressionRemoteInvoker; 26 | } 27 | } 28 | // 没有找到对应的执行器 29 | log.warn("沒有找到对应远端执行器实现:{}", invokeType.name()); 30 | return null; 31 | } 32 | 33 | 34 | } 35 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/executor/impl/InternalServiceInvoke.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.executor.impl; 2 | 3 | import com.liukx.expression.engine.server.enums.RemoteInvokeTypeEnums; 4 | import com.liukx.expression.engine.server.service.model.node.NodeServiceDto; 5 | import lombok.extern.slf4j.Slf4j; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.cloud.client.loadbalancer.LoadBalanced; 8 | import org.springframework.stereotype.Component; 9 | import org.springframework.web.client.RestTemplate; 10 | 11 | /** 12 | * 内部服务调用 13 | * 14 | * @author liukaixiong 15 | * @date 2022/8/25 - 10:34 16 | */ 17 | @Component 18 | @Slf4j 19 | public class InternalServiceInvoke extends HttpRemoteInvoke { 20 | 21 | 22 | @Autowired 23 | @LoadBalanced 24 | private RestTemplate restTemplate; 25 | 26 | @Override 27 | public String parseDomain(NodeServiceDto domain) { 28 | return "http://" + domain.getServiceName(); 29 | } 30 | 31 | @Override 32 | public RemoteInvokeTypeEnums type() { 33 | return RemoteInvokeTypeEnums.INTERNAL; 34 | } 35 | 36 | @Override 37 | public RestTemplate getRestTemplate() { 38 | return this.restTemplate; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/expression/model/function/TestUserModel.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.expression.model.function; 2 | 3 | import com.liukx.expression.engine.core.anno.PropertyDefinition; 4 | 5 | public class TestUserModel { 6 | @PropertyDefinition(value = "用户名称") 7 | private String name; 8 | @PropertyDefinition(value = "年龄") 9 | private int age; 10 | @PropertyDefinition(value = "主键", required = true) 11 | private Integer id; 12 | 13 | public String getName() { 14 | return name; 15 | } 16 | 17 | public void setName(String name) { 18 | this.name = name; 19 | } 20 | 21 | public int getAge() { 22 | return age; 23 | } 24 | 25 | public void setAge(int age) { 26 | this.age = age; 27 | } 28 | 29 | public Integer getId() { 30 | return id; 31 | } 32 | 33 | public void setId(Integer id) { 34 | this.id = id; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/mapper/ExpressionConfigMapper.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.liukx.expression.engine.server.mapper.entity.ExpressionExecutorInfoConfig; 5 | 6 | /** 7 | *

8 | * 表达式配置 Mapper 接口 9 | *

10 | * 11 | * @author bsy 12 | * @since 2022-06-12 13 | */ 14 | public interface ExpressionConfigMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/mapper/ExpressionExecutorConfigMapper.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.liukx.expression.engine.server.mapper.entity.ExpressionExecutorBaseInfo; 5 | 6 | /** 7 | *

8 | * Mapper 接口 9 | *

10 | * 11 | * @author bsy 12 | * @since 2022-06-12 13 | */ 14 | public interface ExpressionExecutorConfigMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/mapper/ExpressionFunctionConfigMapper.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.liukx.expression.engine.server.mapper.entity.ExpressionFunctionConfig; 5 | 6 | /** 7 | *

8 | * 函数配置表 Mapper 接口 9 | *

10 | * 11 | * @author bsy 12 | * @since 2022-06-08 13 | */ 14 | public interface ExpressionFunctionConfigMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/mapper/ExpressionGlobalTraceLogMapper.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.liukx.expression.engine.server.mapper.entity.ExpressionGlobalTraceLog; 5 | 6 | /** 7 | *

8 | * 全局日志表,负责记录表达式执行过程的日志记录,负责排查执行过程 Mapper 接口 9 | *

10 | * 11 | * @author bsy 12 | * @since 2022-06-15 13 | */ 14 | public interface ExpressionGlobalTraceLogMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/mapper/ExpressionLinkResultLogMapper.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.liukx.expression.engine.server.mapper.entity.ExpressionLinkResultLog; 5 | 6 | /** 7 | *

8 | * 成功回调日志表,记录执行完成的日志记录,全局日志表的压缩版 Mapper 接口 9 | *

10 | * 11 | * @author bsy 12 | * @since 2022-06-15 13 | */ 14 | public interface ExpressionLinkResultLogMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/mapper/ExpressionNodeConfigMapper.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.liukx.expression.engine.server.mapper.entity.ExpressionNodeConfig; 5 | 6 | /** 7 | *

8 | * 引擎节点信息 Mapper 接口 9 | *

10 | * 11 | * @author bsy 12 | * @since 2022-06-08 13 | */ 14 | public interface ExpressionNodeConfigMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/mapper/ExpressionTraceLogIndexMapper.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.liukx.expression.engine.server.mapper.entity.ExpressionTraceLogIndex; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | *

9 | * Mapper 接口 10 | *

11 | * 12 | * @author liukx 13 | * @since 2024-07-18 14 | */ 15 | @Mapper 16 | public interface ExpressionTraceLogIndexMapper extends BaseMapper { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/mapper/ExpressionTraceLogInfoMapper.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.liukx.expression.engine.server.mapper.entity.ExpressionTraceLogInfo; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | *

9 | * Mapper 接口 10 | *

11 | * 12 | * @author liukx 13 | * @since 2024-07-18 14 | */ 15 | @Mapper 16 | public interface ExpressionTraceLogInfoMapper extends BaseMapper { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/mapper/ExpressionVariableConfigMapper.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.liukx.expression.engine.server.mapper.entity.ExpressionVariableConfig; 5 | 6 | /** 7 | *

8 | * 表达式引擎通用变量配置表 Mapper 接口 9 | *

10 | * 11 | * @author bsy 12 | * @since 2022-06-08 13 | */ 14 | public interface ExpressionVariableConfigMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/mapper/entity/BaseTableEntity.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.mapper.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.baomidou.mybatisplus.annotation.TableLogic; 7 | import lombok.Data; 8 | 9 | import java.util.Date; 10 | 11 | /** 12 | * 基础实体父类通用字段 13 | * 14 | * @author liukaixiong 15 | * @date 2024/5/13 - 18:46 16 | */ 17 | @Data 18 | public class BaseTableEntity { 19 | @TableId(value = "id", 20 | type = IdType.AUTO) 21 | private Long id; 22 | 23 | 24 | @TableField("is_deleted") 25 | @TableLogic 26 | private Integer isDeleted; 27 | 28 | 29 | @TableField("created") 30 | private Date created; 31 | 32 | 33 | @TableField("creator") 34 | private String creator; 35 | 36 | 37 | @TableField("updated") 38 | private Date updated; 39 | 40 | 41 | @TableField("updater") 42 | private String updater; 43 | 44 | } 45 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/mapper/entity/ExpressionFunctionConfig.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.mapper.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.baomidou.mybatisplus.annotation.TableName; 6 | import lombok.Data; 7 | import lombok.EqualsAndHashCode; 8 | 9 | import java.io.Serializable; 10 | import java.time.LocalDateTime; 11 | 12 | /** 13 | *

14 | * 函数配置表 15 | *

16 | * 17 | * @author bsy 18 | * @since 2022-06-08 19 | */ 20 | @Data 21 | @EqualsAndHashCode(callSuper = false) 22 | @TableName("expression_function_config") 23 | public class ExpressionFunctionConfig implements Serializable { 24 | 25 | private static final long serialVersionUID = 1L; 26 | /** 27 | * 主键id 28 | */ 29 | @TableId(value = "id", type = IdType.AUTO) 30 | private Long id; 31 | /** 32 | * 服务名称 33 | */ 34 | private String serviceName; 35 | /** 36 | * 函数名称 37 | */ 38 | private String funcName; 39 | /** 40 | * 函数描述 41 | */ 42 | private String funcDescription; 43 | /** 44 | * 入参说明 45 | */ 46 | private String paramDoc; 47 | /** 48 | * 是否已删除:0否,1.是 49 | */ 50 | private Integer deleted; 51 | /** 52 | * 状态:0启用,1禁用 53 | */ 54 | private Integer status; 55 | /** 56 | * 创建人 57 | */ 58 | private String createBy; 59 | /** 60 | * 更新人 61 | */ 62 | private String updateBy; 63 | /** 64 | * 创建时间 65 | */ 66 | private LocalDateTime createTime; 67 | /** 68 | * 更新时间 69 | */ 70 | private LocalDateTime updateTime; 71 | 72 | public ExpressionFunctionConfig() { 73 | } 74 | 75 | } 76 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/mapper/entity/ExpressionNodeConfig.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.mapper.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.baomidou.mybatisplus.annotation.TableName; 6 | import lombok.Builder; 7 | import lombok.Data; 8 | import lombok.EqualsAndHashCode; 9 | 10 | import java.io.Serializable; 11 | import java.time.LocalDateTime; 12 | 13 | /** 14 | *

15 | * 引擎节点信息 16 | *

17 | * 18 | * @author bsy 19 | * @since 2022-06-08 20 | */ 21 | @Data 22 | @EqualsAndHashCode(callSuper = false) 23 | @TableName("expression_node_config") 24 | @Builder 25 | public class ExpressionNodeConfig implements Serializable { 26 | 27 | private static final long serialVersionUID = 1L; 28 | 29 | /** 30 | * 主键id 31 | */ 32 | @TableId(value = "id", type = IdType.AUTO) 33 | private Long id; 34 | 35 | /** 36 | * 调用方式 37 | */ 38 | private String callMethod; 39 | 40 | /** 41 | * 服务名称 42 | */ 43 | private String serviceName; 44 | 45 | /** 46 | * 服务描述 47 | */ 48 | private String serviceDescription; 49 | 50 | /** 51 | * 项目地址 52 | */ 53 | private String domain; 54 | 55 | /** 56 | * 是否已删除:0.否,1.是 57 | */ 58 | private Boolean deleted; 59 | 60 | /** 61 | * 状态:0.启用1.禁用 62 | */ 63 | private Integer status; 64 | 65 | /** 66 | * 创建时间 67 | */ 68 | private LocalDateTime createTime; 69 | 70 | /** 71 | * 更新时间 72 | */ 73 | private LocalDateTime updateTime; 74 | 75 | /** 76 | * 创建人 77 | */ 78 | private String createBy; 79 | 80 | /** 81 | * 更新人 82 | */ 83 | private String updateBy; 84 | } 85 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/mapper/entity/ExpressionTraceLogInfo.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.mapper.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.TableField; 4 | import com.baomidou.mybatisplus.annotation.TableName; 5 | import lombok.Getter; 6 | import lombok.Setter; 7 | 8 | /** 9 | *

10 | * 11 | *

12 | * 13 | * @author liukx 14 | * @since 2024-07-18 15 | */ 16 | @Getter 17 | @Setter 18 | @TableName("expression_trace_log_info") 19 | //@Schema(name = "ExpressionTraceLogInfo", description = "") 20 | public class ExpressionTraceLogInfo extends BaseTableEntity { 21 | 22 | private static final long serialVersionUID = 1L; 23 | 24 | // @Schema(description = "追踪编号主键") 25 | @TableField("trace_log_id") 26 | private Long traceLogId; 27 | 28 | // @Schema(description = "执行器编号") 29 | @TableField("executor_id") 30 | private Long executorId; 31 | 32 | // @Schema(description = "表达式配置编号") 33 | @TableField("expression_config_id") 34 | private Long expressionConfigId; 35 | 36 | // @Schema(description = "模块类型: expression:表达式,function:函数") 37 | @TableField("module_type") 38 | private String moduleType; 39 | 40 | // @Schema(description = "表达式内容") 41 | @TableField("expression_content") 42 | private String expressionContent; 43 | 44 | // @Schema(description = "表达式结果 0 失败 1成功") 45 | @TableField("expression_result") 46 | private Integer expressionResult; 47 | 48 | // @Schema(description = "调试追踪上下文") 49 | @TableField("debug_trace_content") 50 | private String debugTraceContent; 51 | 52 | // @Schema(description = "表达式描述") 53 | @TableField("expression_description") 54 | private String expressionDescription; 55 | } 56 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/mapper/entity/ExpressionVariableConfig.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.mapper.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.baomidou.mybatisplus.annotation.TableName; 6 | import lombok.Data; 7 | import lombok.EqualsAndHashCode; 8 | 9 | import java.io.Serializable; 10 | import java.time.LocalDateTime; 11 | 12 | /** 13 | *

14 | * 表达式引擎通用变量配置表 15 | *

16 | * 17 | * @author bsy 18 | * @since 2022-06-08 19 | */ 20 | @Data 21 | @EqualsAndHashCode(callSuper = false) 22 | @TableName("expression_variable_config") 23 | public class ExpressionVariableConfig implements Serializable { 24 | 25 | private static final long serialVersionUID = 1L; 26 | /** 27 | * 主键id 28 | */ 29 | @TableId(value = "id", type = IdType.AUTO) 30 | private Long id; 31 | /** 32 | * 服务名称 33 | */ 34 | private String serviceName; 35 | /** 36 | * 变量编码 37 | */ 38 | private String varCode; 39 | /** 40 | * 变量描述 41 | */ 42 | private String varDescription; 43 | /** 44 | * 变量来源:local本地,remote远程 45 | */ 46 | private String varSource; 47 | /** 48 | * 变量数据类型 49 | */ 50 | private String varDataType; 51 | /** 52 | * 状态:0.启用,1.禁用 53 | */ 54 | private Integer status; 55 | /** 56 | * 是否已删除:0.否 57 | */ 58 | private Boolean deleted; 59 | /** 60 | * 创建人 61 | */ 62 | private String createBy; 63 | /** 64 | * 更新人 65 | */ 66 | private String updateBy; 67 | /** 68 | * 创建时间 69 | */ 70 | private LocalDateTime createTime; 71 | /** 72 | * 更新时间 73 | */ 74 | private LocalDateTime updateTime; 75 | 76 | public ExpressionVariableConfig() { 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/model/dto/request/AddExpressionExecutorRequest.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.model.dto.request; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | @Data 8 | //@Tag(name = "添加表达式引擎执行器请求类") 9 | public class AddExpressionExecutorRequest implements Serializable { 10 | /** 11 | * 服务名称 12 | */ 13 | // @Schema(description = "服务名称", requiredMode = Schema.RequiredMode.REQUIRED) 14 | private String serviceName; 15 | 16 | /** 17 | * 业务编码 18 | */ 19 | // @Schema(description = "业务编码", requiredMode = Schema.RequiredMode.REQUIRED) 20 | private String businessCode; 21 | 22 | /** 23 | * 执行器名称 24 | */ 25 | // @Schema(description = "执行器编码", requiredMode = Schema.RequiredMode.REQUIRED) 26 | private String executorCode; 27 | /** 28 | * 执行器描述 29 | */ 30 | // @ApiModelProperty("执行器描述") 31 | private String executorDescription; 32 | 33 | // @ApiModelProperty("配置能力") 34 | private String configurabilityJson; 35 | /** 36 | * 变量定义,方便索引 37 | */ 38 | // @ApiModelProperty("变量定义") 39 | private String varDefinition; 40 | 41 | /** 42 | * 执行器状态:0.创建,1.启用,2.禁用 43 | */ 44 | // @ApiModelProperty("执行器状态") 45 | private Integer status; 46 | 47 | /** 48 | * 创建人 49 | */ 50 | // @ApiModelProperty("创建人") 51 | private String createBy; 52 | } 53 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/model/dto/request/AddExpressionFunctionRequest.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.model.dto.request; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | import java.util.List; 9 | 10 | @ApiModel("添加规则引擎函数请求类") 11 | @Data 12 | public class AddExpressionFunctionRequest implements Serializable { 13 | /** 14 | * 服务名称 15 | */ 16 | @ApiModelProperty("服务名称") 17 | private String serviceName; 18 | 19 | /** 20 | * 函数名称 21 | */ 22 | @ApiModelProperty("函数名称") 23 | private String funcName; 24 | 25 | /** 26 | * 函数描述 27 | */ 28 | @ApiModelProperty("函数描述") 29 | private String funcDescription; 30 | 31 | /** 32 | * 函数入参json说明 33 | */ 34 | @ApiModelProperty("函数入参json说明") 35 | private List bodyParam; 36 | 37 | /** 38 | * 公共入参 39 | */ 40 | @ApiModelProperty("公共入参") 41 | private List commonParam; 42 | 43 | /** 44 | * 状态:0启用,1禁用 45 | */ 46 | @ApiModelProperty("函数状态") 47 | private Integer status; 48 | 49 | /** 50 | * 创建人 51 | */ 52 | @ApiModelProperty("创建人") 53 | private String createBy; 54 | 55 | } 56 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/model/dto/request/AddExpressionNodeRequest.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.model.dto.request; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Builder; 6 | import lombok.Data; 7 | 8 | import java.io.Serializable; 9 | 10 | @ApiModel("添加节点请求类") 11 | @Data 12 | @Builder 13 | public class AddExpressionNodeRequest implements Serializable { 14 | 15 | /** 16 | * 服务名称 17 | */ 18 | @ApiModelProperty("服务名称") 19 | private String serviceName; 20 | 21 | /** 22 | * 调用方式 23 | */ 24 | @ApiModelProperty("调用方式") 25 | private String callMethod; 26 | /** 27 | * 服务描述 28 | */ 29 | @ApiModelProperty("服务描述") 30 | private String serviceDescription; 31 | 32 | /** 33 | * 路由地址 34 | */ 35 | @ApiModelProperty("路由地址") 36 | private String domain; 37 | 38 | /** 39 | * 状态:0.启用1.禁用 40 | */ 41 | @ApiModelProperty("状态") 42 | private Integer status; 43 | 44 | /** 45 | * 创建人 46 | */ 47 | @ApiModelProperty("创建人") 48 | private String createBy; 49 | } 50 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/model/dto/request/AddExpressionVariableRequest.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.model.dto.request; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | 9 | @Data 10 | @ApiModel("添加注册变量请求类") 11 | public class AddExpressionVariableRequest implements Serializable { 12 | 13 | /** 14 | * 服务名称 15 | */ 16 | @ApiModelProperty("服务名称") 17 | private String serviceName; 18 | 19 | /** 20 | * 变量编码 21 | */ 22 | @ApiModelProperty(value = "变量编码", required = true) 23 | private String varCode; 24 | 25 | /** 26 | * 变量描述 27 | */ 28 | @ApiModelProperty("变量描述") 29 | private String varDescription; 30 | 31 | /** 32 | * 变量来源:local本地,remote远程 33 | */ 34 | @ApiModelProperty("变量来源") 35 | private String varSource; 36 | 37 | /** 38 | * 变量数据类型 39 | */ 40 | @ApiModelProperty("变量数据类型") 41 | private String varDataType; 42 | 43 | /** 44 | * 状态:0.启用,1.禁用 45 | */ 46 | @ApiModelProperty("状态") 47 | private Integer status; 48 | 49 | /** 50 | * 创建人 51 | */ 52 | @ApiModelProperty("创建人") 53 | private String createBy; 54 | 55 | } 56 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/model/dto/request/AddGlobalTraceLogRequest.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.model.dto.request; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | 9 | @Data 10 | @ApiModel("添加全局日志请求类") 11 | public class AddGlobalTraceLogRequest implements Serializable { 12 | /** 13 | * 服务名称 14 | */ 15 | @ApiModelProperty("服务名称") 16 | private String serviceName; 17 | 18 | /** 19 | * 阶段类型 20 | */ 21 | @ApiModelProperty("阶段类型") 22 | private String stageType; 23 | 24 | /** 25 | * 执行链路编号 26 | */ 27 | @ApiModelProperty("执行链路编号") 28 | private String linkNo; 29 | 30 | /** 31 | * 业务编码 32 | */ 33 | @ApiModelProperty("业务编码") 34 | private String businessCode; 35 | 36 | /** 37 | * 事件编码 38 | */ 39 | @ApiModelProperty("事件编码") 40 | private String eventCode; 41 | 42 | /** 43 | * 唯一编号(负责确定唯一编号,类似userId) 44 | */ 45 | @ApiModelProperty("唯一编号") 46 | private String uniqueNo; 47 | 48 | /** 49 | * 执行结果描述 50 | */ 51 | @ApiModelProperty("执行结果描述") 52 | private String resultDescription; 53 | 54 | /** 55 | * 是否执行成功:0.否,1.是 56 | */ 57 | @ApiModelProperty("执行链路编号") 58 | private Boolean executeSuccess; 59 | 60 | /** 61 | * 创建人 62 | */ 63 | @ApiModelProperty("创建人") 64 | private String createBy; 65 | 66 | 67 | } 68 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/model/dto/request/AddLinkResultLogRequest.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.model.dto.request; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | 9 | @ApiModel("添加成功日志记录请求类") 10 | @Data 11 | public class AddLinkResultLogRequest implements Serializable { 12 | /** 13 | * 服务名称 14 | */ 15 | @ApiModelProperty("服务名称") 16 | private String serviceName; 17 | 18 | /** 19 | * 阶段类型 20 | */ 21 | @ApiModelProperty("阶段类型") 22 | private String stageType; 23 | 24 | /** 25 | * 执行链路编号 26 | */ 27 | @ApiModelProperty("执行链路编号") 28 | private String linkNo; 29 | 30 | /** 31 | * 业务编码 32 | */ 33 | @ApiModelProperty("业务编码") 34 | private String businessCode; 35 | 36 | /** 37 | * 事件编码 38 | */ 39 | @ApiModelProperty("事件编码") 40 | private String eventCode; 41 | 42 | /** 43 | * 唯一编号(负责确定唯一编号,类似userId) 44 | */ 45 | @ApiModelProperty("唯一编号") 46 | private String uniqueNo; 47 | 48 | /** 49 | * 执行结果描述 50 | */ 51 | @ApiModelProperty("执行结果描述") 52 | private String resultDescription; 53 | 54 | /** 55 | * 创建人 56 | */ 57 | @ApiModelProperty("创建人") 58 | private String createBy; 59 | } 60 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/model/dto/request/DeleteByIdListRequest.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.model.dto.request; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.util.List; 7 | 8 | @Data 9 | //@Tag(name="逻辑删除请求类") 10 | public class DeleteByIdListRequest implements Serializable { 11 | // @Schema(description = "待删除的id列表", required = true) 12 | // @Size(min = 1, max = 200, message = "id个数1~200个,只能包含数字") 13 | private List idList; 14 | 15 | // @Schema(description = "更新人") 16 | private String updateBy; 17 | } 18 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/model/dto/request/EditExpressionConfigRequest.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.model.dto.request; 2 | 3 | import com.fasterxml.jackson.databind.annotation.JsonSerialize; 4 | import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | 9 | //@Tag(name = "编辑引擎表达式请求类") 10 | @Data 11 | public class EditExpressionConfigRequest implements Serializable { 12 | /** 13 | * 主键id 14 | */ 15 | @JsonSerialize(using = ToStringSerializer.class) 16 | // @Schema(description = "表达式id") 17 | private Long id; 18 | 19 | // @Schema(description = "表达式编码,需要唯一") 20 | private String expressionCode; 21 | 22 | // @Schema(description = "表达式上级编号") 23 | private Long parentId; 24 | 25 | /** 26 | * 表达式类型:condition 条件表达式;rule 规则表达式 27 | */ 28 | // @Schema(description = "表达式类型", allowableValues = "condition,rule") 29 | private String expressionType; 30 | /** 31 | * 表达式描述 32 | */ 33 | // @Schema(description = "表达式描述") 34 | private String expressionDescription; 35 | // @Schema(description = "表达式标题") 36 | private String expressionTitle; 37 | /** 38 | * 表达式内容 39 | */ 40 | // @Schema(description = "表达式内容") 41 | private String expressionContent; 42 | 43 | private String configurabilityJson; 44 | 45 | /** 46 | * 表达式状态:0.启用,1.禁用 47 | */ 48 | // @Schema(description = "表达式状态") 49 | private Integer expressionStatus; 50 | 51 | // @ApiModelProperty("优先级顺序") 52 | private Integer priorityOrder; 53 | /** 54 | * 更新人 55 | */ 56 | // @Schema(description = "更新人") 57 | private String updateBy; 58 | } 59 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/model/dto/request/EditExpressionExecutorRequest.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.model.dto.request; 2 | 3 | import com.fasterxml.jackson.databind.annotation.JsonSerialize; 4 | import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; 5 | import lombok.Data; 6 | 7 | 8 | //@ApiModel("编辑表达式引擎执行器请求类") 9 | @Data 10 | public class EditExpressionExecutorRequest { 11 | @JsonSerialize(using = ToStringSerializer.class) 12 | // @Schema(description="主键id") 13 | private Long id; 14 | 15 | /** 16 | * 服务名称 17 | */ 18 | // @Schema(description="服务名称") 19 | private String serviceName; 20 | 21 | /** 22 | * 业务编码 23 | */ 24 | // @Schema(description="业务编码") 25 | private String businessCode; 26 | 27 | /** 28 | * 执行器名称 29 | */ 30 | // @Schema(description="执行器编码",required = true) 31 | private String executorCode; 32 | /** 33 | * 执行器描述 34 | */ 35 | // @Schema(description="执行器描述") 36 | private String executorDescription; 37 | 38 | // @Schema(description="配置能力") 39 | private String configurabilityJson; 40 | /** 41 | * 变量定义,方便索引 42 | */ 43 | // @ApiModelProperty("变量定义") 44 | private String varDefinition; 45 | 46 | /** 47 | * 执行器状态:0.创建,1.启用,2.禁用 48 | */ 49 | // @Schema(description="执行器状态") 50 | private Integer status; 51 | 52 | /** 53 | * 更新人 54 | */ 55 | // @Schema(description="更新人") 56 | private String updateBy; 57 | } 58 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/model/dto/request/EditExpressionFunctionRequest.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.model.dto.request; 2 | 3 | import com.fasterxml.jackson.databind.annotation.JsonSerialize; 4 | import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; 5 | import io.swagger.annotations.ApiModel; 6 | import io.swagger.annotations.ApiModelProperty; 7 | import lombok.Data; 8 | 9 | import java.io.Serializable; 10 | 11 | @ApiModel("编辑规则引擎函数请求类") 12 | @Data 13 | public class EditExpressionFunctionRequest implements Serializable { 14 | 15 | @JsonSerialize(using = ToStringSerializer.class) 16 | @ApiModelProperty(value = "函数id", required = true) 17 | private Long id; 18 | /** 19 | * 服务名称 20 | */ 21 | @ApiModelProperty("服务名称") 22 | private String serviceName; 23 | 24 | /** 25 | * 函数描述 26 | */ 27 | @ApiModelProperty("函数描述") 28 | private String funcDescription; 29 | 30 | /** 31 | * 函数入参json说明 32 | */ 33 | @ApiModelProperty("函数入参json说明") 34 | private String bodyParam; 35 | /** 36 | * 函数描述 37 | */ 38 | @ApiModelProperty("函数描述") 39 | private String paramDoc; 40 | /** 41 | * 公共入参 42 | */ 43 | @ApiModelProperty("公共入参") 44 | private String commonParam; 45 | 46 | /** 47 | * 状态:0启用,1禁用 48 | */ 49 | @ApiModelProperty("函数状态") 50 | private Integer status; 51 | 52 | /** 53 | * 更新人 54 | */ 55 | @ApiModelProperty("更新人") 56 | private String updateBy; 57 | 58 | } 59 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/model/dto/request/EditExpressionNodeRequest.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.model.dto.request; 2 | 3 | import com.fasterxml.jackson.databind.annotation.JsonSerialize; 4 | import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; 5 | import io.swagger.annotations.ApiModel; 6 | import io.swagger.annotations.ApiModelProperty; 7 | import lombok.Builder; 8 | import lombok.Data; 9 | 10 | import java.io.Serializable; 11 | 12 | @ApiModel("修改服务节点请求类") 13 | @Data 14 | @Builder 15 | public class EditExpressionNodeRequest implements Serializable { 16 | @JsonSerialize(using = ToStringSerializer.class) 17 | @ApiModelProperty("节点id") 18 | private Long id; 19 | 20 | /** 21 | * 调用方式 22 | */ 23 | @ApiModelProperty("调用方式") 24 | private String callMethod; 25 | 26 | /** 27 | * 服务名称 28 | */ 29 | @ApiModelProperty("服务名称") 30 | private String serviceName; 31 | 32 | /** 33 | * 服务描述 34 | */ 35 | @ApiModelProperty("服务描述") 36 | private String serviceDescription; 37 | 38 | /** 39 | * 路由地址 40 | */ 41 | @ApiModelProperty("服务地址") 42 | private String domain; 43 | 44 | /** 45 | * 状态:0.启用1.禁用 46 | */ 47 | @ApiModelProperty("状态") 48 | private Integer status; 49 | 50 | 51 | /** 52 | * 更新人 53 | */ 54 | @ApiModelProperty("更新人") 55 | private String updateBy; 56 | } 57 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/model/dto/request/EditExpressionVariableRequest.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.model.dto.request; 2 | 3 | import com.fasterxml.jackson.databind.annotation.JsonSerialize; 4 | import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; 5 | import io.swagger.annotations.ApiModel; 6 | import io.swagger.annotations.ApiModelProperty; 7 | import lombok.Data; 8 | 9 | import java.io.Serializable; 10 | 11 | @ApiModel("编辑注册变量请求类") 12 | @Data 13 | public class EditExpressionVariableRequest implements Serializable { 14 | @JsonSerialize(using = ToStringSerializer.class) 15 | private Long id; 16 | /** 17 | * 服务名称 18 | */ 19 | @ApiModelProperty("服务名称") 20 | private String serviceName; 21 | 22 | /** 23 | * 变量编码 24 | */ 25 | @ApiModelProperty("变量编码") 26 | private String varCode; 27 | 28 | /** 29 | * 变量英文名 30 | */ 31 | @ApiModelProperty("变量英文名") 32 | private String varName; 33 | 34 | /** 35 | * 变量值 36 | */ 37 | @ApiModelProperty("变量值") 38 | private String varValue; 39 | 40 | /** 41 | * 变量描述 42 | */ 43 | @ApiModelProperty("变量描述") 44 | private String varDescription; 45 | 46 | /** 47 | * 变量来源:local本地,remote远程 48 | */ 49 | @ApiModelProperty("变量来源") 50 | private String varSource; 51 | 52 | /** 53 | * 变量数据类型 54 | */ 55 | @ApiModelProperty("变量数据类型") 56 | private String varDataType; 57 | 58 | /** 59 | * 状态:0.启用,1.禁用 60 | */ 61 | @ApiModelProperty("状态") 62 | private Integer status; 63 | 64 | /** 65 | * 更新人 66 | */ 67 | @ApiModelProperty("更新人") 68 | private String updateBy; 69 | } 70 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/model/dto/request/EditGlobalTraceLogRequest.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.model.dto.request; 2 | 3 | import com.fasterxml.jackson.databind.annotation.JsonSerialize; 4 | import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; 5 | import io.swagger.annotations.ApiModel; 6 | import io.swagger.annotations.ApiModelProperty; 7 | import lombok.Data; 8 | 9 | import java.io.Serializable; 10 | 11 | @ApiModel("编辑全局日志记录请求类") 12 | @Data 13 | public class EditGlobalTraceLogRequest implements Serializable { 14 | /** 15 | * 主键id 16 | */ 17 | @JsonSerialize(using = ToStringSerializer.class) 18 | @ApiModelProperty("主键id") 19 | private Long id; 20 | /** 21 | * 服务名称 22 | */ 23 | @ApiModelProperty("服务名称") 24 | private String serviceName; 25 | 26 | /** 27 | * 阶段类型 28 | */ 29 | @ApiModelProperty("阶段类型") 30 | private String stageType; 31 | 32 | /** 33 | * 执行链路编号 34 | */ 35 | @ApiModelProperty("执行链路编号") 36 | private String linkNo; 37 | 38 | /** 39 | * 业务编码 40 | */ 41 | @ApiModelProperty("业务编码") 42 | private String businessCode; 43 | 44 | /** 45 | * 事件编码 46 | */ 47 | @ApiModelProperty("事件编码") 48 | private String eventCode; 49 | 50 | /** 51 | * 唯一编号(负责确定唯一编号,类似userId) 52 | */ 53 | @ApiModelProperty("唯一编号") 54 | private String uniqueNo; 55 | 56 | /** 57 | * 执行结果描述 58 | */ 59 | @ApiModelProperty("执行结果描述") 60 | private String resultDescription; 61 | 62 | /** 63 | * 是否执行成功:0.否,1.是 64 | */ 65 | @ApiModelProperty("执行链路编号") 66 | private Boolean executeSuccess; 67 | 68 | /** 69 | * 更新人 70 | */ 71 | @ApiModelProperty("更新人") 72 | private String updateBy; 73 | } 74 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/model/dto/request/EditLinkResultLogRequest.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.model.dto.request; 2 | 3 | import com.fasterxml.jackson.databind.annotation.JsonSerialize; 4 | import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; 5 | import io.swagger.annotations.ApiModel; 6 | import io.swagger.annotations.ApiModelProperty; 7 | import lombok.Data; 8 | 9 | import java.io.Serializable; 10 | 11 | @Data 12 | @ApiModel("编辑成功回调日志请求类") 13 | public class EditLinkResultLogRequest implements Serializable { 14 | /** 15 | * 主键id 16 | */ 17 | @JsonSerialize(using = ToStringSerializer.class) 18 | @ApiModelProperty("主键id") 19 | private Long id; 20 | /** 21 | * 服务名称 22 | */ 23 | @ApiModelProperty("服务名称") 24 | private String serviceName; 25 | 26 | /** 27 | * 阶段类型 28 | */ 29 | @ApiModelProperty("阶段类型") 30 | private String stageType; 31 | 32 | /** 33 | * 执行链路编号 34 | */ 35 | @ApiModelProperty("执行链路编号") 36 | private String linkNo; 37 | 38 | /** 39 | * 业务编码 40 | */ 41 | @ApiModelProperty("业务编码") 42 | private String businessCode; 43 | 44 | /** 45 | * 事件编码 46 | */ 47 | @ApiModelProperty("事件编码") 48 | private String eventCode; 49 | 50 | /** 51 | * 唯一编号(负责确定唯一编号,类似userId) 52 | */ 53 | @ApiModelProperty("唯一编号") 54 | private String uniqueNo; 55 | 56 | /** 57 | * 执行结果描述 58 | */ 59 | @ApiModelProperty("执行结果描述") 60 | private String resultDescription; 61 | } 62 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/model/dto/request/LoginModel.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.model.dto.request; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 7 | * 8 | * @author liukaixiong 9 | * @date 2025/2/26 - 13:31 10 | */ 11 | @Data 12 | public class LoginModel { 13 | 14 | private String username; 15 | private String password; 16 | 17 | } 18 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/model/dto/request/PageQuery.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.model.dto.request; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * 分页查询实体类 9 | * 10 | * @author Lion Li 11 | */ 12 | 13 | @Data 14 | public class PageQuery implements Serializable { 15 | 16 | /** 17 | * 当前记录起始索引 默认值 18 | */ 19 | public static final int DEFAULT_PAGE_NUM = 1; 20 | /** 21 | * 每页显示记录数 默认值 默认查全部 22 | */ 23 | public static final int DEFAULT_PAGE_SIZE = Integer.MAX_VALUE; 24 | /** 25 | * 分页大小 26 | */ 27 | private Integer pageSize; 28 | /** 29 | * 当前页数 30 | */ 31 | private Integer pageNum; 32 | /** 33 | * 排序列 34 | */ 35 | private String orderByColumn; 36 | /** 37 | * 排序的方向desc或者asc 38 | */ 39 | private String isAsc; 40 | 41 | } 42 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/model/dto/request/ParamDTO.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.model.dto.request; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | 9 | @Data 10 | @ApiModel("参数设置类") 11 | public class ParamDTO implements Serializable { 12 | @ApiModelProperty(value = "参数名称", required = true) 13 | private String paramName; 14 | 15 | @ApiModelProperty("参数描述") 16 | private String paramDescription; 17 | 18 | @ApiModelProperty(value = "参数排序", required = true) 19 | private Integer paramSortNum; 20 | 21 | @ApiModelProperty(value = "参数类型", required = true, allowableValues = "String,Integer,Long,List", example = "String") 22 | private String paramDataType; 23 | } 24 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/model/dto/request/QueryExpressionConfigRequest.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.model.dto.request; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | @ApiModel 9 | @Data 10 | public class QueryExpressionConfigRequest implements Serializable { 11 | 12 | // @Schema(description = "执行器编号") 13 | private Integer executorId; 14 | // @Schema(description = "上级编号") 15 | private Long parentId; 16 | // @Schema(description = "表达式类型", allowableValues = "action,condition,trigger,callback") 17 | private String expressionType; 18 | 19 | // @Schema(description = "追踪日志编号") 20 | private Long traceLogId; 21 | /** 22 | * 表达式描述 23 | */ 24 | // @Schema(description = "表达式描述") 25 | private String expressionDescription; 26 | /** 27 | * 表达式内容 28 | */ 29 | // @Schema(description = "表达式内容") 30 | private String expressionContent; 31 | 32 | /** 33 | * 表达式状态:0.启用,1.禁用 34 | */ 35 | // @Schema(description = "表达式状态") 36 | private Integer expressionStatus; 37 | 38 | } 39 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/model/dto/request/QueryExpressionExecutorRequest.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.model.dto.request; 2 | 3 | //import io.swagger.v3.oas.annotations.media.Schema; 4 | //import io.swagger.v3.oas.annotations.tags.Tag; 5 | 6 | import com.fasterxml.jackson.annotation.JsonProperty; 7 | import lombok.Data; 8 | import lombok.EqualsAndHashCode; 9 | 10 | import java.io.Serializable; 11 | import java.util.Date; 12 | 13 | //@Tag(name="查询表达式") 14 | @EqualsAndHashCode(callSuper = true) 15 | @Data 16 | public class QueryExpressionExecutorRequest extends PageQuery implements Serializable { 17 | /** 18 | * 服务名称 19 | */ 20 | // @Schema(description="服务名称") 21 | private String serviceName; 22 | 23 | /** 24 | * 业务编码 25 | */ 26 | // @Schema(description="业务编码") 27 | private String businessCode; 28 | /** 29 | * 执行器名称 30 | */ 31 | // @Schema(description="执行器名称") 32 | private String executorCode; 33 | /** 34 | * 执行器状态:0.创建,1.启用,2.禁用 35 | */ 36 | // @Schema(description="执行器状态") 37 | private Integer status; 38 | 39 | /** 40 | * 回调结果 41 | */ 42 | // @Schema(description="回调结果") 43 | private String callbackResult; 44 | 45 | /** 46 | * 表达式搜索 47 | */ 48 | private String expressionContent; 49 | 50 | private Date changeDate; 51 | } 52 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/model/dto/request/QueryExpressionFunctionRequest.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.model.dto.request; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | 9 | @Data 10 | @ApiModel("查询函数请求类") 11 | public class QueryExpressionFunctionRequest implements Serializable { 12 | /** 13 | * 服务名称 14 | */ 15 | @ApiModelProperty("服务名称") 16 | private String serviceName; 17 | 18 | /** 19 | * 函数名称 20 | */ 21 | @ApiModelProperty("函数名称") 22 | private String funcName; 23 | 24 | } 25 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/model/dto/request/QueryExpressionNodeRequest.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.model.dto.request; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | 9 | @Data 10 | @ApiModel("查询服务节点请求类") 11 | public class QueryExpressionNodeRequest implements Serializable { 12 | /** 13 | * 调用方式 14 | */ 15 | @ApiModelProperty("调用方式") 16 | private String callMethod; 17 | 18 | /** 19 | * 服务名称 20 | */ 21 | @ApiModelProperty("服务名称") 22 | private String serviceName; 23 | 24 | /** 25 | * 路由地址 26 | */ 27 | @ApiModelProperty("路由地址") 28 | private String domain; 29 | 30 | /** 31 | * 状态:0.启用1.禁用 32 | */ 33 | @ApiModelProperty("状态") 34 | private Integer status; 35 | } 36 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/model/dto/request/QueryExpressionTraceRequest.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.model.dto.request; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | 6 | import java.io.Serializable; 7 | 8 | @EqualsAndHashCode(callSuper = true) 9 | //@Tag(name = "查询表达式") 10 | @Data 11 | public class QueryExpressionTraceRequest extends PageQuery implements Serializable { 12 | 13 | // @Schema(description = "执行器编号") 14 | private Long executorId; 15 | 16 | // @Schema(description = "服务名称") 17 | private String serviceName; 18 | 19 | /** 20 | * 执行器编码 21 | */ 22 | // @Schema(description = "执行器编码") 23 | private String executorCode; 24 | 25 | // @Schema(description = "业务编码") 26 | private String businessCode; 27 | 28 | // @Schema(description = "事件名称") 29 | private String eventName; 30 | 31 | // @Schema(description = "用户编号") 32 | private Long userId; 33 | 34 | // @Schema(description = "唯一编号") 35 | private String unionId; 36 | 37 | // @Schema(description = "追踪编号") 38 | private String traceId; 39 | 40 | } 41 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/model/dto/request/QueryExpressionVariableRequest.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.model.dto.request; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | 9 | @ApiModel("") 10 | @Data 11 | public class QueryExpressionVariableRequest implements Serializable { 12 | /** 13 | * 服务名称 14 | */ 15 | @ApiModelProperty("服务名称") 16 | private String serviceName; 17 | 18 | /** 19 | * 变量编码 20 | */ 21 | @ApiModelProperty("变量编码") 22 | private String varCode; 23 | 24 | /** 25 | * 变量英文名 26 | */ 27 | @ApiModelProperty("变量英文名") 28 | private String varName; 29 | 30 | /** 31 | * 变量值 32 | */ 33 | @ApiModelProperty("变量值") 34 | private String varValue; 35 | 36 | /** 37 | * 变量描述 38 | */ 39 | @ApiModelProperty("变量描述") 40 | private String varDescription; 41 | 42 | /** 43 | * 变量来源:local本地,remote远程 44 | */ 45 | @ApiModelProperty("变量来源") 46 | private String varSource; 47 | 48 | /** 49 | * 变量数据类型 50 | */ 51 | @ApiModelProperty("变量数据类型") 52 | private String varDataType; 53 | 54 | /** 55 | * 状态:1.启用,0.禁用 56 | */ 57 | @ApiModelProperty("状态") 58 | private Integer status; 59 | } 60 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/model/dto/request/QueryGlobalTraceLogRequest.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.model.dto.request; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | 9 | @ApiModel("查询全局日志请求类") 10 | @Data 11 | public class QueryGlobalTraceLogRequest implements Serializable { 12 | /** 13 | * 服务名称 14 | */ 15 | @ApiModelProperty("服务名称") 16 | private String serviceName; 17 | 18 | /** 19 | * 阶段类型 20 | */ 21 | @ApiModelProperty("阶段类型") 22 | private String stageType; 23 | 24 | /** 25 | * 执行链路编号 26 | */ 27 | @ApiModelProperty("执行链路编号") 28 | private String linkNo; 29 | 30 | /** 31 | * 业务编码 32 | */ 33 | @ApiModelProperty("业务编码") 34 | private String businessCode; 35 | 36 | /** 37 | * 事件编码 38 | */ 39 | @ApiModelProperty("事件编码") 40 | private String eventCode; 41 | 42 | /** 43 | * 唯一编号(负责确定唯一编号,类似userId) 44 | */ 45 | @ApiModelProperty("唯一编号") 46 | private String uniqueNo; 47 | 48 | /** 49 | * 执行结果描述 50 | */ 51 | @ApiModelProperty("执行结果描述") 52 | private String resultDescription; 53 | 54 | /** 55 | * 是否执行成功:0.否,1.是 56 | */ 57 | @ApiModelProperty("执行链路编号") 58 | private Boolean executeSuccess; 59 | } 60 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/model/dto/request/QueryLinkResultLogRequest.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.model.dto.request; 2 | 3 | import com.fasterxml.jackson.databind.annotation.JsonSerialize; 4 | import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; 5 | import io.swagger.annotations.ApiModel; 6 | import io.swagger.annotations.ApiModelProperty; 7 | import lombok.Data; 8 | 9 | import java.io.Serializable; 10 | 11 | @Data 12 | @ApiModel("查询链路成功回调日志请求类") 13 | public class QueryLinkResultLogRequest implements Serializable { 14 | /** 15 | * 主键id 16 | */ 17 | @JsonSerialize(using = ToStringSerializer.class) 18 | @ApiModelProperty("主键id") 19 | private Long id; 20 | /** 21 | * 服务名称 22 | */ 23 | @ApiModelProperty("服务名称") 24 | private String serviceName; 25 | 26 | /** 27 | * 阶段类型 28 | */ 29 | @ApiModelProperty("阶段类型") 30 | private String stageType; 31 | 32 | /** 33 | * 执行链路编号 34 | */ 35 | @ApiModelProperty("执行链路编号") 36 | private String linkNo; 37 | 38 | /** 39 | * 业务编码 40 | */ 41 | @ApiModelProperty("业务编码") 42 | private String businessCode; 43 | 44 | /** 45 | * 事件编码 46 | */ 47 | @ApiModelProperty("事件编码") 48 | private String eventCode; 49 | 50 | /** 51 | * 唯一编号(负责确定唯一编号,类似userId) 52 | */ 53 | @ApiModelProperty("唯一编号") 54 | private String uniqueNo; 55 | } 56 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/model/dto/response/ExpressionTraceInfoDTO.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.model.dto.response; 2 | 3 | import com.liukx.expression.engine.server.mapper.entity.ExpressionTraceLogIndex; 4 | import com.liukx.expression.engine.server.mapper.entity.ExpressionTraceLogInfo; 5 | import lombok.Data; 6 | import lombok.EqualsAndHashCode; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * 表达式追踪日志详情 12 | * 13 | * @author liukaixiong 14 | * @date 2024/7/19 - 15:21 15 | */ 16 | 17 | @EqualsAndHashCode(callSuper = true) 18 | @Data 19 | public class ExpressionTraceInfoDTO extends ExpressionTraceLogIndex { 20 | 21 | private List traceLogInfoList; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/service/ExpressionDocService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.service; 2 | 3 | import com.liukx.expression.engine.server.service.model.doc.ExpressionDocDto; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 9 | * 10 | * @author liukaixiong 11 | * @date 2024/11/12 - 16:51 12 | */ 13 | public interface ExpressionDocService { 14 | public ExpressionDocDto getKeyInfo(String serviceName, String name); 15 | 16 | public boolean refresh(String serviceName, List variableInfoDto); 17 | 18 | List getLikeName(String serviceName, String name, Integer size); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/service/ExpressionExecutorConfigService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.service; 2 | 3 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | import com.liukx.expression.engine.server.mapper.entity.ExpressionExecutorBaseInfo; 6 | import com.liukx.expression.engine.server.model.dto.request.AddExpressionExecutorRequest; 7 | import com.liukx.expression.engine.server.model.dto.request.DeleteByIdListRequest; 8 | import com.liukx.expression.engine.server.model.dto.request.EditExpressionExecutorRequest; 9 | import com.liukx.expression.engine.server.model.dto.request.QueryExpressionExecutorRequest; 10 | import com.liukx.expression.engine.server.model.dto.response.ExpressionExecutorBaseDTO; 11 | import com.liukx.expression.engine.server.model.dto.response.RestResult; 12 | 13 | /** 14 | *

15 | * 服务类 16 | *

17 | * 18 | * @author bsy 19 | * @since 2022-06-12 20 | */ 21 | public interface ExpressionExecutorConfigService extends IService { 22 | 23 | RestResult addExpressionExecutor(AddExpressionExecutorRequest addRequest); 24 | 25 | RestResult editExpressionExecutor(EditExpressionExecutorRequest editRequest); 26 | 27 | Page queryExpressionExecutor(QueryExpressionExecutorRequest queryRequest); 28 | 29 | RestResult batchDeleteByIdList(DeleteByIdListRequest delRequest); 30 | 31 | /** 32 | * 查询执行对象 33 | * 34 | * @param serviceName 35 | * @param businessCode 36 | * @param executorCode 37 | * @return 38 | */ 39 | public ExpressionExecutorBaseDTO queryExecutorInfo(String serviceName, String businessCode, String executorCode); 40 | } 41 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/service/ExpressionFunctionConfigService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.liukx.expression.engine.server.mapper.entity.ExpressionFunctionConfig; 5 | import com.liukx.expression.engine.server.model.dto.request.QueryExpressionFunctionRequest; 6 | import com.liukx.expression.engine.server.model.dto.response.ExpressionFunctionDTO; 7 | import com.liukx.expression.engine.server.model.dto.response.RestResult; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | *

13 | * 函数配置表 服务类 14 | *

15 | * 16 | * @author bsy 17 | * @since 2022-06-08 18 | */ 19 | public interface ExpressionFunctionConfigService extends IService { 20 | 21 | // RestResult addExpressionFunction(AddExpressionFunctionRequest addRequest); 22 | // 23 | // RestResult editExpressionFunction (EditExpressionFunctionRequest editRequest); 24 | // 25 | RestResult> queryExpressionFunction(QueryExpressionFunctionRequest queryRequest); 26 | // 27 | // RestResult batchDeleteByIdList(DeleteByIdListRequest delRequest); 28 | } 29 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/service/ExpressionLinkResultLogService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.liukx.expression.engine.server.mapper.entity.ExpressionLinkResultLog; 5 | import com.liukx.expression.engine.server.model.dto.request.AddLinkResultLogRequest; 6 | import com.liukx.expression.engine.server.model.dto.request.DeleteByIdListRequest; 7 | import com.liukx.expression.engine.server.model.dto.request.EditLinkResultLogRequest; 8 | import com.liukx.expression.engine.server.model.dto.request.QueryLinkResultLogRequest; 9 | import com.liukx.expression.engine.server.model.dto.response.ExpressionLinkResultLogDTO; 10 | import com.liukx.expression.engine.server.model.dto.response.RestResult; 11 | 12 | import java.util.List; 13 | 14 | /** 15 | *

16 | * 成功回调日志表,记录执行完成的日志记录,全局日志表的压缩版 服务类 17 | *

18 | * 19 | * @author bsy 20 | * @since 2022-06-15 21 | */ 22 | public interface ExpressionLinkResultLogService extends IService { 23 | 24 | RestResult addOne(AddLinkResultLogRequest addRequest); 25 | 26 | RestResult updateOne(EditLinkResultLogRequest editRequest); 27 | 28 | RestResult> queryDtoList(QueryLinkResultLogRequest queryRequest); 29 | 30 | RestResult logicDeleteByIdList(DeleteByIdListRequest delRequest); 31 | } 32 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/service/ExpressionNodeConfigService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.liukx.expression.engine.server.mapper.entity.ExpressionNodeConfig; 5 | import com.liukx.expression.engine.server.model.dto.request.AddExpressionNodeRequest; 6 | import com.liukx.expression.engine.server.model.dto.request.DeleteByIdListRequest; 7 | import com.liukx.expression.engine.server.model.dto.request.EditExpressionNodeRequest; 8 | import com.liukx.expression.engine.server.model.dto.request.QueryExpressionNodeRequest; 9 | import com.liukx.expression.engine.server.model.dto.response.ExpressionNodeDTO; 10 | import com.liukx.expression.engine.server.model.dto.response.RestResult; 11 | 12 | import java.util.List; 13 | 14 | /** 15 | *

16 | * 引擎节点信息 服务类 17 | *

18 | * 19 | * @author bsy 20 | * @since 2022-06-08 21 | */ 22 | public interface ExpressionNodeConfigService extends IService { 23 | 24 | RestResult addExpressionNode(AddExpressionNodeRequest addRequest); 25 | 26 | RestResult editExpressionNode(EditExpressionNodeRequest editRequest); 27 | 28 | RestResult> queryExpressionNode(QueryExpressionNodeRequest queryRequest); 29 | 30 | RestResult batchDeleteByIdList(DeleteByIdListRequest delRequest); 31 | } 32 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/service/ExpressionTraceLogIndexService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.service; 2 | 3 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | import com.liukx.expression.engine.core.api.model.api.ExpressionExecutorResultDTO; 6 | import com.liukx.expression.engine.server.mapper.entity.ExpressionTraceLogIndex; 7 | import com.liukx.expression.engine.server.model.dto.request.QueryExpressionTraceRequest; 8 | import com.liukx.expression.engine.server.model.dto.response.ExpressionTraceInfoDTO; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | *

14 | * 服务类 15 | *

16 | * 17 | * @author liukx 18 | * @since 2024-07-18 19 | */ 20 | public interface ExpressionTraceLogIndexService extends IService { 21 | 22 | boolean addTraceLog(List request); 23 | 24 | Page queryExpressionTraceLogList(QueryExpressionTraceRequest queryRequest); 25 | 26 | ExpressionTraceInfoDTO getTraceInfoList(Long id); 27 | 28 | /** 29 | * 配置编号 30 | * 31 | * @param expressionId 表达式编号 32 | * @return 33 | */ 34 | ExpressionTraceLogIndex getExpressionSampleBody(Long expressionId); 35 | } 36 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/service/ExpressionTraceLogInfoService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.liukx.expression.engine.server.mapper.entity.ExpressionTraceLogInfo; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | *

10 | * 服务类 11 | *

12 | * 13 | * @author liukx 14 | * @since 2024-07-18 15 | */ 16 | public interface ExpressionTraceLogInfoService extends IService { 17 | 18 | /** 19 | * 获取该追踪编号的记录 20 | * @param traceLogId 追踪编号 21 | * @return 22 | */ 23 | List getInfoListByTraceLogId(Long traceLogId); 24 | 25 | /** 26 | * 获取表达式最近成功一次成功的记录 27 | * @param expressionId 表达式编号 28 | * @return 29 | */ 30 | ExpressionTraceLogInfo getExpressionRecentlySuccessLog(Long expressionId); 31 | } 32 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/service/ExpressionVarTypeService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.service; 2 | 3 | import com.liukx.expression.engine.core.api.model.api.VariableApiModel; 4 | 5 | import java.util.List; 6 | import java.util.Set; 7 | 8 | /** 9 | * 10 | * 11 | * @author liukaixiong 12 | * @date 2024/11/12 - 16:51 13 | */ 14 | public interface ExpressionVarTypeService { 15 | public List getKeyInfo(String serviceName, String type); 16 | 17 | public boolean refresh(String serviceName, List variableInfoDto); 18 | 19 | public Set getAllTypeList(String serviceName); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/service/ExpressionVariableConfigService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.liukx.expression.engine.server.mapper.entity.ExpressionVariableConfig; 5 | import com.liukx.expression.engine.server.model.dto.request.QueryExpressionVariableRequest; 6 | import com.liukx.expression.engine.server.model.dto.response.ExpressionVariableDTO; 7 | import com.liukx.expression.engine.server.model.dto.response.RestResult; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | *

13 | * 表达式引擎通用变量配置表 服务类 14 | *

15 | * 16 | * @author bsy 17 | * @since 2022-06-08 18 | */ 19 | public interface ExpressionVariableConfigService extends IService { 20 | 21 | // RestResult addExpressionVariable(AddExpressionVariableRequest addRequest); 22 | 23 | // RestResult editExpressionVariable(EditExpressionVariableRequest editRequest); 24 | 25 | RestResult> queryExpressionVariable(QueryExpressionVariableRequest queryRequest); 26 | 27 | // RestResult batchDeleteByIdList(DeleteByIdListRequest delRequest); 28 | } 29 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/service/FunctionService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.service; 2 | 3 | import com.liukx.expression.engine.server.service.model.function.FunctionInfoDto; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 函数处理 9 | * @author liukaixiong 10 | * @date : 2022/6/10 - 14:01 11 | */ 12 | public interface FunctionService { 13 | 14 | public FunctionInfoDto getKeyInfo(String key); 15 | 16 | public boolean refresh(String serviceName, List variableInfoDto); 17 | 18 | List loadAllFunctionDefined(); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/service/GlobalTraceLogService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.liukx.expression.engine.server.mapper.entity.ExpressionGlobalTraceLog; 5 | import com.liukx.expression.engine.server.model.dto.request.AddGlobalTraceLogRequest; 6 | import com.liukx.expression.engine.server.model.dto.request.DeleteByIdListRequest; 7 | import com.liukx.expression.engine.server.model.dto.request.EditGlobalTraceLogRequest; 8 | import com.liukx.expression.engine.server.model.dto.request.QueryGlobalTraceLogRequest; 9 | import com.liukx.expression.engine.server.model.dto.response.ExpressionGlobalTraceLogDTO; 10 | import com.liukx.expression.engine.server.model.dto.response.RestResult; 11 | 12 | import java.util.List; 13 | 14 | /** 15 | *

16 | * 全局日志表,负责记录表达式执行过程的日志记录,负责排查执行过程 服务类 17 | *

18 | * 19 | * @author bsy 20 | * @since 2022-06-15 21 | */ 22 | public interface GlobalTraceLogService extends IService { 23 | 24 | RestResult addOne(AddGlobalTraceLogRequest addRequest); 25 | 26 | RestResult updateOne(EditGlobalTraceLogRequest editRequest); 27 | 28 | RestResult> queryDtoList(QueryGlobalTraceLogRequest queryRequest); 29 | 30 | RestResult logicDeleteByIdList(DeleteByIdListRequest delRequest); 31 | } 32 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/service/IExpressionLoginService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.service; 2 | 3 | import com.liukx.expression.engine.server.model.dto.request.LoginModel; 4 | 5 | /** 6 | * 登录逻辑 7 | * 8 | * @author liukaixiong 9 | * @date 2024/10/15 - 13:25 10 | */ 11 | public interface IExpressionLoginService { 12 | 13 | 14 | public boolean login(LoginModel loginModel); 15 | 16 | 17 | } 18 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/service/IExpressionTokenService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.service; 2 | 3 | import com.liukx.expression.engine.server.model.dto.request.LoginModel; 4 | 5 | /** 6 | * @author liukaixiong 7 | * @date 2024/10/15 - 13:33 8 | */ 9 | public interface IExpressionTokenService { 10 | 11 | public String tokenCreated(LoginModel loginModel); 12 | 13 | public boolean checkToken(String token); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/service/NodeService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.service; 2 | 3 | import com.liukx.expression.engine.server.service.model.node.NodeServiceDto; 4 | 5 | /** 6 | * 节点管理 7 | * @author liukaixiong 8 | * @date : 2022/6/9 - 16:46 9 | */ 10 | public interface NodeService { 11 | 12 | /** 13 | * 获取节点信息 14 | * 15 | * @param serviceName 16 | * @return 17 | */ 18 | public NodeServiceDto getNodeInfo(String serviceName); 19 | 20 | /** 21 | * 刷新对应的服务节点 22 | * 23 | * @param serviceName 节点名称 24 | */ 25 | public void refreshNodeInfo(String serviceName); 26 | 27 | /** 28 | * 刷新所有服务 29 | */ 30 | public void refreshNodeInfo(); 31 | 32 | } 33 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/service/SyncDataService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.service; 2 | 3 | import com.liukx.expression.engine.server.enums.SyncDataEnums; 4 | 5 | /** 6 | * @author liukaixiong 7 | * @date 2024/2/20 8 | */ 9 | public interface SyncDataService { 10 | 11 | public SyncDataEnums syncType(); 12 | 13 | public boolean importData(T data); 14 | 15 | public T export(Long id); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/service/TraceLogService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.service; 2 | 3 | import com.liukx.expression.engine.server.service.model.trace.TraceLogDto; 4 | 5 | /** 6 | * 链路日志表 7 | * @author liukaixiong 8 | * @date : 2022/6/20 - 10:53 9 | */ 10 | public interface TraceLogService { 11 | 12 | /** 13 | * 链路日志追踪 14 | * @param traceLogDto 15 | * @return 16 | */ 17 | public Boolean log(TraceLogDto traceLogDto); 18 | 19 | public Boolean success(TraceLogDto traceLogDto); 20 | } 21 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/service/VariableService.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.service; 2 | 3 | import com.liukx.expression.engine.server.service.model.variable.VariableInfoDto; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 变量管理 9 | * @author liukaixiong 10 | * @date : 2022/6/10 - 12:00 11 | */ 12 | public interface VariableService { 13 | 14 | /** 15 | * 获取变量信息 16 | * @param key 17 | * @return 18 | */ 19 | public VariableInfoDto getKeyInfo(String key); 20 | 21 | public boolean refresh(String serviceName, List variableInfoDto); 22 | 23 | /** 24 | * 加载所有变量 25 | * @return 26 | */ 27 | List loadAllVariableDefined(); 28 | } 29 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/service/impl/ExpressionLoginServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.service.impl; 2 | 3 | import com.liukx.expression.engine.server.config.props.ExpressionServerProperties; 4 | import com.liukx.expression.engine.server.model.dto.request.LoginModel; 5 | import com.liukx.expression.engine.server.service.IExpressionLoginService; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.stereotype.Service; 8 | import org.springframework.util.StringUtils; 9 | 10 | /** 11 | * @author liukaixiong 12 | * @date 2024/10/15 - 13:26 13 | */ 14 | @Service 15 | public class ExpressionLoginServiceImpl implements IExpressionLoginService { 16 | 17 | @Autowired 18 | private ExpressionServerProperties properties; 19 | 20 | @Override 21 | public boolean login(LoginModel loginModel) { 22 | final String username = properties.getUsername(); 23 | final String password = properties.getPassword(); 24 | 25 | if (!(StringUtils.hasText(username) && StringUtils.hasText(password))) { 26 | return false; 27 | } 28 | 29 | return username.equals(loginModel.getUsername()) && password.equals(loginModel.getPassword()); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/service/impl/ExpressionMd5TokenServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.service.impl; 2 | 3 | import com.liukx.expression.engine.server.config.props.ExpressionServerProperties; 4 | import com.liukx.expression.engine.server.model.dto.request.LoginModel; 5 | import com.liukx.expression.engine.server.service.IExpressionTokenService; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.stereotype.Service; 8 | import org.springframework.util.DigestUtils; 9 | import org.springframework.util.StringUtils; 10 | 11 | /** 12 | * 默认的MD5token授权校验 13 | * @author liukaixiong 14 | * @date 2024/10/15 - 13:34 15 | */ 16 | @Service 17 | public class ExpressionMd5TokenServiceImpl implements IExpressionTokenService { 18 | 19 | @Autowired 20 | private ExpressionServerProperties serverProperties; 21 | 22 | @Override 23 | public String tokenCreated(LoginModel loginModel) { 24 | final String username = loginModel.getUsername(); 25 | return md5(username); 26 | } 27 | 28 | @Override 29 | public boolean checkToken(String token) { 30 | if (!StringUtils.hasText(token)) { 31 | return false; 32 | } 33 | final String username = serverProperties.getUsername(); 34 | final String userToken = md5(username); 35 | return userToken.equals(token); 36 | } 37 | 38 | private String md5(String input) { 39 | return DigestUtils.md5DigestAsHex(input.getBytes()); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/service/model/node/NodeServiceDto.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.service.model.node; 2 | 3 | import com.liukx.expression.engine.server.enums.RemoteInvokeTypeEnums; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | 7 | /** 8 | * 节点服务传输数据 9 | * @author liukaixiong 10 | * @date : 2022/6/9 - 16:51 11 | */ 12 | @Data 13 | @Builder 14 | public class NodeServiceDto { 15 | /** 16 | * 服务名称 17 | */ 18 | private String serviceName; 19 | /** 20 | * 服务路由地址,精确到服务路径就行 21 | */ 22 | private String domain; 23 | /** 24 | * 请求实现类型 25 | */ 26 | private RemoteInvokeTypeEnums remoteInvokeType; 27 | 28 | } 29 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/service/model/sync/BaseSyncData.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.service.model.sync; 2 | 3 | import com.liukx.expression.engine.server.enums.SyncDataEnums; 4 | 5 | /** 6 | * 数据同步基础数据结构 7 | * 8 | * @author liukaixiong 9 | * @date 2024/2/20 10 | */ 11 | public class BaseSyncData { 12 | 13 | private SyncDataEnums type; 14 | private Object data; 15 | 16 | public BaseSyncData(SyncDataEnums type, Object data) { 17 | this.type = type; 18 | this.data = data; 19 | } 20 | 21 | public Object getData() { 22 | return data; 23 | } 24 | 25 | public void setData(Object data) { 26 | this.data = data; 27 | } 28 | 29 | public SyncDataEnums getType() { 30 | return type; 31 | } 32 | 33 | public void setType(SyncDataEnums type) { 34 | this.type = type; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/service/model/sync/ExpressionExecutorSyncData.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.service.model.sync; 2 | 3 | import com.liukx.expression.engine.server.mapper.entity.ExpressionExecutorBaseInfo; 4 | import com.liukx.expression.engine.server.mapper.entity.ExpressionExecutorInfoConfig; 5 | import lombok.Data; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @author liukaixiong 11 | * @date 2024/2/20 12 | */ 13 | @Data 14 | public class ExpressionExecutorSyncData { 15 | 16 | 17 | private ExpressionExecutorBaseInfo baseInfo; 18 | 19 | private List nodeInfo; 20 | 21 | 22 | } 23 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/service/model/trace/TraceLogDto.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.service.model.trace; 2 | 3 | import lombok.Builder; 4 | import lombok.Data; 5 | 6 | /** 7 | * 链路日志 8 | * @author liukaixiong 9 | * @date : 2022/6/20 - 10:55 10 | */ 11 | @Builder 12 | @Data 13 | public class TraceLogDto { 14 | 15 | private String serviceName; 16 | private String businessCode; 17 | private String unionId; 18 | private String logId; 19 | private String eventType; 20 | private String content; 21 | private boolean isException; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/service/model/variable/VariableInfoDto.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.service.model.variable; 2 | 3 | import lombok.Builder; 4 | 5 | /** 6 | * 可见变量定义模型 7 | */ 8 | @Builder 9 | public class VariableInfoDto { 10 | /** 11 | * 注册类型 12 | */ 13 | private String registerType = "local"; 14 | 15 | /** 16 | * 项目名称 17 | */ 18 | private String serviceName; 19 | /** 20 | * 变量名称 21 | */ 22 | private String name; 23 | /** 24 | * 描述 25 | */ 26 | private String describe; 27 | /** 28 | * 变量类型 29 | */ 30 | private String type; 31 | 32 | public String getRegisterType() { 33 | return registerType; 34 | } 35 | 36 | public void setRegisterType(String registerType) { 37 | this.registerType = registerType; 38 | } 39 | 40 | public String getServiceName() { 41 | return serviceName; 42 | } 43 | 44 | public void setServiceName(String serviceName) { 45 | this.serviceName = serviceName; 46 | } 47 | 48 | public String getName() { 49 | return name; 50 | } 51 | 52 | public void setName(String name) { 53 | this.name = name; 54 | } 55 | 56 | public String getDescribe() { 57 | return describe; 58 | } 59 | 60 | public void setDescribe(String describe) { 61 | this.describe = describe; 62 | } 63 | 64 | public String getType() { 65 | return type; 66 | } 67 | 68 | public void setType(String type) { 69 | this.type = type; 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/util/CodeUtils.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.util; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | import java.util.function.Function; 7 | import java.util.function.Supplier; 8 | 9 | /** 10 | * 简化代碼工具類 11 | * 12 | * @author liukaixiong 13 | * @date : 2022/6/20 - 11:06 14 | */ 15 | public class CodeUtils { 16 | 17 | private static Logger logger = LoggerFactory.getLogger(CodeUtils.class); 18 | 19 | public static T safeInvoker(Supplier run) { 20 | return safeInvoker(run, () -> null); 21 | } 22 | 23 | /** 24 | * 安全执行内部方法,目的是为了不影响核心流程运行 25 | * 26 | * @param run 希望正常执行的方法 27 | * @param exceptionRun 异常执行的方法处理 28 | * @param 29 | * @return 30 | */ 31 | public static T safeInvoker(Supplier run, Supplier exceptionRun) { 32 | try { 33 | return run.get(); 34 | } catch (Exception e) { 35 | logger.error("代码执行异常", e); 36 | return exceptionRun.get(); 37 | } 38 | } 39 | 40 | public static T getDefaultValue(String value, Function function, T defaultValue) { 41 | try { 42 | return function.apply(value); 43 | } catch (Exception e) { 44 | return defaultValue; 45 | } 46 | } 47 | 48 | /** 49 | * 默认的方法获取 50 | * 51 | * @param value 值 52 | * @param defaultValue 值出现问题则有默认值补充 53 | * @param 54 | * @return 55 | */ 56 | public static T getDefaultValue(T value, T defaultValue) { 57 | if (value == null) { 58 | return defaultValue; 59 | } 60 | return value; 61 | } 62 | 63 | } 64 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/util/ExpressionUtils.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.util; 2 | 3 | import com.googlecode.aviator.AviatorEvaluator; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 表达式工具类 9 | * @author liukaixiong 10 | * @date 2025/3/6 - 11:29 11 | */ 12 | public class ExpressionUtils { 13 | 14 | static { 15 | AviatorEvaluator.getInstance().setCachedExpressionByDefault(false); 16 | } 17 | 18 | /** 19 | * 校验表达式 20 | * 21 | * @param expression 表达式内容 22 | * @return 错误的内容 23 | */ 24 | public static String isValidExpression(String expression) { 25 | try { 26 | AviatorEvaluator.validate(expression); 27 | } catch (Exception e) { 28 | return e.getMessage(); 29 | } 30 | return null; 31 | } 32 | 33 | /** 34 | * 获取函数列表 35 | * @param expression 36 | * @return 37 | */ 38 | public static List getExpressionFunctionList(String expression) { 39 | return AviatorEvaluator.compile(expression).getFunctionNames(); 40 | } 41 | 42 | /** 43 | * 获取变量列表 44 | * @param expression 45 | * @return 46 | */ 47 | public static List getExpressionVariableList(String expression) { 48 | return AviatorEvaluator.compile(expression).getVariableNames(); 49 | } 50 | 51 | } 52 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/java/com/liukx/expression/engine/server/util/MapFlattenUtil.java: -------------------------------------------------------------------------------- 1 | package com.liukx.expression.engine.server.util; 2 | 3 | import java.util.LinkedHashMap; 4 | import java.util.Map; 5 | 6 | public class MapFlattenUtil { 7 | private static final String SEPARATOR = "."; 8 | 9 | public static Map flatten(Map source) { 10 | Map flatMap = new LinkedHashMap<>(); 11 | flattenInternal(source, flatMap, ""); 12 | return flatMap; 13 | } 14 | 15 | private static void flattenInternal(Map source, Map flatMap, String parentKey) { 16 | for (Map.Entry entry : source.entrySet()) { 17 | String key = parentKey.isEmpty() ? entry.getKey() : parentKey + SEPARATOR + entry.getKey(); 18 | if (entry.getValue() instanceof Map) { 19 | flattenInternal((Map) entry.getValue(), flatMap, key); 20 | } else { 21 | flatMap.put(key, entry.getValue()); 22 | } 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | nacos: 2 | enable: ${app.nacos.enable:true} 3 | spring: 4 | cloud: 5 | nacos: 6 | # nacos 服务地址 7 | server-addr: ${app.nacos.ip} 8 | discovery: 9 | # 注册组 10 | group: DEFAULT_GROUP 11 | namespace: ${spring.profiles.active} 12 | server-addr: ${spring.cloud.nacos.server-addr} 13 | enabled: ${nacos.enable} 14 | config: 15 | server-addr: ${spring.cloud.nacos.server-addr} 16 | # 配置组 17 | group: DEFAULT_GROUP 18 | namespace: ${spring.profiles.active} 19 | import-check: 20 | enabled: false 21 | enabled: ${nacos.enable} 22 | config: 23 | override-system-properties: false 24 | config: 25 | import: 26 | - optional:nacos:expression-mind-map-server.yml 27 | profiles: 28 | active: ${config.profile:dev} 29 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/resources/mapper/ExpressionConfigMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | id, expression_type, expression_content, expression_status, deleted, create_by, update_by, create_time, update_time 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/resources/mapper/ExpressionExecutorConfigMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | id, service_name, business_code, deleted, rule_expression_ids, condition_expression_ids, expression_function_ids, status, callback_result, create_time, update_time, create_by, update_by 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/resources/mapper/ExpressionGlobalTraceLogMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | id, service_name, stage_type, link_no, business_code, event_code, unique_no, result_description, excute_success, deleted, create_by, update_by, create_time, update_time 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/resources/mapper/ExpressionLinkResultLogMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | id, service_name, stage_type, link_no, business_code, event_code, unique_no, result_description, deleted, create_by, update_by, create_time, update_time 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/resources/mapper/ExpressionNodeConfigMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | id, call_method, service_name, service_description, route_address, deleted, status, create_time, update_time, create_by, update_by 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/resources/mapper/ExpressionTraceLogIndexMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/resources/mapper/ExpressionTraceLogInfoMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/resources/mapper/ExpressionVariableConfigMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | id, service_name, var_code, var_name, var_value, var_description, var_source, var_data_type, var_status, deleted, create_by, update_by, create_time, update_time 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/resources/mapper/GlobalTraceLogService.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | id, service_name, func_name, func_description, body_param, common_param, func_method, deleted, is_valid, create_by, update_by, create_time, update_time 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /expression-mind-map-server/src/main/resources/static/js/cdn/json-viewer/jquery.json-viewer.css: -------------------------------------------------------------------------------- 1 | /* Root element */ 2 | .json-document { 3 | padding: 1em 2em; 4 | } 5 | 6 | /* Syntax highlighting for JSON objects */ 7 | ul.json-dict, ol.json-array { 8 | list-style-type: none; 9 | margin: 0 0 0 1px; 10 | border-left: 1px dotted #ccc; 11 | padding-left: 2em; 12 | } 13 | .json-string { 14 | color: #0B7500; 15 | } 16 | .json-literal { 17 | color: #1A01CC; 18 | font-weight: bold; 19 | } 20 | 21 | /* Toggle button */ 22 | a.json-toggle { 23 | position: relative; 24 | color: inherit; 25 | text-decoration: none; 26 | } 27 | a.json-toggle:focus { 28 | outline: none; 29 | } 30 | a.json-toggle:before { 31 | font-size: 1.1em; 32 | color: #c0c0c0; 33 | content: "\25BC"; /* down arrow */ 34 | position: absolute; 35 | display: inline-block; 36 | width: 1em; 37 | text-align: center; 38 | line-height: 1em; 39 | left: -1.2em; 40 | } 41 | a.json-toggle:hover:before { 42 | color: #aaa; 43 | } 44 | a.json-toggle.collapsed:before { 45 | /* Use rotated down arrow, prevents right arrow appearing smaller than down arrow in some browsers */ 46 | transform: rotate(-90deg); 47 | } 48 | 49 | /* Collapsable placeholder links */ 50 | a.json-placeholder { 51 | color: #aaa; 52 | padding: 0 1em; 53 | text-decoration: none; 54 | } 55 | a.json-placeholder:hover { 56 | text-decoration: underline; 57 | } 58 | -------------------------------------------------------------------------------- /script/expression-mind-map-server.yml: -------------------------------------------------------------------------------- 1 | engine: 2 | datasource: 3 | url: jdbc:mysql://xxxx:3306/xxx?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true 4 | username: xxxx 5 | password: xxxx 6 | redis: 7 | host: xxxx 8 | port: 6379 9 | # 密码(如没有密码请注释掉) 10 | password: xxxxx 11 | database: 0 12 | timeout: 10s 13 | ssl.enabled: false 14 | --------------------------------------------------------------------------------