refactor(缺陷管理): 提交禅道缺陷可以添加图片
This commit is contained in:
parent
929d3ae465
commit
1c1a6ad74f
|
@ -15,6 +15,7 @@ import io.metersphere.controller.request.IntegrationRequest;
|
||||||
import io.metersphere.dto.CustomFieldItemDTO;
|
import io.metersphere.dto.CustomFieldItemDTO;
|
||||||
import io.metersphere.service.IntegrationService;
|
import io.metersphere.service.IntegrationService;
|
||||||
import io.metersphere.service.ProjectService;
|
import io.metersphere.service.ProjectService;
|
||||||
|
import io.metersphere.service.ResourceService;
|
||||||
import io.metersphere.track.request.testcase.IssuesRequest;
|
import io.metersphere.track.request.testcase.IssuesRequest;
|
||||||
import io.metersphere.track.request.testcase.IssuesUpdateRequest;
|
import io.metersphere.track.request.testcase.IssuesUpdateRequest;
|
||||||
import io.metersphere.track.service.TestCaseService;
|
import io.metersphere.track.service.TestCaseService;
|
||||||
|
@ -45,7 +46,7 @@ public abstract class AbstractIssuePlatform implements IssuesPlatform {
|
||||||
protected TestCaseService testCaseService;
|
protected TestCaseService testCaseService;
|
||||||
protected IssuesMapper issuesMapper;
|
protected IssuesMapper issuesMapper;
|
||||||
protected ExtIssuesMapper extIssuesMapper;
|
protected ExtIssuesMapper extIssuesMapper;
|
||||||
|
protected ResourceService resourceService;
|
||||||
protected RestTemplate restTemplateIgnoreSSL;
|
protected RestTemplate restTemplateIgnoreSSL;
|
||||||
|
|
||||||
protected String testCaseId;
|
protected String testCaseId;
|
||||||
|
@ -82,6 +83,7 @@ public abstract class AbstractIssuePlatform implements IssuesPlatform {
|
||||||
this.testCaseService = CommonBeanFactory.getBean(TestCaseService.class);
|
this.testCaseService = CommonBeanFactory.getBean(TestCaseService.class);
|
||||||
this.issuesMapper = CommonBeanFactory.getBean(IssuesMapper.class);
|
this.issuesMapper = CommonBeanFactory.getBean(IssuesMapper.class);
|
||||||
this.extIssuesMapper = CommonBeanFactory.getBean(ExtIssuesMapper.class);
|
this.extIssuesMapper = CommonBeanFactory.getBean(ExtIssuesMapper.class);
|
||||||
|
this.resourceService = CommonBeanFactory.getBean(ResourceService.class);
|
||||||
this.testCaseId = issuesRequest.getTestCaseId();
|
this.testCaseId = issuesRequest.getTestCaseId();
|
||||||
this.projectId = issuesRequest.getProjectId();
|
this.projectId = issuesRequest.getProjectId();
|
||||||
//
|
//
|
||||||
|
|
|
@ -3,6 +3,7 @@ package io.metersphere.track.issue;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.alibaba.fastjson.TypeReference;
|
||||||
import io.metersphere.base.domain.*;
|
import io.metersphere.base.domain.*;
|
||||||
import io.metersphere.commons.constants.IssuesManagePlatform;
|
import io.metersphere.commons.constants.IssuesManagePlatform;
|
||||||
import io.metersphere.commons.constants.IssuesStatus;
|
import io.metersphere.commons.constants.IssuesStatus;
|
||||||
|
@ -14,6 +15,7 @@ import io.metersphere.track.issue.domain.ZentaoBuild;
|
||||||
import io.metersphere.track.request.testcase.IssuesRequest;
|
import io.metersphere.track.request.testcase.IssuesRequest;
|
||||||
import io.metersphere.track.request.testcase.IssuesUpdateRequest;
|
import io.metersphere.track.request.testcase.IssuesUpdateRequest;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.core.io.FileSystemResource;
|
||||||
import org.springframework.http.HttpEntity;
|
import org.springframework.http.HttpEntity;
|
||||||
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.HttpHeaders;
|
||||||
import org.springframework.http.HttpMethod;
|
import org.springframework.http.HttpMethod;
|
||||||
|
@ -23,10 +25,9 @@ import org.springframework.util.LinkedMultiValueMap;
|
||||||
import org.springframework.util.MultiValueMap;
|
import org.springframework.util.MultiValueMap;
|
||||||
import org.springframework.web.client.RestTemplate;
|
import org.springframework.web.client.RestTemplate;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Collection;
|
import java.util.regex.Matcher;
|
||||||
import java.util.List;
|
import java.util.regex.Pattern;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class ZentaoPlatform extends AbstractIssuePlatform {
|
public class ZentaoPlatform extends AbstractIssuePlatform {
|
||||||
/**
|
/**
|
||||||
|
@ -41,6 +42,7 @@ public class ZentaoPlatform extends AbstractIssuePlatform {
|
||||||
* zentao url eg:http://x.x.x.x/zentao
|
* zentao url eg:http://x.x.x.x/zentao
|
||||||
*/
|
*/
|
||||||
private final String url;
|
private final String url;
|
||||||
|
private static final Pattern PATTERN = Pattern.compile("file-read-(.*?)\"/>");
|
||||||
|
|
||||||
protected String key = IssuesManagePlatform.Zentao.toString();
|
protected String key = IssuesManagePlatform.Zentao.toString();
|
||||||
|
|
||||||
|
@ -137,7 +139,7 @@ public class ZentaoPlatform extends AbstractIssuePlatform {
|
||||||
try {
|
try {
|
||||||
String session = login();
|
String session = login();
|
||||||
String key = getProjectId(projectId);
|
String key = getProjectId(projectId);
|
||||||
HttpEntity<MultiValueMap> requestEntity = new HttpEntity<>(new HttpHeaders());
|
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(new HttpHeaders());
|
||||||
RestTemplate restTemplate = new RestTemplate();
|
RestTemplate restTemplate = new RestTemplate();
|
||||||
ResponseEntity<String> responseEntity = restTemplate.exchange(url + "api-getModel-story-getProductStories-productID={key}?zentaosid=" + session,
|
ResponseEntity<String> responseEntity = restTemplate.exchange(url + "api-getModel-story-getProductStories-productID={key}?zentaosid=" + session,
|
||||||
HttpMethod.POST, requestEntity, String.class, key);
|
HttpMethod.POST, requestEntity, String.class, key);
|
||||||
|
@ -149,7 +151,7 @@ public class ZentaoPlatform extends AbstractIssuePlatform {
|
||||||
if (obj != null) {
|
if (obj != null) {
|
||||||
JSONObject data = obj.getJSONObject("data");
|
JSONObject data = obj.getJSONObject("data");
|
||||||
String s = JSON.toJSONString(data);
|
String s = JSON.toJSONString(data);
|
||||||
Map<String, Object> map = JSONArray.parseObject(s, Map.class);
|
Map<String, Object> map = JSONArray.parseObject(s, new TypeReference<Map<String, Object>>(){});
|
||||||
Collection<Object> values = map.values();
|
Collection<Object> values = map.values();
|
||||||
values.forEach(v -> {
|
values.forEach(v -> {
|
||||||
JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(v));
|
JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(v));
|
||||||
|
@ -169,7 +171,7 @@ public class ZentaoPlatform extends AbstractIssuePlatform {
|
||||||
|
|
||||||
public IssuesDao getZentaoIssues(String bugId) {
|
public IssuesDao getZentaoIssues(String bugId) {
|
||||||
String session = login();
|
String session = login();
|
||||||
HttpEntity<MultiValueMap> requestEntity = new HttpEntity<>(new HttpHeaders());
|
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(new HttpHeaders());
|
||||||
RestTemplate restTemplate = new RestTemplate();
|
RestTemplate restTemplate = new RestTemplate();
|
||||||
try {
|
try {
|
||||||
ResponseEntity<String> responseEntity = restTemplate.exchange(url + "api-getModel-bug-getById-bugID={bugId}?zentaosid=" + session,
|
ResponseEntity<String> responseEntity = restTemplate.exchange(url + "api-getModel-bug-getById-bugID={bugId}?zentaosid=" + session,
|
||||||
|
@ -184,6 +186,12 @@ public class ZentaoPlatform extends AbstractIssuePlatform {
|
||||||
String id = bug.getString("id");
|
String id = bug.getString("id");
|
||||||
String title = bug.getString("title");
|
String title = bug.getString("title");
|
||||||
String description = bug.getString("steps");
|
String description = bug.getString("steps");
|
||||||
|
String steps = description;
|
||||||
|
try {
|
||||||
|
steps = zentao2MsDescription(description);
|
||||||
|
} catch (Exception e) {
|
||||||
|
LogUtil.error(e.getMessage(), e);
|
||||||
|
}
|
||||||
Long createTime = bug.getLong("openedDate");
|
Long createTime = bug.getLong("openedDate");
|
||||||
String status = bug.getString("status");
|
String status = bug.getString("status");
|
||||||
String reporter = bug.getString("openedBy");
|
String reporter = bug.getString("openedBy");
|
||||||
|
@ -194,7 +202,7 @@ public class ZentaoPlatform extends AbstractIssuePlatform {
|
||||||
IssuesDao issues = new IssuesDao();
|
IssuesDao issues = new IssuesDao();
|
||||||
issues.setId(id);
|
issues.setId(id);
|
||||||
issues.setTitle(title);
|
issues.setTitle(title);
|
||||||
issues.setDescription(description);
|
issues.setDescription(steps);
|
||||||
issues.setCreateTime(createTime);
|
issues.setCreateTime(createTime);
|
||||||
issues.setStatus(status);
|
issues.setStatus(status);
|
||||||
issues.setReporter(reporter);
|
issues.setReporter(reporter);
|
||||||
|
@ -225,12 +233,21 @@ public class ZentaoPlatform extends AbstractIssuePlatform {
|
||||||
MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<>();
|
MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<>();
|
||||||
paramMap.add("product", projectId);
|
paramMap.add("product", projectId);
|
||||||
paramMap.add("title", issuesRequest.getTitle());
|
paramMap.add("title", issuesRequest.getTitle());
|
||||||
paramMap.add("steps", issuesRequest.getDescription());
|
String description = issuesRequest.getDescription();
|
||||||
|
String zentaoSteps = description;
|
||||||
|
|
||||||
|
// transfer description
|
||||||
|
try {
|
||||||
|
zentaoSteps = ms2ZentaoDescription(description);
|
||||||
|
} catch (Exception e) {
|
||||||
|
LogUtil.error(e.getMessage(), e);
|
||||||
|
}
|
||||||
|
LogUtil.info("zentao description transfer: " + zentaoSteps);
|
||||||
|
|
||||||
|
paramMap.add("steps", zentaoSteps);
|
||||||
if (!CollectionUtils.isEmpty(issuesRequest.getZentaoBuilds())) {
|
if (!CollectionUtils.isEmpty(issuesRequest.getZentaoBuilds())) {
|
||||||
List<String> builds = issuesRequest.getZentaoBuilds();
|
List<String> builds = issuesRequest.getZentaoBuilds();
|
||||||
builds.forEach(build -> {
|
builds.forEach(build -> paramMap.add("openedBuild[]", build));
|
||||||
paramMap.add("openedBuild[]", build);
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
paramMap.add("openedBuild", "trunk");
|
paramMap.add("openedBuild", "trunk");
|
||||||
}
|
}
|
||||||
|
@ -238,7 +255,7 @@ public class ZentaoPlatform extends AbstractIssuePlatform {
|
||||||
paramMap.add("assignedTo", issuesRequest.getZentaoAssigned());
|
paramMap.add("assignedTo", issuesRequest.getZentaoAssigned());
|
||||||
}
|
}
|
||||||
|
|
||||||
HttpEntity<MultiValueMap> requestEntity = new HttpEntity<>(paramMap, new HttpHeaders());
|
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(paramMap, new HttpHeaders());
|
||||||
RestTemplate restTemplate = new RestTemplate();
|
RestTemplate restTemplate = new RestTemplate();
|
||||||
ResponseEntity<String> responseEntity = restTemplate.exchange(url + "api-getModel-bug-create.json?zentaosid=" + session, HttpMethod.POST, requestEntity, String.class);
|
ResponseEntity<String> responseEntity = restTemplate.exchange(url + "api-getModel-bug-create.json?zentaosid=" + session, HttpMethod.POST, requestEntity, String.class);
|
||||||
String body = responseEntity.getBody();
|
String body = responseEntity.getBody();
|
||||||
|
@ -295,7 +312,7 @@ public class ZentaoPlatform extends AbstractIssuePlatform {
|
||||||
MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<>();
|
MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<>();
|
||||||
paramMap.add("account", account);
|
paramMap.add("account", account);
|
||||||
paramMap.add("password", password);
|
paramMap.add("password", password);
|
||||||
HttpEntity<MultiValueMap> requestEntity = new HttpEntity<>(paramMap, new HttpHeaders());
|
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(paramMap, new HttpHeaders());
|
||||||
RestTemplate restTemplate = new RestTemplate();
|
RestTemplate restTemplate = new RestTemplate();
|
||||||
ResponseEntity<String> responseEntity = restTemplate.exchange(loginUrl, HttpMethod.POST, requestEntity, String.class);
|
ResponseEntity<String> responseEntity = restTemplate.exchange(loginUrl, HttpMethod.POST, requestEntity, String.class);
|
||||||
String body = responseEntity.getBody();
|
String body = responseEntity.getBody();
|
||||||
|
@ -317,13 +334,12 @@ public class ZentaoPlatform extends AbstractIssuePlatform {
|
||||||
|
|
||||||
private String getSession() {
|
private String getSession() {
|
||||||
RestTemplate restTemplate = new RestTemplate();
|
RestTemplate restTemplate = new RestTemplate();
|
||||||
HttpEntity<MultiValueMap> requestEntity = new HttpEntity<>(new HttpHeaders());
|
HttpEntity<MultiValueMap<String,String>> requestEntity = new HttpEntity<>(new HttpHeaders());
|
||||||
ResponseEntity<String> responseEntity = restTemplate.exchange(url + "api-getsessionid.json", HttpMethod.GET, requestEntity, String.class);
|
ResponseEntity<String> responseEntity = restTemplate.exchange(url + "api-getsessionid.json", HttpMethod.GET, requestEntity, String.class);
|
||||||
String body = responseEntity.getBody();
|
String body = responseEntity.getBody();
|
||||||
JSONObject obj = JSONObject.parseObject(body);
|
JSONObject obj = JSONObject.parseObject(body);
|
||||||
JSONObject data = obj.getJSONObject("data");
|
JSONObject data = obj.getJSONObject("data");
|
||||||
String session = data.getString("sessionID");
|
return data.getString("sessionID");
|
||||||
return session;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -331,7 +347,7 @@ public class ZentaoPlatform extends AbstractIssuePlatform {
|
||||||
|
|
||||||
String session = login();
|
String session = login();
|
||||||
HttpHeaders httpHeaders = new HttpHeaders();
|
HttpHeaders httpHeaders = new HttpHeaders();
|
||||||
HttpEntity<MultiValueMap> requestEntity = new HttpEntity<>(httpHeaders);
|
HttpEntity<MultiValueMap<String,String>> requestEntity = new HttpEntity<>(httpHeaders);
|
||||||
RestTemplate restTemplate = new RestTemplate();
|
RestTemplate restTemplate = new RestTemplate();
|
||||||
ResponseEntity<String> responseEntity = restTemplate.exchange(url + "api-getModel-user-getList?zentaosid=" + session,
|
ResponseEntity<String> responseEntity = restTemplate.exchange(url + "api-getModel-user-getList?zentaosid=" + session,
|
||||||
HttpMethod.GET, requestEntity, String.class);
|
HttpMethod.GET, requestEntity, String.class);
|
||||||
|
@ -359,7 +375,7 @@ public class ZentaoPlatform extends AbstractIssuePlatform {
|
||||||
String session = login();
|
String session = login();
|
||||||
String projectId1 = getProjectId(projectId);
|
String projectId1 = getProjectId(projectId);
|
||||||
HttpHeaders httpHeaders = new HttpHeaders();
|
HttpHeaders httpHeaders = new HttpHeaders();
|
||||||
HttpEntity<MultiValueMap> requestEntity = new HttpEntity<>(httpHeaders);
|
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(httpHeaders);
|
||||||
RestTemplate restTemplate = new RestTemplate();
|
RestTemplate restTemplate = new RestTemplate();
|
||||||
ResponseEntity<String> responseEntity = restTemplate.exchange(url + "api-getModel-build-getProductBuildPairs-productID={projectId}?zentaosid=" + session,
|
ResponseEntity<String> responseEntity = restTemplate.exchange(url + "api-getModel-build-getProductBuildPairs-productID={projectId}?zentaosid=" + session,
|
||||||
HttpMethod.GET, requestEntity, String.class, projectId1);
|
HttpMethod.GET, requestEntity, String.class, projectId1);
|
||||||
|
@ -372,15 +388,66 @@ public class ZentaoPlatform extends AbstractIssuePlatform {
|
||||||
Map<String,Object> maps = data.getInnerMap();
|
Map<String,Object> maps = data.getInnerMap();
|
||||||
|
|
||||||
List<ZentaoBuild> list = new ArrayList<>();
|
List<ZentaoBuild> list = new ArrayList<>();
|
||||||
for (Map.Entry map : maps.entrySet()) {
|
for (Map.Entry<String, Object> map : maps.entrySet()) {
|
||||||
ZentaoBuild build = new ZentaoBuild();
|
ZentaoBuild build = new ZentaoBuild();
|
||||||
String id = (String) map.getKey();
|
String id = map.getKey();
|
||||||
if (StringUtils.isNotBlank(id)) {
|
if (StringUtils.isNotBlank(id)) {
|
||||||
build.setId((String) map.getKey());
|
build.setId(map.getKey());
|
||||||
build.setName((String) map.getValue());
|
build.setName((String) map.getValue());
|
||||||
list.add(build);
|
list.add(build);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String uploadFile(FileSystemResource resource) {
|
||||||
|
String id = "";
|
||||||
|
String session = login();
|
||||||
|
HttpHeaders httpHeaders = new HttpHeaders();
|
||||||
|
MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<>();
|
||||||
|
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(paramMap, httpHeaders);
|
||||||
|
paramMap.add("files", resource);
|
||||||
|
RestTemplate restTemplate = new RestTemplate();
|
||||||
|
try {
|
||||||
|
ResponseEntity<String> responseEntity = restTemplate.exchange(url + "api-getModel-file-saveUpload.json?zentaosid=" + session,
|
||||||
|
HttpMethod.POST, requestEntity, String.class);
|
||||||
|
String body = responseEntity.getBody();
|
||||||
|
JSONObject obj = JSONObject.parseObject(body);
|
||||||
|
JSONObject data = obj.getJSONObject("data");
|
||||||
|
Set<String> set = data.getInnerMap().keySet();
|
||||||
|
if (!set.isEmpty()) {
|
||||||
|
id = (String) set.toArray()[0];
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
LogUtil.error(e, e.getMessage());
|
||||||
|
}
|
||||||
|
LogUtil.info("upload file id: " + id);
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String ms2ZentaoDescription(String msDescription) {
|
||||||
|
String imgUrlRegex = "!\\[.*?]\\(/resource/md/get/(.*?\\..*?)\\)";
|
||||||
|
String zentaoSteps = msDescription.replaceAll(imgUrlRegex, "<img src=\"/zentao/file-read-$1\"/>");
|
||||||
|
Matcher matcher = PATTERN.matcher(zentaoSteps);
|
||||||
|
while (matcher.find()) {
|
||||||
|
// get file name
|
||||||
|
String fileName = matcher.group(1);
|
||||||
|
// get file
|
||||||
|
ResponseEntity<FileSystemResource> mdImage = resourceService.getMdImage(fileName);
|
||||||
|
// upload zentao
|
||||||
|
String id = uploadFile(mdImage.getBody());
|
||||||
|
// todo delete local file
|
||||||
|
// replace id
|
||||||
|
zentaoSteps = zentaoSteps.replaceAll(Pattern.quote(fileName), id);
|
||||||
|
}
|
||||||
|
// image link
|
||||||
|
String netImgRegex = "!\\[(.*?)]\\((http.*?)\\)";
|
||||||
|
return zentaoSteps.replaceAll(netImgRegex, "<img src=\"$2\" alt=\"$1\"/>");
|
||||||
|
}
|
||||||
|
|
||||||
|
private String zentao2MsDescription(String ztDescription) {
|
||||||
|
// todo 图片回显
|
||||||
|
String imgRegex = "<img src.*?/>";
|
||||||
|
return ztDescription.replaceAll(imgRegex, "");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue