Browse Source

基础框架发布: 8.2.41

1. 规则引擎将枚举变量替换为枚举值返回给客户端。
  2. 决策引擎增加血缘关系查询
  3. 修改 logback 日志配置
  4. 提供用于检测 SQL 注入的辅助类 io.sc.platform.jdbc.util.SqlInjectionPreventer
  5. 修改血缘关系查询条件中文提示

前端核心发布: 8.2.135
  1. 修改错误处理机制
  2. 决策引擎增加血缘关系查询,血缘关系采用树状展示
main
wangshaoping 1 month ago
parent
commit
e96231674b
  1. 4
      io.sc.engine.rule.frontend/src/i18n/messages.json
  2. 4
      io.sc.engine.rule.frontend/src/i18n/messages_tw_CN.json
  3. 4
      io.sc.engine.rule.frontend/src/i18n/messages_zh_CN.json
  4. 28
      io.sc.engine.rule.frontend/src/views/blood/Blood.vue
  5. 18
      io.sc.engine.rule.frontend/src/views/shared/BloodRelationshipDialog.vue
  6. 32
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/blood/service/impl/BloodServiceImpl.java

4
io.sc.engine.rule.frontend/src/i18n/messages.json

@ -10,6 +10,10 @@
"menu.engine.rule.testcase": "Test Case Manager", "menu.engine.rule.testcase": "Test Case Manager",
"menu.engine.rule.migration": "Data Back and Migration", "menu.engine.rule.migration": "Data Back and Migration",
"re.blood.grid.query.code": "Parameter Code",
"re.blood.grid.query.name": "Parameter Name",
"re.blood.grid.query.type": "Parameter Type",
"re.resources.grid.title": "Resources", "re.resources.grid.title": "Resources",
"re.resources.grid.toolbar.addTop": "Top Folder", "re.resources.grid.toolbar.addTop": "Top Folder",
"re.resources.grid.toolbar.addChild": "Child Folder", "re.resources.grid.toolbar.addChild": "Child Folder",

4
io.sc.engine.rule.frontend/src/i18n/messages_tw_CN.json

@ -10,6 +10,10 @@
"menu.engine.rule.testcase": "試算用例", "menu.engine.rule.testcase": "試算用例",
"menu.engine.rule.migration": "數據備份和遷移", "menu.engine.rule.migration": "數據備份和遷移",
"re.blood.grid.query.code": "參數代碼",
"re.blood.grid.query.name": "參數名稱",
"re.blood.grid.query.type": "參數類型",
"re.resources.grid.title": "資源", "re.resources.grid.title": "資源",
"re.resources.grid.toolbar.addTop": "頂級文件夾", "re.resources.grid.toolbar.addTop": "頂級文件夾",
"re.resources.grid.toolbar.addChild": "子文件夾", "re.resources.grid.toolbar.addChild": "子文件夾",

4
io.sc.engine.rule.frontend/src/i18n/messages_zh_CN.json

@ -10,6 +10,10 @@
"menu.engine.rule.testcase": "试算用例管理", "menu.engine.rule.testcase": "试算用例管理",
"menu.engine.rule.migration": "数据备份和迁移", "menu.engine.rule.migration": "数据备份和迁移",
"re.blood.grid.query.code": "参数代码",
"re.blood.grid.query.name": "参数名称",
"re.blood.grid.query.type": "参数类型",
"re.resources.grid.title": "资源", "re.resources.grid.title": "资源",
"re.resources.grid.toolbar.addTop": "顶级文件夹", "re.resources.grid.toolbar.addTop": "顶级文件夹",
"re.resources.grid.toolbar.addChild": "子文件夹", "re.resources.grid.toolbar.addChild": "子文件夹",

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

@ -1,20 +1,32 @@
<template> <template>
<w-grid <w-grid
ref="gridRef" ref="treeGridRef"
dense-body dense-body
:title="$t('re.resources.grid.title')" :title="$t('re.resources.grid.title')"
:config-button="true" :config-button="true"
:tree="true"
:tree-icon="
(row: any) => {
if (row.type === 'FOLDER') {
return { name: 'folder', color: 'amber' };
} else if (row.type === 'MODEL') {
return { name: 'bi-boxes' };
} else {
return { name: row.icon };
}
}
"
selection="multiple" selection="multiple"
:checkbox-selection="true" :checkbox-selection="false"
:fetch-data-url="Environment.apiContextPath('/api/re/blood/findResourcesByParameterCodeAndNameAndType')" :fetch-data-url="Environment.apiContextPath('/api/re/blood/findResourcesByParameterCodeAndNameAndType')"
:sort-by="['name']" :sort-by="['name']"
:query-form-cols-num="4" :query-form-cols-num="3"
:query-form-fields="[ :query-form-fields="[
{ name: 'code', label: $t('code'), type: 'w-text', queryOperator: 'equals' }, { name: 'code', label: $t('re.blood.grid.query.code'), type: 'w-text', queryOperator: 'equals' },
{ name: 'name', label: $t('name'), type: 'w-text' }, { name: 'name', label: $t('re.blood.grid.query.name'), type: 'w-text' },
{ {
name: 'type', name: 'type',
label: $t('type'), label: $t('re.blood.grid.query.type'),
type: 'w-select', type: 'w-select',
options: EngineEnums.ParameterType.options, options: EngineEnums.ParameterType.options,
clearable: true, clearable: true,
@ -22,7 +34,7 @@
]" ]"
:advanced-query="true" :advanced-query="true"
:toolbar-configure="{ noIcon: false }" :toolbar-configure="{ noIcon: false }"
:toolbar-actions="['query', 'reset', 'separator', 'view', 'separator', 'export']" :toolbar-actions="['query', 'reset', 'separator', 'expand', 'view', 'separator', 'export']"
:columns="[ :columns="[
{ {
width: 400, width: 400,
@ -105,8 +117,10 @@
</w-grid> </w-grid>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref } from 'vue';
import { Environment, Formater, CorporationAuditorEntityManager } from 'platform-core'; import { Environment, Formater, CorporationAuditorEntityManager } from 'platform-core';
import { EngineEnums } from '@/views/shared/enums/EngineEnums'; import { EngineEnums } from '@/views/shared/enums/EngineEnums';
const treeGridRef = ref();
await EngineEnums.init(); await EngineEnums.init();
</script> </script>

18
io.sc.engine.rule.frontend/src/views/shared/BloodRelationshipDialog.vue

@ -1,13 +1,25 @@
<template> <template>
<w-dialog ref="dialogRef" width="900px" height="500px" :can-maximize="false" :title="$t('re.resources.grid.toolbar.viewBloodRelationship')"> <w-dialog ref="dialogRef" width="1120px" height="600px" :can-maximize="false" :title="$t('re.resources.grid.toolbar.viewBloodRelationship')">
<div class="pt-2" style="height: 100%"> <div class="pt-2" style="height: 100%">
<w-grid <w-grid
ref="gridRef" ref="gridRef"
dense-body dense-body
:title="$t('re.resources.grid.title')" :title="$t('re.resources.grid.title')"
:config-button="true" :config-button="true"
:tree="true"
:tree-icon="
(row: any) => {
if (row.type === 'FOLDER') {
return { name: 'folder', color: 'amber' };
} else if (row.type === 'MODEL') {
return { name: 'bi-boxes' };
} else {
return { name: row.icon };
}
}
"
selection="multiple" selection="multiple"
:checkbox-selection="true" :checkbox-selection="false"
:fetch-data-url=" :fetch-data-url="
Environment.apiContextPath( Environment.apiContextPath(
'/api/re/blood/findResourcesByIndicator?libCode=' + '/api/re/blood/findResourcesByIndicator?libCode=' +
@ -19,7 +31,7 @@
) )
" "
:toolbar-configure="{ noIcon: false }" :toolbar-configure="{ noIcon: false }"
:toolbar-actions="['refresh', 'separator', 'view', 'separator', 'export']" :toolbar-actions="['refresh', 'separator', 'expand', 'view', 'separator', 'export']"
:columns="[ :columns="[
{ {
width: 400, width: 400,

32
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/blood/service/impl/BloodServiceImpl.java

@ -6,6 +6,7 @@ import io.sc.engine.rule.server.model.entity.parameter.IndicatorParameterEntity;
import io.sc.engine.rule.server.model.repository.ParameterRepository; 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.ModelService;
import io.sc.engine.rule.server.model.service.ParameterService; import io.sc.engine.rule.server.model.service.ParameterService;
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.service.ResourceService;
import io.sc.engine.rule.server.resource.vo.ResourceVo; import io.sc.engine.rule.server.resource.vo.ResourceVo;
import io.sc.platform.orm.service.support.QueryParameter; import io.sc.platform.orm.service.support.QueryParameter;
@ -52,11 +53,20 @@ public class BloodServiceImpl implements BloodService {
return Collections.emptyList(); return Collections.emptyList();
} }
// 获取参数对应的资源 IDS // 获取参数对应的资源及父资源 IDS
Set<String> resourceIds =new LinkedHashSet<>(); Set<String> resourceIds =new LinkedHashSet<>();
if (!parameterIds.isEmpty()) { if (!parameterIds.isEmpty()) {
for (String id : parameterIds) { for (String id : parameterIds) {
resourceIds.add(modelService.findRootModelByParameterId(id).getResource().getId()); modelService.findRootModelByParameterId(id).getResource();
ResourceEntity resourceEntity =modelService.findRootModelByParameterId(id).getResource();
if(resourceEntity!=null) {
resourceIds.add(resourceEntity.getId());
ResourceEntity parentResourceEntity =resourceEntity.getParent();
while(parentResourceEntity!=null){
resourceIds.add(parentResourceEntity.getId());
parentResourceEntity =parentResourceEntity.getParent();
}
}
} }
} }
if(resourceIds==null || resourceIds.isEmpty()){ if(resourceIds==null || resourceIds.isEmpty()){
@ -70,9 +80,10 @@ public class BloodServiceImpl implements BloodService {
List<Criteria> criterias =new ArrayList<>(); List<Criteria> criterias =new ArrayList<>();
criterias.add(inSet); criterias.add(inSet);
queryParameter.setCriterias(criterias); queryParameter.setCriterias(criterias);
return EntityVoUtil.toVo(resourceService.list(queryParameter)); List<ResourceEntity> resourceEntities =resourceService.list(queryParameter);
return EntityVoUtil.toVo(resourceEntities);
} }
@Override @Override
@ -102,11 +113,20 @@ public class BloodServiceImpl implements BloodService {
return Collections.emptyList(); return Collections.emptyList();
} }
// 获取参数对应的资源 IDS // 获取参数对应的资源及父资源 IDS
Set<String> resourceIds =new LinkedHashSet<>(); Set<String> resourceIds =new LinkedHashSet<>();
if (!parameterIds.isEmpty()) { if (!parameterIds.isEmpty()) {
for (String id : parameterIds) { for (String id : parameterIds) {
resourceIds.add(modelService.findRootModelByParameterId(id).getResource().getId()); modelService.findRootModelByParameterId(id).getResource();
ResourceEntity resourceEntity =modelService.findRootModelByParameterId(id).getResource();
if(resourceEntity!=null) {
resourceIds.add(resourceEntity.getId());
ResourceEntity parentResourceEntity =resourceEntity.getParent();
while(parentResourceEntity!=null){
resourceIds.add(parentResourceEntity.getId());
parentResourceEntity =parentResourceEntity.getParent();
}
}
} }
} }
if(resourceIds==null || resourceIds.isEmpty()){ if(resourceIds==null || resourceIds.isEmpty()){

Loading…
Cancel
Save