From 3059e5f8fcda215521d93935b3eea409b3775a72 Mon Sep 17 00:00:00 2001 From: xhy <203152807@qq.com> Date: Sun, 3 Dec 2023 22:21:10 +0800 Subject: [PATCH] =?UTF-8?q?refactor(=E9=92=89=E9=92=89Utils=E9=87=8D?= =?UTF-8?q?=E6=9E=84):?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.yml | 17 -- .../message/param/ding/DingFileParam.java | 1 + .../ding/strategy/FileParamStrategy.java | 2 - .../server/util/channel/DingUtils.java | 169 +++++++++++------- .../server/util/channel/WeChatUtils.java | 3 +- .../src/main/resources/application.yml | 11 -- deliver-front/vue/components.d.ts | 1 - 7 files changed, 109 insertions(+), 95 deletions(-) delete mode 100644 deliver-backend/deliver-backend-admin/src/main/resources/application.yml delete mode 100644 deliver-backend/deliver-backend-server/src/main/resources/application.yml diff --git a/deliver-backend/deliver-backend-admin/src/main/resources/application.yml b/deliver-backend/deliver-backend-admin/src/main/resources/application.yml deleted file mode 100644 index 4ddeb3b2..00000000 --- a/deliver-backend/deliver-backend-admin/src/main/resources/application.yml +++ /dev/null @@ -1,17 +0,0 @@ -server: - port: 9090 - servlet: - context-path: /admin -spring: - application: - name: deliver-admin - profiles: - active: dev - servlet: - multipart: - max-file-size: 30MB - max-request-size: 40MB - -# 对称加密 -aes: - key: oszero diff --git a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/message/param/ding/DingFileParam.java b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/message/param/ding/DingFileParam.java index 0578cad4..bf7085e7 100644 --- a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/message/param/ding/DingFileParam.java +++ b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/message/param/ding/DingFileParam.java @@ -18,6 +18,7 @@ public class DingFileParam extends DingMessageParam { private FileMessage msg; + @Data public static class FileMessage { private String msgtype; diff --git a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/pretreatment/link/paramcheck/ding/strategy/FileParamStrategy.java b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/pretreatment/link/paramcheck/ding/strategy/FileParamStrategy.java index 04f9da05..7ac8e759 100644 --- a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/pretreatment/link/paramcheck/ding/strategy/FileParamStrategy.java +++ b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/pretreatment/link/paramcheck/ding/strategy/FileParamStrategy.java @@ -3,8 +3,6 @@ package com.oszero.deliver.server.pretreatment.link.paramcheck.ding.strategy; import cn.hutool.json.JSONUtil; import com.oszero.deliver.server.enums.MessageTypeEnum; import com.oszero.deliver.server.message.param.ding.DingFileParam; -import com.oszero.deliver.server.message.param.ding.DingTextParam; -import com.oszero.deliver.server.message.param.ding.DingVoiceParam; import com.oszero.deliver.server.model.dto.SendTaskDto; import com.oszero.deliver.server.pretreatment.link.paramcheck.ParamStrategy; import org.springframework.stereotype.Component; diff --git a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/util/channel/DingUtils.java b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/util/channel/DingUtils.java index cc8b377b..42539313 100644 --- a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/util/channel/DingUtils.java +++ b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/util/channel/DingUtils.java @@ -3,24 +3,16 @@ package com.oszero.deliver.server.util.channel; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.hutool.json.JSONUtil; -import com.dingtalk.api.DefaultDingTalkClient; -import com.dingtalk.api.DingTalkClient; -import com.dingtalk.api.request.OapiGettokenRequest; -import com.dingtalk.api.request.OapiV2UserGetRequest; -import com.dingtalk.api.request.OapiV2UserGetbymobileRequest; -import com.dingtalk.api.response.OapiGettokenResponse; -import com.dingtalk.api.response.OapiV2UserGetResponse; -import com.dingtalk.api.response.OapiV2UserGetbymobileResponse; import com.oszero.deliver.server.exception.MessageException; import com.oszero.deliver.server.model.app.DingApp; import com.oszero.deliver.server.model.dto.SendTaskDto; -import com.taobao.api.ApiException; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import java.util.List; import java.util.Map; +import java.util.Objects; /** * 渠道-钉钉工具类 @@ -40,6 +32,9 @@ public class DingUtils { */ public String getAccessToken(DingApp dingApp) { + String appKey = dingApp.getAppKey(); + String appSecret = dingApp.getAppSecret(); + @Data class DingAccessTokenBody { @@ -50,21 +45,22 @@ public class DingUtils { } - DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken"); - OapiGettokenRequest request = new OapiGettokenRequest(); - request.setAppkey(dingApp.getAppKey()); - request.setAppsecret(dingApp.getAppSecret()); - request.setHttpMethod("GET"); - OapiGettokenResponse response; - try { - response = client.execute(request); - } catch (ApiException apiException) { - // TODO:2023/10/23 后续日志记录 - throw new MessageException("获取 tenantAccessTokens 失败"); - } + DingAccessTokenBody dingAccessTokenBody; + try(HttpResponse response = HttpRequest.get("https://oapi.dingtalk.com/gettoken?appkey="+appKey+"&appsecret="+appSecret) + .execute()){ + + dingAccessTokenBody = JSONUtil.toBean(response.body(), DingAccessTokenBody.class); - DingAccessTokenBody dingAccessTokenBody = JSONUtil.toBean(response.getBody(), DingAccessTokenBody.class); + if(!Objects.equals(dingAccessTokenBody.getErrcode(),0)){ + throw new MessageException("获取钉钉 Token 失败:" + dingAccessTokenBody.getErrmsg()); + } + }catch (Exception e){ + throw new MessageException("钉钉获取 Token 接口调用失败!!!"); + } + log.info("获取钉钉 Token 成功!"); return dingAccessTokenBody.getAccessToken(); + + } /** @@ -86,17 +82,29 @@ public class DingUtils { Map paramMap = sendTaskDto.getParamMap(); String body = JSONUtil.toJsonStr(paramMap); - HttpResponse response = HttpRequest.post("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=" + accessToken) + + + DingSendInfoResponseBody dingSendInfoResponseBody; + + try (HttpResponse response = HttpRequest.post("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=" + accessToken) .header("Content-Type", "application/json; charset=utf-8") .body(body) - .execute(); + .execute();){ - log.info("发送钉钉工作通知消息成功,钉钉响应为:{}", response.body()); + dingSendInfoResponseBody = JSONUtil.toBean(response.body(), DingSendInfoResponseBody.class); - DingSendInfoResponseBody dingSendInfoResponseBody = JSONUtil.toBean(response.body(), DingSendInfoResponseBody.class); - if (dingSendInfoResponseBody.errcode != 0) { - throw new MessageException("DingDing消息发送失败!!!"); + if(!Objects.equals(dingSendInfoResponseBody.getErrcode(),0)){ + throw new MessageException("获取钉钉 Token 失败:" + dingSendInfoResponseBody.getErrmsg()); + } + + }catch (Exception e){ + throw new MessageException("钉钉发送工作通知接口调用失败!!!"); } + + + log.info("发送钉钉工作通知消息成功 !!!"); + + } /** @@ -118,16 +126,25 @@ public class DingUtils { // 选择请求地址 String url = "https://api.dingtalk.com" + (paramMap.containsKey("userIds") ? "/v1.0/robot/oToMessages/batchSend" : "/v1.0/robot/groupMessages/send"); String body = JSONUtil.toJsonStr(paramMap); - HttpResponse response = HttpRequest.post(url) + DingSendInfoResponseBody dingSendInfoResponseBody; + + try (HttpResponse response = HttpRequest.post(url) .header("x-acs-dingtalk-access-token", accessToken) .header("Content-Type", "application/json") - .body(body).execute(); - log.info("发送钉钉机器人消息成功,钉钉响应为:{}", response.body()); + .body(body).execute()){ + + dingSendInfoResponseBody = JSONUtil.toBean(response.body(), DingSendInfoResponseBody.class); + + + if (!(dingSendInfoResponseBody.invalidStaffIdList.isEmpty() && dingSendInfoResponseBody.flowControlledStaffIdList.isEmpty())) { + throw new MessageException("发送钉钉机器人消息失败!!!"); + } - DingSendInfoResponseBody dingSendInfoResponseBody = JSONUtil.toBean(response.body(), DingSendInfoResponseBody.class); - if (!(dingSendInfoResponseBody.invalidStaffIdList.isEmpty() && dingSendInfoResponseBody.flowControlledStaffIdList.isEmpty())) { - throw new MessageException("钉钉消息发送失败!!!"); + }catch (Exception e){ + throw new MessageException("钉钉发送钉钉机器人消息接口调用失败!!!"); } + + log.info("发送钉钉机器人消息成功 !!!"); } /** @@ -138,6 +155,13 @@ public class DingUtils { */ public void checkId(String accessToken, String userId) { + @Data + class RequestBody{ + private String language; + private String userid; + } + + @Data class DingUserInfoBody { private Integer errcode; @@ -146,22 +170,30 @@ public class DingUtils { } - DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/get"); - OapiV2UserGetRequest req = new OapiV2UserGetRequest(); - req.setUserid(userId); - req.setLanguage("zh_CN"); - req.setHttpMethod("POST"); - OapiV2UserGetResponse rsp; - try { - rsp = client.execute(req, accessToken); - } catch (ApiException apiException) { - throw new MessageException("钉钉用户 userId 校验失败!!!"); - } - DingUserInfoBody dingUserInfoBody = JSONUtil.toBean(rsp.getBody(), DingUserInfoBody.class); - if (dingUserInfoBody.getErrcode() != 0) { - throw new MessageException("钉钉用户 userId 校验失败!!!"); + RequestBody requestBody = new RequestBody(); + requestBody.setLanguage("zh_CN"); + requestBody.setUserid(userId); + + + DingUserInfoBody dingUserInfoBody; + + + try (HttpResponse response = HttpRequest.post("https://oapi.dingtalk.com/topapi/v2/user/get?access_token="+accessToken).body(JSONUtil.toJsonStr(requestBody)) + .execute()){ + dingUserInfoBody = JSONUtil.toBean(response.body(), DingUserInfoBody.class); + + if(!Objects.equals(dingUserInfoBody.getErrcode(),0)){ + throw new MessageException("钉钉校验 userId 是否存在失败:" + dingUserInfoBody.getErrmsg()); + } + + }catch (Exception e){ + throw new MessageException("钉钉校验 userId 是否存在接口调用失败!!!"); } + + log.info("钉钉校验 userId 是否存在成功 !!!"); + + } /** @@ -174,10 +206,16 @@ public class DingUtils { public String getUserIdByPhone(String accessToken, String phone) { + @Data + class RequestBody{ + private String mobile; + private boolean support_exclusive_account_search; + } + @Data class Result { private String userid; - private String[] exclusiveAccountUseridList; + private String[] exclusive_account_userid_list; } @Data class DingResponseBody { @@ -186,21 +224,28 @@ public class DingUtils { private Result result; private String errmsg; } - DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/getbymobile"); - OapiV2UserGetbymobileRequest req = new OapiV2UserGetbymobileRequest(); - req.setMobile(phone); - req.setSupportExclusiveAccountSearch(true); - OapiV2UserGetbymobileResponse rsp; - try { - rsp = client.execute(req, accessToken); - } catch (ApiException e) { - throw new MessageException("转换 userId 失败 !!!"); - } - DingResponseBody dingResponseBody = JSONUtil.toBean(rsp.getBody(), DingResponseBody.class); - if (dingResponseBody.getErrcode() != 0) { - throw new MessageException("转换 userId 失败 !!!"); + + RequestBody requestBody = new RequestBody(); + requestBody.setMobile(phone); + requestBody.setSupport_exclusive_account_search(true); + + DingResponseBody dingResponseBody; + + try (HttpResponse response = HttpRequest.post("https://oapi.dingtalk.com/topapi/v2/user/getbymobile?access_token="+accessToken).body(JSONUtil.toJsonStr(requestBody)) + .execute()){ + dingResponseBody = JSONUtil.toBean(response.body(), DingResponseBody.class); + + if(!Objects.equals(dingResponseBody.getErrcode(),0)){ + throw new MessageException("钉钉根据电话号码获取 userId 失败:" + dingResponseBody.getErrmsg()); + } + + }catch (Exception e){ + throw new MessageException("钉钉根据电话号码获取 userId 接口调用失败!!!"); } + + log.info("钉钉根据电话号码获取 userId 成功 !!!"); + return dingResponseBody.getResult().getUserid(); } } diff --git a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/util/channel/WeChatUtils.java b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/util/channel/WeChatUtils.java index e7897e5c..fe0f4041 100644 --- a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/util/channel/WeChatUtils.java +++ b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/util/channel/WeChatUtils.java @@ -3,7 +3,6 @@ package com.oszero.deliver.server.util.channel; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.hutool.json.JSONUtil; -import com.lark.oapi.service.task.v1.model.UserIdList; import com.oszero.deliver.server.exception.MessageException; import com.oszero.deliver.server.model.app.WeChatApp; import com.oszero.deliver.server.model.dto.SendTaskDto; @@ -56,7 +55,7 @@ public class WeChatUtils { throw new MessageException("企业微信获取 Token 接口调用失败!!!"); } log.info("获取企微 Token 成功!"); - return weChatResponse.getAccess_token(); + return weChatResponse.getAccess_token(); } /** diff --git a/deliver-backend/deliver-backend-server/src/main/resources/application.yml b/deliver-backend/deliver-backend-server/src/main/resources/application.yml deleted file mode 100644 index 488f3e2b..00000000 --- a/deliver-backend/deliver-backend-server/src/main/resources/application.yml +++ /dev/null @@ -1,11 +0,0 @@ -server: - port: 7070 -spring: - application: - name: deliver-server - profiles: - active: dev - -# 对称加密 -aes: - key: oszero \ No newline at end of file diff --git a/deliver-front/vue/components.d.ts b/deliver-front/vue/components.d.ts index 523f42c7..3c605da2 100644 --- a/deliver-front/vue/components.d.ts +++ b/deliver-front/vue/components.d.ts @@ -46,7 +46,6 @@ declare module 'vue' { ATable: typeof import('ant-design-vue/es')['Table'] ATag: typeof import('ant-design-vue/es')['Tag'] ATooltip: typeof import('ant-design-vue/es')['Tooltip'] - AUploadDragger: typeof import('ant-design-vue/es')['UploadDragger'] Banner: typeof import('./src/components/Banner/index.vue')['default'] Code: typeof import('./src/components/Code/index.vue')['default'] Echarts: typeof import('./src/components/Echarts/index.vue')['default'] -- Gitee