diff --git a/backend/src/main/java/io/metersphere/track/dto/testplan/TestPlanReportRunInfoDTO.java b/backend/src/main/java/io/metersphere/track/dto/testplan/TestPlanReportRunInfoDTO.java index 382a0d5747..d88da1f5d8 100644 --- a/backend/src/main/java/io/metersphere/track/dto/testplan/TestPlanReportRunInfoDTO.java +++ b/backend/src/main/java/io/metersphere/track/dto/testplan/TestPlanReportRunInfoDTO.java @@ -3,7 +3,9 @@ package io.metersphere.track.dto.testplan; import lombok.Getter; import lombok.Setter; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; @Getter @@ -14,24 +16,38 @@ public class TestPlanReportRunInfoDTO { private String runMode; // <测试计划场景关联表ID, <项目ID,环境ID>> - private Map<String, Map<String,String>> scenarioRunInfo; + private Map<String, Map<String, List<String>>> scenarioRunInfo; // <测试计划用例关联表ID, <项目ID,环境ID>> - private Map<String, Map<String,String>> apiCaseRunInfo; + private Map<String, Map<String, String>> apiCaseRunInfo; - public TestPlanReportRunInfoDTO(){ + public TestPlanReportRunInfoDTO() { scenarioRunInfo = new HashMap<>(); apiCaseRunInfo = new HashMap<>(); } - public void putScenarioRunInfo(String scenarioResourceId,String projectId,String environmentId){ - scenarioRunInfo.put(scenarioResourceId,new HashMap<>(){{ - this.put(projectId,environmentId); - }}); + public void putScenarioRunInfo(String scenarioResourceId, String projectId, String environmentId) { + if (scenarioRunInfo.containsKey(scenarioResourceId)) { + if (scenarioRunInfo.get(scenarioResourceId).containsKey(projectId)) { + if (!scenarioRunInfo.get(scenarioResourceId).get(projectId).contains(environmentId)) { + scenarioRunInfo.get(scenarioResourceId).get(projectId).add(environmentId); + } + } else { + scenarioRunInfo.get(scenarioResourceId).put(projectId, new ArrayList<>() {{ + this.add(environmentId); + }}); + } + } else { + scenarioRunInfo.put(scenarioResourceId, new HashMap<>() {{ + this.put(projectId, new ArrayList<>() {{ + this.add(environmentId); + }}); + }}); + } } - public void putApiCaseRunInfo(String apiCaseResourceId,String projectId,String environmentId){ - apiCaseRunInfo.put(apiCaseResourceId,new HashMap<>(){{ - this.put(projectId,environmentId); + public void putApiCaseRunInfo(String apiCaseResourceId, String projectId, String environmentId) { + apiCaseRunInfo.put(apiCaseResourceId, new HashMap<>() {{ + this.put(projectId, environmentId); }}); } } \ No newline at end of file diff --git a/backend/src/main/java/io/metersphere/track/service/TestPlanReportService.java b/backend/src/main/java/io/metersphere/track/service/TestPlanReportService.java index 595da1db02..b072422644 100644 --- a/backend/src/main/java/io/metersphere/track/service/TestPlanReportService.java +++ b/backend/src/main/java/io/metersphere/track/service/TestPlanReportService.java @@ -226,7 +226,7 @@ public class TestPlanReportService { } public TestPlanScheduleReportInfoDTO genTestPlanReportBySchedule(String planReportId, String planId, String userId, String triggerMode, RunModeConfigDTO runModeConfigDTO) { - TestPlanReport testPlanReport = this.getTestPlanReport(planReportId); + TestPlanReport testPlanReport = this.getTestPlanReport(planReportId); TestPlanScheduleReportInfoDTO returnDTO = new TestPlanScheduleReportInfoDTO(); if (testPlanReport != null) { returnDTO.setTestPlanReport(testPlanReport); @@ -305,11 +305,11 @@ public class TestPlanReportService { try { Map<String, String> envMap = JSONObject.parseObject(model.getEnvironment(), Map.class); if (MapUtils.isNotEmpty(envMap)) { - String envId = null; - for (String envIdStr : envMap.values()) { - envId = envIdStr; + for (Map.Entry<String, String> entry : envMap.entrySet()) { + String projectId = entry.getKey(); + String envIdStr = entry.getValue(); + runInfoDTO.putScenarioRunInfo(model.getId(), projectId, envIdStr); } - runInfoDTO.putScenarioRunInfo(model.getId(), model.getProjectId(), envId); } } catch (Exception ignore) { } @@ -991,10 +991,10 @@ public class TestPlanReportService { testPlanReportDTO.setRunMode(StringUtils.equalsIgnoreCase(runInfoDTO.getRunMode(), "serial") ? Translator.get("serial") : Translator.get("parallel")); Map<String, Set<String>> projectEnvMap = new LinkedHashMap<>(); if (MapUtils.isNotEmpty(runInfoDTO.getApiCaseRunInfo())) { - this.setProjectEnvMap(projectEnvMap, runInfoDTO.getApiCaseRunInfo()); + this.setApiCaseProjectEnvMap(projectEnvMap, runInfoDTO.getApiCaseRunInfo()); } if (MapUtils.isNotEmpty(runInfoDTO.getScenarioRunInfo())) { - this.setProjectEnvMap(projectEnvMap, runInfoDTO.getScenarioRunInfo()); + this.setScenarioProjectEnvMap(projectEnvMap, runInfoDTO.getScenarioRunInfo()); } Map<String, List<String>> showProjectEnvMap = new LinkedHashMap<>(); for (Map.Entry<String, Set<String>> entry : projectEnvMap.entrySet()) { @@ -1012,7 +1012,33 @@ public class TestPlanReportService { } } - private void setProjectEnvMap(Map<String, Set<String>> projectEnvMap, Map<String, Map<String, String>> caseEnvironmentMap) { + private void setScenarioProjectEnvMap(Map<String, Set<String>> projectEnvMap, Map<String, Map<String, List<String>>> caseEnvironmentMap) { + if (projectEnvMap == null || caseEnvironmentMap == null) { + return; + } + for (Map<String, List<String>> map : caseEnvironmentMap.values()) { + if (MapUtils.isEmpty(map)) { + continue; + } + for (Map.Entry<String, List<String>> entry : map.entrySet()) { + String projectId = entry.getKey(); + List<String> envIdList = entry.getValue(); + if (CollectionUtils.isNotEmpty(envIdList)) { + envIdList.forEach(envId -> { + if (projectEnvMap.containsKey(projectId)) { + projectEnvMap.get(projectId).add(envId); + } else { + projectEnvMap.put(projectId, new LinkedHashSet<>() {{ + this.add(envId); + }}); + } + }); + } + } + } + } + + private void setApiCaseProjectEnvMap(Map<String, Set<String>> projectEnvMap, Map<String, Map<String, String>> caseEnvironmentMap) { if (projectEnvMap == null || caseEnvironmentMap == null) { return; } diff --git a/frontend/src/business/components/track/plan/view/comonents/report/detail/TestPlanOverviewReport.vue b/frontend/src/business/components/track/plan/view/comonents/report/detail/TestPlanOverviewReport.vue index d116c0b5df..3a9eceb8d2 100644 --- a/frontend/src/business/components/track/plan/view/comonents/report/detail/TestPlanOverviewReport.vue +++ b/frontend/src/business/components/track/plan/view/comonents/report/detail/TestPlanOverviewReport.vue @@ -8,11 +8,11 @@ v-if="report.envGroupName || report.projectEnvMap" style="display:inline-block"> <div> <div style="float: left"> - {{$t('commons.environment') + ':'}} + {{ $t('commons.environment') + ':' }} </div> <div style="float: right"> <div v-if="report.envGroupName" style="margin-left: 42px"> - <ms-tag type="danger" :content="$t('commons.group')"></ms-tag> + <ms-tag type="danger" :content="$t('workspace.env_group.name')"></ms-tag> {{ report.envGroupName }} </div> <div v-else-if="report.projectEnvMap" style="margin-left: 42px">