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 91059b9e..67f7549f 100644
--- a/io.sc.engine.rule.frontend/src/views/blood/Blood.vue
+++ b/io.sc.engine.rule.frontend/src/views/blood/Blood.vue
@@ -6,7 +6,7 @@
:config-button="true"
selection="multiple"
:checkbox-selection="true"
- :fetch-data-url="Environment.apiContextPath('/api/re/blood/findByCodeOrNameContains')"
+ :fetch-data-url="Environment.apiContextPath('/api/re/blood/findResourcesByParameterCodeAndNameAndType')"
:sort-by="['name']"
:query-form-cols-num="4"
:query-form-fields="[
diff --git a/io.sc.engine.rule.frontend/src/views/lib/IndicatorGrid.vue b/io.sc.engine.rule.frontend/src/views/lib/IndicatorGrid.vue
index 08a88836..36d19070 100644
--- a/io.sc.engine.rule.frontend/src/views/lib/IndicatorGrid.vue
+++ b/io.sc.engine.rule.frontend/src/views/lib/IndicatorGrid.vue
@@ -94,8 +94,8 @@
enableIf: (args) => {
return args.selected;
},
- click: (args) => {
- bloodRelationshipDialogRef.open();
+ click: (args: any) => {
+ bloodRelationshipDialogRef.open(lib, args.selected);
},
},
],
diff --git a/io.sc.engine.rule.frontend/src/views/lib/LibGrid.vue b/io.sc.engine.rule.frontend/src/views/lib/LibGrid.vue
index b9d713d1..25c90ed7 100644
--- a/io.sc.engine.rule.frontend/src/views/lib/LibGrid.vue
+++ b/io.sc.engine.rule.frontend/src/views/lib/LibGrid.vue
@@ -166,7 +166,7 @@
return args.selected && args.selected.type !== 'FOLDER';
},
click: (args: any) => {
- bloodRelationshipDialogRef.open();
+ bloodRelationshipDialogRef.open(args.selected);
},
},
'separator',
diff --git a/io.sc.engine.rule.frontend/src/views/shared/BloodRelationshipDialog.vue b/io.sc.engine.rule.frontend/src/views/shared/BloodRelationshipDialog.vue
index 2fe4b53e..528c598a 100644
--- a/io.sc.engine.rule.frontend/src/views/shared/BloodRelationshipDialog.vue
+++ b/io.sc.engine.rule.frontend/src/views/shared/BloodRelationshipDialog.vue
@@ -1,14 +1,122 @@
-
-
+
+
+
+
+
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 94355545..3bc667ae 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
@@ -5,6 +5,7 @@ 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.data.repository.query.Param;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -17,8 +18,13 @@ import java.util.Locale;
public class BloodWebController {
@Autowired BloodService bloodService;
- @GetMapping("findByCodeOrNameContains")
- public List findByCodeOrNameContains(QueryParameter queryParameter) throws Exception {
- return bloodService.findByCodeOrNameContains(queryParameter);
+ @GetMapping("findResourcesByParameterCodeAndNameAndType")
+ public List findResourcesByParameterCodeAndNameAndType(QueryParameter queryParameter) throws Exception {
+ return bloodService.findResourcesByParameterCodeAndNameAndType(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 273b60e4..d1d876e3 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
@@ -1,11 +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;
+ public List findResourcesByParameterCodeAndNameAndType(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 12ec6879..76207e41 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,13 +1,11 @@
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.entity.parameter.IndicatorParameterEntity;
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;
@@ -17,6 +15,7 @@ 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 org.springframework.util.StringUtils;
import java.util.*;
@@ -28,7 +27,7 @@ public class BloodServiceImpl implements BloodService {
@Autowired private ResourceService resourceService;
@Override
- public List findByCodeOrNameContains(QueryParameter queryParameter) throws Exception {
+ public List findResourcesByParameterCodeAndNameAndType(QueryParameter queryParameter) throws Exception {
if(!queryParameter.existsCriteria()) {
return Collections.emptyList();
}
@@ -75,4 +74,57 @@ public class BloodServiceImpl implements BloodService {
queryParameter.setCriterias(criterias);
return EntityVoUtil.toVo(resourceService.list(queryParameter));
}
+
+ @Override
+ public List findResourcesByIndicator(String libCode, Integer libVersion, String indicatorCode) throws Exception {
+ if(!StringUtils.hasText(libCode) || libVersion==null) {
+ return Collections.emptyList();
+ }
+ // 查询参数
+ List entities =null;
+ if(StringUtils.hasText(indicatorCode)) {
+ entities = parameterService.getRepository().findIndicatorParameterEntityByIndicatorCode(libCode, libVersion, indicatorCode);
+ }else{
+ entities = parameterService.getRepository().findIndicatorParameterEntityByLibCodeAndVersion(libCode, libVersion);
+ }
+ 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 queryParameter =new QueryParameter();
+ queryParameter.setCriterias(criterias);
+ queryParameter.addSortBy("type");
+ queryParameter.addSortBy("namec");
+ queryParameter.addSortBy("version");
+ 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 329c46ab..eafe34d7 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
@@ -40,6 +40,9 @@ public interface ParameterRepository extends DaoRepository findIndicatorParameterEntityByLibCode(@Param("libCode")String libCode);
+
+ @Query("select e from IndicatorParameterEntity e where e.libCode=:libCode and e.libVersion=:libVersion")
+ public List findIndicatorParameterEntityByLibCodeAndVersion(@Param("libCode")String libCode,@Param("libVersion")Integer libVersion);
@Query("select e from IndicatorParameterEntity e where e.libCode=:libCode and e.libVersion=:libVersion and e.indicatorCode=:indicatorCode")
public List findIndicatorParameterEntityByIndicatorCode(@Param("libCode")String libCode,@Param("libVersion")Integer libVersion,@Param("indicatorCode")String indicatorCode);
@@ -55,6 +58,4 @@ 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.platform.jdbc/src/main/java/io/sc/platform/jdbc/util/SqlInjectionPreventer.java b/io.sc.platform.jdbc/src/main/java/io/sc/platform/jdbc/util/SqlInjectionPreventer.java
new file mode 100644
index 00000000..041fa70f
--- /dev/null
+++ b/io.sc.platform.jdbc/src/main/java/io/sc/platform/jdbc/util/SqlInjectionPreventer.java
@@ -0,0 +1,30 @@
+package io.sc.platform.jdbc.util;
+
+/**
+ * 防止 SQL 注入工具类
+ */
+public class SqlInjectionPreventer {
+ private static final String[] STRING_ESCAPED_CHARACTERS = {
+ "'", "\"", "\\", "&", ",", ";", " "
+ };
+
+ public static String escapeString(String input) {
+ StringBuilder escaped = new StringBuilder();
+ for (char c : input.toCharArray()) {
+ if (isEscapeCharacter(c)) {
+ escaped.append('\\');
+ }
+ escaped.append(c);
+ }
+ return escaped.toString();
+ }
+
+ public static boolean isEscapeCharacter(char c) {
+ for (String escapeChar : STRING_ESCAPED_CHARACTERS) {
+ if (c == escapeChar.charAt(0)) {
+ return true;
+ }
+ }
+ return false;
+ }
+}