From 6bdb8fb9183e26cb78b45310446638cb6b1f6cbc Mon Sep 17 00:00:00 2001 From: icanci Date: Sat, 19 Nov 2022 21:22:40 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AD=96=E7=95=A5=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/biz/service/BaseDataService.java | 5 +- .../admin/biz/service/DataSourceService.java | 7 +- .../admin/biz/service/StrategyService.java | 9 + .../biz/service/impl/BaseDataServiceImpl.java | 4 +- .../service/impl/DataSourceServiceImpl.java | 39 +- .../biz/service/impl/MetadataServiceImpl.java | 2 +- .../biz/service/impl/StrategyServiceImpl.java | 37 +- .../dal/mongodb/daointerface/StrategyDAO.java | 2 + .../dal/mongodb/dateobject/StrategyDO.java | 14 - .../dal/mongodb/mongo/MongoStrategyDAO.java | 9 + .../vueboot/src/api/loadSelectorApi.js | 227 +++++++----- .../resources/vueboot/src/api/strategyApi.js | 13 + .../ruleConfig/components/ruleTreeList.vue | 98 +++++ .../ruleConfig/components/ruleTreeNode.vue | 264 ++++++++++++++ .../views/ruleConfig/dialog/baseDataForm.vue | 20 +- .../ruleConfig/dialog/dataSourceForm.vue | 4 +- .../views/ruleConfig/dialog/strategyForm.vue | 338 +++++++++++++++--- .../vueboot/src/views/ruleConfig/strategy.vue | 2 +- .../web/controller/CommonController.java | 6 + .../controller/config/BaseDataController.java | 6 +- .../config/DataSourceController.java | 6 +- .../controller/config/StrategyController.java | 6 + .../icanci/rec/admin/web/model/Strategy.java | 14 - .../common/aggregation/model/StrategyDTO.java | 14 - .../rec/common/enums/InterruptEnum.java | 4 +- .../rec/common/enums/ScriptTypeEnum.java | 9 +- .../rec/common/model/config/StrategyVO.java | 29 +- .../script/enums/ScriptTypeFactoryEnum.java | 22 +- .../rec/engine/sdk/rule/EngineExecutor.java | 5 +- .../rule/pool/ScriptExecutorPoolHolder.java | 2 +- 30 files changed, 934 insertions(+), 283 deletions(-) create mode 100644 rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/components/ruleTreeList.vue create mode 100644 rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/components/ruleTreeNode.vue diff --git a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/BaseDataService.java b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/BaseDataService.java index 44da703..2f7fc50 100644 --- a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/BaseDataService.java +++ b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/BaseDataService.java @@ -35,10 +35,11 @@ public interface BaseDataService extends BaseService { /** * 加载下拉框 - * + * + * @param domainCode domainCode * @return 返回下拉框数据 */ - List loadSelector(); + List loadSelector(String domainCode); /** * 测试 diff --git a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/DataSourceService.java b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/DataSourceService.java index 0c9cbcd..d648828 100644 --- a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/DataSourceService.java +++ b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/DataSourceService.java @@ -1,12 +1,12 @@ package cn.icanci.rec.admin.biz.service; +import java.util.List; + import cn.icanci.rec.admin.biz.model.DataSourceDebugResult; import cn.icanci.rec.admin.dal.mongodb.common.PageList; import cn.icanci.rec.common.model.TextValue; import cn.icanci.rec.common.model.config.DataSourceVO; -import java.util.List; - /** * @author icanci * @since 1.0 Created in 2022/11/12 09:03 @@ -36,9 +36,10 @@ public interface DataSourceService extends BaseService { /** * 下拉框加载 * + * @param domainCode domainCode * @return 返回加载的数据 */ - List loadSelector(); + List loadSelector(String domainCode); /** * 对数据源进行预先执行 diff --git a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/StrategyService.java b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/StrategyService.java index cd483de..3dc96c3 100644 --- a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/StrategyService.java +++ b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/StrategyService.java @@ -40,4 +40,13 @@ public interface StrategyService extends BaseService { * @return 返回测试结果 */ StrategyDebugResult debug(StrategyVO strategy, String scriptContentTest); + + /** + * 根据domainCode和sceneCode查询 + * + * @param domainCode domainCode + * @param sceneCode sceneCode + * @return 返回查询结果 + */ + StrategyVO queryBySceneCode(String domainCode, String sceneCode); } diff --git a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/BaseDataServiceImpl.java b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/BaseDataServiceImpl.java index 1838e92..1b66255 100644 --- a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/BaseDataServiceImpl.java +++ b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/BaseDataServiceImpl.java @@ -80,8 +80,8 @@ public class BaseDataServiceImpl implements BaseDataService { } @Override - public List loadSelector() { - List baseDatas = queryAll(); + public List loadSelector(String domainCode) { + List baseDatas = baseDataMapper.dos2vos(baseDataDAO.queryByDomainCode(domainCode)); if (CollectionUtils.isEmpty(baseDatas)) { return Lists.newArrayList(); } diff --git a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/DataSourceServiceImpl.java b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/DataSourceServiceImpl.java index d83fb71..ebc8679 100644 --- a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/DataSourceServiceImpl.java +++ b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/DataSourceServiceImpl.java @@ -1,5 +1,17 @@ package cn.icanci.rec.admin.biz.service.impl; +import java.util.List; +import java.util.Map; +import java.util.concurrent.*; + +import javax.annotation.Resource; + +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; + +import com.alibaba.fastjson.JSONException; +import com.google.common.collect.Lists; + import cn.icanci.rec.admin.biz.event.log.LogEvent; import cn.icanci.rec.admin.biz.mapper.config.DataSourceMapper; import cn.icanci.rec.admin.biz.model.DataSourceDebugResult; @@ -18,18 +30,6 @@ import cn.icanci.rec.engine.script.context.RecScriptEngineContext; import cn.icanci.rec.engine.script.wrapper.HttpResponseWrapper; import cn.icanci.rec.spi.event.EventDispatcher; -import java.util.List; -import java.util.Map; -import java.util.concurrent.*; - -import javax.annotation.Resource; - -import org.apache.commons.collections4.CollectionUtils; -import org.springframework.stereotype.Service; - -import com.alibaba.fastjson.JSONException; -import com.google.common.collect.Lists; - /** * @author icanci * @since 1.0 Created in 2022/11/12 09:04 @@ -45,6 +45,12 @@ public class DataSourceServiceImpl implements DataSourceService { @Resource private EventDispatcher eventDispatcher; + /** label 格式化 */ + String DELETED_TYPE_FORMAT = "[无效] [%s] %s"; + + /** label 格式化 */ + String NOT_DELETED_TYPE_FORMAT = "[有效] [%s] %s"; + @Override public List queryAll() { return dataSourceMapper.dos2vos(dataSourceDAO.queryAll()); @@ -79,18 +85,19 @@ public class DataSourceServiceImpl implements DataSourceService { } @Override - public List loadSelector() { - List dataSources = queryAll(); + public List loadSelector(String domainCode) { + List dataSources = dataSourceMapper.dos2vos(dataSourceDAO.queryByDomainCode(domainCode)); if (CollectionUtils.isEmpty(dataSources)) { return Lists.newArrayList(); } List textValues = Lists.newArrayList(); for (DataSourceVO dataSource : dataSources) { String label; + DataSourceTypeEnum dataSourceType = dataSource.getDataSourceType(); if (isDeleted(dataSource)) { - label = String.format(DELETED_FORMAT, dataSource.getDataSourceName()); + label = String.format(DELETED_TYPE_FORMAT, dataSourceType.getDesc(), dataSource.getDataSourceName()); } else { - label = String.format(NOT_DELETED_FORMAT, dataSource.getDataSourceName()); + label = String.format(NOT_DELETED_TYPE_FORMAT, dataSourceType.getDesc(), dataSource.getDataSourceName()); } String value = dataSource.getUuid(); textValues.add(new TextValue(label, value)); diff --git a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/MetadataServiceImpl.java b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/MetadataServiceImpl.java index cc980f2..b36f1d0 100644 --- a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/MetadataServiceImpl.java +++ b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/MetadataServiceImpl.java @@ -65,7 +65,7 @@ public class MetadataServiceImpl implements MetadataService { @Override public List loadSelector(String domainCode) { - List metadatas = queryAll(); + List metadatas = metadataMapper.dos2vos(metadataDAO.queryByDomainCode(domainCode)); if (CollectionUtils.isEmpty(metadatas)) { return Lists.newArrayList(); } diff --git a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/StrategyServiceImpl.java b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/StrategyServiceImpl.java index 1a7e8ad..5c9a52f 100644 --- a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/StrategyServiceImpl.java +++ b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/StrategyServiceImpl.java @@ -1,5 +1,21 @@ package cn.icanci.rec.admin.biz.service.impl; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import javax.annotation.Resource; +import javax.script.CompiledScript; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; + import cn.icanci.rec.admin.biz.event.log.LogEvent; import cn.icanci.rec.admin.biz.mapper.config.StrategyMapper; import cn.icanci.rec.admin.biz.mapper.config.StrategyVoDtoMapper; @@ -24,22 +40,6 @@ import cn.icanci.rec.engine.sdk.rule.repository.DomainSceneKey; import cn.icanci.rec.engine.sdk.rule.repository.EngineRepositoryHolder; import cn.icanci.rec.spi.event.EventDispatcher; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import javax.annotation.Resource; -import javax.script.CompiledScript; - -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; - -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; - /** * @author icanci * @since 1.0 Created in 2022/11/12 10:38 @@ -150,6 +150,11 @@ public class StrategyServiceImpl implements StrategyService { return result; } + @Override + public StrategyVO queryBySceneCode(String domainCode, String sceneCode) { + return strategyMapper.do2vo(strategyDAO.queryBySceneCode(domainCode, sceneCode)); + } + /** * 编译执行脚本 * diff --git a/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/daointerface/StrategyDAO.java b/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/daointerface/StrategyDAO.java index 7bf5995..73859b9 100644 --- a/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/daointerface/StrategyDAO.java +++ b/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/daointerface/StrategyDAO.java @@ -24,6 +24,8 @@ public interface StrategyDAO extends BaseDAO { List queryByDomainCode(String domainCode); + StrategyDO queryBySceneCode(String domainCode, String sceneCode); + interface StrategyColumn extends BaseColumn { /** * 域Code diff --git a/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/dateobject/StrategyDO.java b/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/dateobject/StrategyDO.java index f8cdd92..8c465b6 100644 --- a/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/dateobject/StrategyDO.java +++ b/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/dateobject/StrategyDO.java @@ -21,12 +21,6 @@ public class StrategyDO extends BaseDO { * 策略组名称 */ private String strategyName; - /** - * 数据源类型(脚本、接口、SQL) - * - * @see DataSourceTypeEnum#name() - */ - private String dataSourceType; /** * 数据源关联uuid */ @@ -76,14 +70,6 @@ public class StrategyDO extends BaseDO { this.strategyName = strategyName; } - public String getDataSourceType() { - return dataSourceType; - } - - public void setDataSourceType(String dataSourceType) { - this.dataSourceType = dataSourceType; - } - public String getDataSourceUuid() { return dataSourceUuid; } diff --git a/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/mongo/MongoStrategyDAO.java b/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/mongo/MongoStrategyDAO.java index 3405d9b..957e16c 100644 --- a/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/mongo/MongoStrategyDAO.java +++ b/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/mongo/MongoStrategyDAO.java @@ -82,4 +82,13 @@ public class MongoStrategyDAO extends AbstractBaseDAO implements Str Query query = new Query(criteria); return mongoTemplate.find(query, COLLECTION_CLASS, COLLECTION_NAME); } + + @Override + public StrategyDO queryBySceneCode(String domainCode, String sceneCode) { + Criteria criteria = Criteria.where(StrategyColumn.domainCode).is(domainCode); + criteria.and(StrategyColumn.env).is(DEFAULT_ENV); + criteria.and(StrategyColumn.sceneCode).is(sceneCode); + Query query = new Query(criteria); + return mongoTemplate.findOne(query, COLLECTION_CLASS, COLLECTION_NAME); + } } \ No newline at end of file diff --git a/rec-admin/rec-admin-views/src/main/resources/vueboot/src/api/loadSelectorApi.js b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/api/loadSelectorApi.js index 23c305a..0e2a94d 100644 --- a/rec-admin/rec-admin-views/src/main/resources/vueboot/src/api/loadSelectorApi.js +++ b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/api/loadSelectorApi.js @@ -6,30 +6,30 @@ import request from '@/utils/request' * @returns {*} */ export async function loadDomainSelector() { - let ret = await request({ - url: '/rec/domain/loadSelector', - method: 'get', - }); - if (ret.ok) { - return ret.data.textValues; - } - return [] + let ret = await request({ + url: '/rec/domain/loadSelector', + method: 'get', + }); + if (ret.ok) { + return ret.data.textValues; + } + return [] } /** - * loadMetadataSelector + * loadBaseDataSelector * * @returns {*} */ -export async function loadMetadataSelector(domainCode) { - let ret = await request({ - url: '/rec/metadata/loadSelector/' + domainCode, - method: 'get', - }); - if (ret.ok) { - return ret.data.textValues; - } - return [] +export async function loadBaseDataSelector(domainCode) { + let ret = await request({ + url: '/rec/baseData/loadSelector/' + domainCode, + method: 'get', + }); + if (ret.ok) { + return ret.data.textValues; + } + return [] } @@ -38,14 +38,14 @@ export async function loadMetadataSelector(domainCode) { * @returns {*} */ export async function loadDomainSceneSelector(domainCode) { - let ret = await request({ - url: '/rec/scene/loadSelector/' + domainCode, - method: 'get', - }); - if (ret.ok) { - return ret.data.textValues; - } - return [] + let ret = await request({ + url: '/rec/scene/loadSelector/' + domainCode, + method: 'get', + }); + if (ret.ok) { + return ret.data.textValues; + } + return [] } /** @@ -53,14 +53,29 @@ export async function loadDomainSceneSelector(domainCode) { * @returns {*} */ export async function loadDomainMetadataSelector(domainCode) { - let ret = await request({ - url: '/rec/metadata/loadSelector/' + domainCode, - method: 'get', - }); - if (ret.ok) { - return ret.data.textValues; - } - return [] + let ret = await request({ + url: '/rec/metadata/loadSelector/' + domainCode, + method: 'get', + }); + if (ret.ok) { + return ret.data.textValues; + } + return [] +} + +/** + * @param domainCode domainCode + * @returns {*} + */ +export async function loadDataSourceSelector(domainCode) { + let ret = await request({ + url: '/rec/dataSource/loadSelector/' + domainCode, + method: 'get', + }); + if (ret.ok) { + return ret.data.textValues; + } + return [] } /** @@ -69,14 +84,14 @@ export async function loadDomainMetadataSelector(domainCode) { * @returns {*} */ export async function loadDataSourceTypeSelector() { - let ret = await request({ - url: '/rec/common/dataSourceType', - method: 'get', - }); - if (ret.ok) { - return ret.data.textValues; - } - return [] + let ret = await request({ + url: '/rec/common/dataSourceType', + method: 'get', + }); + if (ret.ok) { + return ret.data.textValues; + } + return [] } /** @@ -85,14 +100,14 @@ export async function loadDataSourceTypeSelector() { * @returns {*} */ export async function loadDataTypeSelector() { - let ret = await request({ - url: '/rec/common/dataType', - method: 'get', - }); - if (ret.ok) { - return ret.data.textValues; - } - return [] + let ret = await request({ + url: '/rec/common/dataType', + method: 'get', + }); + if (ret.ok) { + return ret.data.textValues; + } + return [] } /** @@ -101,14 +116,14 @@ export async function loadDataTypeSelector() { * @returns {*} */ export async function loadHttpRequestTypeSelector() { - let ret = await request({ - url: '/rec/common/httpRequestType', - method: 'get', - }); - if (ret.ok) { - return ret.data.textValues; - } - return [] + let ret = await request({ + url: '/rec/common/httpRequestType', + method: 'get', + }); + if (ret.ok) { + return ret.data.textValues; + } + return [] } /** @@ -117,14 +132,14 @@ export async function loadHttpRequestTypeSelector() { * @returns {*} */ export async function loadInterruptSelector() { - let ret = await request({ - url: '/rec/common/interrupt', - method: 'get', - }); - if (ret.ok) { - return ret.data.textValues; - } - return [] + let ret = await request({ + url: '/rec/common/interrupt', + method: 'get', + }); + if (ret.ok) { + return ret.data.textValues; + } + return [] } /** @@ -133,14 +148,14 @@ export async function loadInterruptSelector() { * @returns {*} */ export async function loadOperatorSelector() { - let ret = await request({ - url: '/rec/common/operator', - method: 'get', - }); - if (ret.ok) { - return ret.data.textValues; - } - return [] + let ret = await request({ + url: '/rec/common/operator', + method: 'get', + }); + if (ret.ok) { + return ret.data.textValues; + } + return [] } /** @@ -149,14 +164,14 @@ export async function loadOperatorSelector() { * @returns {*} */ export async function loadResultTypeSelector() { - let ret = await request({ - url: '/rec/common/resultType', - method: 'get', - }); - if (ret.ok) { - return ret.data.textValues; - } - return [] + let ret = await request({ + url: '/rec/common/resultType', + method: 'get', + }); + if (ret.ok) { + return ret.data.textValues; + } + return [] } /** @@ -165,14 +180,30 @@ export async function loadResultTypeSelector() { * @returns {*} */ export async function loadRuleTypeSelector() { - let ret = await request({ - url: '/rec/common/ruleType', - method: 'get', - }); - if (ret.ok) { - return ret.data.textValues; - } - return [] + let ret = await request({ + url: '/rec/common/ruleType', + method: 'get', + }); + if (ret.ok) { + return ret.data.textValues; + } + return [] +} + +/** + * loadRuleModeSelector + * + * @returns {*} + */ +export async function loadRuleModeSelector() { + let ret = await request({ + url: '/rec/common/ruleMode', + method: 'get', + }); + if (ret.ok) { + return ret.data.textValues; + } + return [] } /** @@ -181,12 +212,12 @@ export async function loadRuleTypeSelector() { * @returns {*} */ export async function loadScriptTypeSelector() { - let ret = await request({ - url: '/rec/common/scriptType', - method: 'get', - }); - if (ret.ok) { - return ret.data.textValues; - } - return [] + let ret = await request({ + url: '/rec/common/scriptType', + method: 'get', + }); + if (ret.ok) { + return ret.data.textValues; + } + return [] } diff --git a/rec-admin/rec-admin-views/src/main/resources/vueboot/src/api/strategyApi.js b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/api/strategyApi.js index 88f6842..3d9c7c6 100644 --- a/rec-admin/rec-admin-views/src/main/resources/vueboot/src/api/strategyApi.js +++ b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/api/strategyApi.js @@ -13,6 +13,19 @@ export async function remoteValidateStrategyName(domainCode, dataSourceName) { method: 'get', }) } +/** + * 验证 remoteValidateSceneCode + * + * @param domainCode domainCode + * @param sceneCode sceneCode + * @returns {*} + */ +export async function remoteValidateSceneCode(domainCode, sceneCode) { + return await request({ + url: '/rec/strategy/validateSceneCode/' + domainCode + "/" + sceneCode, + method: 'get', + }) +} /** * 保存 diff --git a/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/components/ruleTreeList.vue b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/components/ruleTreeList.vue new file mode 100644 index 0000000..eef1c37 --- /dev/null +++ b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/components/ruleTreeList.vue @@ -0,0 +1,98 @@ + + + diff --git a/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/components/ruleTreeNode.vue b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/components/ruleTreeNode.vue new file mode 100644 index 0000000..c81f7fd --- /dev/null +++ b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/components/ruleTreeNode.vue @@ -0,0 +1,264 @@ + + + + diff --git a/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/dialog/baseDataForm.vue b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/dialog/baseDataForm.vue index a6af396..3536bb4 100644 --- a/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/dialog/baseDataForm.vue +++ b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/dialog/baseDataForm.vue @@ -19,7 +19,6 @@ > import {baseDataDebug, remoteValidateFieldName, saveBaseData} from "../../../api/basedataApi"; -import {loadDataTypeSelector, loadDomainSelector, loadMetadataSelector, loadResultTypeSelector, loadScriptTypeSelector} from "../../../api/loadSelectorApi"; +import {loadDataTypeSelector, loadDomainMetadataSelector, loadDomainSelector, loadResultTypeSelector, loadScriptTypeSelector} from "../../../api/loadSelectorApi"; export default { name: "baseDataForm", @@ -194,8 +193,6 @@ export default { vm.dataTypeOptions = await loadDataTypeSelector() vm.scriptTypeOptions = await loadScriptTypeSelector() vm.resultTypeOptions = await loadResultTypeSelector() - vm.metadataOptions = await loadMetadataSelector() - if (data) { vm.saveData = vm.$cloneObj(data) } @@ -242,9 +239,6 @@ export default { } vm.dialogVisible = false }, - async domainChange(value) { - this.metadataOptions = await loadMetadataSelector(value) - }, debug() { this.$refs['ruleForm'].validate(async (valid) => { if (valid) { @@ -262,6 +256,18 @@ export default { } }) } + }, + watch: { + "saveData.domainCode": { + async handler(newVal, oldVal) { + if (newVal) { + this.metadataOptions = [] + this.saveData.metadataUuid = '' + this.metadataOptions = await loadDomainMetadataSelector(newVal) + } + }, + immediate: true + } } } diff --git a/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/dialog/dataSourceForm.vue b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/dialog/dataSourceForm.vue index a4cf802..3aa0b5e 100644 --- a/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/dialog/dataSourceForm.vue +++ b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/dialog/dataSourceForm.vue @@ -200,13 +200,13 @@ export default { {required: true, message: '此项必填', trigger: 'change'} ], 'httpInfo.reqUrl': [ - {required: true, message: '此项必填', trigger: 'change'} + {required: true, message: '此项必填', trigger: 'blur'} ], 'httpInfo.reqParam': [ {required: true, message: '此项必填', trigger: 'change'} ], 'httpInfo.timeout': [ - {required: true, message: '此项必填', trigger: 'change'} + {required: true, message: '此项必填', trigger: 'blur'} ], }, testPass: false, diff --git a/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/dialog/strategyForm.vue b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/dialog/strategyForm.vue index ef7d54d..5dd7461 100644 --- a/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/dialog/strategyForm.vue +++ b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/dialog/strategyForm.vue @@ -2,59 +2,135 @@ diff --git a/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/strategy.vue b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/strategy.vue index 87b196d..fa025fe 100644 --- a/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/strategy.vue +++ b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/strategy.vue @@ -33,7 +33,7 @@ - + diff --git a/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/CommonController.java b/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/CommonController.java index f2378b1..af569da 100644 --- a/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/CommonController.java +++ b/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/CommonController.java @@ -68,4 +68,10 @@ public class CommonController { return R.builderOk().data("textValues", textValues).build(); } + @GetMapping("ruleMode") + public R ruleMode() { + List textValues = Arrays.stream(RuleModeEnum.values()).map(x -> new TextValue(x.getDesc(), x.name())).collect(Collectors.toList()); + return R.builderOk().data("textValues", textValues).build(); + } + } diff --git a/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/config/BaseDataController.java b/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/config/BaseDataController.java index cbe2c68..39794b5 100644 --- a/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/config/BaseDataController.java +++ b/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/config/BaseDataController.java @@ -49,9 +49,9 @@ public class BaseDataController { } // ================================ Load Selectors ================================ - @GetMapping("loadSelector") - public R loadSelector() { - List textValues = baseDataService.loadSelector(); + @GetMapping("loadSelector/{domainCode}") + public R loadSelector(@PathVariable("domainCode") String domainCode) { + List textValues = baseDataService.loadSelector(domainCode); return R.builderOk().data("textValues", textValues).build(); } // ================================ Debug ================================ diff --git a/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/config/DataSourceController.java b/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/config/DataSourceController.java index 7479350..e77e4e6 100644 --- a/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/config/DataSourceController.java +++ b/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/config/DataSourceController.java @@ -47,9 +47,9 @@ public class DataSourceController { } // ================================ Load Selectors ================================ - @GetMapping("loadSelector") - public R loadSelector() { - List textValues = dataSourceService.loadSelector(); + @GetMapping("loadSelector/{domainCode}") + public R loadSelector(@PathVariable("domainCode") String domainCode) { + List textValues = dataSourceService.loadSelector(domainCode); return R.builderOk().data("textValues", textValues).build(); } // ================================ Debug ================================ diff --git a/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/config/StrategyController.java b/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/config/StrategyController.java index fca8afd..43df62e 100644 --- a/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/config/StrategyController.java +++ b/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/config/StrategyController.java @@ -44,6 +44,12 @@ public class StrategyController { StrategyVO strategy = strategyService.queryByStrategyName(domainCode, strategyName); return R.builderOk().data("result", strategy == null).build(); } + + @GetMapping("validateSceneCode/{domainCode}/{sceneCode}") + public R validateSceneCode(@PathVariable("domainCode") String domainCode, @PathVariable("sceneCode") String sceneCode) { + StrategyVO strategy = strategyService.queryBySceneCode(domainCode, sceneCode); + return R.builderOk().data("result", strategy == null).build(); + } // ================================ Debug ================================ @PostMapping("debug") diff --git a/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/model/Strategy.java b/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/model/Strategy.java index d48c69b..6d5ad67 100644 --- a/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/model/Strategy.java +++ b/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/model/Strategy.java @@ -22,12 +22,6 @@ public class Strategy extends Base { * 策略组名称 */ private String strategyName; - /** - * 数据源类型(脚本、接口、SQL) - * - * @see DataSourceTypeEnum#name() - */ - private String dataSourceType; /** * 数据源关联uuid */ @@ -77,14 +71,6 @@ public class Strategy extends Base { this.strategyName = strategyName; } - public String getDataSourceType() { - return dataSourceType; - } - - public void setDataSourceType(String dataSourceType) { - this.dataSourceType = dataSourceType; - } - public String getDataSourceUuid() { return dataSourceUuid; } diff --git a/rec-common/src/main/java/cn/icanci/rec/common/aggregation/model/StrategyDTO.java b/rec-common/src/main/java/cn/icanci/rec/common/aggregation/model/StrategyDTO.java index 6c96d15..220edd0 100644 --- a/rec-common/src/main/java/cn/icanci/rec/common/aggregation/model/StrategyDTO.java +++ b/rec-common/src/main/java/cn/icanci/rec/common/aggregation/model/StrategyDTO.java @@ -23,12 +23,6 @@ public class StrategyDTO extends BaseDTO { * 策略组名称 */ private String strategyName; - /** - * 数据源类型(脚本、接口、SQL) - * - * @see DataSourceTypeEnum#name() - */ - private String dataSourceType; /** * 数据源关联uuid */ @@ -78,14 +72,6 @@ public class StrategyDTO extends BaseDTO { this.strategyName = strategyName; } - public String getDataSourceType() { - return dataSourceType; - } - - public void setDataSourceType(String dataSourceType) { - this.dataSourceType = dataSourceType; - } - public String getDataSourceUuid() { return dataSourceUuid; } diff --git a/rec-common/src/main/java/cn/icanci/rec/common/enums/InterruptEnum.java b/rec-common/src/main/java/cn/icanci/rec/common/enums/InterruptEnum.java index 50774ea..88f1e08 100644 --- a/rec-common/src/main/java/cn/icanci/rec/common/enums/InterruptEnum.java +++ b/rec-common/src/main/java/cn/icanci/rec/common/enums/InterruptEnum.java @@ -10,11 +10,11 @@ public enum InterruptEnum { /** * TRUE */ - TRUE("TRUE", "TRUE"), + TRUE("TRUE", "TRUE(中断)"), /** * FALSE */ - FALSE("FALSE", "FALSE"),; + FALSE("FALSE", "FALSE(不中断)"),; InterruptEnum(String code, String desc) { this.code = code; diff --git a/rec-common/src/main/java/cn/icanci/rec/common/enums/ScriptTypeEnum.java b/rec-common/src/main/java/cn/icanci/rec/common/enums/ScriptTypeEnum.java index b2681dd..70b01bc 100644 --- a/rec-common/src/main/java/cn/icanci/rec/common/enums/ScriptTypeEnum.java +++ b/rec-common/src/main/java/cn/icanci/rec/common/enums/ScriptTypeEnum.java @@ -16,10 +16,11 @@ public enum ScriptTypeEnum { * MVEL2 */ MVEL2("MVEL2", "Mvel2.0脚本"), - /** - * JAVA_SCRIPT - */ - JAVA_SCRIPT("JAVA_SCRIPT", "JavaScript脚本"), + // TODO JAVA_SCRIPT + // /** + // * JAVA_SCRIPT + // */ + // JAVA_SCRIPT("JAVA_SCRIPT", "JavaScript脚本"), // /** // * Json 取值 // */ diff --git a/rec-common/src/main/java/cn/icanci/rec/common/model/config/StrategyVO.java b/rec-common/src/main/java/cn/icanci/rec/common/model/config/StrategyVO.java index f195df7..2677a2d 100644 --- a/rec-common/src/main/java/cn/icanci/rec/common/model/config/StrategyVO.java +++ b/rec-common/src/main/java/cn/icanci/rec/common/model/config/StrategyVO.java @@ -14,39 +14,36 @@ public class StrategyVO extends BaseVO { /** * 域Code */ - private String domainCode; + private String domainCode; /** * 场景Code */ - private String sceneCode; + private String sceneCode; /** * 策略组名称 */ - private String strategyName; - /** - * 数据源类型(脚本、接口、SQL) - */ - private DataSourceTypeEnum dataSourceType; + private String strategyName; + /** * 数据源关联uuid */ - private String dataSourceUuid; + private String dataSourceUuid; /** * 规则配置类型(默认为List) */ - private RuleTypeEnum ruleType; + private RuleTypeEnum ruleType; /** * 规则模式 默认为simple */ - private RuleModeEnum ruleMode; + private RuleModeEnum ruleMode; /** * 规则配置类型为List时候的规则数据 */ - private RuleListInfo ruleListInfo; + private RuleListInfo ruleListInfo; /** * 规则配置类型为Tree时候的规则数据 */ - private RuleTreeInfo ruleTreeInfo; + private RuleTreeInfo ruleTreeInfo; public String getDomainCode() { return domainCode; @@ -72,14 +69,6 @@ public class StrategyVO extends BaseVO { this.strategyName = strategyName; } - public DataSourceTypeEnum getDataSourceType() { - return dataSourceType; - } - - public void setDataSourceType(DataSourceTypeEnum dataSourceType) { - this.dataSourceType = dataSourceType; - } - public String getDataSourceUuid() { return dataSourceUuid; } diff --git a/rec-engine/rec-engine-script/src/main/java/cn/icanci/rec/engine/script/enums/ScriptTypeFactoryEnum.java b/rec-engine/rec-engine-script/src/main/java/cn/icanci/rec/engine/script/enums/ScriptTypeFactoryEnum.java index dc5cf5c..0204235 100644 --- a/rec-engine/rec-engine-script/src/main/java/cn/icanci/rec/engine/script/enums/ScriptTypeFactoryEnum.java +++ b/rec-engine/rec-engine-script/src/main/java/cn/icanci/rec/engine/script/enums/ScriptTypeFactoryEnum.java @@ -1,7 +1,6 @@ package cn.icanci.rec.engine.script.enums; import cn.icanci.rec.common.enums.ScriptTypeEnum; -import jdk.nashorn.api.scripting.NashornScriptEngineFactory; import java.util.HashMap; import java.util.Map; @@ -24,16 +23,17 @@ public enum ScriptTypeFactoryEnum { * MVEL2 */ MVEL2(ScriptTypeEnum.MVEL2, new MvelScriptEngineFactory()), - /** - * JAVA_SCRIPT - * - * Tip: NashornScriptEngineFactory 支持执行 - * nashorn,Nashorn,js,JS,JavaScript,javascript,ECMAScript,ecmascript - * 此处只用到了JavaScript - * - * Warning: Nashorn engine is planned to be removed from a future JDK release - */ - JAVA_SCRIPT(ScriptTypeEnum.JAVA_SCRIPT, new NashornScriptEngineFactory()), + + /** + * TODO JAVA_SCRIPT + * + * Tip: NashornScriptEngineFactory 支持执行 + * nashorn,Nashorn,js,JS,JavaScript,javascript,ECMAScript,ecmascript + * 此处只用到了JavaScript + * + * Warning: Nashorn engine is planned to be removed from a future JDK release + */ + // JAVA_SCRIPT(ScriptTypeEnum.JAVA_SCRIPT, new NashornScriptEngineFactory()), ; diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/EngineExecutor.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/EngineExecutor.java index 304f987..d07cc42 100644 --- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/EngineExecutor.java +++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/EngineExecutor.java @@ -214,7 +214,7 @@ public final class EngineExecutor { if (CollectionUtils.isEmpty(last.getChildren())) { return Boolean.TRUE; } - // 执行孩子节点 + // 执行孩子节点 List结构没有孩子节点 return matchGroup(last.getChildren(), domainCode, ruleMode, bindings); } @@ -235,9 +235,8 @@ public final class EngineExecutor { if (parameters != null) { bindings.putAll(parameters); } - String dataSourceType = strategy.getDataSourceType(); String dataSourceUuid = strategy.getDataSourceUuid(); - if (StringUtils.isNotBlank(dataSourceType) && StringUtils.isNotBlank(dataSourceUuid)) { + if (StringUtils.isNotBlank(dataSourceUuid)) { DataSourceDTO dataSource = holder.getDataSource(domain.getDomainCode(), dataSourceUuid); DataSourceTypeEnum dataSourceTypeEnum = DataSourceTypeEnum.valueOf(dataSource.getDataSourceType()); switch (dataSourceTypeEnum) { diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/pool/ScriptExecutorPoolHolder.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/pool/ScriptExecutorPoolHolder.java index fe1cae3..b300e41 100644 --- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/pool/ScriptExecutorPoolHolder.java +++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/pool/ScriptExecutorPoolHolder.java @@ -24,7 +24,7 @@ public class ScriptExecutorPoolHolder { return instance; } - private ThreadPoolExecutor registryOrRemoveThreadPool = null; + private ThreadPoolExecutor registryOrRemoveThreadPool; private ScriptExecutorPoolHolder() { registryOrRemoveThreadPool = new ThreadPoolExecutor(2, 10, 30L, TimeUnit.SECONDS, new LinkedBlockingQueue(2000), -- Gitee