diff --git a/backend/src/main/java/io/metersphere/api/dto/DeleteAPIReportRequest.java b/backend/src/main/java/io/metersphere/api/dto/DeleteAPIReportRequest.java index 4b63a5ee56..f764d8c791 100644 --- a/backend/src/main/java/io/metersphere/api/dto/DeleteAPIReportRequest.java +++ b/backend/src/main/java/io/metersphere/api/dto/DeleteAPIReportRequest.java @@ -31,4 +31,6 @@ public class DeleteAPIReportRequest { private List moduleIds; private List unSelectIds; + + private Boolean isUi; } diff --git a/backend/src/main/java/io/metersphere/api/service/ApiScenarioReportService.java b/backend/src/main/java/io/metersphere/api/service/ApiScenarioReportService.java index e793d0cbfc..90704019bc 100644 --- a/backend/src/main/java/io/metersphere/api/service/ApiScenarioReportService.java +++ b/backend/src/main/java/io/metersphere/api/service/ApiScenarioReportService.java @@ -30,6 +30,7 @@ import io.metersphere.track.dto.PlanReportCaseDTO; import io.metersphere.utils.LoggerUtil; import org.apache.commons.beanutils.BeanMap; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -549,13 +550,15 @@ public class ApiScenarioReportService { structureExample.createCriteria().andReportIdEqualTo(request.getId()); apiScenarioReportStructureMapper.deleteByExample(structureExample); - ApiDefinitionExecResultExample definitionExecResultExample = new ApiDefinitionExecResultExample(); - definitionExecResultExample.createCriteria().andIdEqualTo(request.getId()); - definitionExecResultMapper.deleteByExample(definitionExecResultExample); + if (BooleanUtils.isNotTrue(request.getIsUi())) { + ApiDefinitionExecResultExample definitionExecResultExample = new ApiDefinitionExecResultExample(); + definitionExecResultExample.createCriteria().andIdEqualTo(request.getId()); + definitionExecResultMapper.deleteByExample(definitionExecResultExample); - ApiDefinitionExecResultExample execResultExample = new ApiDefinitionExecResultExample(); - execResultExample.createCriteria().andIntegratedReportIdEqualTo(request.getId()); - definitionExecResultMapper.deleteByExample(execResultExample); + ApiDefinitionExecResultExample execResultExample = new ApiDefinitionExecResultExample(); + execResultExample.createCriteria().andIntegratedReportIdEqualTo(request.getId()); + definitionExecResultMapper.deleteByExample(execResultExample); + } // 补充逻辑,如果是集成报告则把零时报告全部删除 ApiScenarioReport report = apiScenarioReportMapper.selectByPrimaryKey(request.getId()); @@ -563,6 +566,7 @@ public class ApiScenarioReportService { List list = getReportIds(report.getScenarioId()); if (CollectionUtils.isNotEmpty(list)) { APIReportBatchRequest reportRequest = new APIReportBatchRequest(); + reportRequest.setIsUi(request.getIsUi()); reportRequest.setIds(list); this.deleteAPIReportBatch(reportRequest); } @@ -669,13 +673,15 @@ public class ApiScenarioReportService { structureExample.createCriteria().andReportIdIn(handleIdList); apiScenarioReportStructureMapper.deleteByExample(structureExample); - ApiDefinitionExecResultExample definitionExecResultExample = new ApiDefinitionExecResultExample(); - definitionExecResultExample.createCriteria().andIdIn(handleIdList); - definitionExecResultMapper.deleteByExample(definitionExecResultExample); + if (BooleanUtils.isNotTrue(reportRequest.getIsUi())) { + ApiDefinitionExecResultExample definitionExecResultExample = new ApiDefinitionExecResultExample(); + definitionExecResultExample.createCriteria().andIdIn(handleIdList); + definitionExecResultMapper.deleteByExample(definitionExecResultExample); - ApiDefinitionExecResultExample execResultExample = new ApiDefinitionExecResultExample(); - execResultExample.createCriteria().andIntegratedReportIdIn(handleIdList); - definitionExecResultMapper.deleteByExample(execResultExample); + ApiDefinitionExecResultExample execResultExample = new ApiDefinitionExecResultExample(); + execResultExample.createCriteria().andIntegratedReportIdIn(handleIdList); + definitionExecResultMapper.deleteByExample(execResultExample); + } //转存剩余的数据 ids = otherIdList; @@ -698,13 +704,15 @@ public class ApiScenarioReportService { structureExample.createCriteria().andReportIdIn(ids); apiScenarioReportStructureMapper.deleteByExample(structureExample); - ApiDefinitionExecResultExample definitionExecResultExample = new ApiDefinitionExecResultExample(); - definitionExecResultExample.createCriteria().andIdIn(ids); - definitionExecResultMapper.deleteByExample(definitionExecResultExample); + if (BooleanUtils.isNotTrue(reportRequest.getIsUi())) { + ApiDefinitionExecResultExample definitionExecResultExample = new ApiDefinitionExecResultExample(); + definitionExecResultExample.createCriteria().andIdIn(ids); + definitionExecResultMapper.deleteByExample(definitionExecResultExample); - ApiDefinitionExecResultExample execResultExample = new ApiDefinitionExecResultExample(); - execResultExample.createCriteria().andIntegratedReportIdIn(ids); - definitionExecResultMapper.deleteByExample(execResultExample); + ApiDefinitionExecResultExample execResultExample = new ApiDefinitionExecResultExample(); + execResultExample.createCriteria().andIntegratedReportIdIn(ids); + definitionExecResultMapper.deleteByExample(execResultExample); + } } } diff --git a/backend/src/main/resources/db/migration/V115__1.20__release.sql b/backend/src/main/resources/db/migration/V115__1.20__release.sql index f997f274c7..ff1dee606f 100644 --- a/backend/src/main/resources/db/migration/V115__1.20__release.sql +++ b/backend/src/main/resources/db/migration/V115__1.20__release.sql @@ -230,4 +230,7 @@ INSERT INTO user_group_permission (id, group_id, permission_id, module_id) VALUES (UUID(), 'ws_admin', 'WORKSPACE_QUOTA:READ+EDIT', 'WORKSPACE_QUOTA'); -- 删除场景冗余字段 -ALTER TABLE api_scenario DROP COLUMN use_url; \ No newline at end of file +ALTER TABLE api_scenario DROP COLUMN use_url; + +-- 优化删除报告效率 +CREATE INDEX api_definition_exec_result_integrated_report_id_IDX USING BTREE ON api_definition_exec_result (integrated_report_id); diff --git a/frontend/src/business/components/api/automation/report/ApiReportList.vue b/frontend/src/business/components/api/automation/report/ApiReportList.vue index 7061d223b9..726df0c124 100644 --- a/frontend/src/business/components/api/automation/report/ApiReportList.vue +++ b/frontend/src/business/components/api/automation/report/ApiReportList.vue @@ -324,7 +324,7 @@ export default { confirmButtonText: this.$t('commons.confirm'), callback: (action) => { if (action === 'confirm') { - this.result = this.$post("/api/scenario/report/delete", {id: report.id}, () => { + this.result = this.$post("/api/scenario/report/delete", {id: report.id, isUi: this.isUI}, () => { this.$success(this.$t('commons.delete_success')); this.search(); });