diff --git a/austin-cron/src/main/java/com/java3y/austin/cron/handler/RefreshDingDingAccessTokenHandler.java b/austin-cron/src/main/java/com/java3y/austin/cron/handler/RefreshDingDingAccessTokenHandler.java
index 0f35987..9ec3c95 100644
--- a/austin-cron/src/main/java/com/java3y/austin/cron/handler/RefreshDingDingAccessTokenHandler.java
+++ b/austin-cron/src/main/java/com/java3y/austin/cron/handler/RefreshDingDingAccessTokenHandler.java
@@ -68,7 +68,7 @@ public class RefreshDingDingAccessTokenHandler {
* @param account
* @return
*/
- private String getAccessToken(DingDingWorkNoticeAccount account) {
+ public String getAccessToken(DingDingWorkNoticeAccount account) {
String accessToken = "";
try {
DingTalkClient client = new DefaultDingTalkClient(URL);
diff --git a/austin-cron/src/main/java/com/java3y/austin/cron/handler/RefreshGeTuiAccessTokenHandler.java b/austin-cron/src/main/java/com/java3y/austin/cron/handler/RefreshGeTuiAccessTokenHandler.java
index 678b0eb..62dc6e0 100644
--- a/austin-cron/src/main/java/com/java3y/austin/cron/handler/RefreshGeTuiAccessTokenHandler.java
+++ b/austin-cron/src/main/java/com/java3y/austin/cron/handler/RefreshGeTuiAccessTokenHandler.java
@@ -67,7 +67,7 @@ public class RefreshGeTuiAccessTokenHandler {
* @param account
* @return
*/
- private String getAccessToken(GeTuiAccount account) {
+ public String getAccessToken(GeTuiAccount account) {
String accessToken = "";
try {
String url = "https://restapi.getui.com/v2/" + account.getAppId() + "/auth";
diff --git a/austin-handler/pom.xml b/austin-handler/pom.xml
index 94ca8bb..70099ff 100644
--- a/austin-handler/pom.xml
+++ b/austin-handler/pom.xml
@@ -53,6 +53,10 @@
com.alipay.sdk
alipay-sdk-java
+
+ com.java3y.austin
+ austin-cron
+
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/DingDingWorkNoticeHandler.java b/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/DingDingWorkNoticeHandler.java
index a2d3bef..b0fb26d 100644
--- a/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/DingDingWorkNoticeHandler.java
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/DingDingWorkNoticeHandler.java
@@ -21,6 +21,7 @@ import com.java3y.austin.common.dto.account.DingDingWorkNoticeAccount;
import com.java3y.austin.common.dto.model.DingDingWorkContentModel;
import com.java3y.austin.common.enums.ChannelType;
import com.java3y.austin.common.enums.SendMessageType;
+import com.java3y.austin.cron.handler.RefreshDingDingAccessTokenHandler;
import com.java3y.austin.handler.handler.BaseHandler;
import com.java3y.austin.handler.handler.Handler;
import com.java3y.austin.support.config.SupportThreadPoolConfig;
@@ -54,6 +55,8 @@ public class DingDingWorkNoticeHandler extends BaseHandler implements Handler {
private StringRedisTemplate redisTemplate;
@Autowired
private LogUtils logUtils;
+ @Autowired
+ private RefreshDingDingAccessTokenHandler refreshDingDingAccessTokenHandler;
public DingDingWorkNoticeHandler() {
channelCode = ChannelType.DING_DING_WORK_NOTICE.getCode();
@@ -70,7 +73,7 @@ public class DingDingWorkNoticeHandler extends BaseHandler implements Handler {
try {
DingDingWorkNoticeAccount account = accountUtils.getAccountById(taskInfo.getSendAccount(), DingDingWorkNoticeAccount.class);
OapiMessageCorpconversationAsyncsendV2Request request = assembleParam(account, taskInfo);
- String accessToken = redisTemplate.opsForValue().get(SendAccountConstant.DING_DING_ACCESS_TOKEN_PREFIX + taskInfo.getSendAccount());
+ String accessToken = getAccessToken(account, Long.valueOf(taskInfo.getSendAccount()));
OapiMessageCorpconversationAsyncsendV2Response response = new DefaultDingTalkClient(SEND_URL).execute(request, accessToken);
// 发送成功后记录TaskId,用于消息撤回(支持当天的)
@@ -183,7 +186,7 @@ public class DingDingWorkNoticeHandler extends BaseHandler implements Handler {
SupportThreadPoolConfig.getPendingSingleThreadPool().execute(() -> {
try {
DingDingWorkNoticeAccount account = accountUtils.getAccountById(messageTemplate.getSendAccount(), DingDingWorkNoticeAccount.class);
- String accessToken = redisTemplate.opsForValue().get(SendAccountConstant.DING_DING_ACCESS_TOKEN_PREFIX + messageTemplate.getSendAccount());
+ String accessToken = getAccessToken(account, Long.valueOf(messageTemplate.getSendAccount()));
while (redisTemplate.opsForList().size(DING_DING_RECALL_KEY_PREFIX + messageTemplate.getId()) > 0) {
String taskId = redisTemplate.opsForList().leftPop(DING_DING_RECALL_KEY_PREFIX + messageTemplate.getId());
DingTalkClient client = new DefaultDingTalkClient(RECALL_URL);
@@ -205,7 +208,7 @@ public class DingDingWorkNoticeHandler extends BaseHandler implements Handler {
public void pull(Long accountId) {
try {
DingDingWorkNoticeAccount account = accountUtils.getAccountById(accountId.intValue(), DingDingWorkNoticeAccount.class);
- String accessToken = redisTemplate.opsForValue().get(SendAccountConstant.DING_DING_ACCESS_TOKEN_PREFIX + accountId);
+ String accessToken = getAccessToken(account, accountId);
DingTalkClient client = new DefaultDingTalkClient(PULL_URL);
OapiMessageCorpconversationGetsendresultRequest req = new OapiMessageCorpconversationGetsendresultRequest();
req.setAgentId(Long.valueOf(account.getAgentId()));
@@ -215,5 +218,26 @@ public class DingDingWorkNoticeHandler extends BaseHandler implements Handler {
log.error("DingDingWorkNoticeHandler#pull fail:{}", Throwables.getStackTraceAsString(e));
}
}
+
+ /**
+ * 获取第三方token
+ *
+ * @param account 钉钉工作消息 账号信息
+ * @param accountId 账号ID
+ * @return token
+ */
+ private String getAccessToken(DingDingWorkNoticeAccount account, Long accountId) {
+ String accessToken = redisTemplate.opsForValue().get(SendAccountConstant.DING_DING_ACCESS_TOKEN_PREFIX + accountId);
+ if (StrUtil.isNotBlank(accessToken)) {
+ return accessToken;
+ }
+ accessToken = refreshDingDingAccessTokenHandler.getAccessToken(account);
+ if (StrUtil.isNotBlank(accessToken)) {
+ redisTemplate.opsForValue().set(SendAccountConstant.DING_DING_ACCESS_TOKEN_PREFIX + accountId, accessToken);
+ } else {
+ log.error("DingDingWorkNoticeHandler#getAccessToken fail accessToken{} accountId{} ", accessToken, accountId);
+ }
+ return accessToken;
+ }
}
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/PushHandler.java b/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/PushHandler.java
index dfefcb0..1873de5 100644
--- a/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/PushHandler.java
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/PushHandler.java
@@ -2,6 +2,7 @@ package com.java3y.austin.handler.handler.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
import cn.hutool.http.ContentType;
import cn.hutool.http.Header;
import cn.hutool.http.HttpRequest;
@@ -12,6 +13,7 @@ import com.java3y.austin.common.domain.TaskInfo;
import com.java3y.austin.common.dto.account.GeTuiAccount;
import com.java3y.austin.common.dto.model.PushContentModel;
import com.java3y.austin.common.enums.ChannelType;
+import com.java3y.austin.cron.handler.RefreshGeTuiAccessTokenHandler;
import com.java3y.austin.handler.domain.push.PushParam;
import com.java3y.austin.handler.domain.push.getui.BatchSendPushParam;
import com.java3y.austin.handler.domain.push.getui.SendPushParam;
@@ -51,6 +53,8 @@ public class PushHandler extends BaseHandler implements Handler {
private AccountUtils accountUtils;
@Autowired
private StringRedisTemplate redisTemplate;
+ @Autowired
+ private RefreshGeTuiAccessTokenHandler refreshGeTuiAccessTokenHandler;
@Override
@@ -58,7 +62,7 @@ public class PushHandler extends BaseHandler implements Handler {
try {
GeTuiAccount account = accountUtils.getAccountById(taskInfo.getSendAccount(), GeTuiAccount.class);
- String token = redisTemplate.opsForValue().get(SendAccountConstant.GE_TUI_ACCESS_TOKEN_PREFIX + taskInfo.getSendAccount());
+ String token = getAccessToken(taskInfo, account);
PushParam pushParam = PushParam.builder().token(token).appId(account.getAppId()).taskInfo(taskInfo).build();
String result;
@@ -145,6 +149,26 @@ public class PushHandler extends BaseHandler implements Handler {
return taskId;
}
+ /**
+ * 获取第三方token
+ *
+ * @param taskInfo 发送任务信息
+ * @param account 个推账号时的元信息
+ * @return token
+ */
+ private String getAccessToken(TaskInfo taskInfo, GeTuiAccount account) {
+ String token = redisTemplate.opsForValue().get(SendAccountConstant.GE_TUI_ACCESS_TOKEN_PREFIX + taskInfo.getSendAccount());
+ if (StrUtil.isNotBlank(token)) {
+ return token;
+ }
+ token = refreshGeTuiAccessTokenHandler.getAccessToken(account);
+ if (StrUtil.isNotBlank(token)) {
+ redisTemplate.opsForValue().set(SendAccountConstant.GE_TUI_ACCESS_TOKEN_PREFIX + taskInfo.getSendAccount(), token);
+ } else {
+ log.error("PushHandler#getAccessToken fail taskInfo:{} account:{}", taskInfo, account);
+ }
+ return token;
+ }
private SendPushParam assembleParam(PushContentModel pushContentModel) {
return assembleParam(pushContentModel, null);