diff --git a/backend/framework/sdk/src/main/java/io/metersphere/sdk/dto/CombineCondition.java b/backend/framework/sdk/src/main/java/io/metersphere/sdk/dto/CombineCondition.java
index 161772cc00..ff59afefed 100644
--- a/backend/framework/sdk/src/main/java/io/metersphere/sdk/dto/CombineCondition.java
+++ b/backend/framework/sdk/src/main/java/io/metersphere/sdk/dto/CombineCondition.java
@@ -27,12 +27,21 @@ public class CombineCondition {
@NotNull
private Boolean customField = false;
+ @Schema(description = "自定义字段的类型")
+ private String customFieldType;
+
@Schema(description = "操作符",
allowableValues = {"IN", "NOT_IN", "BETWEEN", "GT", "LT", "COUNT_GT", "COUNT_LT", "EQUALS", "NOT_EQUALS", "CONTAINS", "NOT_CONTAINS", "EMPTY", "NOT_EMPTY"})
@EnumValue(enumClass = CombineConditionOperator.class)
private String operator;
public boolean valid() {
+ if (StringUtils.isBlank(name) || StringUtils.isBlank(operator)) {
+ return false;
+ }
+ if (StringUtils.equalsAny(operator, CombineConditionOperator.EMPTY.name(), CombineConditionOperator.NOT_EMPTY.name())) {
+ return true;
+ }
if (value == null) {
return false;
}
@@ -42,7 +51,7 @@ public class CombineCondition {
if (value instanceof String valueStr && StringUtils.isBlank(valueStr)) {
return false;
}
- return StringUtils.isNotBlank(name) && StringUtils.isNotBlank(operator);
+ return true;
}
public enum CombineConditionOperator {
diff --git a/backend/services/case-management/src/main/java/io/metersphere/functional/mapper/ExtFunctionalCaseMapper.xml b/backend/services/case-management/src/main/java/io/metersphere/functional/mapper/ExtFunctionalCaseMapper.xml
index c058e220ba..a709245b00 100644
--- a/backend/services/case-management/src/main/java/io/metersphere/functional/mapper/ExtFunctionalCaseMapper.xml
+++ b/backend/services/case-management/src/main/java/io/metersphere/functional/mapper/ExtFunctionalCaseMapper.xml
@@ -315,6 +315,12 @@
+
+
+
+
+
+
functional_case.id in (
select case_id from functional_case_demand where
diff --git a/backend/services/system-setting/src/main/java/io/metersphere/system/mapper/BaseMapper.xml b/backend/services/system-setting/src/main/java/io/metersphere/system/mapper/BaseMapper.xml
index 3872ac45fc..67cfdafc3b 100644
--- a/backend/services/system-setting/src/main/java/io/metersphere/system/mapper/BaseMapper.xml
+++ b/backend/services/system-setting/src/main/java/io/metersphere/system/mapper/BaseMapper.xml
@@ -46,7 +46,7 @@
-
+
@@ -59,10 +59,20 @@
field_id = #{condition.name}
and
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -71,6 +81,48 @@
+
+
+
+
+
+ JSON_CONTAINS(${column}, JSON_ARRAY(#{tag}))
+
+
+
+
+ JSON_CONTAINS(${column}, JSON_ARRAY(#{tag}))
+
+
+
+ ${column} is null or ${column} = '[]' or
+
+ !JSON_CONTAINS(${column}, JSON_ARRAY(#{tag}))
+
+
+
+ ${column} is null or ${column} = '[]' or
+
+ !JSON_CONTAINS(${column}, JSON_ARRAY(#{tag}))
+
+
+
+ JSON_LENGTH(${column}) > #{condition.value}
+
+
+ ${column} is null or ${column} = '[]' or
+ JSON_LENGTH(${column}) < #{condition.value}
+
+
+ ${column} is null or ${column} = '[]'
+
+
+ ${column} is not null and ${column} = '[]'
+
+
+
+
+
@@ -120,10 +172,10 @@
JSON_LENGTH(${column}) < #{condition.value}
- ${column} is null or ${column} #{condition.value} = ''
+ ${column} is null or ${column} = ''
- ${column} is not null and ${column} #{condition.value} = ''
+ ${column} is not null and ${column} != ''
${column} = #{condition.value}
diff --git a/backend/services/system-setting/src/main/java/io/metersphere/system/service/UserViewService.java b/backend/services/system-setting/src/main/java/io/metersphere/system/service/UserViewService.java
index 9310da8df3..d1b1b5272a 100644
--- a/backend/services/system-setting/src/main/java/io/metersphere/system/service/UserViewService.java
+++ b/backend/services/system-setting/src/main/java/io/metersphere/system/service/UserViewService.java
@@ -279,7 +279,7 @@ public class UserViewService {
.andScopeIdEqualTo(scopeId)
.andViewTypeEqualTo(viewType.name());
List customUserViews = userViewMapper.selectByExample(example).stream()
- .sorted(Comparator.comparing(UserView::getPos))
+ .sorted((a, b) -> Comparator.comparing(UserView::getPos).compare(b, a))
.collect(Collectors.toList());
UserViewListGroupedDTO groupedDTO = new UserViewListGroupedDTO();
diff --git a/backend/services/system-setting/src/test/java/io/metersphere/system/controller/UserViewControllerTests.java b/backend/services/system-setting/src/test/java/io/metersphere/system/controller/UserViewControllerTests.java
index 3791b02db9..ed34ddf8e9 100644
--- a/backend/services/system-setting/src/test/java/io/metersphere/system/controller/UserViewControllerTests.java
+++ b/backend/services/system-setting/src/test/java/io/metersphere/system/controller/UserViewControllerTests.java
@@ -181,7 +181,7 @@ public class UserViewControllerTests extends BaseTest {
UserViewListGroupedDTO result = getResultData(mvcResult, UserViewListGroupedDTO.class);
Assertions.assertEquals(result.getInternalViews().size(), 3);
Assertions.assertEquals(result.getCustomViews().size(), 2);
- Assertions.assertEquals(result.getCustomViews().get(0), BeanUtils.copyBean(new UserView(), addUserViewDTO));
+ Assertions.assertEquals(result.getCustomViews().getLast(), BeanUtils.copyBean(new UserView(), addUserViewDTO));
}
@Test