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);