添加网站关键词,js网页特效,外贸黄页,怎么制作公众号文章怎么制作1.说明 统计公司所有项目的提交情况#xff0c;可指定分支和时间段#xff0c;返回每个人的提交新增数、删除数和总数。 2.API 文档地址#xff1a;http://公司gitlab域名/help/api/README.md 项目列表查询 返回示例#xff1a;
[{id: 1, //项目IDhttp…1.说明 统计公司所有项目的提交情况可指定分支和时间段返回每个人的提交新增数、删除数和总数。 2.API 文档地址http://公司gitlab域名/help/api/README.md 项目列表查询 返回示例
[{id: 1, //项目IDhttp_url_to_repo: http://git.xxx.com/a/saas-project-1.git,web_url: http://git.xxx.com/a/saas-project-1,name: saas-project-1, //项目名name_with_namespace: a / saas-project-1,path: saas-project-1,path_with_namespace: a/saas-project-1}
]提交记录查询 单次提交统计
3.PRIVATE-TOKEN PRIVATE-TOKEN获取地址http://公司gitlab域名/profile/account 查看Private token下面的值即可 4.代码
package com.visy.utils;import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.tuple.Triple;import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collectors;/*** author visy.wang*/
public class GitStatsUtil {private static final String PRIVATE_TOKEN 你自己的Private token;private static final String BASE_URL http://公司gitlab域名/api/v4;private static T T doGet(String url, FunctionString,T respHandler, SupplierT defaultResp){HttpRequest request HttpUtil.createGet(BASE_URL url);request.header(PRIVATE-TOKEN, PRIVATE_TOKEN);HttpResponse response request.execute();if(response.getStatus() 200){return respHandler.apply(response.body());}else{return defaultResp.get();}}private static ListMapString,Object listProjects(){int pageNo 1, pageSize 100;ListMapString,Object allList new ArrayList();boolean hasNext true;while (hasNext){System.out.println(listProjects: pageNo pageNo);ListMapString,Object list listProjects(pageNo, pageSize);allList.addAll(list);pageNo ;hasNext list.size() pageSize;}return allList;}private static ListMapString,Object listProjects(int pageNo, int pageSize){String url /projects?order_bynamesortascsimpletruearchivedfalseownedfalsepagepageNoper_pagepageSize;return doGet(url, body - {JSONArray array JSONArray.parseArray(body);return array.stream().map(item - {MapString,Object mp new HashMap();mp.put(id, ((JSONObject)item).getLong(id));mp.put(name, ((JSONObject)item).getString(name));return mp;}).collect(Collectors.toList());}, Collections::emptyList);}private static ListString listCommitIds(Object projectId, String since, String until, String refName){int pageNo 1, pageSize 100;ListString allList new ArrayList();boolean hasNext true;while (hasNext){System.out.println(listCommitIds: pageNo pageNo, projectIdprojectId);ListString list listCommitIds(projectId, since, until, refName, pageNo, pageSize);allList.addAll(list);pageNo ;hasNext list.size() pageSize;}return allList;}private static ListString listCommitIds(Object projectId, String since, String until, String refName, int pageNo, int pageSize){String url /projects/ projectId /repository/commits?ref_name refName page pageNo per_page pageSize since since T00:00:0008:00until untilT23:59:5908:00;return doGet(url, body - {JSONArray array JSONArray.parseArray(body);return array.stream().map(item - ((JSONObject)item).getString(id)).collect(Collectors.toList());}, Collections::emptyList);}private static MapString,Object getCommitStats(Object projectId, Object commitId){String url /projects/ projectId /repository/commits/ commitId;return doGet(url, body - {JSONObject data JSONObject.parseObject(body);MapString,Object mp new HashMap();mp.put(authorName, data.getString(author_name));mp.put(authorEmail, data.getString(author_email));data data.getJSONObject(stats);mp.put(add, data.getInteger(additions));mp.put(delete, data.getInteger(deletions));mp.put(total, data.getInteger(total));return mp;}, Collections::emptyMap);}public static void main(String[] args) {//指定时间段和分支名String since 2024-01-01, until 2024-01-31, branch branch1;ListMapString, Object projects listProjects();ListMapString,Object allUserCommits new ArrayList();projects.forEach(project - {Object projectId project.get(id);ListString commitIds listCommitIds(projectId, since, until, branch);commitIds.forEach(commitId - allUserCommits.add(getCommitStats(projectId, commitId)));});MapString, TripleInteger,Integer,Integer userCommitsMap new HashMap();allUserCommits.forEach(item - {if(itemnull || item.isEmpty()){return;}String userName item.get(authorName).toString();TripleInteger,Integer,Integer triple userCommitsMap.getOrDefault(userName, Triple.of(0,0,0));Integer add Integer.valueOf(item.get(add).toString());Integer delete Integer.valueOf(item.get(delete).toString());Integer total Integer.valueOf(item.get(total).toString());triple Triple.of(triple.getLeft()add, triple.getMiddle()delete, triple.getRight()total);userCommitsMap.put(userName, triple);});System.out.println(涉及项目(projects.size()));projects.forEach(p - System.out.println(p.get(name) [idp.get(id)]));System.out.println(----------------------------------------------------------);System.out.println(分支branch, 统计周期: since ~ until);System.out.println(----------------------------------------------------------);AtomicInteger add new AtomicInteger(0), delete new AtomicInteger(0), total new AtomicInteger(0);userCommitsMap.forEach((userName, triple) - {add.getAndAdd(triple.getLeft());delete.getAndAdd(triple.getMiddle());total.getAndAdd(triple.getRight());System.out.println(userName : 新增 triple.getLeft(), 删除triple.getMiddle(), 总数triple.getRight());});System.out.println(总计: 新增 add.get() , 删除 delete.get() , 总数 total.get());}
}5.输出示例
涉及项目(3)
saas-project-1 [id1]
saas-project-2 [id2]
saas-project-3 [id3]
----------------------------------------------------------
分支branch1, 统计周期: 2024-01-01 ~ 2024-01-31
----------------------------------------------------------
张三: 新增1, 删除2, 总数3
李四: 新增4, 删除5, 总数9
王五: 新增6, 删除7, 总数13
总计: 新增11, 删除14, 总数25