该工具使用的是jira的网络钩子功能,你需要提前在jira上配置,并且在自己项目中开放对外接口
因为权限较低,且无测试环境,所以,发送用的用户资料等都在本地数据库上,避免对生产jira造成影响,
有兴趣的小伙伴可以去官网自己搭建一个jira环境,很好搞.
具体代码内容看注释吧,
Controller
package com.dqoms.web.controller.cmdb;
import com.dqoms.system.service.JiraSmsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RestController;
import static jdk.nashorn.internal.runtime.regexp.joni.Config.log;
/**
* Jira短信通知
* 设计:Jira根据不同得触发事件调用不同得链接
*/
@RestController
@RequestMapping("/XXX/XXXX")
public class JiraSmsController {
private String prefix = "XXXX/XXXX";
@Autowired
private JiraSmsService jiraSmsService;
/**
* jira报文类型分派
* @param object
*/
@PostMapping(value = "/JirasSMS")
@ResponseBody
public void JirasSMS (@RequestBody String object){
//解析webhookEvent字段含义
String s = jiraSmsService.Classification(object);
// log.println(object);
// System.out.println("最新输入的Json报文 : "+object);
}
}
Service
package com.dqoms.system.service.impl;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import com.dqoms.common.annotation.Log;
import com.dqoms.common.enums.BusinessType;
import com.dqoms.system.domain.CrudDbAccidentInfo;
import com.dqoms.system.entity.JiraSmsUserInfo;
import com.dqoms.system.mapper.CrudDbAccidentInfoMapper;
import com.dqoms.system.mapper.JiraSmsUserMapper;
import com.dqoms.system.service.IRyJiraService;
import com.dqoms.system.service.JiraSmsService;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
@Component
public class JiraSmsServicelmpl implements JiraSmsService {
@Autowired
private JiraSmsUserMapper jiraSmsUserMapper;
@Autowired
private IRyJiraService iRyJiraService;
/**
* 识别报文类型,对数据进行分发调用
*
* @param json
* @return
*/
@Override
public String Classification(String json) {
//转为json
JSONObject jsonObject = JSONObject.fromObject(json);
String webhookEvent = jsonObject.getString("webhookEvent");
int i = 0;
//问题创建
if (webhookEvent.equals("jira:issue_created")) {
//正常创建
issueCreated(json);
//跳转到整改单创建--该功能已弃用
// issueRectificationSheet(json);
i++;
}
//问题更新
if (webhookEvent.equals("jira:issue_updated")) {
issueUpdated(json);
i++;
}
//问题链接删除
if (webhookEvent.equals("issuelink_deleted")) {
issuelinkDeleted(json);
i++;
}
//项目创建
if (webhookEvent.equals("project_created")) {
projectCreated(json);
i++;
}
//项目更新
if (webhookEvent.equals("project_updated")) {
projectUpdated(json);
i++;
}
//项目删除
if (webhookEvent.equals("project_deleted")) {
projectDeleted(json);
i++;
}
//用户创建
if (webhookEvent.equals("user_created")) {
userCreated(json);
i++;
}
//用户更新 --只支持名称name更新
if (webhookEvent.equals("user_updated")) {
userUpdated(json);
i++;
}
//问题删除
if (webhookEvent.equals("jira:issue_deleted")) {
issueDeleted(json);
i++;
}
if (i == 0) {
System.out.println("捕捉到的未处理的json :" + json +
"类型" + webhookEvent);
}
return null;
}
/**
* 问题类型-----创建
* 问题链接-----创建
*
* @param json
* @return
*/
@Override
public String issueCreated(String json) {
//接受问题创建的json报文,对其进行解析
JSONObject jsonObject = JSONObject.fromObject(json);
System.out.println(jsonObject);
//准备数据
String phonenumber = "";
List<String> phonenumberList = new ArrayList<>();
//将创建人解析出key name
JSONObject user = jsonObject.getJSONObject("user");
String founderName = user.getString("name");
String founderKey = user.getString("key");
//将创建的问题名称解析出
JSONObject issue = jsonObject.getJSONObject("issue");
String QuestionName = issue.getString("key");
String QuestionId = issue.getString("id");
//报告人
String NameOfTheReporter = issue.getJSONObject("fields").getJSONObject("reporter").getString("key");
String changelog = "";
if (jsonObject.has("changelog")) {
JSONArray items = jsonObject.getJSONObject("changelog").getJSONArray("items");
for (int i = 0; items.size() > i; i++) {
JSONObject updateContent = JSONObject.fromObject(items.get(i).toString());
//获取更改的字段是什么
String fieId = updateContent.getString("field");
if (i == 0) {
changelog = "--更新了:";
}
changelog = changelog + fieId + ";";
System.out.println(changelog);
}
}
JSONObject fields = issue.getJSONObject("fields");
//解析问题的经办人相关信息