DingTalkService.java 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package com.jjt.biz.service;
  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.jjt.biz.domain.RealTimeInfoVO;
  7. import com.jjt.biz.domain.WifiInfo;
  8. import com.jjt.biz.mapper.WifiInfoMapper;
  9. import com.jjt.common.core.redis.RedisCache;
  10. import com.jjt.framework.web.domain.server.Sys;
  11. import com.jjt.system.service.ISysConfigService;
  12. import com.taobao.api.ApiException;
  13. import org.apache.commons.codec.binary.Base64;
  14. import org.springframework.data.redis.core.RedisTemplate;
  15. import org.springframework.scheduling.annotation.EnableScheduling;
  16. import org.springframework.scheduling.annotation.Scheduled;
  17. import org.springframework.stereotype.Service;
  18. import javax.annotation.Resource;
  19. import javax.crypto.Mac;
  20. import javax.crypto.spec.SecretKeySpec;
  21. import java.io.UnsupportedEncodingException;
  22. import java.net.URLEncoder;
  23. import java.security.InvalidKeyException;
  24. import java.security.NoSuchAlgorithmException;
  25. import java.util.ArrayList;
  26. import java.util.Date;
  27. import java.util.List;
  28. import java.util.Map;
  29. /**
  30. * WIFI信息Service业务层处理
  31. *
  32. * @author ruoyi
  33. * @date 2023-07-06
  34. */
  35. @Service
  36. @EnableScheduling
  37. public class DingTalkService {
  38. @Resource
  39. private ISysConfigService sysConfigService;
  40. @Resource
  41. private RedisTemplate<String, Object> redisTemplate;
  42. @Scheduled(cron = "0/5 * * * * ?")
  43. public void sendMsg() {
  44. List<Map<String, Object>> list = new ArrayList<>();
  45. long s = System.currentTimeMillis();
  46. while (true) {
  47. //超过4秒,或者队列取空,则本次任务结束
  48. if (System.currentTimeMillis() - s > 4000) {
  49. break;
  50. }
  51. Object o = redisTemplate.opsForList().rightPop("nls:need_handler");
  52. if (o == null) {
  53. break;
  54. } else {
  55. Map<String, Object> map = (Map<String, Object>) o;
  56. list.add(map);
  57. }
  58. }
  59. try {
  60. if (list.size() == 0) {
  61. //如果队列中没有取到数据
  62. return;
  63. }
  64. RedisCache cache = new RedisCache();
  65. // cache.set
  66. Long timestamp = System.currentTimeMillis();
  67. String secret = sysConfigService.selectConfigByKey("dingtalk.scret");
  68. String webhook = sysConfigService.selectConfigByKey("dingtalk.webhook");
  69. String accessURL = sysConfigService.selectConfigByKey("web.access.url");
  70. String stringToSign = timestamp + "\n" + secret;
  71. Mac mac = Mac.getInstance("HmacSHA256");
  72. mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
  73. byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
  74. String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
  75. // System.out.println(sign);
  76. String uri = webhook + "&timestamp=" + timestamp + "&sign=" + sign;
  77. DingTalkClient client = new DefaultDingTalkClient(uri);
  78. OapiRobotSendRequest request = new OapiRobotSendRequest();
  79. request.setMsgtype("markdown");
  80. OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown();
  81. markdown.setTitle("恶意动态预警");
  82. String text = "###恶意动态预警\n";
  83. for (Map<String, Object> wsMap : list) {
  84. String msgUrl = "http://api.map.baidu.com/marker?location=" + wsMap.get("lat") + "," + wsMap.get("lng") + "&title=恶意" + wsMap.get("type") + "&content=信息地址&output=html";
  85. text += "> 发现类型为”" + wsMap.get("keyword") + "“的恶意" + wsMap.get("type") + "\t[位置](" + msgUrl + ") \n\n";
  86. }
  87. System.err.println(text);
  88. markdown.setText(text);
  89. request.setMarkdown(markdown);
  90. OapiRobotSendResponse response = client.execute(request);
  91. } catch (NoSuchAlgorithmException e) {
  92. throw new RuntimeException(e);
  93. } catch (InvalidKeyException e) {
  94. throw new RuntimeException(e);
  95. } catch (UnsupportedEncodingException e) {
  96. throw new RuntimeException(e);
  97. } catch (ApiException e) {
  98. throw new RuntimeException(e);
  99. }
  100. }
  101. }