diff --git a/io.sc.engine.rule.frontend/src/components/index.ts b/io.sc.engine.rule.frontend/src/components/index.ts index 90440f34..b21f74c4 100644 --- a/io.sc.engine.rule.frontend/src/components/index.ts +++ b/io.sc.engine.rule.frontend/src/components/index.ts @@ -10,6 +10,7 @@ import component_engine_rule_workflow from '@/views/workflow/Workflow.vue'; import component_engine_rule_dictionary from '@/views/dictionary/Dictionary.vue'; import component_engine_rule_lib from '@/views/lib/Lib.vue'; import component_engine_rule_function from '@/views/function/Function.vue'; +import component_engine_rule_blood from '@/views/blood/Blood.vue'; import component_engine_rule_testcase from '@/views/testcase/Testcase.vue'; import component_engine_rule_migration from '@/views/migration/Migration.vue'; @@ -22,6 +23,7 @@ const localComponents = { 'component.engine.rule.dictionary': component_engine_rule_dictionary, 'component.engine.rule.lib': component_engine_rule_lib, 'component.engine.rule.function': component_engine_rule_function, + 'component.engine.rule.blood': component_engine_rule_blood, 'component.engine.rule.testcase': component_engine_rule_testcase, 'component.engine.rule.migration': component_engine_rule_migration, }; diff --git a/io.sc.engine.rule.frontend/src/i18n/messages.json b/io.sc.engine.rule.frontend/src/i18n/messages.json index 80cab5fa..c3dc8650 100644 --- a/io.sc.engine.rule.frontend/src/i18n/messages.json +++ b/io.sc.engine.rule.frontend/src/i18n/messages.json @@ -6,6 +6,7 @@ "menu.engine.rule.dictionary": "Meta Data Manager", "menu.engine.rule.lib": "Feature Library Manager", "menu.engine.rule.function": "User Defined Function Library", + "menu.engine.rule.blood": "Blood Relationship Query", "menu.engine.rule.testcase": "Test Case Manager", "menu.engine.rule.migration": "Data Back and Migration", diff --git a/io.sc.engine.rule.frontend/src/i18n/messages_tw_CN.json b/io.sc.engine.rule.frontend/src/i18n/messages_tw_CN.json index 0f3d17ef..1f43ae53 100644 --- a/io.sc.engine.rule.frontend/src/i18n/messages_tw_CN.json +++ b/io.sc.engine.rule.frontend/src/i18n/messages_tw_CN.json @@ -6,6 +6,7 @@ "menu.engine.rule.dictionary": "元數據管理", "menu.engine.rule.lib": "特征庫管理", "menu.engine.rule.function": "自定義函數庫", + "menu.engine.rule.blood": "血緣關係查詢", "menu.engine.rule.testcase": "試算用例", "menu.engine.rule.migration": "數據備份和遷移", diff --git a/io.sc.engine.rule.frontend/src/i18n/messages_zh_CN.json b/io.sc.engine.rule.frontend/src/i18n/messages_zh_CN.json index 16f04870..afd80d03 100644 --- a/io.sc.engine.rule.frontend/src/i18n/messages_zh_CN.json +++ b/io.sc.engine.rule.frontend/src/i18n/messages_zh_CN.json @@ -6,6 +6,7 @@ "menu.engine.rule.dictionary": "元数据管理", "menu.engine.rule.lib": "特征库管理", "menu.engine.rule.function": "自定义函数库", + "menu.engine.rule.blood": "血缘关系查询", "menu.engine.rule.testcase": "试算用例管理", "menu.engine.rule.migration": "数据备份和迁移", diff --git a/io.sc.engine.rule.frontend/src/menus/menus.json b/io.sc.engine.rule.frontend/src/menus/menus.json index 0f9cd3d3..688a4ddd 100644 --- a/io.sc.engine.rule.frontend/src/menus/menus.json +++ b/io.sc.engine.rule.frontend/src/menus/menus.json @@ -29,10 +29,12 @@ {"type":"ROUTE", "order":400, "parentId":"menu.engine.rule", "id":"menu.engine.rule.dictionary", "titleI18nKey":"menu.engine.rule.dictionary", "icon":"bi-list-ol", "routeName":"route.engine.rule.dictionary"}, /*决策引擎/特征库管理*/ {"type":"ROUTE", "order":500, "parentId":"menu.engine.rule", "id":"menu.engine.rule.lib", "titleI18nKey":"menu.engine.rule.lib", "icon":"bi-folder2", "routeName":"route.engine.rule.lib"}, + /*决策引擎/血缘关系查询*/ + {"type":"ROUTE", "order":600, "parentId":"menu.engine.rule", "id":"menu.engine.rule.blood", "titleI18nKey":"menu.engine.rule.blood", "icon":"bi-diagram-3", "routeName":"route.engine.rule.blood"}, /*决策引擎/函数库*/ - {"type":"ROUTE", "order":600, "parentId":"menu.engine.rule", "id":"menu.engine.rule.function", "titleI18nKey":"menu.engine.rule.function", "icon":"superscript", "routeName":"route.engine.rule.function"}, + {"type":"ROUTE", "order":700, "parentId":"menu.engine.rule", "id":"menu.engine.rule.function", "titleI18nKey":"menu.engine.rule.function", "icon":"superscript", "routeName":"route.engine.rule.function"}, /*决策引擎/测试用例管理*/ - {"type":"ROUTE", "order":700, "parentId":"menu.engine.rule", "id":"menu.engine.rule.testcase", "titleI18nKey":"menu.engine.rule.testcase", "icon":"bi-suitcase-lg", "routeName":"route.engine.rule.testcase"}, + {"type":"ROUTE", "order":800, "parentId":"menu.engine.rule", "id":"menu.engine.rule.testcase", "titleI18nKey":"menu.engine.rule.testcase", "icon":"bi-suitcase-lg", "routeName":"route.engine.rule.testcase"}, /*决策引擎/数据迁移*/ - {"type":"ROUTE", "order":800, "parentId":"menu.engine.rule", "id":"menu.engine.rule.migration", "titleI18nKey":"menu.engine.rule.migration", "icon":"bi-share", "routeName":"route.engine.rule.migration"} + {"type":"ROUTE", "order":900, "parentId":"menu.engine.rule", "id":"menu.engine.rule.migration", "titleI18nKey":"menu.engine.rule.migration", "icon":"bi-share", "routeName":"route.engine.rule.migration"} ] diff --git a/io.sc.engine.rule.frontend/src/routes/routes.json b/io.sc.engine.rule.frontend/src/routes/routes.json index 627f40b5..e266b353 100644 --- a/io.sc.engine.rule.frontend/src/routes/routes.json +++ b/io.sc.engine.rule.frontend/src/routes/routes.json @@ -97,6 +97,19 @@ "permissions": ["/re/function/**/*"] } }, + { + "name": "route.engine.rule.blood", + "path": "re/blood", + "parent": "/", + "priority": 0, + "module": "io.sc.engine.rule.frontend", + "component": "component.engine.rule.blood", + "componentPath": "@/views/blood/Blood.vue", + "redirect": null, + "meta": { + "permissions": ["/re/blood/**/*"] + } + }, { "name": "route.engine.rule.testcase", "path": "re/testcase", diff --git a/io.sc.engine.rule.frontend/src/views/blood/Blood.vue b/io.sc.engine.rule.frontend/src/views/blood/Blood.vue new file mode 100644 index 00000000..91059b9e --- /dev/null +++ b/io.sc.engine.rule.frontend/src/views/blood/Blood.vue @@ -0,0 +1,112 @@ + + diff --git a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/blood/controller/BloodWebController.java b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/blood/controller/BloodWebController.java new file mode 100644 index 00000000..94355545 --- /dev/null +++ b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/blood/controller/BloodWebController.java @@ -0,0 +1,24 @@ +package io.sc.engine.rule.server.blood.controller; + +import io.sc.engine.rule.server.blood.service.BloodService; +import io.sc.engine.rule.server.model.vo.ModelVo; +import io.sc.engine.rule.server.resource.vo.ResourceVo; +import io.sc.platform.orm.service.support.QueryParameter; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.Locale; + +@RestController("io.sc.engine.rule.server.blood.controller.BloodWebController") +@RequestMapping("/api/re/blood") +public class BloodWebController { + @Autowired BloodService bloodService; + + @GetMapping("findByCodeOrNameContains") + public List findByCodeOrNameContains(QueryParameter queryParameter) throws Exception { + return bloodService.findByCodeOrNameContains(queryParameter); + } +} diff --git a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/blood/service/BloodService.java b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/blood/service/BloodService.java new file mode 100644 index 00000000..273b60e4 --- /dev/null +++ b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/blood/service/BloodService.java @@ -0,0 +1,11 @@ +package io.sc.engine.rule.server.blood.service; + +import io.sc.engine.rule.server.model.vo.ModelVo; +import io.sc.engine.rule.server.resource.vo.ResourceVo; +import io.sc.platform.orm.service.support.QueryParameter; + +import java.util.List; + +public interface BloodService { + public List findByCodeOrNameContains(QueryParameter queryParameter) throws Exception; +} diff --git a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/blood/service/impl/BloodServiceImpl.java b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/blood/service/impl/BloodServiceImpl.java new file mode 100644 index 00000000..12ec6879 --- /dev/null +++ b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/blood/service/impl/BloodServiceImpl.java @@ -0,0 +1,78 @@ +package io.sc.engine.rule.server.blood.service.impl; + +import io.sc.engine.rule.server.blood.service.BloodService; +import io.sc.engine.rule.server.model.entity.ModelEntity; +import io.sc.engine.rule.server.model.entity.ParameterEntity; +import io.sc.engine.rule.server.model.repository.ParameterRepository; +import io.sc.engine.rule.server.model.service.ModelService; +import io.sc.engine.rule.server.model.service.ParameterService; +import io.sc.engine.rule.server.model.vo.ModelVo; +import io.sc.engine.rule.server.resource.entity.ResourceEntity; +import io.sc.engine.rule.server.resource.service.ResourceService; +import io.sc.engine.rule.server.resource.vo.ResourceVo; +import io.sc.platform.orm.service.support.QueryParameter; +import io.sc.platform.orm.service.support.criteria.Criteria; +import io.sc.platform.orm.service.support.criteria.impl.InSet; +import io.sc.platform.orm.util.EntityVoUtil; +import io.sc.platform.util.ObjectMapperUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; + +@Service("io.sc.engine.rule.server.blood.service.impl.BloodServiceImpl") +public class BloodServiceImpl implements BloodService { + @Autowired private ParameterRepository parameterRepository; + @Autowired private ParameterService parameterService; + @Autowired private ModelService modelService; + @Autowired private ResourceService resourceService; + + @Override + public List findByCodeOrNameContains(QueryParameter queryParameter) throws Exception { + if(!queryParameter.existsCriteria()) { + return Collections.emptyList(); + } + // 构造新查询,不排序,因为查询的条件是参数或指标,返回的结果是资源,所以在查询参数时不排序,返回资源时排序 + QueryParameter query4Parameter =ObjectMapperUtil.json().readValue(ObjectMapperUtil.json().writeValueAsString(queryParameter),QueryParameter.class); + query4Parameter.setSortBy(null); + + // 查询参数 + List entities = parameterService.list(query4Parameter); + if(entities==null || entities.isEmpty()){ + return Collections.emptyList(); + } + + // 获取参数 IDS + Set parameterIds = new LinkedHashSet<>(); + if (entities != null && !entities.isEmpty()) { + for (ParameterEntity entity : entities) { + parameterIds.add(entity.getId()); + } + } + if(parameterIds==null || parameterIds.isEmpty()){ + return Collections.emptyList(); + } + + // 获取参数对应的资源 IDS + Set resourceIds =new LinkedHashSet<>(); + if (!parameterIds.isEmpty()) { + for (String id : parameterIds) { + resourceIds.add(modelService.findRootModelByParameterId(id).getResource().getId()); + } + } + if(resourceIds==null || resourceIds.isEmpty()){ + return Collections.emptyList(); + } + + // 重新构建查询条件, 并保留排序字段 + InSet inSet =new InSet(); + inSet.setFieldName("id"); + inSet.setValue(resourceIds.toArray(new String[]{})); + + List criterias =new ArrayList<>(); + criterias.add(inSet); + + queryParameter.setCriterias(criterias); + return EntityVoUtil.toVo(resourceService.list(queryParameter)); + } +} diff --git a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/repository/ParameterRepository.java b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/repository/ParameterRepository.java index 21673e29..329c46ab 100644 --- a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/repository/ParameterRepository.java +++ b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/repository/ParameterRepository.java @@ -55,4 +55,6 @@ public interface ParameterRepository extends DaoRepository findOutParameterEntityByModelIds(@Param("ids") Set modelIds); + + public List findByCodeOrNameContains(@Param("code")String code, @Param("name")String name); } diff --git a/io.sc.engine.rule.server/src/main/resources/META-INF/platform/plugins/components.json b/io.sc.engine.rule.server/src/main/resources/META-INF/platform/plugins/components.json index 3aaf1751..e28a7978 100644 --- a/io.sc.engine.rule.server/src/main/resources/META-INF/platform/plugins/components.json +++ b/io.sc.engine.rule.server/src/main/resources/META-INF/platform/plugins/components.json @@ -9,6 +9,9 @@ { "includes":[ + "io.sc.engine.rule.server.blood.controller", + "io.sc.engine.rule.server.blood.service.impl", + "io.sc.engine.rule.server.common.controller", "io.sc.engine.rule.server.common.initializer", "io.sc.engine.rule.server.common.jpa.listener",