Commit 867570df authored by 黎博's avatar 黎博

新增jira robot相关接口

parent 237a17e5
package cn.qg.holmes.controller.jira; package cn.qg.holmes.controller.jira;
import cn.qg.holmes.utils.JiraWebhookUtils; import cn.qg.holmes.common.JsonResult;
import cn.qg.holmes.entity.jira.DingRobot;
import cn.qg.holmes.service.jira.DingRobotService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.util.HashMap;
import java.util.Map;
@Slf4j
@RestController @RestController
@RequestMapping("/jira") @RequestMapping("/jira")
@Slf4j
public class JiraWebhookController { public class JiraWebhookController {
@Autowired
DingRobotService dingRobotService;
/**
* jira webhook
* @param request
*/
@PostMapping("/webhook") @PostMapping("/webhook")
public void jiraWebhook(HttpServletRequest request) { public void jiraWebhook(HttpServletRequest request) {
try { try {
...@@ -24,10 +36,73 @@ public class JiraWebhookController { ...@@ -24,10 +36,73 @@ public class JiraWebhookController {
jiraData.append(str); jiraData.append(str);
} }
br.close(); br.close();
log.info(String.valueOf(jiraData)); dingRobotService.sendMsgToDing(String.valueOf(jiraData));
JiraWebhookUtils.sendDingdingMsg(String.valueOf(jiraData));
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
/**
* 项目机器人列表
* @param pageNum 第几页
* @param pageSize 每页多少个
* @return
*/
@GetMapping("/list/robot")
public JsonResult getProjectRobotList(Integer pageNum, Integer pageSize) {
IPage<DingRobot> page = new Page<>(pageNum, pageSize);
IPage<DingRobot> projectRobotIPage = dingRobotService.page(page);
Map<String, Object> map = new HashMap<>();
map.put("total", projectRobotIPage.getTotal());
map.put("list", projectRobotIPage.getRecords());
return JsonResult.buildSuccessResult(map);
}
/**
* 新增项目机器人
* @param dingRobot 项目机器人实体
* @return
*/
@PostMapping("/add/robot")
public JsonResult addProjectRobot(@RequestBody DingRobot dingRobot) {
if (dingRobot.getProjectName() == null) {
return JsonResult.buildErrorStateResult("项目名称不能为空!", false);
}
if (dingRobot.getDingUrl() == null) {
return JsonResult.buildErrorStateResult("钉钉url不能为空!", false);
}
return JsonResult.buildSuccessResult(dingRobotService.save(dingRobot));
}
/**
* 修改项目机器人
* @param dingRobot 项目机器人实体
* @return
*/
@PostMapping("/modify/robot")
public JsonResult editProjectRobot(@RequestBody DingRobot dingRobot) {
if (dingRobot.getId() == null) {
return JsonResult.buildErrorStateResult("id不能为空!", false);
}
if (dingRobot.getProjectName() == null) {
return JsonResult.buildErrorStateResult("项目名称不能为空!", false);
}
if (dingRobot.getDingUrl() == null) {
return JsonResult.buildErrorStateResult("钉钉url不能为空!", false);
}
return JsonResult.buildSuccessResult(dingRobotService.save(dingRobot));
}
/**
* 删除项目机器人
* @param projectRobotId 项目机器人实体id
* @return
*/
@PostMapping("/delete/robot")
public JsonResult deleteProjectRobot(Integer projectRobotId) {
if (dingRobotService.getById(projectRobotId) == null) {
return JsonResult.buildErrorStateResult("项目机器人不存在!", false);
}
return JsonResult.buildSuccessResult(dingRobotService.removeById(projectRobotId));
}
} }
package cn.qg.holmes.entity.jira;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@Data
@TableName(value = "ding_robot")
public class DingRobot {
@TableId(type = IdType.AUTO)
private Integer id;
private String projectName;
private String dingUrl;
private String creator;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
}
package cn.qg.holmes.mapper.jira;
import cn.qg.holmes.entity.jira.DingRobot;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface DingRobotMapper extends BaseMapper<DingRobot> {
}
package cn.qg.holmes.service.jira;
import cn.qg.holmes.entity.jira.DingRobot;
import com.baomidou.mybatisplus.extension.service.IService;
public interface DingRobotService extends IService<DingRobot> {
Boolean sendMsgToDing(String jiraData);
}
package cn.qg.holmes.utils; package cn.qg.holmes.service.jira.impl;
import com.alibaba.fastjson.JSON; import cn.qg.holmes.entity.jira.DingRobot;
import cn.qg.holmes.mapper.jira.DingRobotMapper;
import cn.qg.holmes.service.jira.DingRobotService;
import cn.qg.holmes.utils.DingdingUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jayway.jsonpath.JsonPath; import com.jayway.jsonpath.JsonPath;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap; import java.util.List;
import java.util.Map;
@Slf4j @Service
public class JiraWebhookUtils { public class DingRobotServiceImpl extends ServiceImpl<DingRobotMapper, DingRobot> implements DingRobotService {
public static void sendDingdingMsg(String jiraData) { @Autowired
String url = "https://oapi.dingtalk.com/robot/send?access_token=835663338d638e40daaf3ab358af741ef0680a826a962c91bedc53b149d85ee1"; DingRobotMapper dingRobotMapper;
@Override
public Boolean sendMsgToDing(String jiraData) {
String webhookEvent = JsonPath.read(jiraData, "$.webhookEvent"); String webhookEvent = JsonPath.read(jiraData, "$.webhookEvent");
if (StringUtils.equals(webhookEvent, "jira:issue_created")) { if (StringUtils.equals(webhookEvent, "jira:issue_created")) {
String creator = JsonPath.read(jiraData, "$.issue.fields.creator.displayName"); String creator = JsonPath.read(jiraData, "$.issue.fields.creator.displayName");
...@@ -21,19 +27,19 @@ public class JiraWebhookUtils { ...@@ -21,19 +27,19 @@ public class JiraWebhookUtils {
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");
String markdownMsg = DingdingUtils.buildMarkdownMsg(key, summary, creator, assignee, priority); String robotUrl = null;
DingdingUtils.sendToDingding(markdownMsg, url); List<DingRobot> dingRobots = dingRobotMapper.selectList(null);
for (DingRobot dingRobot : dingRobots) {
if (summary.contains(dingRobot.getProjectName())) {
robotUrl = dingRobot.getDingUrl();
break;
}
}
if (robotUrl != null) {
String markdownMsg = DingdingUtils.buildMarkdownMsg(key, summary, creator, assignee, priority);
return DingdingUtils.sendToDingding(markdownMsg, robotUrl);
}
} }
} return false;
public static void main(String[] args) {
String url = "https://oapi.dingtalk.com/robot/send?access_token=835663338d638e40daaf3ab358af741ef0680a826a962c91bedc53b149d85ee1";
Map<String, Object> markdown = new HashMap<>();
Map<String, String> content = new HashMap<>();
markdown.put("msgtype", "markdown");
content.put("title", "黎博提交了BUG:CSXT-142");
content.put("text", "## 黎博提交了BUG:CSXT-142" + "\n" + "### 概要:[【羊小咩v7.6.00】【iOS】【搜索】首页主搜索和专题页或者满减页等搜索逻辑问题]" + "(http://jira2.quantgroup.cn/browse/CSXT-143)"+ "\n" + "优先级:" + "P3一般" + "\n" + "经办人:" + "于巧玲");
markdown.put("markdown", content);
DingdingUtils.sendToDingding(JSON.toJSONString(markdown), url);
} }
} }
...@@ -25,7 +25,7 @@ public class DingdingUtils { ...@@ -25,7 +25,7 @@ public class DingdingUtils {
String title = creator + "提交了BUG:" + key; String title = creator + "提交了BUG:" + key;
String issueUrl = "http://jira2.quantgroup.cn/browse/" + key; String issueUrl = "http://jira2.quantgroup.cn/browse/" + key;
content.put("title", title); content.put("title", title);
content.put("text", "## " + title + "\n" + "### 概要:[" + summary + "](" + issueUrl + ")"+ "\n" + "- 优先级:" + priority + "\n" + "- 经办人:" + assignee); content.put("text", "### " + title + "\n" + "#### 概要:[" + summary + "](" + issueUrl + ")"+ "\n" + "- 优先级:" + priority + "\n" + "- 经办人:" + assignee);
markdown.put("markdown", content); markdown.put("markdown", content);
return JSON.toJSONString(markdown); return JSON.toJSONString(markdown);
} }
......
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