diff --git a/backend/framework/sdk/src/main/java/io/metersphere/sdk/dto/AssociateCaseDTO.java b/backend/framework/sdk/src/main/java/io/metersphere/sdk/dto/AssociateCaseDTO.java new file mode 100644 index 0000000000..87667d2d5c --- /dev/null +++ b/backend/framework/sdk/src/main/java/io/metersphere/sdk/dto/AssociateCaseDTO.java @@ -0,0 +1,32 @@ +package io.metersphere.sdk.dto; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +/** + * @author wx + */ +@Data +public class AssociateCaseDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + //排除的ids + private List excludeIds; + + //选中的ids + private List selectIds; + + //全选的模块 + public List moduleIds; + + public AssociateCaseDTO(List excludeIds, List selectIds, List moduleIds) { + this.excludeIds = excludeIds; + this.selectIds = selectIds; + this.moduleIds = moduleIds; + } +} diff --git a/backend/services/api-test/src/main/java/io/metersphere/api/mapper/ExtApiScenarioMapper.java b/backend/services/api-test/src/main/java/io/metersphere/api/mapper/ExtApiScenarioMapper.java index 2a4568f8db..c35b2eef80 100644 --- a/backend/services/api-test/src/main/java/io/metersphere/api/mapper/ExtApiScenarioMapper.java +++ b/backend/services/api-test/src/main/java/io/metersphere/api/mapper/ExtApiScenarioMapper.java @@ -10,6 +10,7 @@ import io.metersphere.project.dto.ModuleCountDTO; import io.metersphere.project.dto.NodeSortQueryParam; import io.metersphere.request.AssociateOtherCaseRequest; import io.metersphere.request.TestCasePageProviderRequest; +import io.metersphere.sdk.dto.AssociateCaseDTO; import io.metersphere.system.dto.sdk.BaseTreeNode; import org.apache.ibatis.annotations.Param; @@ -82,4 +83,8 @@ public interface ExtApiScenarioMapper { ApiScenario getScenarioByResourceId(String id); ApiScenario getScenarioByReportId(String reportId); + + List selectAllCase(@Param("isRepeat") boolean isRepeat, @Param("projectId") String projectId, @Param("testPlanId") String testPlanId); + + List selectCaseByModules(@Param("isRepeat") boolean isRepeat, @Param("projectId") String projectId, @Param("dto") AssociateCaseDTO dto, @Param("testPlanId") String testPlanId); } diff --git a/backend/services/api-test/src/main/java/io/metersphere/api/mapper/ExtApiScenarioMapper.xml b/backend/services/api-test/src/main/java/io/metersphere/api/mapper/ExtApiScenarioMapper.xml index 65588b3326..03367524cb 100644 --- a/backend/services/api-test/src/main/java/io/metersphere/api/mapper/ExtApiScenarioMapper.xml +++ b/backend/services/api-test/src/main/java/io/metersphere/api/mapper/ExtApiScenarioMapper.xml @@ -676,4 +676,56 @@ + + + + diff --git a/backend/services/api-test/src/main/java/io/metersphere/api/mapper/ExtApiTestCaseMapper.java b/backend/services/api-test/src/main/java/io/metersphere/api/mapper/ExtApiTestCaseMapper.java index db17b59f06..56458a858c 100644 --- a/backend/services/api-test/src/main/java/io/metersphere/api/mapper/ExtApiTestCaseMapper.java +++ b/backend/services/api-test/src/main/java/io/metersphere/api/mapper/ExtApiTestCaseMapper.java @@ -10,6 +10,7 @@ import io.metersphere.project.dto.ModuleCountDTO; import io.metersphere.project.dto.NodeSortQueryParam; import io.metersphere.request.AssociateOtherCaseRequest; import io.metersphere.request.TestCasePageProviderRequest; +import io.metersphere.sdk.dto.AssociateCaseDTO; import io.metersphere.system.dto.sdk.BaseTreeNode; import io.metersphere.system.dto.sdk.OptionDTO; import org.apache.ibatis.annotations.Mapper; @@ -101,4 +102,10 @@ public interface ExtApiTestCaseMapper { ApiTestCase getCaseByResourceId(String resourceId); ApiTestCase getCaseByReportId(String resourceId); + + List selectAllApiCase(@Param("isRepeat") boolean isRepeat, @Param("projectId") String projectId, @Param("testPlanId") String testPlanId); + + List selectCaseByModules(@Param("isRepeat") boolean isRepeat, @Param("projectId") String projectId, @Param("dto") AssociateCaseDTO dto, @Param("testPlanId") String testPlanId); + + List selectCaseByApiModules(@Param("isRepeat") boolean isRepeat, @Param("projectId") String projectId, @Param("dto") AssociateCaseDTO dto, @Param("testPlanId") String testPlanId); } \ No newline at end of file diff --git a/backend/services/api-test/src/main/java/io/metersphere/api/mapper/ExtApiTestCaseMapper.xml b/backend/services/api-test/src/main/java/io/metersphere/api/mapper/ExtApiTestCaseMapper.xml index c05124b6f2..dd8eab60d0 100644 --- a/backend/services/api-test/src/main/java/io/metersphere/api/mapper/ExtApiTestCaseMapper.xml +++ b/backend/services/api-test/src/main/java/io/metersphere/api/mapper/ExtApiTestCaseMapper.xml @@ -617,4 +617,92 @@ and ac.api_definition_id = #{request.apiDefinitionId} + + + + + + + \ No newline at end of file diff --git a/backend/services/case-management/src/main/java/io/metersphere/functional/mapper/ExtFunctionalCaseMapper.java b/backend/services/case-management/src/main/java/io/metersphere/functional/mapper/ExtFunctionalCaseMapper.java index 8e7e7d341d..8a7f1c7b14 100644 --- a/backend/services/case-management/src/main/java/io/metersphere/functional/mapper/ExtFunctionalCaseMapper.java +++ b/backend/services/case-management/src/main/java/io/metersphere/functional/mapper/ExtFunctionalCaseMapper.java @@ -11,6 +11,7 @@ import io.metersphere.functional.request.*; import io.metersphere.project.dto.ModuleCountDTO; import io.metersphere.request.AssociateOtherCaseRequest; import io.metersphere.request.TestCasePageProviderRequest; +import io.metersphere.sdk.dto.AssociateCaseDTO; import io.metersphere.system.dto.sdk.BaseTreeNode; import org.apache.ibatis.annotations.Param; @@ -87,7 +88,7 @@ public interface ExtFunctionalCaseMapper { */ List getMinderCaseList(@Param("request") FunctionalCaseMindRequest request, @Param("deleted") boolean deleted); - List getCaseCustomFieldList(@Param("request") FunctionalCaseMindRequest request, @Param("deleted") boolean deleted, @Param("fieldIds") ListfieldIds); + List getCaseCustomFieldList(@Param("request") FunctionalCaseMindRequest request, @Param("deleted") boolean deleted, @Param("fieldIds") List fieldIds); /** @@ -97,5 +98,9 @@ public interface ExtFunctionalCaseMapper { List getMinderTestPlanList(@Param("request") FunctionalCasePlanMindRequest request, @Param("deleted") boolean delete); - List selectBaseMindNodeByProjectId(@Param("projectId")String projectId); + List selectBaseMindNodeByProjectId(@Param("projectId") String projectId); + + List selectAllFunctionalCase(@Param("isRepeat") boolean isRepeat, @Param("projectId") String projectId, @Param("testPlanId") String testPlanId); + + List selectCaseByModules(@Param("isRepeat") boolean isRepeat, @Param("projectId") String projectId, @Param("dto") AssociateCaseDTO dto, @Param("testPlanId") String testPlanId); } 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 08c2209499..3021ae92e6 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 @@ -891,4 +891,51 @@ ORDER BY pos + + + \ No newline at end of file diff --git a/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/ModuleSelectDTO.java b/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/ModuleSelectDTO.java new file mode 100644 index 0000000000..216c47a80e --- /dev/null +++ b/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/ModuleSelectDTO.java @@ -0,0 +1,28 @@ +package io.metersphere.plan.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * @author wx + */ +@Data +public class ModuleSelectDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Schema(description = "是否选择当前模块下的全部数据") + private boolean selectAll; + + @Schema(description = "不处理的ID") + List excludeIds = new ArrayList<>(); + + @Schema(description = "选中的ID") + List selectIds = new ArrayList<>(); +} diff --git a/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/TestPlanCollectionAssociateDTO.java b/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/TestPlanCollectionAssociateDTO.java index 3ca6ae61dd..f00b52f5e9 100644 --- a/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/TestPlanCollectionAssociateDTO.java +++ b/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/TestPlanCollectionAssociateDTO.java @@ -1,11 +1,13 @@ package io.metersphere.plan.dto; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; import lombok.Data; import java.io.Serial; import java.io.Serializable; import java.util.List; +import java.util.Map; /** * @author guoyuqi @@ -16,11 +18,18 @@ public class TestPlanCollectionAssociateDTO implements Serializable { @Serial private static final long serialVersionUID = 1L; - @Schema(description = "关联关系的ids", requiredMode = Schema.RequiredMode.REQUIRED) - private List ids; + @Schema(description = "是否选择所有模块") + private boolean selectAllModule; + + @Schema(description = "模块下的id集合属性", requiredMode = Schema.RequiredMode.REQUIRED) + private List> moduleMaps; @Schema(description = "关联关系的type(功能:FUNCTIONAL/接口定义:API/接口用例:API_CASE/场景:API_SCENARIO)", requiredMode = Schema.RequiredMode.REQUIRED) private String associateType; + @Schema(description = "项目id",requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{functional_case.project_id.not_blank}") + private String projectId; + } diff --git a/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/request/BaseCollectionAssociateRequest.java b/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/request/BaseCollectionAssociateRequest.java index c3175fddc1..636ee6cd96 100644 --- a/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/request/BaseCollectionAssociateRequest.java +++ b/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/request/BaseCollectionAssociateRequest.java @@ -1,17 +1,16 @@ package io.metersphere.plan.dto.request; +import io.metersphere.plan.dto.TestPlanCollectionAssociateDTO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -import java.util.List; - @Data public class BaseCollectionAssociateRequest { @Schema(description = "测试集ID") private String collectionId; - @Schema(description = "关联的用例ID集合") - private List ids; + @Schema(description = "模块下的id集合属性") + private TestPlanCollectionAssociateDTO modules; } diff --git a/backend/services/test-plan/src/main/java/io/metersphere/plan/mapper/ExtTestPlanApiCaseMapper.java b/backend/services/test-plan/src/main/java/io/metersphere/plan/mapper/ExtTestPlanApiCaseMapper.java index 4e5a7d3404..e76a2156d6 100644 --- a/backend/services/test-plan/src/main/java/io/metersphere/plan/mapper/ExtTestPlanApiCaseMapper.java +++ b/backend/services/test-plan/src/main/java/io/metersphere/plan/mapper/ExtTestPlanApiCaseMapper.java @@ -70,7 +70,6 @@ public interface ExtTestPlanApiCaseMapper { List getApiCaseExecuteInfoByIds(@Param("ids") List ids); - List selectApiCaseByDefinitionIds(@Param("ids") List ids, @Param("isRepeat") boolean isRepeat, @Param("testPlanId") String testPlanId); List getSelectIdAndCollectionId(@Param("request") TestPlanApiCaseBatchRequest request); diff --git a/backend/services/test-plan/src/main/java/io/metersphere/plan/mapper/ExtTestPlanApiCaseMapper.xml b/backend/services/test-plan/src/main/java/io/metersphere/plan/mapper/ExtTestPlanApiCaseMapper.xml index 589fc46063..9ea6befdcf 100644 --- a/backend/services/test-plan/src/main/java/io/metersphere/plan/mapper/ExtTestPlanApiCaseMapper.xml +++ b/backend/services/test-plan/src/main/java/io/metersphere/plan/mapper/ExtTestPlanApiCaseMapper.xml @@ -709,31 +709,6 @@ -