From 2d0587169a80c2e7f799017e2d8e74090516a5b9 Mon Sep 17 00:00:00 2001 From: Administrator <zhubaomin> Date: 星期三, 31 七月 2024 11:44:49 +0800 Subject: [PATCH] 2024-07-31 朱宝民 钉钉消息推送 --- pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/resources/application.yml | 2 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeCtrl.java | 16 ++++- pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/resources/application.yml | 2 pipIrr-platform/pipIrr-global/pom.xml | 13 ++++ pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/DingTalk.java | 86 ++++++++++++++++++++++++++++ pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java | 12 ++++ pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml | 9 +++ 7 files changed, 134 insertions(+), 6 deletions(-) diff --git a/pipIrr-platform/pipIrr-global/pom.xml b/pipIrr-platform/pipIrr-global/pom.xml index 67e9c0e..4624b96 100644 --- a/pipIrr-platform/pipIrr-global/pom.xml +++ b/pipIrr-platform/pipIrr-global/pom.xml @@ -140,6 +140,19 @@ <artifactId>okhttp</artifactId> <version>4.9.2</version> </dependency> + + <!--閽夐拤娑堟伅鎺ㄩ��--> + <dependency> + <groupId>com.aliyun</groupId> + <artifactId>alibaba-dingtalk-service-sdk</artifactId> + <version>2.0.0</version> + </dependency> + + <dependency> + <groupId>commons-codec</groupId> + <artifactId>commons-codec</artifactId> + <version>1.15</version> + </dependency> </dependencies> <build> 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..67afbfc --- /dev/null +++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/DingTalk.java @@ -0,0 +1,86 @@ +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 org.apache.commons.codec.binary.Base64; +import org.springframework.beans.factory.annotation.Value; +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; + +/** + * @author ZhuBaoMin + * @date 2024-07-31 9:20 + * @LastEditTime 2024-07-31 9:20 + * @Description 閽夐拤瀹㈡埛绔伐鍏风被 + */ + +@Component +public class DingTalk { + @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; + + public void sendMessage(String message) { + try { + Long timestamp = System.currentTimeMillis(); + String secret = SECRET; + String stringToSign = timestamp + "\n" + secret; + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256")); + byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8")); + String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8"); + + //sign瀛楁鍜宼imestamp瀛楁蹇呴』鎷兼帴鍒拌姹俇RL涓婏紝鍚﹀垯浼氬嚭鐜� 310000 鐨勯敊璇俊鎭� + DingTalkClient client = new DefaultDingTalkClient( URL + "?sign=" + sign + "×tamp=" + timestamp); + OapiRobotSendRequest req = new OapiRobotSendRequest(); + /** + * 鍙戦�佹枃鏈秷鎭� + */ + //瀹氫箟鏂囨湰鍐呭 + OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text(); + text.setContent(message); + //瀹氫箟 @瀵硅薄 + OapiRobotSendRequest.At at = new OapiRobotSendRequest.At(); + if(AT_ALL) { + at.setIsAtAll(true); + }else { + at.setAtMobiles(Collections.singletonList(MOBILE)); + } + //璁剧疆娑堟伅绫诲瀷 + req.setMsgtype("text"); + req.setText(text); + req.setAt(at); + OapiRobotSendResponse rsp = client.execute(req, CUSTOM_ROBOT_TOKEN); + System.out.println(rsp.getBody()); + } catch (ApiException e) { + e.printStackTrace(); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); + } catch (InvalidKeyException e) { + throw new RuntimeException(e); + } + } +} diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml b/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml index e39b17a..fc10859 100644 --- a/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml +++ b/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml @@ -167,3 +167,12 @@ auto-statistics: startHour: 17 #寮�濮嬪皬鏃� 0 startMinute: 19 #寮�濮嬪垎閽� 5 + +#閽夐拤娑堟伅鎺ㄩ�� +dingtalk: + robot: + url: https://oapi.dingtalk.com/robot/send + access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f + secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7 + at-all: true + mobile: 18602657034 \ No newline at end of file diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeCtrl.java index 455015f..8fabaa3 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeCtrl.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeCtrl.java @@ -13,6 +13,7 @@ import com.dy.pipIrrGlobal.voSe.VoActiveCard; import com.dy.pipIrrProject.intake.qo.OnLineIntakesQO; import com.dy.pipIrrProject.result.ProjectResultCode; +import com.taobao.api.ApiException; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Content; @@ -51,6 +52,11 @@ @RequiredArgsConstructor public class IntakeCtrl { private final IntakeSv intakeSv; + + @GetMapping("/test") + public String sendMessage(String message) throws ApiException { + return intakeSv.sendMessage(message); + } /** * 瀹㈡埛绔姹傚緱鍒版墍鏈夊彇姘村彛鍚嶅瓧 @@ -142,7 +148,7 @@ @PostMapping(path = "add", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() - public BaseResponse<Boolean> add(@RequestBody @Valid PrIntake po, @Parameter(hidden = true) BindingResult bindingResult) { + public BaseResponse<Boolean> add(@RequestBody @Valid PrIntake po, @Parameter(hidden = true) BindingResult bindingResult) { DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); if (bindingResult != null && bindingResult.hasErrors()) { return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); @@ -152,7 +158,7 @@ return BaseResponseUtils.buildFail(ProjectResultCode.INTAKE_NAME_EXIST.getMessage()); } po.setOperateDt(new Date()); - po.setDeleted((byte)0); + po.setDeleted((byte) 0); Integer rec = Optional.ofNullable(intakeSv.addIntake(po)).orElse(0); if (rec == 0) { return BaseResponseUtils.buildFail(ProjectResultCode.ADD_INTAKE_FAIL.getMessage()); @@ -182,11 +188,11 @@ return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } List<Long> ids = intakeSv.getIntakeIdByNameExcludeId(po.getId(), po.getName()); - if (ids.size() > 0){ + if (ids.size() > 0) { return BaseResponseUtils.buildFail(ProjectResultCode.INTAKE_NAME_EXIST.getMessage()); } int count; - po.setOperateDt( new Date()); + po.setOperateDt(new Date()); try { count = this.intakeSv.update(po); } catch (Exception e) { @@ -286,6 +292,7 @@ /** * 鑾峰彇鍙栨按鍙e垪琛紙鍦ㄧ嚎鍜屼笉鍦ㄧ嚎锛� + * * @param qo * @return */ @@ -303,6 +310,7 @@ /** * 鏍规嵁鎿嶄綔鍛樿幏鍙栧父鐢ㄥ彇姘村彛锛堝湪绾垮拰涓嶅湪绾匡級 + * * @param operator * @return */ diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java index e3080e5..7ef112d 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java @@ -6,6 +6,7 @@ import com.dy.common.mw.protocol.Command; import com.dy.common.webUtil.BaseResponse; import com.dy.common.webUtil.QueryResultVo; +import com.dy.pipIrrGlobal.config.DingTalk; import com.dy.pipIrrGlobal.daoPr.PrDivideMapper; import com.dy.pipIrrGlobal.daoPr.PrIntakeMapper; import com.dy.pipIrrGlobal.pojoPr.PrIntake; @@ -47,6 +48,17 @@ protected static String mwUrlSendCom = "http://127.0.0.1:8070/rtuMw/com/send" ; + @Autowired + private DingTalk dingTalk; + + public String sendMessage(String message) { + try { + dingTalk.sendMessage(message); + } catch (Exception e) { + return "鍙戦�佸け璐�"; + } + return "鍙戦�佹垚鍔�"; + } /** * 娣诲姞鍙栨按鍙� diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/resources/application.yml b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/resources/application.yml index 24d6838..ceb5374 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/resources/application.yml +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/resources/application.yml @@ -15,4 +15,4 @@ #GenerateIdSetSuffixListener涓簲鐢紝鍙栧�艰寖鍥存槸0-99 idSuffix: ${pipIrr.project.idSuffix} #ConfigListener涓簲鐢� - #configFileNames: config-global.xml,config-demo.xml + #configFileNames: config-global.xml,config-demo.xml \ No newline at end of file diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/resources/application.yml b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/resources/application.yml index 8dc7ccd..b6c6612 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/resources/application.yml +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/resources/application.yml @@ -15,4 +15,4 @@ #GenerateIdSetSuffixListener涓簲鐢紝鍙栧�艰寖鍥存槸0-99 idSuffix: ${pipIrr.remote.idSuffix} #ConfigListener涓簲鐢� - #configFileNames: config-global.xml,config-demo.xml + #configFileNames: config-global.xml,config-demo.xml \ No newline at end of file -- Gitblit v1.8.0