diff --git a/backend/src/main/java/io/metersphere/api/controller/APITestController.java b/backend/src/main/java/io/metersphere/api/controller/APITestController.java index 0b73d1f183..8a2beaab59 100644 --- a/backend/src/main/java/io/metersphere/api/controller/APITestController.java +++ b/backend/src/main/java/io/metersphere/api/controller/APITestController.java @@ -104,9 +104,8 @@ public class APITestController { @PostMapping("/delete") public void delete(@RequestBody DeleteAPITestRequest request) { - String testId = request.getId(); - checkownerService.checkApiTestOwner(testId); - apiTestService.delete(testId); + checkownerService.checkApiTestOwner(request.getId()); + apiTestService.delete(request); } @PostMapping(value = "/run") diff --git a/backend/src/main/java/io/metersphere/api/dto/DeleteAPITestRequest.java b/backend/src/main/java/io/metersphere/api/dto/DeleteAPITestRequest.java index c05e6d9f05..fa73ae004b 100644 --- a/backend/src/main/java/io/metersphere/api/dto/DeleteAPITestRequest.java +++ b/backend/src/main/java/io/metersphere/api/dto/DeleteAPITestRequest.java @@ -8,4 +8,8 @@ import lombok.Setter; public class DeleteAPITestRequest { private String id; + /** + * 是否强制删除(删除项目时不检查关联关系,强制删除资源) + */ + private boolean forceDelete = false; } diff --git a/backend/src/main/java/io/metersphere/api/service/APITestService.java b/backend/src/main/java/io/metersphere/api/service/APITestService.java index cc9238c205..9f4a96bd23 100644 --- a/backend/src/main/java/io/metersphere/api/service/APITestService.java +++ b/backend/src/main/java/io/metersphere/api/service/APITestService.java @@ -193,8 +193,11 @@ public class APITestService { return extApiTestMapper.getApiTestByProjectId(projectId); } - public void delete(String testId) { - testCaseService.checkIsRelateTest(testId); + public void delete(DeleteAPITestRequest request) { + String testId = request.getId(); + if (!request.isForceDelete()) { + testCaseService.checkIsRelateTest(testId); + } deleteFileByTestId(testId); apiReportService.deleteByTestId(testId); scheduleService.deleteByResourceId(testId); diff --git a/backend/src/main/java/io/metersphere/performance/notice/PerformanceNoticeTask.java b/backend/src/main/java/io/metersphere/performance/notice/PerformanceNoticeTask.java index 2daeca53a3..5b041a02b4 100644 --- a/backend/src/main/java/io/metersphere/performance/notice/PerformanceNoticeTask.java +++ b/backend/src/main/java/io/metersphere/performance/notice/PerformanceNoticeTask.java @@ -47,27 +47,26 @@ public class PerformanceNoticeTask { } public void registerNoticeTask(LoadTestReportWithBLOBs loadTestReport) { - executorService.submit(() -> { - while (isRunning) { - LoadTestReportWithBLOBs loadTestReportFromDatabase = loadTestReportMapper.selectByPrimaryKey(loadTestReport.getId()); - - if (StringUtils.equals(loadTestReportFromDatabase.getStatus(), PerformanceTestStatus.Completed.name())) { - isRunning = false; - sendSuccessNotice(loadTestReportFromDatabase); - return; - } - if (StringUtils.equals(loadTestReportFromDatabase.getStatus(), PerformanceTestStatus.Error.name())) { - isRunning = false; - sendFailNotice(loadTestReportFromDatabase); - return; - } - try { - Thread.sleep(1000 * 60);// 每分钟检查 loadtest 的状态 - } catch (InterruptedException e) { - LogUtil.error(e); - } + int count = 20; + while (count-- > 0) { + LoadTestReportWithBLOBs loadTestReportFromDatabase = loadTestReportMapper.selectByPrimaryKey(loadTestReport.getId()); + if (StringUtils.equals(loadTestReportFromDatabase.getStatus(), PerformanceTestStatus.Completed.name())) { + isRunning = false; + sendSuccessNotice(loadTestReportFromDatabase); + return; } - }); + if (StringUtils.equals(loadTestReportFromDatabase.getStatus(), PerformanceTestStatus.Error.name())) { + isRunning = false; + sendFailNotice(loadTestReportFromDatabase); + return; + } + count--; + try { + Thread.sleep(1000 * 4L);// 每分钟检查 loadtest 的状态 + } catch (InterruptedException e) { + LogUtil.error(e); + } + } } public void sendSuccessNotice(LoadTestReportWithBLOBs loadTestReport) { diff --git a/backend/src/main/java/io/metersphere/performance/service/PerformanceTestService.java b/backend/src/main/java/io/metersphere/performance/service/PerformanceTestService.java index 251eda42c1..5bd56c5215 100644 --- a/backend/src/main/java/io/metersphere/performance/service/PerformanceTestService.java +++ b/backend/src/main/java/io/metersphere/performance/service/PerformanceTestService.java @@ -85,7 +85,9 @@ public class PerformanceTestService { public void delete(DeleteTestPlanRequest request) { String testId = request.getId(); - testCaseService.checkIsRelateTest(testId); + if (!request.isForceDelete()) { + testCaseService.checkIsRelateTest(testId); + } LoadTestReportExample loadTestReportExample = new LoadTestReportExample(); loadTestReportExample.createCriteria().andTestIdEqualTo(testId); diff --git a/backend/src/main/java/io/metersphere/service/ProjectService.java b/backend/src/main/java/io/metersphere/service/ProjectService.java index 292fbf8229..9354f3575d 100644 --- a/backend/src/main/java/io/metersphere/service/ProjectService.java +++ b/backend/src/main/java/io/metersphere/service/ProjectService.java @@ -1,5 +1,6 @@ package io.metersphere.service; +import io.metersphere.api.dto.DeleteAPITestRequest; import io.metersphere.api.dto.QueryAPITestRequest; import io.metersphere.api.service.APITestService; import io.metersphere.base.domain.LoadTest; @@ -96,6 +97,7 @@ public class ProjectService { loadTestIdList.forEach(loadTestId -> { DeleteTestPlanRequest deleteTestPlanRequest = new DeleteTestPlanRequest(); deleteTestPlanRequest.setId(loadTestId); + deleteTestPlanRequest.setForceDelete(true); performanceTestService.delete(deleteTestPlanRequest); }); @@ -122,7 +124,10 @@ public class ProjectService { QueryAPITestRequest request = new QueryAPITestRequest(); request.setProjectId(projectId); apiTestService.list(request).forEach(test -> { - apiTestService.delete(test.getId()); + DeleteAPITestRequest deleteAPITestRequest = new DeleteAPITestRequest(); + deleteAPITestRequest.setId(test.getId()); + deleteAPITestRequest.setForceDelete(true); + apiTestService.delete(deleteAPITestRequest); }); } diff --git a/backend/src/main/java/io/metersphere/track/request/testplan/DeleteTestPlanRequest.java b/backend/src/main/java/io/metersphere/track/request/testplan/DeleteTestPlanRequest.java index 25726bf29a..fff9accc2f 100644 --- a/backend/src/main/java/io/metersphere/track/request/testplan/DeleteTestPlanRequest.java +++ b/backend/src/main/java/io/metersphere/track/request/testplan/DeleteTestPlanRequest.java @@ -1,4 +1,13 @@ package io.metersphere.track.request.testplan; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter public class DeleteTestPlanRequest extends TestPlanRequest { + /** + * 是否强制删除(删除项目时不检查关联关系,强制删除资源) + */ + private boolean forceDelete = false; } diff --git a/frontend/src/business/components/settings/system/User.vue b/frontend/src/business/components/settings/system/User.vue index 52e51fd7f9..58f9ef44bc 100644 --- a/frontend/src/business/components/settings/system/User.vue +++ b/frontend/src/business/components/settings/system/User.vue @@ -368,8 +368,9 @@ export default { } ], phone: [ + {required: true, message: this.$t('user.input_phone'), trigger: 'blur'}, { - required: false, + required: true, pattern: '^1(3|4|5|7|8)\\d{9}$', message: this.$t('user.mobile_number_format_is_incorrect'), trigger: 'blur' diff --git a/frontend/src/business/components/xpack b/frontend/src/business/components/xpack index b9091a47b1..f6f172c645 160000 --- a/frontend/src/business/components/xpack +++ b/frontend/src/business/components/xpack @@ -1 +1 @@ -Subproject commit b9091a47b197faef77c72b134b7cf604fe3209f0 +Subproject commit f6f172c6451d0f9c51f5e3246a66dde9edcd7a5d