From 94b7cd3e4c8fa14dfe72ea73528bfde386bfe266 Mon Sep 17 00:00:00 2001 From: shiziyuan9527 Date: Wed, 17 Mar 2021 18:32:15 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E6=B5=8B=E8=AF=95=E8=B7=9F=E8=B8=AA):=20?= =?UTF-8?q?=E7=94=A8=E4=BE=8B=E5=85=B3=E8=81=94Zentao=E9=9C=80=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/metersphere/track/dto/DemandDTO.java | 1 + .../track/issue/AbstractIssuePlatform.java | 2 +- .../metersphere/track/issue/JiraPlatform.java | 7 ++- .../track/issue/LocalPlatform.java | 2 +- .../metersphere/track/issue/TapdPlatform.java | 35 +++++++++------ .../track/issue/ZentaoPlatform.java | 43 +++++++++++++++++-- .../track/service/DemandService.java | 11 ++--- .../track/case/components/TestCaseEdit.vue | 29 +++++++++---- 8 files changed, 93 insertions(+), 37 deletions(-) diff --git a/backend/src/main/java/io/metersphere/track/dto/DemandDTO.java b/backend/src/main/java/io/metersphere/track/dto/DemandDTO.java index 546f1a836c..1fba8cad3b 100644 --- a/backend/src/main/java/io/metersphere/track/dto/DemandDTO.java +++ b/backend/src/main/java/io/metersphere/track/dto/DemandDTO.java @@ -8,4 +8,5 @@ import lombok.Setter; public class DemandDTO { private String id; private String name; + private String platform; } diff --git a/backend/src/main/java/io/metersphere/track/issue/AbstractIssuePlatform.java b/backend/src/main/java/io/metersphere/track/issue/AbstractIssuePlatform.java index 6c89ff1732..3f809848aa 100644 --- a/backend/src/main/java/io/metersphere/track/issue/AbstractIssuePlatform.java +++ b/backend/src/main/java/io/metersphere/track/issue/AbstractIssuePlatform.java @@ -102,7 +102,7 @@ public abstract class AbstractIssuePlatform implements IssuesPlatform { * * @return 其他平台和本地项目绑定的属性值 */ - abstract String getProjectId(); + abstract String getProjectId(String projectId); protected boolean isIntegratedPlatform(String orgId, String platform) { IntegrationRequest request = new IntegrationRequest(); diff --git a/backend/src/main/java/io/metersphere/track/issue/JiraPlatform.java b/backend/src/main/java/io/metersphere/track/issue/JiraPlatform.java index 204366015e..b4d3772bda 100644 --- a/backend/src/main/java/io/metersphere/track/issue/JiraPlatform.java +++ b/backend/src/main/java/io/metersphere/track/issue/JiraPlatform.java @@ -103,7 +103,7 @@ public class JiraPlatform extends AbstractIssuePlatform { String auth = EncryptUtils.base64Encoding(account + ":" + password); String testCaseId = issuesRequest.getTestCaseId(); - String jiraKey = getProjectId(); + String jiraKey = getProjectId(null); if (StringUtils.isBlank(jiraKey)) { @@ -200,7 +200,10 @@ public class JiraPlatform extends AbstractIssuePlatform { } @Override - String getProjectId() { + String getProjectId(String projectId) { + if (StringUtils.isNotBlank(projectId)) { + return projectService.getProjectById(projectId).getJiraKey(); + } TestCaseWithBLOBs testCase = testCaseService.getTestCase(testCaseId); Project project = projectService.getProjectById(testCase.getProjectId()); return project.getJiraKey(); diff --git a/backend/src/main/java/io/metersphere/track/issue/LocalPlatform.java b/backend/src/main/java/io/metersphere/track/issue/LocalPlatform.java index a588c95092..51479778e2 100644 --- a/backend/src/main/java/io/metersphere/track/issue/LocalPlatform.java +++ b/backend/src/main/java/io/metersphere/track/issue/LocalPlatform.java @@ -66,7 +66,7 @@ public class LocalPlatform extends AbstractIssuePlatform { } @Override - String getProjectId() { + String getProjectId(String projectId) { return null; } diff --git a/backend/src/main/java/io/metersphere/track/issue/TapdPlatform.java b/backend/src/main/java/io/metersphere/track/issue/TapdPlatform.java index 6440c70074..41efb3e496 100644 --- a/backend/src/main/java/io/metersphere/track/issue/TapdPlatform.java +++ b/backend/src/main/java/io/metersphere/track/issue/TapdPlatform.java @@ -36,7 +36,7 @@ public class TapdPlatform extends AbstractIssuePlatform { @Override public List getIssue() { List list = new ArrayList<>(); - String tapdId = getProjectId(); + String tapdId = getProjectId(""); TestCaseIssuesExample example = new TestCaseIssuesExample(); example.createCriteria().andTestCaseIdEqualTo(testCaseId); @@ -67,18 +67,22 @@ public class TapdPlatform extends AbstractIssuePlatform { @Override public List getDemandList(String projectId) { - System.out.println(projectId); List demandList = new ArrayList<>(); - String url = "https://api.tapd.cn/stories?workspace_id=" + projectId; - ResultHolder call = call(url); - String listJson = JSON.toJSONString(call.getData()); - JSONArray jsonArray = JSON.parseArray(listJson); - System.out.println(jsonArray); - for (int i = 0; i < jsonArray.size(); i++) { - JSONObject o = jsonArray.getJSONObject(i); - DemandDTO demand = o.getObject("Story", DemandDTO.class); - demandList.add(demand); + try { + String url = "https://api.tapd.cn/stories?workspace_id=" + getProjectId(projectId); + ResultHolder call = call(url); + String listJson = JSON.toJSONString(call.getData()); + JSONArray jsonArray = JSON.parseArray(listJson); + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject o = jsonArray.getJSONObject(i); + DemandDTO demand = o.getObject("Story", DemandDTO.class); + demand.setPlatform(IssuesManagePlatform.Tapd.name()); + demandList.add(demand); + } + } catch (Exception e) { + LogUtil.error(e.getMessage()); } + return demandList; } @@ -111,7 +115,7 @@ public class TapdPlatform extends AbstractIssuePlatform { public void addIssue(IssuesRequest issuesRequest) { String url = "https://api.tapd.cn/bugs"; String testCaseId = issuesRequest.getTestCaseId(); - String tapdId = getProjectId(); + String tapdId = getProjectId(""); if (StringUtils.isBlank(tapdId)) { MSException.throwException("未关联Tapd 项目ID"); @@ -172,7 +176,7 @@ public class TapdPlatform extends AbstractIssuePlatform { @Override public List getPlatformUser() { List users = new ArrayList<>(); - String projectId = getProjectId(); + String projectId = getProjectId(""); String url = "https://api.tapd.cn/workspaces/users?workspace_id=" + projectId; ResultHolder call = call(url); String listJson = JSON.toJSONString(call.getData()); @@ -186,7 +190,10 @@ public class TapdPlatform extends AbstractIssuePlatform { } @Override - String getProjectId() { + String getProjectId(String projectId) { + if (StringUtils.isNotBlank(projectId)) { + return projectService.getProjectById(projectId).getTapdId(); + } TestCaseWithBLOBs testCase = testCaseService.getTestCase(testCaseId); Project project = projectService.getProjectById(testCase.getProjectId()); return project.getTapdId(); diff --git a/backend/src/main/java/io/metersphere/track/issue/ZentaoPlatform.java b/backend/src/main/java/io/metersphere/track/issue/ZentaoPlatform.java index dd2b0caa51..2659cb1c88 100644 --- a/backend/src/main/java/io/metersphere/track/issue/ZentaoPlatform.java +++ b/backend/src/main/java/io/metersphere/track/issue/ZentaoPlatform.java @@ -48,7 +48,10 @@ public class ZentaoPlatform extends AbstractIssuePlatform { } @Override - String getProjectId() { + String getProjectId(String projectId) { + if (StringUtils.isNotBlank(projectId)) { + return projectService.getProjectById(projectId).getZentaoId(); + } TestCaseWithBLOBs testCase = testCaseService.getTestCase(testCaseId); Project project = projectService.getProjectById(testCase.getProjectId()); return project.getZentaoId(); @@ -88,7 +91,39 @@ public class ZentaoPlatform extends AbstractIssuePlatform { @Override public List getDemandList(String projectId) { - return null; + //getTestStories + List list = new ArrayList<>(); + try { + String session = login(); + String key = getProjectId(projectId); + HttpEntity requestEntity = new HttpEntity<>(new HttpHeaders()); + RestTemplate restTemplate = new RestTemplate(); + ResponseEntity responseEntity = restTemplate.exchange(url + "api-getModel-story-getProductStories-productID={key}?zentaosid=" + session, + HttpMethod.POST, requestEntity, String.class, key); + String body = responseEntity.getBody(); + JSONObject obj = JSONObject.parseObject(body); + + LogUtil.info("project story" + key + obj); + + if (obj != null) { + JSONObject data = obj.getJSONObject("data"); + String s = JSON.toJSONString(data); + Map map = JSONArray.parseObject(s, Map.class); + Collection values = map.values(); + values.forEach(v -> { + JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(v)); + DemandDTO demandDTO = new DemandDTO(); + demandDTO.setId(jsonObject.getString("id")); + demandDTO.setName(jsonObject.getString("title")); + demandDTO.setPlatform(IssuesManagePlatform.Zentao.name()); + list.add(demandDTO); + }); + + } + } catch (Exception e) { + LogUtil.error("get zentao bug fail " + e.getMessage()); + } + return list; } private Issues getZentaoIssues(String bugId) { @@ -135,7 +170,7 @@ public class ZentaoPlatform extends AbstractIssuePlatform { public void addIssue(IssuesRequest issuesRequest) { String session = login(); - String projectId = getProjectId(); + String projectId = getProjectId(null); if (StringUtils.isBlank(projectId)) { MSException.throwException("add zentao bug fail, project zentao id is null"); @@ -279,7 +314,7 @@ public class ZentaoPlatform extends AbstractIssuePlatform { public List getBuilds() { String session = login(); - String projectId = getProjectId(); + String projectId = getProjectId(null); HttpHeaders httpHeaders = new HttpHeaders(); HttpEntity requestEntity = new HttpEntity<>(httpHeaders); RestTemplate restTemplate = new RestTemplate(); diff --git a/backend/src/main/java/io/metersphere/track/service/DemandService.java b/backend/src/main/java/io/metersphere/track/service/DemandService.java index 06a89abd43..5463ea27ae 100644 --- a/backend/src/main/java/io/metersphere/track/service/DemandService.java +++ b/backend/src/main/java/io/metersphere/track/service/DemandService.java @@ -32,9 +32,7 @@ public class DemandService { public List getDemandList(String projectId) { Project project = projectMapper.selectByPrimaryKey(projectId); SessionUser user = SessionUtils.getUser(); -/* - String orgId = "88aceecf-5764-4094-96a9-f82bd52e77ad"; -*/ + String orgId = user.getLastOrganizationId(); boolean tapd = issuesService.isIntegratedPlatform(orgId, IssuesManagePlatform.Tapd.toString()); boolean jira = issuesService.isIntegratedPlatform(orgId, IssuesManagePlatform.Jira.toString()); @@ -48,7 +46,6 @@ public class DemandService { if (StringUtils.isNotBlank(tapdId)) { platforms.add(IssuesManagePlatform.Tapd.name()); } - issueRequest.setProjectId(tapdId); } if (jira) { @@ -56,7 +53,6 @@ public class DemandService { if (StringUtils.isNotBlank(jiraKey)) { platforms.add(IssuesManagePlatform.Jira.name()); } - issueRequest.setProjectId(jiraKey); } if (zentao) { @@ -64,13 +60,14 @@ public class DemandService { if (StringUtils.isNotBlank(zentaoId)) { platforms.add(IssuesManagePlatform.Zentao.name()); } - issueRequest.setProjectId(zentaoId); } + List platformList = IssueFactory.createPlatforms(platforms, issueRequest); platformList.forEach(platform -> { - List demand = platform.getDemandList(issueRequest.getProjectId()); + List demand = platform.getDemandList(projectId); list.addAll(demand); }); + return list; } } diff --git a/frontend/src/business/components/track/case/components/TestCaseEdit.vue b/frontend/src/business/components/track/case/components/TestCaseEdit.vue index 4ddd1d4e2a..a40f69d661 100644 --- a/frontend/src/business/components/track/case/components/TestCaseEdit.vue +++ b/frontend/src/business/components/track/case/components/TestCaseEdit.vue @@ -136,12 +136,12 @@ - @@ -761,18 +761,31 @@ export default { }); } }, + visibleChange(flag) { + if (flag) { + this.getDemandOptions() + } + }, getDemandOptions() { - this.projectId = getCurrentProjectID() - this.result = this.$get("demand/list/" + this.projectId, response => { - this.demandOptions = response.data; - this.demandOptions.unshift({id: 'other', name: this.$t('test_track.case.other')}) - }); + if (this.demandOptions.length === 0) { + this.projectId = getCurrentProjectID(); + this.result = {loading : true}; + this.$get("demand/list/" + this.projectId).then(response => { + this.demandOptions = response.data.data; + this.demandOptions.unshift({id: 'other', name: this.$t('test_track.case.other'), platform: 'Other'}) + this.result = {loading : false}; + }).catch(() => { + this.result = {loading : false}; + }) + } }, getSelectOptions() { this.getModuleOptions(); this.getMaintainerOptions(); this.getTestOptions(); - // this.getDemandOptions() + if (this.type === 'edit') { + this.getDemandOptions(); + } }, resetForm() {