java代码获取jira每个项目问题数量,需求类型数量、需求状态数量

java获取jira数据,由于本人只需要统计数量即可,不需要更详细的内容,所以借助了“天外归云”的JIRA REST java client API实际应用一些想法,做了些许的扩展,希望对正在做统计的小伙伴给与些思路。这是“天外归云”的博客地址[https://www.cnblogs.com/LanTianYou/p/6591808.html]
1.jira所需jar

<!--jira获取需要jar引入-->
        <dependency>
            <groupId>com.atlassian.jira</groupId>
            <artifactId>jira-rest-java-client</artifactId>
            <version>0.5-m6</version>
        </dependency>

        <dependency>
            <groupId>com.atlassian.util.concurrent</groupId>
            <artifactId>atlassian-util-concurrent</artifactId>
            <version>3.0.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.sharegov/mjson -->
        <dependency>
            <groupId>org.sharegov</groupId>
            <artifactId>mjson</artifactId>
            <version>1.4.1</version>
        </dependency>
        <!--jira获取需要jar完毕-->

2.jira项目的key,和问题数量模型

package com.zkr.cxhjcxt.model;

import lombok.Data;

/**
 * Created by youzongxu on 2018/9/11.
 */
@Data
public class JiraData extends BaseEntity<Long>{
    private static final long serialVersionUID = -2268683738774849653L;
    private String jiraKey;
    private Integer jiraSum;
}

3.后台存储的jira项目需求类型和key值模型

package com.zkr.cxhjcxt.model;

import lombok.Data;

/**
 * Created by youzongxu on 2018/9/12.
 */
@Data
public class JiraDateAuxiliaryOne extends BaseEntity<Long>{
    private static final long serialVersionUID = -7976421250121953311L;
    private String jiraName;
    private Integer jiraSum;
}

4.后台存储的jira状态名称和key值模型

package com.zkr.cxhjcxt.model;

import lombok.Data;

/**
 * Created by youzongxu on 2018/9/12.
 */
@Data
public class JiraDateAuxiliaryTwo extends BaseEntity<Long>{
    private static final long serialVersionUID = 387620730536090206L;
    private String jiraName;
    private Integer jiraSum;
}

5.这里是我自己的逻辑处理,结合下面jira的工具类获取,需要改成自己实际应用场景。

package com.zkr.cxhjcxt.utils;

import com.google.common.base.Joiner;
import com.google.common.collect.Lists;
import com.zkr.cxhjcxt.dao.DataConfigurationDao;
import com.zkr.cxhjcxt.dict.DictConstants;
import com.zkr.cxhjcxt.model.*;
import com.zkr.cxhjcxt.service.JiraDataService;
import com.zkr.cxhjcxt.timedutils.jirautil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by youzongxu on 2018/9/12.
 */
@Slf4j
public class JiraUtil {

    public void JiraUtil(){
        //获取1:请求路径2:账号3:密码
        DataConfigurationDao dataConfigurationDao = SpringUtil.getBean(DataConfigurationDao.class);
        DataConfiguration jiraget = dataConfigurationDao.svnget(DictConstants.jira_DICT);
        if(null != jiraget){
            jirautil jirautil = new jirautil(jiraget.getDataUsername(),jiraget.getDataPassword(),jiraget.getDataUrl());
            ArrayList<String> allProjects = jirautil.getAllProjects();
            if(!CollectionUtils.isEmpty(allProjects)){
                //1.存储jiradata
                JiraDataService jiraDataService = SpringUtil.getBean(JiraDataService.class);
                List<JiraData> list = new ArrayList<>();
                for (String k:allProjects) {
                    JiraData jiraData = new JiraData();
                    log.info("k:{}"+k);
                    String jql = "project = "+k+" ORDER BY created DESC";
                    Integer jirasum = jirautil.search_jql(jql);
                    log.info("jirasum===================="+jirasum);
                    jiraData.setJiraKey(k);
                    jiraData.setJiraSum(jirasum);
                    list.add(jiraData);
                }
                //入库
                jiraDataService.saveList(list);

                //2.获取到相应的需求类型
                List<JiraDem> jiraDems = jiraDataService.listAll();
                log.info("jiraDems"+jiraDems);
                if(!CollectionUtils.isEmpty(jiraDems)){
                    List<JiraDateAuxiliaryOne> jiraDateAuxiliaryOnes = new ArrayList<>();
                    for (JiraDem ls:jiraDems) {
                        JiraDateAuxiliaryOne jiraDateAuxiliaryOne = new JiraDateAuxiliaryOne();
                        //父级数据
                        jiraDateAuxiliaryOne.setJiraName(ls.getJiraName());
                        List<String> integerList = Lists.newArrayList();
                        if(StringUtils.isNotBlank(ls.getJiraKey())){
                            integerList.add(str(ls.getJiraKey()));
                        }
                        if(!CollectionUtils.isEmpty(ls.getChild())){//子级
                            List<JiraDem> child = ls.getChild();
                            for (JiraDem ch:child){
                                if(StringUtils.isNotBlank(ch.getJiraKey())){
                                    integerList.add(str(ch.getJiraKey()));
                                }
                            }
                        }
                        log.info("integerList"+integerList);
                        String join = Joiner.on(",").join(integerList);
                        try {
                            String jql = "issueType in("+join+") ORDER BY created DESC";
                            log.info("jql{}"+jql);
                            Integer jirasum = jirautil.search_jql(jql);
                            jiraDateAuxiliaryOne.setJiraSum((null==jirasum)?0:jirasum);
                            jiraDateAuxiliaryOnes.add(jiraDateAuxiliaryOne);
                        } catch (Exception e) {
                            log.info("请核实需求字段"+integerList);
                        }
                    }
                    log.info("jiraDateAuxiliaryOnes"+jiraDateAuxiliaryOnes);
                    //入库
                    jiraDataService.saveDateAuxiliaryOneList(jiraDateAuxiliaryOnes);
                }

                //3.bug缺陷
                List<JiraBug> jiraBugs = jiraDataService.listAllBug();
                log.info("jiraBugs"+jiraBugs);
                if(!CollectionUtils.isEmpty(jiraBugs)){
                    List<JiraDateAuxiliaryTwo> jiraDateAuxiliaryTwos = Lists.newArrayList();
                    for (JiraBug ls:jiraBugs){
                        JiraDateAuxiliaryTwo jiraDateAuxiliaryTwo = new JiraDateAuxiliaryTwo();
                        try {
                            String jql = "status in("+str(ls.getJiraKey())+") ORDER BY created DESC";
                            log.info("jql{}"+jql);
                            Integer jirasum = jirautil.search_jql(jql);
                            jiraDateAuxiliaryTwo.setJiraName(ls.getJiraName());
                            jiraDateAuxiliaryTwo.setJiraSum((null==jirasum)?0:jirasum);
                            jiraDateAuxiliaryTwos.add(jiraDateAuxiliaryTwo);
                        } catch (Exception e) {
                            log.info("请核实缺陷字段"+ls.getJiraKey());
                        }
                    }
                    log.info("jiraDateAuxiliaryTwos"+jiraDateAuxiliaryTwos);
                    //入库
                    jiraDataService.saveDateAuxiliaryTwoList(jiraDateAuxiliaryTwos);
                }
            }
        }
    }
    public String str(String str){
        boolean b = StringUtils.containsAny(str, " ");// true
        if(b){
            str = "\""+str+"\"";
        }
        return str;
    }
}

6.jira的工具类

package com.zkr.cxhjcxt.timedutils;

import com.atlassian.jira.rest.client.JiraRestClient;
import com.atlassian.jira.rest.client.NullProgressMonitor;
import com.atlassian.jira.rest.client.domain.BasicIssue;
import com.atlassian.jira.rest.client.domain.BasicProject;
import com.atlassian.jira.rest.client.domain.SearchResult;
import com.atlassian.jira.rest.client.internal.jersey.JerseyJiraRestClientFactory;
import lombok.extern.slf4j.Slf4j;

import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Iterator;

/**
 * Created by youzongxu on 2018/9/11.
 */
@Slf4j
public class jirautil {

    private String userName = "";
    private String password = "";
    private String urlString = "";

    public jirautil(String u,String p,String url) {
        userName = u;
        password = p;
        urlString = url;
    }

    public JiraRestClient login_jira(String username, String password){
        try {
            final JerseyJiraRestClientFactory factory = new JerseyJiraRestClientFactory();
            final URI jiraServerUri = new URI(urlString);
            final JiraRestClient restClient = factory.createWithBasicHttpAuthentication(jiraServerUri, username,
                    password);
            return restClient;
        } catch (Exception e) {
            log.info("登陆jira校验失败!");
            e.printStackTrace();
        }
        return null;
    }

    // 得到所有项目信息
    public ArrayList<String> getAllProjects(){
        final JiraRestClient restClient = login_jira(userName, password);
        final NullProgressMonitor pm = new NullProgressMonitor();
        Iterable<BasicProject> allProjects = restClient
                .getProjectClient().getAllProjects(pm);
        Iterator<BasicProject> iterator = allProjects.iterator();
        ArrayList<String> issueKeys = new ArrayList<>();
        //获取项目所有key
        while (iterator.hasNext()){
            String key = iterator.next().getKey();
            log.info("key:{}"+key);
            issueKeys.add(key);
        }
        return issueKeys;
    }

    /**
     * 通过jql语句进行查询并返回一个包含issue的key的数组
     * @param jql
     * @return
     * @throws URISyntaxException
     */
    public Integer search_jql(String jql){
        final JiraRestClient restClient = login_jira(userName, password);
        final NullProgressMonitor pm = new NullProgressMonitor();
        SearchResult searchResult = restClient.getSearchClient().searchJql(jql, pm);
        log.info("Get the total value :"+searchResult.getTotal());
        return searchResult.getTotal();
    }

}
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值