From ca2417166fe917aeb45d08df6ff152f9c7a0060a Mon Sep 17 00:00:00 2001 From: liurunyu <lry9898@163.com> Date: 星期日, 27 四月 2025 10:57:17 +0800 Subject: [PATCH] 修改拦载器 --- pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/DingTalk.java | 162 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 162 insertions(+), 0 deletions(-) diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/DingTalk.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/DingTalk.java new file mode 100644 index 0000000..e283c52 --- /dev/null +++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/DingTalk.java @@ -0,0 +1,162 @@ +package com.dy.pipIrrGlobal.config; + +import com.dingtalk.api.DefaultDingTalkClient; +import com.dingtalk.api.DingTalkClient; +import com.dingtalk.api.request.OapiRobotSendRequest; +import com.dingtalk.api.response.OapiRobotSendResponse; +import com.taobao.api.ApiException; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.codec.binary.Base64; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +/** + * @author ZhuBaoMin + * @date 2024-07-31 9:20 + * @LastEditTime 2024-07-31 9:20 + * @Description 閽夐拤瀹㈡埛绔伐鍏风被 + */ +@Slf4j +@Component +public class DingTalk { + private static final String dingTalkConfigPriFix = "dingtalk"; + private static final Map<String, Option> optionsMap = new HashMap(); + + class Option{ + public Boolean enable ; + public String robotUrl ; + public String robotAccessToken ; + public String secret ; + public Boolean atAll ; + public String mobile ; + } + /* + @Value("${dingtalk.robot.url}") + private String URL; + + @Value("${dingtalk.robot.access-token}") + private String CUSTOM_ROBOT_TOKEN; + + @Value("${dingtalk.robot.secret}") + private String SECRET; + + @Value("${dingtalk.at-all}") + private Boolean AT_ALL; + + @Value("${dingtalk.mobile}") + private String MOBILE; + */ + + private Option getOptions(String orgTag, Environment env){ + Option vo = null ; + try{ + vo = optionsMap.get(orgTag); + if(vo == null){ + vo = new Option(); + String enableStr = env.getProperty(dingTalkConfigPriFix + "." + orgTag + ".enable"); + if(enableStr != null && !enableStr.trim().equals("")){ + vo.enable = Boolean.valueOf(enableStr); + }else{ + vo.enable = true ; + } + vo.robotUrl = env.getProperty(dingTalkConfigPriFix + "." + orgTag + ".robot.url"); + vo.robotAccessToken = env.getProperty(dingTalkConfigPriFix + "." + orgTag + ".robot.access-token"); + vo.secret = env.getProperty(dingTalkConfigPriFix + "." + orgTag + ".robot.secret"); + String atAllStr = env.getProperty(dingTalkConfigPriFix + "." + orgTag + ".at-all"); + if(atAllStr != null && !atAllStr.trim().equals("")){ + vo.atAll = Boolean.valueOf(atAllStr); + }else{ + vo.atAll = true ; + } + vo.mobile = env.getProperty(dingTalkConfigPriFix + "." + orgTag + ".mobile"); + optionsMap.put(orgTag, vo) ; + } + }catch (Exception e){ + vo = null ; + } + return vo ; + } + + /** + * 鍚戦拤閽夌兢鍙戦�佹秷鎭� + * @param orgTag + * @param env + * @param message + */ + public void sendMessage(String orgTag, Environment env, String message) { + if(orgTag == null || orgTag.trim().equals("")){ + log.error("閽夐拤鍙戦�佹秷鎭紓甯革紝鏈烘瀯鏍囩涓虹┖"); + return; + } + if(env == null){ + log.error("閽夐拤鍙戦�佹秷鎭紓甯革紝Spring鐜涓虹┖"); + return; + } + if(message == null || message.trim().equals("")){ + log.error("閽夐拤鍙戦�佹秷鎭紓甯革紝娑堟伅涓虹┖"); + return; + } + Option vo = this.getOptions(orgTag.trim(), env) ; + if(vo == null){ + log.error("閽夐拤鍙戦�佹秷鎭紓甯革紝閽夐拤閰嶇疆閿欒"); + return; + } + if(vo.enable){ + try { + Long timestamp = System.currentTimeMillis() ; + String stringToSign = timestamp + "\n" + vo.secret; + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(new SecretKeySpec(vo.secret.getBytes("UTF-8"), "HmacSHA256")); + byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8")); + String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8"); + + //瀹氫箟鏂囨湰鍐呭 + OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text(); + text.setContent(message); + //瀹氫箟 @瀵硅薄 + OapiRobotSendRequest.At at = new OapiRobotSendRequest.At(); + if(vo.atAll) { + at.setIsAtAll(true); + }else { + at.setAtMobiles(Collections.singletonList(vo.mobile)); + } + + OapiRobotSendRequest req = new OapiRobotSendRequest(); + //璁剧疆娑堟伅绫诲瀷 + req.setMsgtype("text"); + req.setText(text); + req.setAt(at); + + //sign瀛楁鍜宼imestamp瀛楁蹇呴』鎷兼帴鍒拌姹俇RL涓婏紝鍚﹀垯浼氬嚭鐜� 310000 鐨勯敊璇俊鎭� + DingTalkClient client = new DefaultDingTalkClient( vo.robotUrl + "?sign=" + sign + "×tamp=" + timestamp); + OapiRobotSendResponse rsp = client.execute(req, vo.robotAccessToken); + log.info(rsp.getBody()); + } catch (ApiException e) { + log.error("閽夐拤鍙戦�佹秷鎭紓甯�", e); + //e.printStackTrace(); + } catch (UnsupportedEncodingException e) { + log.error("閽夐拤鍙戦�佹秷鎭紓甯�", e); + //e.printStackTrace(); + } catch (NoSuchAlgorithmException e) { + log.error("閽夐拤鍙戦�佹秷鎭紓甯�", e); + //e.printStackTrace(); + } catch (InvalidKeyException e) { + log.error("閽夐拤鍙戦�佹秷鎭紓甯�", e); + //e.printStackTrace(); + } catch (Exception e){ + log.error("閽夐拤鍙戦�佹秷鎭紓甯�", e); + //e.printStackTrace(); + } + } + } +} -- Gitblit v1.8.0