用java代码爬取jira任务后续分析
pom依赖
<dependency>
<groupId>com.atlassian.jira</groupId>
<artifactId>jira-rest-java-client-core</artifactId>
<version>5.1.6</version>
</dependency>
导入
import com.atlassian.jira.*;
@PostMapping("/getJiraIssuesPage")
@ApiOperation("getJiraIssuesPage")
public JsonResult<Page<JiraIssueDTO>> getJiraIssuesPage(@RequestBody JiraReqDTO jiraReqDTO) {
List<Issue> issues = new ArrayList<>();
JiraRestClient jiraRestClient = login_jira();
SearchRestClient searchRestClient = jiraRestClient.getSearchClient();
//获取所有符合条件的issue
int start = (jiraReqDTO.getCurrentPage() - 1) * jiraReqDTO.getPageSize();
int maxPerPage = jiraReqDTO.getPageSize(); /* batch size (max 50) */
int total;
String userNosStr = String.join(",", jiraReqDTO.getUserNos());
String jql = "assignee in ( " + userNosStr + ") AND issuetype in (任务, Task, 子任务, Sub-task) " +
"AND 预计开始日期 >= \"" + jiraReqDTO.getStartDate() + "\" " +
"AND 预计完成日期 <= \"" + jiraReqDTO.getEndDate() + "\" " +
"AND \"Story Points\" is not EMPTY ORDER BY cf[10607] ASC";
// String jql = "assignee = 18030198 AND issuetype in (任务, Task, 子任务, Sub-task) ";
SearchResult result = searchRestClient.searchJql(jql, maxPerPage, start, new HashSet<String>()).claim();
total = result.getTotal();
result.getIssues().iterator().forEachRemaining(issues::add);
List<JiraIssueDTO> resut = new ArrayList<>();
//分析所有issue
for (Issue issue : issues) {
String key = issue.getKey();
String status = issue.getStatus().getName();
String userName = issue.getAssignee().getDisplayName();
String startDate = "";
String endDate = "";
Double sp = 0d;
for (IssueField issueField : issue.getFields()) {
if ("预计开始日期".equals(issueField.getName())) {
startDate = String.valueOf(issueField.getValue());
if ("预计完成日期".equals(issueField.getName())) {
endDate = String.valueOf(issueField.getValue());
if ("Story Points".equals(issueField.getName())) {
sp = (Double) issueField.getValue();
JiraIssueDTO jiraIssueDTO = new JiraIssueDTO();
jiraIssueDTO.setKey(key);
jiraIssueDTO.setUserName(userName);
jiraIssueDTO.setStartDate(startDate);
jiraIssueDTO.setEndDate(endDate);
jiraIssueDTO.setMonth(startDate.substring(0, 7));
jiraIssueDTO.setSp(sp);
jiraIssueDTO.setStatus(status);
resut.add(jiraIssueDTO);
Page<JiraIssueDTO> res= new Page<>();
res.setRecords(resut);
res.setTotal(total);
return JsonResult.get(res);
@PostMapping("/getJiraIssues")
@ApiOperation("getJiraIssues")
public JsonResult<List<JiraIssueDTO>> getJiraIssues(@RequestBody JiraReqDTO jiraReqDTO) {
JiraRestClient jiraRestClient = login_jira();
SearchRestClient searchRestClient = jiraRestClient.getSearchClient();
List<Issue> issues = new ArrayList<>();
//获取所有符合条件的issue
int maxPerPage = 900; /* batch size (max 50) */
List<List<String>> userList = new ArrayList<>();
for (int i = 0; i < jiraReqDTO.getUserNos().size(); i += 10) {
List<String> subList = jiraReqDTO.getUserNos().subList(i, Math.min(i + 10, jiraReqDTO.getUserNos().size()));
userList.add(subList);
LocalDate startDateStr = LocalDate.parse(jiraReqDTO.getStartDate(), DateTimeFormatter.ofPattern("yyyy-M-d"));
LocalDate lastDayOfMonth = startDateStr.withDayOfMonth(startDateStr.lengthOfMonth());
for (List<String> users : userList) {
String userNosStr = String.join(",", users);
String jql = "assignee in ( " + userNosStr + ") AND issuetype in (任务, Task, 子任务, Sub-task) " +
"AND 预计开始日期 >= \"" + startDateStr + "\" " +
"AND 预计完成日期 <= \"" + lastDayOfMonth + "\" " +
"AND \"Story Points\" is not EMPTY";
int total;
int start = 0;
log.info("query jira " + jql);
SearchResult result = searchRestClient.searchJql(jql, maxPerPage, start, new HashSet<String>()).claim();
total = result.getTotal();
start += maxPerPage;
result.getIssues().iterator().forEachRemaining(issues::add);
} while (total > start);
startDateStr = startDateStr.plusMonths(1).withDayOfMonth(1);
while (startDateStr.toString().compareTo(jiraReqDTO.getEndDate()) < 0);
List<JiraIssueDTO> resut = new ArrayList<>();
//分析所有issue
for (Issue issue : issues) {
String key = issue.getKey();
String status = issue.getStatus().getName();
String userName = issue.getAssignee().getDisplayName();
String startDate = "";
String endDate = "";
Double sp = 0d;
for (IssueField issueField : issue.getFields()) {
if ("预计开始日期".equals(issueField.getName())) {
startDate = String.valueOf(issueField.getValue());
if ("预计完成日期".equals(issueField.getName())) {
endDate = String.valueOf(issueField.getValue());
if ("Story Points".equals(issueField.getName())) {
sp = (Double) issueField.getValue();
JiraIssueDTO jiraIssueDTO = new JiraIssueDTO();
jiraIssueDTO.setKey(key);
jiraIssueDTO.setUserName(userName);
jiraIssueDTO.setStartDate(startDate);
jiraIssueDTO.setEndDate(endDate);
jiraIssueDTO.setMonth(startDate.substring(0, 7));
jiraIssueDTO.setSp(sp);
jiraIssueDTO.setStatus(status);
resut.add(jiraIssueDTO);