Browse Source

基础框架发布: 8.2.41

1. 规则引擎将枚举变量替换为枚举值返回给客户端。
  2. 决策引擎增加血缘关系查询

前端核心发布: 8.2.134
  1. 修改错误处理机制
  2. 决策引擎增加血缘关系查询
main
wangshaoping 1 month ago
parent
commit
ddcc906117
  1. 2
      io.sc.engine.rule.frontend/src/components/index.ts
  2. 1
      io.sc.engine.rule.frontend/src/i18n/messages.json
  3. 1
      io.sc.engine.rule.frontend/src/i18n/messages_tw_CN.json
  4. 1
      io.sc.engine.rule.frontend/src/i18n/messages_zh_CN.json
  5. 8
      io.sc.engine.rule.frontend/src/menus/menus.json
  6. 13
      io.sc.engine.rule.frontend/src/routes/routes.json
  7. 112
      io.sc.engine.rule.frontend/src/views/blood/Blood.vue
  8. 24
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/blood/controller/BloodWebController.java
  9. 11
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/blood/service/BloodService.java
  10. 78
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/blood/service/impl/BloodServiceImpl.java
  11. 2
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/repository/ParameterRepository.java
  12. 3
      io.sc.engine.rule.server/src/main/resources/META-INF/platform/plugins/components.json

2
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,
};

1
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",

1
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": "數據備份和遷移",

1
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": "数据备份和迁移",

8
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"}
]

13
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",

112
io.sc.engine.rule.frontend/src/views/blood/Blood.vue

@ -0,0 +1,112 @@
<template>
<w-grid
ref="gridRef"
dense-body
:title="$t('re.resources.grid.title')"
:config-button="true"
selection="multiple"
:checkbox-selection="true"
:fetch-data-url="Environment.apiContextPath('/api/re/blood/findByCodeOrNameContains')"
:sort-by="['name']"
:query-form-cols-num="4"
:query-form-fields="[
{ name: 'code', label: $t('code'), type: 'w-text', queryOperator: 'equals' },
{ name: 'name', label: $t('name'), type: 'w-text' },
{
name: 'type',
label: $t('type'),
type: 'w-select',
options: EngineEnums.ParameterType.options,
clearable: true,
},
]"
:advanced-query="true"
:toolbar-configure="{ noIcon: false }"
:toolbar-actions="['query', 'reset', 'separator', 'view', 'separator', 'export']"
:columns="[
{
width: 400,
name: 'namec',
label: $t('name'),
format: (value: any, row: any) => {
return row.name;
},
},
{
width: 80,
name: 'type',
label: $t('type'),
showIf: false,
format: EngineEnums.ResourceType.formater,
},
{ width: 150, name: 'code', label: $t('code'), showIf: false },
{ width: 60, name: 'version', label: $t('version'), align: 'right' },
{
width: 60,
name: 'status',
label: $t('status'),
align: 'center',
format: EngineEnums.DeployStatus.formater,
},
{
width: 60,
name: 'preDeploy',
label: $t('re.resources.grid.entity.preDeploy'),
align: 'center',
sortable: false,
format: (value) => {
if (value) {
return Formater.yesNo()(value);
}
},
},
{ width: 120, name: 'taskName', label: $t('re.resources.grid.entity.taskName'), sortable: false },
{ width: 80, name: 'taskAssignee', label: $t('re.resources.grid.entity.taskAssignee'), sortable: false },
{ width: 100, name: 'lastModifier', label: $t('lastModifier') },
{ width: 140, name: 'lastModifyDate', label: $t('lastModifyDate') },
{
width: 80,
name: 'attachmentCount',
label: $t('attachment'),
sortable: false,
align: 'right',
format: (value: any, row: any) => {
if (value > 0) {
return value;
} else {
return '';
}
},
},
]"
:viewer="{
panel: {
columnNum: 1,
fields: [
{ name: 'type', label: $t('type') },
{ name: 'parent', label: $t('parent') },
{ name: 'id', label: $t('id') },
{ name: 'code', label: $t('code') },
{ name: 'name', label: $t('name') },
{ name: 'description', label: $t('description') },
{ name: 'version', label: $t('version') },
{ name: 'status', label: $t('status'), format: Formater.none() },
{ name: 'effectiveDate', label: $t('effectiveDate') },
{ name: 'taskName', label: $t('re.resources.grid.entity.taskName') },
{ name: 'taskAssignee', label: $t('re.resources.grid.entity.taskAssignee') },
{ name: 'attachmentCount', label: $t('attachment') },
{ name: 'imports', label: $t('imports') },
{ name: 'order', label: $t('order') },
...CorporationAuditorEntityManager.getViewerFields(),
],
},
}"
>
</w-grid>
</template>
<script setup lang="ts">
import { Environment, Formater, CorporationAuditorEntityManager } from 'platform-core';
import { EngineEnums } from '@/views/shared/enums/EngineEnums';
await EngineEnums.init();
</script>

24
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<ResourceVo> findByCodeOrNameContains(QueryParameter queryParameter) throws Exception {
return bloodService.findByCodeOrNameContains(queryParameter);
}
}

11
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<ResourceVo> findByCodeOrNameContains(QueryParameter queryParameter) throws Exception;
}

78
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<ResourceVo> 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<ParameterEntity> entities = parameterService.list(query4Parameter);
if(entities==null || entities.isEmpty()){
return Collections.emptyList();
}
// 获取参数 IDS
Set<String> 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<String> 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<Criteria> criterias =new ArrayList<>();
criterias.add(inSet);
queryParameter.setCriterias(criterias);
return EntityVoUtil.toVo(resourceService.list(queryParameter));
}
}

2
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<ParameterEntity,Strin
@Query("select e from OutParameterEntity e where e.model.id in :ids")
public List<OutParameterEntity> findOutParameterEntityByModelIds(@Param("ids") Set<String> modelIds);
public List<ParameterEntity> findByCodeOrNameContains(@Param("code")String code, @Param("name")String name);
}

3
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",

Loading…
Cancel
Save