diff --git a/backend/framework/provider/src/main/java/io/metersphere/dto/BugProviderDTO.java b/backend/framework/provider/src/main/java/io/metersphere/dto/BugProviderDTO.java new file mode 100644 index 0000000000..ae482bb236 --- /dev/null +++ b/backend/framework/provider/src/main/java/io/metersphere/dto/BugProviderDTO.java @@ -0,0 +1,38 @@ +package io.metersphere.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author wx + */ +@Data +public class BugProviderDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Schema(description = "缺陷id") + private String id; + + @Schema(description = "缺陷名称") + private String name; + + @Schema(description = "处理人") + private String createUser; + + @Schema(description = "处理人姓名") + private String createUserName; + + @Schema(description = "缺陷状态") + private String status; + + @Schema(description = "标签") + private String tags; + + @Schema(description = "创建时间") + private Long createTime; +} diff --git a/backend/framework/provider/src/main/java/io/metersphere/provider/BaseAssociateBugProvider.java b/backend/framework/provider/src/main/java/io/metersphere/provider/BaseAssociateBugProvider.java new file mode 100644 index 0000000000..f0776e4432 --- /dev/null +++ b/backend/framework/provider/src/main/java/io/metersphere/provider/BaseAssociateBugProvider.java @@ -0,0 +1,51 @@ +package io.metersphere.provider; + +import io.metersphere.dto.BugProviderDTO; +import io.metersphere.request.AssociateBugRequest; +import io.metersphere.request.BugPageProviderRequest; + +import java.util.List; + +/** + * @author wx + */ +public interface BaseAssociateBugProvider { + + /** + * 获取尚未关联的缺陷列表 + * + * @param sourceType 关联关系表表名 + * @param sourceName 关联关系表主动关联方字段名称 + * @param bugColumnName 缺陷id 在关联关系表的字段名称 + * @param bugPageProviderRequest 缺陷搜索条件 + * @return List + */ + List getBugList(String sourceType, String sourceName, String bugColumnName, BugPageProviderRequest bugPageProviderRequest); + + + /** + * 获取选中的缺陷id 列表 + * + * @param request request + * @param deleted deleted + * @return + */ + List getSelectBugs(AssociateBugRequest request, boolean deleted); + + + /** + * 关联用例处理 + * + * @param ids 缺陷id集合 + * @param userId 用户id + * @param caseId 用例id + */ + void handleAssociateBug(List ids, String userId, String caseId); + + /** + * 取消关联缺陷 + * + * @param id + */ + void disassociateBug(String id); +} diff --git a/backend/framework/provider/src/main/java/io/metersphere/request/AssociateBugRequest.java b/backend/framework/provider/src/main/java/io/metersphere/request/AssociateBugRequest.java new file mode 100644 index 0000000000..012feeb89c --- /dev/null +++ b/backend/framework/provider/src/main/java/io/metersphere/request/AssociateBugRequest.java @@ -0,0 +1,41 @@ +package io.metersphere.request; + +import io.metersphere.validation.groups.Created; +import io.metersphere.validation.groups.Updated; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + +import java.util.List; + +/** + * @author wx + */ +@Data +public class AssociateBugRequest extends BaseProviderCondition { + + @Schema(description = "不处理的ID") + List excludeIds; + + @Schema(description = "选择的ID", requiredMode = Schema.RequiredMode.REQUIRED) + @Valid + private List< + @NotBlank(message = "{id must not be blank}", groups = {Created.class, Updated.class}) + String + > selectIds; + + @Schema(description = "是否选择所有数据") + private boolean selectAll; + + + @Schema(description = "要关联的用例选择的项目id", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{functional_case.project_id.not_blank}") + private String projectId; + + @Schema(description = "用例id", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{functional_case.id.not_blank}") + private String caseId; + + +} diff --git a/backend/framework/provider/src/main/java/io/metersphere/request/BugPageProviderRequest.java b/backend/framework/provider/src/main/java/io/metersphere/request/BugPageProviderRequest.java new file mode 100644 index 0000000000..a4687d6057 --- /dev/null +++ b/backend/framework/provider/src/main/java/io/metersphere/request/BugPageProviderRequest.java @@ -0,0 +1,75 @@ +package io.metersphere.request; + +import com.google.common.base.CaseFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Pattern; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.commons.lang3.StringUtils; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; +import java.util.Map; + +/** + * @author wx + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class BugPageProviderRequest implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Min(value = 1, message = "当前页码必须大于0") + @Schema(description = "当前页码") + private int current; + + @Min(value = 5, message = "每页显示条数必须不小于5") + @Max(value = 500, message = "每页显示条数不能大于500") + @Schema(description = "每页显示条数") + private int pageSize; + + @Schema(description = "排序字段(model中的字段 : asc/desc)") + private Map<@Valid @Pattern(regexp = "^[A-Za-z]+$") String, @Valid @NotBlank String> sort; + + @Schema(description = "关键字") + private String keyword; + + @Schema(description = "匹配模式 所有/任一", allowableValues = {"AND", "OR"}) + private String searchMode = "AND"; + + @Schema(description = "过滤字段") + private Map> filter; + + @Schema(description = "高级搜索") + private Map combine; + + @Schema(description = "项目ID", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{functional_case.project_id.not_blank}") + private String projectId; + + @Schema(description = "关联关系表里主ID eg:功能用例关联缺陷时为功能用例id", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{functional_case.id.not_blank}") + private String sourceId; + + public String getSortString() { + if (sort == null || sort.isEmpty()) { + return null; + } + StringBuilder sb = new StringBuilder(); + for (Map.Entry entry : sort.entrySet()) { + String column = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, entry.getKey()); + sb.append(column) + .append(StringUtils.SPACE) + .append(StringUtils.equalsIgnoreCase(entry.getValue(), "DESC") ? "DESC" : "ASC") + .append(","); + } + return sb.substring(0, sb.length() - 1); + } +} diff --git a/backend/services/bug-management/pom.xml b/backend/services/bug-management/pom.xml index dcf9d28afb..8f87953caa 100644 --- a/backend/services/bug-management/pom.xml +++ b/backend/services/bug-management/pom.xml @@ -18,6 +18,11 @@ metersphere-sdk ${revision} + + io.metersphere + metersphere-provider + ${revision} + io.metersphere metersphere-system-setting diff --git a/backend/services/bug-management/src/main/java/io/metersphere/bug/mapper/ExtBugMapper.java b/backend/services/bug-management/src/main/java/io/metersphere/bug/mapper/ExtBugMapper.java index 4371e314a5..b75b071de8 100644 --- a/backend/services/bug-management/src/main/java/io/metersphere/bug/mapper/ExtBugMapper.java +++ b/backend/services/bug-management/src/main/java/io/metersphere/bug/mapper/ExtBugMapper.java @@ -4,6 +4,9 @@ import io.metersphere.bug.dto.request.BugBatchUpdateRequest; import io.metersphere.bug.dto.request.BugPageRequest; import io.metersphere.bug.dto.response.BugDTO; import io.metersphere.bug.dto.response.BugTagEditDTO; +import io.metersphere.dto.BugProviderDTO; +import io.metersphere.request.AssociateBugRequest; +import io.metersphere.request.BugPageProviderRequest; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -44,6 +47,7 @@ public interface ExtBugMapper { /** * 获取缺陷标签列表 + * * @param ids 缺陷ID集合 * @return 缺陷标签列表 */ @@ -51,8 +55,13 @@ public interface ExtBugMapper { /** * 批量更新缺陷 + * * @param request 请求参数 - * @param ids 缺陷ID集合 + * @param ids 缺陷ID集合 */ void batchUpdate(@Param("request") BugBatchUpdateRequest request, @Param("ids") List ids); + + List listByProviderRequest(@Param("table") String sourceType, @Param("sourceName") String sourceName, @Param("bugColumnName") String bugColumnName, @Param("request") BugPageProviderRequest bugPageProviderRequest, @Param("deleted") boolean deleted); + + List getIdsByProvider(@Param("request") AssociateBugRequest request, @Param("deleted") boolean deleted); } diff --git a/backend/services/bug-management/src/main/java/io/metersphere/bug/mapper/ExtBugMapper.xml b/backend/services/bug-management/src/main/java/io/metersphere/bug/mapper/ExtBugMapper.xml index 3f40a07b22..8d036af212 100644 --- a/backend/services/bug-management/src/main/java/io/metersphere/bug/mapper/ExtBugMapper.xml +++ b/backend/services/bug-management/src/main/java/io/metersphere/bug/mapper/ExtBugMapper.xml @@ -188,5 +188,52 @@ + + + + + + + + + and b.project_id = #{request.projectId} + + + and ( + b.title like concat('%', #{request.keyword},'%') + or b.num like concat('%', #{request.keyword},'%') + ) + + + + + + diff --git a/backend/services/bug-management/src/main/java/io/metersphere/bug/provider/AssociateBugProvider.java b/backend/services/bug-management/src/main/java/io/metersphere/bug/provider/AssociateBugProvider.java new file mode 100644 index 0000000000..b348f36dee --- /dev/null +++ b/backend/services/bug-management/src/main/java/io/metersphere/bug/provider/AssociateBugProvider.java @@ -0,0 +1,70 @@ +package io.metersphere.bug.provider; + + +import io.metersphere.bug.domain.BugRelationCase; +import io.metersphere.bug.mapper.BugRelationCaseMapper; +import io.metersphere.bug.mapper.ExtBugMapper; +import io.metersphere.bug.service.BugRelateCaseService; +import io.metersphere.dto.BugProviderDTO; +import io.metersphere.provider.BaseAssociateBugProvider; +import io.metersphere.request.AssociateBugRequest; +import io.metersphere.request.BugPageProviderRequest; +import io.metersphere.system.uid.IDGenerator; +import jakarta.annotation.Resource; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + + +@Service +public class AssociateBugProvider implements BaseAssociateBugProvider { + @Resource + private ExtBugMapper extBugMapper; + @Resource + private BugRelationCaseMapper bugRelationCaseMapper; + @Resource + private BugRelateCaseService bugRelateCaseService; + + + @Override + public List getBugList(String sourceType, String sourceName, String bugColumnName, BugPageProviderRequest bugPageProviderRequest) { + return extBugMapper.listByProviderRequest(sourceType, sourceName, bugColumnName, bugPageProviderRequest, false); + } + + @Override + public List getSelectBugs(AssociateBugRequest request, boolean deleted) { + if (request.isSelectAll()) { + List ids = extBugMapper.getIdsByProvider(request, deleted); + if (CollectionUtils.isNotEmpty(request.getExcludeIds())) { + ids.removeAll(request.getExcludeIds()); + } + return ids; + } else { + return request.getSelectIds(); + } + } + + @Override + public void handleAssociateBug(List ids, String userId, String caseId) { + List list = new ArrayList<>(); + ids.forEach(id -> { + BugRelationCase bugRelationCase = new BugRelationCase(); + bugRelationCase.setId(IDGenerator.nextStr()); + bugRelationCase.setBugId(id); + bugRelationCase.setCaseId(caseId); + bugRelationCase.setCaseType("FUNCTIONAL"); + bugRelationCase.setCreateUser(userId); + bugRelationCase.setCreateTime(System.currentTimeMillis()); + bugRelationCase.setUpdateTime(System.currentTimeMillis()); + list.add(bugRelationCase); + }); + bugRelationCaseMapper.batchInsert(list); + } + + @Override + public void disassociateBug(String id) { + bugRelateCaseService.unRelate(id); + } +} diff --git a/backend/services/bug-management/src/test/java/io/metersphere/bug/controller/AssociateBugProviderTests.java b/backend/services/bug-management/src/test/java/io/metersphere/bug/controller/AssociateBugProviderTests.java new file mode 100644 index 0000000000..6e8bd8c80a --- /dev/null +++ b/backend/services/bug-management/src/test/java/io/metersphere/bug/controller/AssociateBugProviderTests.java @@ -0,0 +1,79 @@ +package io.metersphere.bug.controller; + +import io.metersphere.bug.provider.AssociateBugProvider; +import io.metersphere.dto.BugProviderDTO; +import io.metersphere.request.AssociateBugRequest; +import io.metersphere.request.BugPageProviderRequest; +import io.metersphere.sdk.util.JSON; +import io.metersphere.system.base.BaseTest; +import jakarta.annotation.Resource; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.jdbc.Sql; +import org.springframework.test.context.jdbc.SqlConfig; + +import java.util.List; + +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) +@AutoConfigureMockMvc +public class AssociateBugProviderTests extends BaseTest { + + @Resource + private AssociateBugProvider associateBugProvider; + + @Test + @Order(1) + @Sql(scripts = {"/dml/init_bug_relation_case.sql"}, config = @SqlConfig(encoding = "utf-8", transactionMode = SqlConfig.TransactionMode.ISOLATED)) + public void getBugList() throws Exception { + BugPageProviderRequest request = new BugPageProviderRequest(); + request.setSourceId("wx_associate_case_id_1"); + request.setProjectId("project_wx_associate_test"); + request.setCurrent(1); + request.setPageSize(10); + List bugList = associateBugProvider.getBugList("bug_relation_case", "case_id", "bug_id", request); + String jsonString = JSON.toJSONString(bugList); + System.out.println(jsonString); + } + + @Test + @Order(2) + public void getSelectBugs() throws Exception { + AssociateBugRequest request = new AssociateBugRequest(); + request.setCaseId("wx_associate_case_id_1"); + request.setProjectId("project_wx_associate_test"); + request.setSelectAll(true); + List list = associateBugProvider.getSelectBugs(request, false); + String jsonString = JSON.toJSONString(list); + System.out.println(jsonString); + + request.setExcludeIds(List.of("bug_id_3")); + List list1 = associateBugProvider.getSelectBugs(request, false); + String jsonString1 = JSON.toJSONString(list1); + System.out.println(jsonString1); + + request.setSelectAll(false); + request.setSelectIds(List.of("bug_id_1", "bug_id_2")); + List list2 = associateBugProvider.getSelectBugs(request, false); + String jsonString2 = JSON.toJSONString(list2); + System.out.println(jsonString2); + + } + + + @Test + @Order(3) + public void testAssociateBug() throws Exception { + associateBugProvider.handleAssociateBug(List.of("bug_id_1", "bug_id_2"), "wx", "wx_associate_case_id_1"); + } + + @Test + @Order(4) + public void testDisassociateBug() throws Exception { + associateBugProvider.disassociateBug("wx_test_id_1"); + } +} diff --git a/backend/services/bug-management/src/test/resources/dml/init_bug_relation_case.sql b/backend/services/bug-management/src/test/resources/dml/init_bug_relation_case.sql new file mode 100644 index 0000000000..fbe217f6ac --- /dev/null +++ b/backend/services/bug-management/src/test/resources/dml/init_bug_relation_case.sql @@ -0,0 +1,9 @@ +INSERT INTO bug (id, num, title, handle_users, handle_user, create_user, create_time, + update_user, update_time, delete_user, delete_time, project_id, template_id, platform, status, tag, platform_bug_id, deleted) VALUES + ('bug_id_1', 100000, 'default-bug', 'oasis', 'oasis', 'admin', UNIX_TIMESTAMP() * 1000, 'admin', UNIX_TIMESTAMP() * 1000, 'admin', UNIX_TIMESTAMP() * 1000, 'project_wx_associate_test"', 'bug-template-id', 'Local', 'open', 'default-tag', null, 0), + ('bug_id_2', 100001, 'default-bug', 'oasis', 'oasis', 'admin', UNIX_TIMESTAMP() * 1000, 'admin', UNIX_TIMESTAMP() * 1000, 'admin', UNIX_TIMESTAMP() * 1000, 'project_wx_associate_test"', 'bug-template-id', 'Local', 'open', 'default-tag', null, 0); + +INSERT INTO bug_relation_case(id, case_id, bug_id, case_type, test_plan_id, test_plan_case_id, create_user, create_time, update_time) +VALUES ('wx_test_id_1', 'wx_1', 'bug_id_1', 'FUNCTIONAL', null, null, 'admin', UNIX_TIMESTAMP() * 1000, UNIX_TIMESTAMP() * 1000), + ('wx_test_id_2', 'wx_2', 'bug_id_1', 'FUNCTIONAL', 'test-plan-id', 'bug_relate_case', 'admin', UNIX_TIMESTAMP() * 1000, UNIX_TIMESTAMP() * 1000), + ('wx_test_id_3', 'wx_3', 'bug_id_2', 'FUNCTIONAL', 'test-plan-id', 'bug_relate_case-1', 'admin', UNIX_TIMESTAMP() * 1000, UNIX_TIMESTAMP() * 1000); \ No newline at end of file diff --git a/backend/services/case-management/src/main/java/io/metersphere/functional/controller/FunctionalCaseRelationshipController.java b/backend/services/case-management/src/main/java/io/metersphere/functional/controller/FunctionalCaseRelationshipController.java index 0b2e145886..a98b97279b 100644 --- a/backend/services/case-management/src/main/java/io/metersphere/functional/controller/FunctionalCaseRelationshipController.java +++ b/backend/services/case-management/src/main/java/io/metersphere/functional/controller/FunctionalCaseRelationshipController.java @@ -76,6 +76,9 @@ public class FunctionalCaseRelationshipController { @GetMapping("/delete/{id}") + @Operation(summary = "用例管理-功能用例-用例详情-前后置关系-取消关联") + @RequiresPermissions(PermissionConstants.FUNCTIONAL_CASE_READ_UPDATE) + @CheckOwner(resourceId = "#id", resourceType = "functional_case") public void delete(@PathVariable("id") String id) { functionalCaseRelationshipEdgeService.delete(id); } diff --git a/backend/services/case-management/src/main/java/io/metersphere/functional/controller/FunctionalTestCaseController.java b/backend/services/case-management/src/main/java/io/metersphere/functional/controller/FunctionalTestCaseController.java index aa4534dd5f..602a8cb1f1 100644 --- a/backend/services/case-management/src/main/java/io/metersphere/functional/controller/FunctionalTestCaseController.java +++ b/backend/services/case-management/src/main/java/io/metersphere/functional/controller/FunctionalTestCaseController.java @@ -2,6 +2,7 @@ package io.metersphere.functional.controller; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; +import io.metersphere.dto.BugProviderDTO; import io.metersphere.dto.TestCaseProviderDTO; import io.metersphere.functional.dto.FunctionalCaseTestDTO; import io.metersphere.functional.request.AssociateCaseModuleRequest; @@ -9,9 +10,7 @@ import io.metersphere.functional.request.DisassociateOtherCaseRequest; import io.metersphere.functional.request.FunctionalCaseTestRequest; import io.metersphere.functional.service.FunctionalCaseLogService; import io.metersphere.functional.service.FunctionalTestCaseService; -import io.metersphere.request.AssociateCaseModuleProviderRequest; -import io.metersphere.request.AssociateOtherCaseRequest; -import io.metersphere.request.TestCasePageProviderRequest; +import io.metersphere.request.*; import io.metersphere.sdk.constants.PermissionConstants; import io.metersphere.system.dto.sdk.BaseTreeNode; import io.metersphere.system.log.annotation.Log; @@ -27,10 +26,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.shiro.authz.annotation.Logical; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; @@ -74,7 +70,7 @@ public class FunctionalTestCaseController { @RequiresPermissions(PermissionConstants.PROJECT_API_DEFINITION_READ) @CheckOwner(resourceId = "#request.sourceId", resourceType = "functional_case") public void associateCase(@Validated @RequestBody AssociateOtherCaseRequest request) { - functionalTestCaseService.associateCase(request, false, SessionUtils.getUserId()); + functionalTestCaseService.associateCase(request, false, SessionUtils.getUserId()); } @PostMapping("/disassociate/case") @@ -83,7 +79,7 @@ public class FunctionalTestCaseController { @RequiresPermissions(PermissionConstants.PROJECT_API_DEFINITION_READ) @CheckOwner(resourceId = "#request.projectId", resourceType = "project") public void disassociateCase(@Validated @RequestBody DisassociateOtherCaseRequest request) { - functionalTestCaseService.disassociateCase(request); + functionalTestCaseService.disassociateCase(request); } @@ -97,5 +93,31 @@ public class FunctionalTestCaseController { } + @PostMapping("/associate/bug/page") + @Operation(summary = "用例管理-功能用例-关联其他用例-获取缺陷列表") + @RequiresPermissions(value = {PermissionConstants.FUNCTIONAL_CASE_READ_ADD, PermissionConstants.FUNCTIONAL_CASE_READ_UPDATE, PermissionConstants.FUNCTIONAL_CASE_READ_DELETE}, logical = Logical.OR) + @CheckOwner(resourceId = "#request.getProjectId", resourceType = "project") + public Pager> associateBugList(@Validated @RequestBody BugPageProviderRequest request) { + Page page = PageHelper.startPage(request.getCurrent(), request.getPageSize(), + StringUtils.isNotBlank(request.getSortString()) ? request.getSortString() : "create_time desc"); + return PageUtils.setPageInfo(page, functionalTestCaseService.bugPage(request)); + } + + @PostMapping("/associate/bug") + @Operation(summary = "用例管理-功能用例-关联其他用例-关联缺陷") + @RequiresPermissions(PermissionConstants.FUNCTIONAL_CASE_READ_ADD) + @CheckOwner(resourceId = "#request.caseId", resourceType = "functional_case") + public void associateBug(@Validated @RequestBody AssociateBugRequest request) { + functionalTestCaseService.associateBug(request, false, SessionUtils.getUserId()); + } + + @GetMapping("/disassociate/bug/{id}") + @Operation(summary = "用例管理-功能用例-关联其他用例-取消关联缺陷") + @Log(type = OperationLogType.DISASSOCIATE, expression = "#msClass.disassociateBugLog(#id)", msClass = FunctionalCaseLogService.class) + @RequiresPermissions(PermissionConstants.FUNCTIONAL_CASE_READ_ADD) + @CheckOwner(resourceId = "#id", resourceType = "functional_case") + public void disassociateBug(@PathVariable String id) { + functionalTestCaseService.disassociateBug(id); + } } diff --git a/backend/services/case-management/src/main/java/io/metersphere/functional/mapper/ExtCaseReviewFunctionalCaseMapper.xml b/backend/services/case-management/src/main/java/io/metersphere/functional/mapper/ExtCaseReviewFunctionalCaseMapper.xml index bf6ac75e5e..a7c8728e7c 100644 --- a/backend/services/case-management/src/main/java/io/metersphere/functional/mapper/ExtCaseReviewFunctionalCaseMapper.xml +++ b/backend/services/case-management/src/main/java/io/metersphere/functional/mapper/ExtCaseReviewFunctionalCaseMapper.xml @@ -69,6 +69,15 @@ + + functional_case.module_id in + + #{moduleId} + + + + + ( functional_case.name like concat('%', #{request.keyword},'%') diff --git a/backend/services/case-management/src/main/java/io/metersphere/functional/mapper/ExtCaseReviewFunctionalCaseUserMapper.xml b/backend/services/case-management/src/main/java/io/metersphere/functional/mapper/ExtCaseReviewFunctionalCaseUserMapper.xml index c88ca52002..a818f35b71 100644 --- a/backend/services/case-management/src/main/java/io/metersphere/functional/mapper/ExtCaseReviewFunctionalCaseUserMapper.xml +++ b/backend/services/case-management/src/main/java/io/metersphere/functional/mapper/ExtCaseReviewFunctionalCaseUserMapper.xml @@ -4,9 +4,9 @@