Commit 00271737 authored by 黎博's avatar 黎博

线上研发工单相关

parent f7f0cad1
......@@ -8,6 +8,7 @@ import cn.qg.holmes.entity.quality.SendSmokingResultVo;
import cn.qg.holmes.service.quality.DingRobotService;
import cn.qg.holmes.service.quality.JiraBugPoolService;
import cn.qg.holmes.service.quality.JiraService;
import cn.qg.holmes.service.quality.WebhookService;
import cn.qg.holmes.utils.DingdingUtils;
import com.alibaba.fastjson.JSON;
import com.atlassian.jira.rest.client.api.domain.BasicProject;
......@@ -41,6 +42,9 @@ public class JiraController {
@Autowired
DingRobotService dingRobotService;
@Autowired
WebhookService webhookService;
/**
* jira webhook
* @param request
......@@ -72,6 +76,7 @@ public class JiraController {
}
br.close();
log.info("收到线上JIRA BUG推送:{}", jiraData);
webhookService.handleProdJiraBugUpdate(String.valueOf(jiraData));
} catch (Exception e) {
e.printStackTrace();
}
......
package cn.qg.holmes.service.quality;
public interface WebhookService {
/**
* 处理线上jira bug状态变化
* @param jiraData
*/
void handleProdJiraBugUpdate(String jiraData);
}
package cn.qg.holmes.service.quality.impl;
import cn.qg.holmes.service.quality.WebhookService;
import cn.qg.holmes.utils.DingdingUtils;
import com.jayway.jsonpath.JsonPath;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class WebhookServiceImpl implements WebhookService {
@Override
public void handleProdJiraBugUpdate(String jiraData) {
String webhook = "https://oapi.dingtalk.com/robot/send?access_token=be220b4bd17f311d70365a0ee81a659b54f06d52f1ee8d4d7d1051a183a266e1";
String webhookEvent = JsonPath.read(jiraData, "$.webhookEvent");
String eventTypeName = JsonPath.read(jiraData, "$.issue_event_type_name");
String creator = JsonPath.read(jiraData, "$.issue.fields.creator.displayName");
String assignee = "";
if (JsonPath.read(jiraData, "$.issue.fields.assignee") == null) {
assignee = "未分配";
} else {
assignee = JsonPath.read(jiraData, "$.issue.fields.assignee.displayName");
}
String key = JsonPath.read(jiraData, "$.issue.key");
String summary = JsonPath.read(jiraData, "$.issue.fields.summary");
String priority = JsonPath.read(jiraData, "$.issue.fields.priority.name");
String module = JsonPath.read(jiraData, "$.issue.fields.components[0].name");
List<String> attachmentList = JsonPath.read(jiraData, "$.issue.fields.attachment[*].content");
// BUG创建的时候发送通知
if (StringUtils.equals(webhookEvent, "jira:issue_created")) {
String title = "线上研发工单提交";
String content = creator + "提交了线上研发工单:" + key;
content += "概要:[" + summary + "](" + "http://jira2.quantgroup.cn/browse/" + key + ")"+ "\n\n"
+ "- 优先级:" + priority + "\n"
+ "- 模块:" + module + "\n"
+ "- 经办人:" + assignee + "\n\n";
for (String attachment: attachmentList) {
content += "![](" + attachment + ")\n" ;
}
DingdingUtils.sendToDingding(DingdingUtils.buildMarkdownMsg(title, content, true), webhook);
}
// BUG更新的时候发送通知
if (StringUtils.equals(webhookEvent, "jira:issue_updated")) {
// 钉钉消息title
String title = "研发工单更新";
String issueUrl = "http://jira2.quantgroup.cn/browse/" + key;
// 钉钉消息内容
String content = "";
switch (eventTypeName) {
case "issue_work_started":
// BUG状态变为【处理中】
content += "研发工单 " + key + " 状态更新:";
content += "概要:[" + summary + "](" + issueUrl + ")"+ "\n\n";
content += "状态变更为:【处理中】\n\n";
DingdingUtils.sendToDingding(DingdingUtils.buildMarkdownMsg(title, content, false), webhook);
break;
case "issue_resolved":
// BUG状态变为【已解决】
content += "研发工单 " + key + " 状态更新:";
content += "概要:[" + summary + "](" + issueUrl + ")"+ "\n\n";
content += "状态变更为:【已解决】\n\n";
DingdingUtils.sendToDingding(DingdingUtils.buildMarkdownMsg(title, content, false), webhook);
break;
case "issue_reopened":
// BUG状态变为【重新打开】
content += "研发工单 " + key + " 状态更新:";
content += "概要:[" + summary + "](" + issueUrl + ")"+ "\n\n";
content += "状态变更为:【重新打开】\n\n";
DingdingUtils.sendToDingding(DingdingUtils.buildMarkdownMsg(title, content, false), webhook);
break;
case "issue_closed":
// BUG状态变为【关闭】
// 暂不处理
break;
case "issue_commented":
// 新增BUG备注
content += "研发工单 " + key + " 新增备注:";
content += "概要:[" + summary + "](" + issueUrl + ")"+ "\n\n";
content += "新增备注:\n\n";
content += JsonPath.read(jiraData, "$.comment.body");
DingdingUtils.sendToDingding(DingdingUtils.buildMarkdownMsg(title, content, false), webhook);
break;
case "issue_updated":
// BUG更新
String changedField = JsonPath.read(jiraData, "$.changelog.items[0].field");
if (StringUtils.equals(changedField, "assignee")) {
content += "研发工单 " + key + " 经办人变更:";
content += "概要:[" + summary + "](" + issueUrl + ")"+ "\n\n";
content += "- 原经办人:" + JsonPath.read(jiraData, "$.changelog.items[0].fromString") + "\n";
content += "- 新经办人:" + JsonPath.read(jiraData, "$.changelog.items[0].toString") + "\n";
DingdingUtils.sendToDingding(DingdingUtils.buildMarkdownMsg(title, content, false), webhook);
}
break;
default:
break;
}
}
}
}
package cn.qg.holmes.utils;
import cn.qg.holmes.entity.quality.DingRobot;
import cn.qg.holmes.service.quality.JiraService;
import com.alibaba.fastjson.JSON;
import com.atlassian.jira.rest.client.api.domain.Issue;
import lombok.extern.slf4j.Slf4j;
import org.joda.time.DateTime;
import org.joda.time.Days;
import org.springframework.beans.factory.annotation.Autowired;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 钉钉发送消息类
......@@ -78,6 +73,19 @@ public class DingdingUtils {
return buildMarkdownMsg(title, content, true);
}
public static String buildProdBugCreateMarkdownMsg(String key, String summary, String creator, String assignee, String priority, String module, List<String> attachmentList) {
String title = "线上研发工单";
String content = creator + "提交了研发工单:" + key;
content += "概要:[" + summary + "](" + "http://jira2.quantgroup.cn/browse/" + key + ")"+ "\n\n"
+ "- 优先级:" + priority + "\n"
+ "- 模块:" + module + "\n"
+ "- 经办人:" + assignee + "\n\n";
for (String attachment: attachmentList) {
content += "![](" + attachment + ")\n" ;
}
return buildMarkdownMsg(title, content, false);
}
/**
* for 数据工单
* 根据issueList构建未解决issueList的markdown格式
......@@ -326,24 +334,22 @@ public class DingdingUtils {
}
public static void main(String[] args) {
// String markdown = buildMarkdownMsg("YXM-1499", "【羊小咩v7.6.00】【VCC首次交易率提升专题】巴拉巴拉", "黎博", "于巧玲", "p1", "kddsp");
// String markdown = buildPipelineMarkdownMsg("holmes", "master", "bo.li", "测试", "2021-06-03 14:59:45", "fe");
// sendToDingding(markdown, "https://oapi.dingtalk.com/robot/send?access_token=835663338d638e40daaf3ab358af741ef0680a826a962c91bedc53b149d85ee1");
// String str = "2021-06-03T09:23:00Z";
// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// String commitDate = simpleDateFormat.format(DateTime.parse(str).toDate());
// System.out.println(commitDate);
String model = "(\\{\\{[A-Za-z0-9]+}})";
String sql = "select * from vcc_talos.risk_record where uuid={{uuid}} and userId={{userId}}";
Pattern pattern = Pattern.compile(model);
Matcher matcher = pattern.matcher(sql);
while (matcher.find()) {
String replace = matcher.group();
// 去掉首位的{{和}}
String tempKey = replace.substring(2, replace.length() -2);
sql = sql.replace(replace, "'" + "1234" + "'");
String title = "测试同学提交BUG";
String issueUrl = "http://jira2.quantgroup.cn/browse/CSXT-178";
String content = "黎博提交了BUG:CSXT-178 \n\n";
List<String> attachmentList = new ArrayList<>();
// attachmentList.add("http://jira2.quantgroup.cn/secure/attachment/17004/%E5%BD%A9%E8%89%B2Q_%E7%94%BB%E6%9D%BF+1.jpg");
attachmentList.add("http://jira2.quantgroup.cn/secure/attachment/17013/image.png");
attachmentList.add("https://gw.alicdn.com/tfs/TB1ut3xxbsrBKNjSZFpXXcXhFXa-846-786.png");
content += "概要:[" + "【定时推送】啦啦啦" + "](" + issueUrl + ")"+ "\n\n"
+ "- 优先级:" + "P3一般" + "\n"
+ "- 模块:" + "kdsp" + "\n"
+ "- 经办人:" + "王晓彤" + "\n";
// content += "> 附件:\n";
for (String attachment: attachmentList) {
content += "![](" + attachment + ")\n";
}
System.out.println(sql);
String msg = buildMarkdownMsg(title, content, false);
sendToDingding(msg, "https://oapi.dingtalk.com/robot/send?access_token=835663338d638e40daaf3ab358af741ef0680a826a962c91bedc53b149d85ee1");
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment