From 7ed9ac62f50962c5ce6a7edd277a01d4c7c4d1f5 Mon Sep 17 00:00:00 2001 From: wangshaoping Date: Thu, 25 Sep 2025 17:01:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E6=A1=86=E6=9E=B6=E5=8F=91?= =?UTF-8?q?=E5=B8=83:=208.2.41=20=20=201.=20=E8=A7=84=E5=88=99=E5=BC=95?= =?UTF-8?q?=E6=93=8E=E5=B0=86=E6=9E=9A=E4=B8=BE=E5=8F=98=E9=87=8F=E6=9B=BF?= =?UTF-8?q?=E6=8D=A2=E4=B8=BA=E6=9E=9A=E4=B8=BE=E5=80=BC=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E7=BB=99=E5=AE=A2=E6=88=B7=E7=AB=AF=E3=80=82=20=20=202.=20?= =?UTF-8?q?=E5=86=B3=E7=AD=96=E5=BC=95=E6=93=8E=E5=A2=9E=E5=8A=A0=E8=A1=80?= =?UTF-8?q?=E7=BC=98=E5=85=B3=E7=B3=BB=E6=9F=A5=E8=AF=A2=20=20=203.=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=20logback=20=E6=97=A5=E5=BF=97=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=20=20=204.=20=E6=8F=90=E4=BE=9B=E7=94=A8=E4=BA=8E?= =?UTF-8?q?=E6=A3=80=E6=B5=8B=20SQL=20=E6=B3=A8=E5=85=A5=E7=9A=84=E8=BE=85?= =?UTF-8?q?=E5=8A=A9=E7=B1=BB=20io.sc.platform.jdbc.util.SqlInjectionPreve?= =?UTF-8?q?nter=20=20=205.=20=E4=BF=AE=E6=94=B9=E8=A1=80=E7=BC=98=E5=85=B3?= =?UTF-8?q?=E7=B3=BB=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6=E4=B8=AD=E6=96=87?= =?UTF-8?q?=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 前端核心发布: 8.2.135 1. 修改错误处理机制 2. 决策引擎增加血缘关系查询,血缘关系采用树状展示 --- .../src/i18n/messages.json | 19 ++- .../src/i18n/messages_tw_CN.json | 19 ++- .../src/i18n/messages_zh_CN.json | 19 ++- .../src/views/blood/Blood.vue | 140 +++------------ .../src/views/blood/Indicator.vue | 123 +++++++++++++ .../src/views/blood/Lib.vue | 117 +++++++++++++ .../src/views/blood/Parameter.vue | 123 +++++++++++++ .../blood/controller/BloodWebController.java | 10 ++ .../server/blood/service/BloodService.java | 4 + .../blood/service/impl/BloodServiceImpl.java | 161 +++++++++++++++--- 10 files changed, 585 insertions(+), 150 deletions(-) create mode 100644 io.sc.engine.rule.frontend/src/views/blood/Indicator.vue create mode 100644 io.sc.engine.rule.frontend/src/views/blood/Lib.vue create mode 100644 io.sc.engine.rule.frontend/src/views/blood/Parameter.vue diff --git a/io.sc.engine.rule.frontend/src/i18n/messages.json b/io.sc.engine.rule.frontend/src/i18n/messages.json index df04c0ac..76924f1b 100644 --- a/io.sc.engine.rule.frontend/src/i18n/messages.json +++ b/io.sc.engine.rule.frontend/src/i18n/messages.json @@ -10,9 +10,22 @@ "menu.engine.rule.testcase": "Test Case Manager", "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.blood.query.tab.parameter": "Query Resource By Parameter", + "re.blood.query.tab.lib": "Query Resource By Lib", + "re.blood.query.tab.indicator": "Query Resource By Indicator", + + "re.blood.query.tab.parameter.code": "Parameter Code", + "re.blood.query.tab.parameter.name": "Parameter Name", + "re.blood.query.tab.parameter.type": "Parameter Type", + + "re.blood.query.tab.lib.code": "Lib Code", + "re.blood.query.tab.lib.name": "Lib Name", + "re.blood.query.tab.lib.version": "Lib Type", + "re.blood.query.tab.lib.type": "Lib Type", + + "re.blood.query.tab.indicator.code": "Indicator Code", + "re.blood.query.tab.indicator.name": "Indicator Name", + "re.blood.query.tab.indicator.type": "Indicator Type", "re.resources.grid.title": "Resources", "re.resources.grid.toolbar.addTop": "Top Folder", 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 88341bc2..3545f761 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 @@ -10,9 +10,22 @@ "menu.engine.rule.testcase": "試算用例", "menu.engine.rule.migration": "數據備份和遷移", - "re.blood.grid.query.code": "參數代碼", - "re.blood.grid.query.name": "參數名稱", - "re.blood.grid.query.type": "參數類型", + "re.blood.query.tab.parameter": "通過參數查詢資源", + "re.blood.query.tab.lib": "通过指标库查找资源", + "re.blood.query.tab.indicator": "通過特征查詢資源", + + "re.blood.query.tab.parameter.code": "參數代碼", + "re.blood.query.tab.parameter.name": "參數名稱", + "re.blood.query.tab.parameter.type": "參數類型", + + "re.blood.query.tab.lib.code": "特征庫代碼", + "re.blood.query.tab.lib.name": "特征庫名稱", + "re.blood.query.tab.lib.version": "特征庫版本", + "re.blood.query.tab.lib.type": "特征庫類型", + + "re.blood.query.tab.indicator.code": "特征代碼", + "re.blood.query.tab.indicator.name": "特征名稱", + "re.blood.query.tab.indicator.type": "特征類型", "re.resources.grid.title": "資源", "re.resources.grid.toolbar.addTop": "頂級文件夾", 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 a9d7d3cf..149eb38a 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 @@ -10,9 +10,22 @@ "menu.engine.rule.testcase": "试算用例管理", "menu.engine.rule.migration": "数据备份和迁移", - "re.blood.grid.query.code": "参数代码", - "re.blood.grid.query.name": "参数名称", - "re.blood.grid.query.type": "参数类型", + "re.blood.query.tab.parameter": "通过 [ 参数 ] 查询资源", + "re.blood.query.tab.lib": "通过 [ 指标库 ] 查找资源", + "re.blood.query.tab.indicator": "通过 [ 特征 ] 查询资源", + + "re.blood.query.tab.parameter.code": "参数代码", + "re.blood.query.tab.parameter.name": "参数名称", + "re.blood.query.tab.parameter.type": "参数类型", + + "re.blood.query.tab.lib.code": "特征库代码", + "re.blood.query.tab.lib.name": "特征库名称", + "re.blood.query.tab.lib.version": "特征库版本", + "re.blood.query.tab.lib.type": "特征库类型", + + "re.blood.query.tab.indicator.code": "特征代码", + "re.blood.query.tab.indicator.name": "特征名称", + "re.blood.query.tab.indicator.type": "特征类型", "re.resources.grid.title": "资源", "re.resources.grid.toolbar.addTop": "顶级文件夹", diff --git a/io.sc.engine.rule.frontend/src/views/blood/Blood.vue b/io.sc.engine.rule.frontend/src/views/blood/Blood.vue index 0bf9f6f2..50c0edfd 100644 --- a/io.sc.engine.rule.frontend/src/views/blood/Blood.vue +++ b/io.sc.engine.rule.frontend/src/views/blood/Blood.vue @@ -1,126 +1,32 @@ diff --git a/io.sc.engine.rule.frontend/src/views/blood/Indicator.vue b/io.sc.engine.rule.frontend/src/views/blood/Indicator.vue new file mode 100644 index 00000000..1b953071 --- /dev/null +++ b/io.sc.engine.rule.frontend/src/views/blood/Indicator.vue @@ -0,0 +1,123 @@ + + diff --git a/io.sc.engine.rule.frontend/src/views/blood/Lib.vue b/io.sc.engine.rule.frontend/src/views/blood/Lib.vue new file mode 100644 index 00000000..fcae54bc --- /dev/null +++ b/io.sc.engine.rule.frontend/src/views/blood/Lib.vue @@ -0,0 +1,117 @@ + + diff --git a/io.sc.engine.rule.frontend/src/views/blood/Parameter.vue b/io.sc.engine.rule.frontend/src/views/blood/Parameter.vue new file mode 100644 index 00000000..973db388 --- /dev/null +++ b/io.sc.engine.rule.frontend/src/views/blood/Parameter.vue @@ -0,0 +1,123 @@ + + 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 index 3bc667ae..9da629ed 100644 --- 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 @@ -23,6 +23,16 @@ public class BloodWebController { return bloodService.findResourcesByParameterCodeAndNameAndType(queryParameter); } + @GetMapping("findResourcesByLibCodeAndVersionAndType") + public List findResourcesByLibCodeAndVersionAndType(QueryParameter queryParameter) throws Exception { + return bloodService.findResourcesByLibCodeAndVersionAndType(queryParameter); + } + + @GetMapping("findResourcesByIndicatorCodeAndNameAndType") + public List findResourcesByIndicatorCodeAndNameAndType(QueryParameter queryParameter) throws Exception { + return bloodService.findResourcesByIndicatorCodeAndNameAndType(queryParameter); + } + @GetMapping("findResourcesByIndicator") public List findResourcesByIndicator(@Param("libCode")String libCode,@Param("libVersion")Integer libVersion,@Param("indicatorCode")String indicatorCode) throws Exception { return bloodService.findResourcesByIndicator(libCode,libVersion,indicatorCode); 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 index d1d876e3..d66e4a50 100644 --- 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 @@ -7,5 +7,9 @@ import java.util.List; public interface BloodService { public List findResourcesByParameterCodeAndNameAndType(QueryParameter queryParameter) throws Exception; + public List findResourcesByLibCodeAndVersionAndType(QueryParameter queryParameter) throws Exception; + public List findResourcesByIndicatorCodeAndNameAndType(QueryParameter queryParameter) throws Exception; + + public List findResourcesByIndicator(String libCode,Integer libVersion,String IndicatorCode) 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 index ab2d0d83..76c4a22e 100644 --- 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 @@ -1,6 +1,11 @@ package io.sc.engine.rule.server.blood.service.impl; +import io.sc.engine.rule.core.po.lib.Indicator; import io.sc.engine.rule.server.blood.service.BloodService; +import io.sc.engine.rule.server.lib.entity.IndicatorEntity; +import io.sc.engine.rule.server.lib.entity.LibEntity; +import io.sc.engine.rule.server.lib.service.IndicatorService; +import io.sc.engine.rule.server.lib.service.LibService; import io.sc.engine.rule.server.model.entity.ParameterEntity; import io.sc.engine.rule.server.model.entity.parameter.IndicatorParameterEntity; import io.sc.engine.rule.server.model.repository.ParameterRepository; @@ -11,6 +16,7 @@ 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.Equals; import io.sc.platform.orm.service.support.criteria.impl.InSet; import io.sc.platform.orm.util.EntityVoUtil; import io.sc.platform.util.ObjectMapperUtil; @@ -22,8 +28,9 @@ 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 LibService libService; + @Autowired private IndicatorService indicatorService; @Autowired private ModelService modelService; @Autowired private ResourceService resourceService; @@ -34,7 +41,7 @@ public class BloodServiceImpl implements BloodService { } // 构造新查询,不排序,因为查询的条件是参数或指标,返回的结果是资源,所以在查询参数时不排序,返回资源时排序 QueryParameter query4Parameter =ObjectMapperUtil.json().readValue(ObjectMapperUtil.json().writeValueAsString(queryParameter),QueryParameter.class); - query4Parameter.setSortBy(null); + query4Parameter.setSortBy(new ArrayList()); // 查询参数 List entities = parameterService.list(query4Parameter); @@ -55,17 +62,15 @@ public class BloodServiceImpl implements BloodService { // 获取参数对应的资源及父资源 IDS Set resourceIds =new LinkedHashSet<>(); - if (!parameterIds.isEmpty()) { - for (String id : parameterIds) { - 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(); - } + for (String id : parameterIds) { + 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(); } } } @@ -86,6 +91,116 @@ public class BloodServiceImpl implements BloodService { return EntityVoUtil.toVo(resourceEntities); } + @Override + public List findResourcesByLibCodeAndVersionAndType(QueryParameter queryParameter) throws Exception { + if(!queryParameter.existsCriteria()) { + return Collections.emptyList(); + } + // 构造新查询,不排序,因为查询的条件是参数或指标,返回的结果是资源,所以在查询参数时不排序,返回资源时排序 + QueryParameter query4Lib =ObjectMapperUtil.json().readValue(ObjectMapperUtil.json().writeValueAsString(queryParameter),QueryParameter.class); + query4Lib.getSortBy().clear(); + + List libEntities =libService.list(query4Lib); + if(libEntities==null || libEntities.isEmpty()){ + return Collections.emptyList(); + } + + // 获取参数 IDS + Set parameterIds = new LinkedHashSet<>(); + for(LibEntity libEntity : libEntities){ + List entities =null; + Equals equalsCriteria =(Equals)query4Lib.getCriteriaByFieldName("version"); + if(equalsCriteria!=null && StringUtils.hasText(equalsCriteria.getValue())) { + entities =parameterService.getRepository().findIndicatorParameterEntityByLibCodeAndVersion(libEntity.getCode(), libEntity.getVersion()); + }else{ + entities =parameterService.getRepository().findIndicatorParameterEntityByLibCode(libEntity.getCode()); + } + if(entities!=null && !entities.isEmpty()){ + for(IndicatorParameterEntity entity : entities) { + parameterIds.add(entity.getId()); + } + } + } + if(parameterIds==null || parameterIds.isEmpty()){ + return Collections.emptyList(); + } + + // 获取参数对应的资源及父资源 IDS + Set resourceIds =new LinkedHashSet<>(); + for (String id : parameterIds) { + 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()){ + return Collections.emptyList(); + } + + // 重新构建查询条件, 并保留排序字段 + InSet inSet =new InSet(); + inSet.setFieldName("id"); + inSet.setValue(resourceIds.toArray(new String[]{})); + + List criterias =new ArrayList<>(); + criterias.add(inSet); + QueryParameter queryParameter2 =new QueryParameter(); + queryParameter2.setCriterias(criterias); + queryParameter2.addSortBy("type"); + queryParameter2.addSortBy("namec"); + queryParameter2.addSortBy("version"); + return EntityVoUtil.toVo(resourceService.list(queryParameter2)); + } + + @Override + public List findResourcesByIndicatorCodeAndNameAndType(QueryParameter queryParameter) throws Exception { + if(!queryParameter.existsCriteria()) { + return Collections.emptyList(); + } + // 构造新查询,不排序,因为查询的条件是参数或指标,返回的结果是资源,所以在查询参数时不排序,返回资源时排序 + QueryParameter query4Indicator =ObjectMapperUtil.json().readValue(ObjectMapperUtil.json().writeValueAsString(queryParameter),QueryParameter.class); + query4Indicator.setSortBy(new ArrayList()); + + // 查询指标 + List entities = indicatorService.list(query4Indicator); + if(entities==null || entities.isEmpty()){ + return Collections.emptyList(); + } + + List resourceIds =new ArrayList<>(); + for (IndicatorEntity entity : entities) { + List vos =findResourcesByIndicator(entity.getLib().getCode(),entity.getLib().getVersion(),entity.getCode()); + if(vos!=null && !vos.isEmpty()){ + for(ResourceVo vo : vos){ + resourceIds.add(vo.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 queryParameter2 =new QueryParameter(); + queryParameter2.setCriterias(criterias); + queryParameter2.addSortBy("type"); + queryParameter2.addSortBy("namec"); + queryParameter2.addSortBy("version"); + return EntityVoUtil.toVo(resourceService.list(queryParameter2)); + } + @Override public List findResourcesByIndicator(String libCode, Integer libVersion, String indicatorCode) throws Exception { if(!StringUtils.hasText(libCode) || libVersion==null) { @@ -115,17 +230,15 @@ public class BloodServiceImpl implements BloodService { // 获取参数对应的资源及父资源 IDS Set resourceIds =new LinkedHashSet<>(); - if (!parameterIds.isEmpty()) { - for (String id : parameterIds) { - 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(); - } + for (String id : parameterIds) { + 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(); } } }