Commit 9750fbf2 authored by 黎博's avatar 黎博

线上@具体人

parent 12205123
package cn.qg.holmes.config;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Map;
@Slf4j
@Component
public class UserPhoneMap {
public Map<String, String> USER_PHONE_MAP;
private static String readJsonile(String file) {
String str = "";
try {
ClassPathResource resource = new ClassPathResource(file);
InputStream in = resource.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
StringBuffer stringBuffer = new StringBuffer();
while ((str = br.readLine()) != null) {
stringBuffer.append(str);
}
return stringBuffer.toString();
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
@PostConstruct
public void readUserPhoneMap() {
log.info("开始读取 USER_PHONE_MAP.");
USER_PHONE_MAP = JSON.parseObject(readJsonile("user-phone.json"), Map.class);
log.info("读取到 USER_PHONE_MAP:{}", JSON.toJSONString(USER_PHONE_MAP));
}
}
package cn.qg.holmes.service.quality.impl; package cn.qg.holmes.service.quality.impl;
import cn.qg.holmes.config.UserPhoneMap;
import cn.qg.holmes.entity.quality.DingRobot; import cn.qg.holmes.entity.quality.DingRobot;
import cn.qg.holmes.entity.quality.JiraBugPool; import cn.qg.holmes.entity.quality.JiraBugPool;
import cn.qg.holmes.mapper.quality.DingRobotMapper; import cn.qg.holmes.mapper.quality.DingRobotMapper;
...@@ -37,6 +38,9 @@ public class WebhookServiceImpl implements WebhookService { ...@@ -37,6 +38,9 @@ public class WebhookServiceImpl implements WebhookService {
@Value("${jr.prod.ding.url}") @Value("${jr.prod.ding.url}")
private String jrProdDingUrl; private String jrProdDingUrl;
@Autowired
UserPhoneMap userPhoneMap;
/** /**
* 处理线上jira bug状态变化 * 处理线上jira bug状态变化
* @param jiraData * @param jiraData
...@@ -44,6 +48,10 @@ public class WebhookServiceImpl implements WebhookService { ...@@ -44,6 +48,10 @@ public class WebhookServiceImpl implements WebhookService {
@Override @Override
public void handleProdJiraBugUpdate(String jiraData) { public void handleProdJiraBugUpdate(String jiraData) {
String webhook = ""; String webhook = "";
// 是否需要@具体的人
boolean atFlag = false;
// @具体人的手机号
String atPhoneNo = "";
String webhookEvent = JsonPath.read(jiraData, "$.webhookEvent"); String webhookEvent = JsonPath.read(jiraData, "$.webhookEvent");
String eventTypeName = JsonPath.read(jiraData, "$.issue_event_type_name"); String eventTypeName = JsonPath.read(jiraData, "$.issue_event_type_name");
String creator = JsonPath.read(jiraData, "$.issue.fields.creator.displayName"); String creator = JsonPath.read(jiraData, "$.issue.fields.creator.displayName");
...@@ -53,6 +61,12 @@ public class WebhookServiceImpl implements WebhookService { ...@@ -53,6 +61,12 @@ public class WebhookServiceImpl implements WebhookService {
} else { } else {
assignee = JsonPath.read(jiraData, "$.issue.fields.assignee.displayName"); assignee = JsonPath.read(jiraData, "$.issue.fields.assignee.displayName");
} }
// 将经办人替换
if (userPhoneMap.USER_PHONE_MAP.containsKey(assignee)) {
atPhoneNo = userPhoneMap.USER_PHONE_MAP.get(assignee);
assignee = "@" + atPhoneNo;
atFlag = true;
}
String key = JsonPath.read(jiraData, "$.issue.key"); String key = JsonPath.read(jiraData, "$.issue.key");
String summary = JsonPath.read(jiraData, "$.issue.fields.summary"); String summary = JsonPath.read(jiraData, "$.issue.fields.summary");
String priority = JsonPath.read(jiraData, "$.issue.fields.priority.name"); String priority = JsonPath.read(jiraData, "$.issue.fields.priority.name");
...@@ -86,7 +100,14 @@ public class WebhookServiceImpl implements WebhookService { ...@@ -86,7 +100,14 @@ public class WebhookServiceImpl implements WebhookService {
// content += "> ![](" + attachment + ")\n" ; // content += "> ![](" + attachment + ")\n" ;
// } // }
// } // }
DingdingUtils.sendToDingding(DingdingUtils.buildMarkdownMsg(title, content, true), webhook); // 构建markdown消息
String markdownMsg;
if (atFlag) {
markdownMsg = DingdingUtils.buildMarkdownMsgAtSpecifyPhone(title, content, atPhoneNo, false);
} else {
markdownMsg = DingdingUtils.buildMarkdownMsg(title, content, false);
}
DingdingUtils.sendToDingding(markdownMsg, webhook);
} }
// BUG更新的时候发送通知 // BUG更新的时候发送通知
if (StringUtils.equals(webhookEvent, "jira:issue_updated")) { if (StringUtils.equals(webhookEvent, "jira:issue_updated")) {
...@@ -102,7 +123,6 @@ public class WebhookServiceImpl implements WebhookService { ...@@ -102,7 +123,6 @@ public class WebhookServiceImpl implements WebhookService {
content += "📣研发工单 " + key + " 状态更新:" + "\n\n"; content += "📣研发工单 " + key + " 状态更新:" + "\n\n";
content += "概要:[" + summary + "](" + issueUrl + ")"+ "\n\n"; content += "概要:[" + summary + "](" + issueUrl + ")"+ "\n\n";
content += "状态变更为:【处理中】\n\n"; content += "状态变更为:【处理中】\n\n";
DingdingUtils.sendToDingding(DingdingUtils.buildMarkdownMsg(title, content, false), webhook);
break; break;
case "issue_resolved": case "issue_resolved":
// BUG状态变为【已解决】 // BUG状态变为【已解决】
...@@ -112,7 +132,6 @@ public class WebhookServiceImpl implements WebhookService { ...@@ -112,7 +132,6 @@ public class WebhookServiceImpl implements WebhookService {
content += "状态变更为:【已解决】\n\n"; content += "状态变更为:【已解决】\n\n";
// content += "状态变更为:【已解决】, 解决结果为:【" + JsonPath.read(jiraData, "$.changelog.items[0].toString") + "】\n\n"; // content += "状态变更为:【已解决】, 解决结果为:【" + JsonPath.read(jiraData, "$.changelog.items[0].toString") + "】\n\n";
content += "请相关同学跟进验收~"; content += "请相关同学跟进验收~";
DingdingUtils.sendToDingding(DingdingUtils.buildMarkdownMsg(title, content, false), webhook);
break; break;
case "issue_reopened": case "issue_reopened":
// BUG状态变为【重新打开】 // BUG状态变为【重新打开】
...@@ -121,7 +140,6 @@ public class WebhookServiceImpl implements WebhookService { ...@@ -121,7 +140,6 @@ public class WebhookServiceImpl implements WebhookService {
content += "概要:[" + summary + "](" + issueUrl + ")"+ "\n\n"; content += "概要:[" + summary + "](" + issueUrl + ")"+ "\n\n";
content += "状态变更为:【重新打开】\n\n"; content += "状态变更为:【重新打开】\n\n";
content += "请相关同学再跟进一下~"; content += "请相关同学再跟进一下~";
DingdingUtils.sendToDingding(DingdingUtils.buildMarkdownMsg(title, content, false), webhook);
break; break;
case "issue_closed": case "issue_closed":
// BUG状态变为【关闭】 // BUG状态变为【关闭】
...@@ -140,7 +158,6 @@ public class WebhookServiceImpl implements WebhookService { ...@@ -140,7 +158,6 @@ public class WebhookServiceImpl implements WebhookService {
content += "> " + comment + "\n\n"; content += "> " + comment + "\n\n";
} }
} }
DingdingUtils.sendToDingding(DingdingUtils.buildMarkdownMsg(title, content, false), webhook);
break; break;
case "issue_updated": case "issue_updated":
// BUG更新 // BUG更新
...@@ -150,13 +167,21 @@ public class WebhookServiceImpl implements WebhookService { ...@@ -150,13 +167,21 @@ public class WebhookServiceImpl implements WebhookService {
content += "📣研发工单 " + key + " 经办人变更:" + "\n\n"; content += "📣研发工单 " + key + " 经办人变更:" + "\n\n";
content += "概要:[" + summary + "](" + issueUrl + ")"+ "\n\n"; content += "概要:[" + summary + "](" + issueUrl + ")"+ "\n\n";
content += "- 原经办人:" + JsonPath.read(jiraData, "$.changelog.items[0].fromString") + "\n"; content += "- 原经办人:" + JsonPath.read(jiraData, "$.changelog.items[0].fromString") + "\n";
content += "- 新经办人:" + JsonPath.read(jiraData, "$.changelog.items[0].toString") + "\n"; // content += "- 新经办人:" + JsonPath.read(jiraData, "$.changelog.items[0].toString") + "\n";
DingdingUtils.sendToDingding(DingdingUtils.buildMarkdownMsg(title, content, false), webhook); content += "- 新经办人:" + assignee + "\n";
} }
break; break;
default: default:
break; break;
} }
// 发送消息
String markdownMsg;
if (atFlag) {
markdownMsg = DingdingUtils.buildMarkdownMsgAtSpecifyPhone(title, content, atPhoneNo, false);
} else {
markdownMsg = DingdingUtils.buildMarkdownMsg(title, content, false);
}
DingdingUtils.sendToDingding(markdownMsg, webhook);
} }
} }
......
...@@ -52,6 +52,22 @@ public class DingdingUtils { ...@@ -52,6 +52,22 @@ public class DingdingUtils {
return JSON.toJSONString(markdown); return JSON.toJSONString(markdown);
} }
public static String buildMarkdownMsgAtSpecifyPhone(String title, String content, String phoneNo, boolean atAll) {
Map<String, Object> markdown = new HashMap<>();
Map<String, String> contentMap = new HashMap<>();
Map<String, Object> atMap = new HashMap<>();
List<String> atMobileList = new ArrayList<>();
atMobileList.add(phoneNo);
atMap.put("atMobiles", atMobileList);
atMap.put("isAtAll", atAll);
markdown.put("at", atMap);
markdown.put("msgtype", "markdown");
contentMap.put("title", title);
contentMap.put("text", content);
markdown.put("markdown", contentMap);
return JSON.toJSONString(markdown);
}
/** /**
* 构建BUG刚提交时,发送给钉钉的markdown消息 * 构建BUG刚提交时,发送给钉钉的markdown消息
* @param key jira issue key * @param key jira issue key
...@@ -361,18 +377,18 @@ public class DingdingUtils { ...@@ -361,18 +377,18 @@ public class DingdingUtils {
"详情:客户表示申请借款无法操作,提示存在在途业务,无法申请借款,请处理,谢谢"; "详情:客户表示申请借款无法操作,提示存在在途业务,无法申请借款,请处理,谢谢";
// 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/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("http://jira2.quantgroup.cn/secure/attachment/17013/image.png");
attachmentList.add("https://gw.alicdn.com/tfs/TB1ut3xxbsrBKNjSZFpXXcXhFXa-846-786.png"); // attachmentList.add("https://gw.alicdn.com/tfs/TB1ut3xxbsrBKNjSZFpXXcXhFXa-846-786.png");
content += "概要:[" + "【定时推送】啦啦啦" + "](" + issueUrl + ")"+ "\n\n" content += "概要:[" + "【定时推送】啦啦啦" + "](" + issueUrl + ")"+ "\n\n"
+ "- 优先级:" + "P3一般" + "\n" + "- 优先级:" + "P3一般" + "\n"
+ "- 经办人:" + "王晓彤" + "\n\n"; + "- 经办人:" + "@18311069063" + "\n\n";
String[] descList = description.split("\n"); String[] descList = description.split("\n");
for (String desc: descList) { for (String desc: descList) {
content += "> " + desc + "\n\n"; content += "> " + desc + "\n\n";
} }
for (String attachment: attachmentList) { // for (String attachment: attachmentList) {
content += "> ![](" + attachment + ")\n"; // content += "> ![](" + attachment + ")\n\n";
} // }
String msg = buildMarkdownMsg(title, content, false); String msg = buildMarkdownMsgAtSpecifyPhone(title, content, "18501033527", false);
sendToDingding(msg, "https://oapi.dingtalk.com/robot/send?access_token=835663338d638e40daaf3ab358af741ef0680a826a962c91bedc53b149d85ee1"); sendToDingding(msg, "https://oapi.dingtalk.com/robot/send?access_token=835663338d638e40daaf3ab358af741ef0680a826a962c91bedc53b149d85ee1");
} }
} }
{
"黎博": "18311069063",
"温海元": "18501033527"
}
\ No newline at end of file
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