diff --git a/backend/src/main/java/io/metersphere/service/OrganizationService.java b/backend/src/main/java/io/metersphere/service/OrganizationService.java index bc7c7b1e30..c54b4860d1 100644 --- a/backend/src/main/java/io/metersphere/service/OrganizationService.java +++ b/backend/src/main/java/io/metersphere/service/OrganizationService.java @@ -67,6 +67,23 @@ public class OrganizationService { } public void deleteOrganization(String organizationId) { + WorkspaceExample example = new WorkspaceExample(); + WorkspaceExample.Criteria criteria = example.createCriteria(); + criteria.andOrganizationIdEqualTo(organizationId); + + // delete workspace + List workspaces = workspaceMapper.selectByExample(example); + List workspaceIdList = workspaces.stream().map(Workspace::getId).collect(Collectors.toList()); + for (String workspaceId : workspaceIdList) { + workspaceService.deleteWorkspace(workspaceId); + } + + // delete organization member + UserRoleExample userRoleExample = new UserRoleExample(); + userRoleExample.createCriteria().andSourceIdEqualTo(organizationId); + userRoleMapper.deleteByExample(userRoleExample); + + // delete org organizationMapper.deleteByPrimaryKey(organizationId); } diff --git a/backend/src/main/java/io/metersphere/service/PerformanceTestService.java b/backend/src/main/java/io/metersphere/service/PerformanceTestService.java index b248667db0..408d9d3717 100644 --- a/backend/src/main/java/io/metersphere/service/PerformanceTestService.java +++ b/backend/src/main/java/io/metersphere/service/PerformanceTestService.java @@ -50,13 +50,35 @@ public class PerformanceTestService { @Resource private LoadTestReportLogMapper loadTestReportLogMapper; @Resource + private LoadTestReportResultMapper loadTestReportResultMapper; + @Resource private TestResourceService testResourceService; + @Resource + private ReportService reportService; public List list(QueryTestPlanRequest request) { return extLoadTestMapper.list(request); } public void delete(DeleteTestPlanRequest request) { + String testId = request.getId(); + LoadTestReportExample loadTestReportExample = new LoadTestReportExample(); + loadTestReportExample.createCriteria().andTestIdEqualTo(testId); + List loadTestReports = loadTestReportMapper.selectByExample(loadTestReportExample); + List reportIdList = loadTestReports.stream().map(LoadTestReport::getId).collect(Collectors.toList()); + + // delete load_test_report_result + LoadTestReportResultExample loadTestReportResultExample = new LoadTestReportResultExample(); + loadTestReportResultExample.createCriteria().andReportIdIn(reportIdList); + loadTestReportResultMapper.deleteByExample(loadTestReportResultExample); + + // delete load_test_report, delete load_test_report_detail + reportIdList.forEach(reportId -> { + loadTestReportDetailMapper.deleteByPrimaryKey(reportId); + reportService.deleteReport(reportId); + }); + + // delete load_test loadTestMapper.deleteByPrimaryKey(request.getId()); deleteFileByTestId(request.getId()); diff --git a/backend/src/main/java/io/metersphere/service/ProjectService.java b/backend/src/main/java/io/metersphere/service/ProjectService.java index 0190127536..4dc397a05d 100644 --- a/backend/src/main/java/io/metersphere/service/ProjectService.java +++ b/backend/src/main/java/io/metersphere/service/ProjectService.java @@ -1,11 +1,15 @@ package io.metersphere.service; +import io.metersphere.base.domain.LoadTest; +import io.metersphere.base.domain.LoadTestExample; import io.metersphere.base.domain.Project; import io.metersphere.base.domain.ProjectExample; +import io.metersphere.base.mapper.LoadTestMapper; import io.metersphere.base.mapper.ProjectMapper; import io.metersphere.base.mapper.ext.ExtProjectMapper; import io.metersphere.commons.exception.MSException; import io.metersphere.controller.request.ProjectRequest; +import io.metersphere.controller.request.testplan.DeleteTestPlanRequest; import io.metersphere.dto.ProjectDTO; import io.metersphere.i18n.Translator; import io.metersphere.user.SessionUtils; @@ -16,6 +20,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.List; import java.util.UUID; +import java.util.stream.Collectors; @Service @Transactional(rollbackFor = Exception.class) @@ -24,6 +29,10 @@ public class ProjectService { private ProjectMapper projectMapper; @Resource private ExtProjectMapper extProjectMapper; + @Resource + private PerformanceTestService performanceTestService; + @Resource + private LoadTestMapper loadTestMapper; public Project addProject(Project project) { if (StringUtils.isBlank(project.getName())) { @@ -54,11 +63,27 @@ public class ProjectService { } public void deleteProject(String projectId) { + // delete test + LoadTestExample loadTestExample = new LoadTestExample(); + loadTestExample.createCriteria().andProjectIdEqualTo(projectId); + List loadTests = loadTestMapper.selectByExample(loadTestExample); + List loadTestIdList = loadTests.stream().map(LoadTest::getId).collect(Collectors.toList()); + loadTestIdList.forEach(loadTestId -> { + DeleteTestPlanRequest deleteTestPlanRequest = new DeleteTestPlanRequest(); + deleteTestPlanRequest.setId(loadTestId); + performanceTestService.delete(deleteTestPlanRequest); + }); + + // TODO 删除项目下 测试跟踪 相关 + + // TODO 删除项目下 接口测试 相关 + + // delete project projectMapper.deleteByPrimaryKey(projectId); } public void updateProject(Project project) { - project.setCreateTime(null);// 创建时间禁止修改 + project.setCreateTime(null); project.setUpdateTime(System.currentTimeMillis()); projectMapper.updateByPrimaryKeySelective(project); } diff --git a/backend/src/main/java/io/metersphere/service/WorkspaceService.java b/backend/src/main/java/io/metersphere/service/WorkspaceService.java index 9b4d79ac0a..a17cfd8855 100644 --- a/backend/src/main/java/io/metersphere/service/WorkspaceService.java +++ b/backend/src/main/java/io/metersphere/service/WorkspaceService.java @@ -97,6 +97,21 @@ public class WorkspaceService { } public void deleteWorkspace(String workspaceId) { + // delete project + ProjectExample projectExample = new ProjectExample(); + projectExample.createCriteria().andWorkspaceIdEqualTo(workspaceId); + List projectList = projectMapper.selectByExample(projectExample); + List projectIdList = projectList.stream().map(Project::getId).collect(Collectors.toList()); + projectIdList.forEach(projectId -> { + projectService.deleteProject(projectId); + }); + + // delete workspace member + UserRoleExample userRoleExample = new UserRoleExample(); + userRoleExample.createCriteria().andSourceIdEqualTo(workspaceId); + userRoleMapper.deleteByExample(userRoleExample); + + // delete workspace workspaceMapper.deleteByPrimaryKey(workspaceId); } diff --git a/frontend/src/i18n/zh-CN.js b/frontend/src/i18n/zh-CN.js index fb0b473c8a..0cdfbf01c2 100644 --- a/frontend/src/i18n/zh-CN.js +++ b/frontend/src/i18n/zh-CN.js @@ -56,7 +56,7 @@ export default { workspace: { 'create': '创建工作空间', 'update': '修改工作空间', - 'delete_confirm': '删除工作空间会级联删除该工作空间下的资源,确定要删除吗?', + 'delete_confirm': '删除工作空间会关联删除该工作空间下的资源,确定要删除吗?', 'add': '添加工作空间', 'input_name': '请输入工作空间名称', 'search_by_name': '根据名称搜索', @@ -67,7 +67,7 @@ export default { organization: { 'create': '创建组织', 'modify': '修改组织', - 'delete_confirm': '这个组织确定要删除吗?', + 'delete_confirm': '删除组织会关联删除该组织下的资源,确定要删除吗?', 'input_name': '请输入组织名称', 'select_organization': '请选择组织', 'search_by_name': '根据名称搜索',