DingDingUtils.java 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package com.fdkankan.modeling.utils;
  2. import com.dingtalk.api.DefaultDingTalkClient;
  3. import com.dingtalk.api.DingTalkClient;
  4. import com.dingtalk.api.request.OapiRobotSendRequest;
  5. import com.dingtalk.api.response.OapiRobotSendResponse;
  6. import com.fdkankan.utils.utils.Base64Converter;
  7. import com.fdkankan.modeling.constants.SysConstants;
  8. import com.taobao.api.ApiException;
  9. import org.slf4j.Logger;
  10. import org.slf4j.LoggerFactory;
  11. import org.springframework.beans.factory.annotation.Value;
  12. import org.springframework.stereotype.Component;
  13. import javax.crypto.Mac;
  14. import javax.crypto.spec.SecretKeySpec;
  15. import java.io.UnsupportedEncodingException;
  16. import java.net.URLEncoder;
  17. import java.security.InvalidKeyException;
  18. import java.security.NoSuchAlgorithmException;
  19. import java.util.ArrayList;
  20. @Component
  21. public class DingDingUtils {
  22. private static final Logger log = LoggerFactory.getLogger(DingDingUtils.class);
  23. private static String environment;
  24. private static String token;
  25. private static String secret="SECca5af660ed882a67d8bda469095bf8454831528bd25bc7b1a3ff5f686109b9e5";
  26. @Value("${environment:dev}")
  27. public void setEnvironment(String environment){
  28. DingDingUtils.environment = environment;
  29. }
  30. @Value("${dingtalk.token:e712c41d917b303e21c1550ad9966b33dad874043f2f73fb347dce67a0a201bc}")
  31. public void setToken(String token) {
  32. DingDingUtils.token = token;
  33. }
  34. @Value("${dingtalk.secret:SECca5af660ed882a67d8bda469095bf8454831528bd25bc7b1a3ff5f686109b9e5}")
  35. public void setSign(String secret) {
  36. DingDingUtils.secret = secret;
  37. }
  38. private static String msgPattern = "**环境**: %s\n\n" +
  39. "**服务器名称**: %s\n\n" +
  40. "**失败原因**: %s\n\n" +
  41. "**num**: %s\n\n" +
  42. "**server-path**: %s\n\n" +
  43. "**algorithm-log**: [https://4dkk.4dage.com/build_log/%s/console.log](https://4dkk.4dage.com/build_log/%s/console.log)";
  44. public static void sendMsgToDingRobot(String reason,String serverPath,String num) throws ApiException, UnsupportedEncodingException, NoSuchAlgorithmException, InvalidKeyException {
  45. String content = String.format(msgPattern,environment, SysConstants.hostName,reason,num,serverPath,num,num);
  46. sendMsgToDingRobot(content);
  47. }
  48. public static void sendMsgToDingRobot(String content) throws ApiException, UnsupportedEncodingException, NoSuchAlgorithmException, InvalidKeyException {
  49. Long timestamp = System.currentTimeMillis();
  50. String sign = getSign(timestamp);
  51. DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/robot/send?" +
  52. "access_token="+token +
  53. "&timestamp=".concat(String.valueOf(timestamp)).concat("&sign=").concat(sign));
  54. OapiRobotSendRequest request = new OapiRobotSendRequest();
  55. request.setMsgtype("actionCard");
  56. OapiRobotSendRequest.Actioncard actioncard = new OapiRobotSendRequest.Actioncard();
  57. actioncard.setTitle("场景计算失败");
  58. actioncard.setText(content);
  59. request.setActionCard(actioncard);
  60. OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
  61. at.setAtMobiles(new ArrayList<>(0));
  62. // isAtAll类型如果不为Boolean,请升级至最新SDK
  63. at.setIsAtAll(true);
  64. request.setAt(at);
  65. OapiRobotSendResponse re = client.execute(request);
  66. System.out.println(re.getBody());
  67. }
  68. public static String getSign(Long timestamp) throws NoSuchAlgorithmException, UnsupportedEncodingException, InvalidKeyException {
  69. String stringToSign = timestamp + "\n" + secret;
  70. Mac mac = Mac.getInstance("HmacSHA256");
  71. mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
  72. byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
  73. System.out.println(new String(signData));
  74. return URLEncoder.encode(Base64Converter.encode(signData));
  75. }
  76. }