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