diff --git a/backend/src/main/java/io/metersphere/dto/CustomFieldItemDTO.java b/backend/src/main/java/io/metersphere/dto/CustomFieldItemDTO.java index 668bcb06d6..8b26585e7a 100644 --- a/backend/src/main/java/io/metersphere/dto/CustomFieldItemDTO.java +++ b/backend/src/main/java/io/metersphere/dto/CustomFieldItemDTO.java @@ -6,7 +6,7 @@ import lombok.Data; public class CustomFieldItemDTO { private String id; private String name; - private String value; + private Object value; private String type; private String customData; } 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 c5414f4a96..c75fa9a464 100644 --- a/backend/src/main/java/io/metersphere/track/issue/AbstractIssuePlatform.java +++ b/backend/src/main/java/io/metersphere/track/issue/AbstractIssuePlatform.java @@ -354,12 +354,7 @@ public abstract class AbstractIssuePlatform implements IssuesPlatform { List customFields = getCustomFields(issuesRequest.getCustomFields()); customFields.forEach(item -> { if (StringUtils.isNotBlank(item.getCustomData())) { - if (StringUtils.isNotBlank(item.getType()) && - StringUtils.equalsAny(item.getType(), "multipleInput") && StringUtils.isNotBlank(item.getValue())) { - paramMap.put(item.getCustomData(), JSONArray.parseArray(item.getValue())); - } else { - paramMap.add(item.getCustomData(), item.getValue()); - } + paramMap.add(item.getCustomData(), item.getValue()); } }); } 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 11f2be135f..d2900d6173 100644 --- a/backend/src/main/java/io/metersphere/track/issue/JiraPlatform.java +++ b/backend/src/main/java/io/metersphere/track/issue/JiraPlatform.java @@ -79,7 +79,7 @@ public class JiraPlatform extends AbstractIssuePlatform { return issues; } - public void parseIssue(IssuesWithBLOBs item, JiraIssue jiraIssue) { + public void parseIssue(IssuesWithBLOBs item, JiraIssue jiraIssue, String customFieldsStr) { String lastmodify = ""; String status = ""; JSONObject fields = jiraIssue.getFields(); @@ -89,9 +89,11 @@ public class JiraPlatform extends AbstractIssuePlatform { String description = fields.getString("description"); Parser parser = Parser.builder().build(); - Node document = parser.parse(description); - HtmlRenderer renderer = HtmlRenderer.builder().build(); - description = renderer.render(document); + if (StringUtils.isNotBlank(description)) { + Node document = parser.parse(description); + HtmlRenderer renderer = HtmlRenderer.builder().build(); + description = renderer.render(document); + } if (assignee != null) { lastmodify = assignee.getString("displayName"); @@ -103,6 +105,43 @@ public class JiraPlatform extends AbstractIssuePlatform { item.setDescription(description); item.setPlatformStatus(status); item.setPlatform(IssuesManagePlatform.Jira.toString()); + item.setCustomFields(parseIssueCustomField(customFieldsStr, jiraIssue)); + } + + public String parseIssueCustomField(String customFieldsStr, JiraIssue jiraIssue) { + List customFields = getCustomFields(customFieldsStr); + JSONObject fields = jiraIssue.getFields(); + + customFields.forEach(item -> { + String fieldName = item.getCustomData(); + Object value = fields.get(fieldName); + if (value != null) { + if (value instanceof JSONObject) { + if (!fieldName.equals("assignee") && !fieldName.equals("reporter")) { // 获取不到账号名 + item.setValue(((JSONObject)value).getString("id")); + } + } else { + if (StringUtils.isNotBlank(item.getType()) && + StringUtils.equalsAny(item.getType(), "multipleSelect", "checkbox", "multipleMember")) { + List values = new ArrayList<>(); + if (item.getValue() != null) { + JSONArray attrs = (JSONArray) item.getValue(); + attrs.forEach(attr -> { + if (attr instanceof JSONObject) { + values.add(((JSONObject)attr).getString("id")); + } else { + values.add((String) attr); + } + }); + } + item.setValue(values); + } else { + item.setValue(value); + } + } + } + }); + return JSONObject.toJSONString(customFields); } private String getStatus(JSONObject fields) { @@ -253,7 +292,7 @@ public class JiraPlatform extends AbstractIssuePlatform { customFields.forEach(item -> { String fieldName = item.getCustomData(); if (StringUtils.isNotBlank(fieldName)) { - if (StringUtils.isNotBlank(item.getValue())) { + if (item.getValue() != null) { if (StringUtils.isNotBlank(item.getType()) && StringUtils.equalsAny(item.getType(), "select", "radio", "member")) { JSONObject param = new JSONObject(); @@ -266,8 +305,8 @@ public class JiraPlatform extends AbstractIssuePlatform { } else if (StringUtils.isNotBlank(item.getType()) && StringUtils.equalsAny(item.getType(), "multipleSelect", "checkbox", "multipleMember")) { JSONArray attrs = new JSONArray(); - if (StringUtils.isNotBlank(item.getValue())) { - JSONArray values = JSONObject.parseArray(item.getValue()); + if (item.getValue() != null) { + JSONArray values = (JSONArray)item.getValue(); values.forEach(v -> { JSONObject param = new JSONObject(); param.put("id", v); @@ -275,9 +314,6 @@ public class JiraPlatform extends AbstractIssuePlatform { }); } fields.put(fieldName, attrs); - } else if (StringUtils.isNotBlank(item.getType()) && - StringUtils.equalsAny(item.getType(), "multipleInput") && StringUtils.isNotBlank(item.getValue())) { - fields.put(fieldName, JSONArray.parseArray(item.getValue())); } else { fields.put(fieldName, item.getValue()); } @@ -330,11 +366,12 @@ public class JiraPlatform extends AbstractIssuePlatform { setConfig(); try { IssuesWithBLOBs issuesWithBLOBs = issuesMapper.selectByPrimaryKey(item.getId()); - parseIssue(item, jiraClientV2.getIssues(item.getId())); + parseIssue(item, jiraClientV2.getIssues(item.getId()), issuesWithBLOBs.getCustomFields()); String desc = htmlDesc2MsDesc(item.getDescription()); // 保留之前上传的图片 String images = getImages(issuesWithBLOBs.getDescription()); item.setDescription(desc + "\n" + images); + issuesMapper.updateByPrimaryKeySelective(item); } catch (HttpClientErrorException e) { if (e.getRawStatusCode() == 404) { @@ -342,6 +379,8 @@ public class JiraPlatform extends AbstractIssuePlatform { item.setPlatformStatus(IssuesStatus.DELETE.toString()); issuesMapper.deleteByPrimaryKey(item.getId()); } + } catch (Exception e) { + LogUtil.error(e); } }); }