用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);