diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java index a6d33b7..27e6f38 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java @@ -55,7 +55,9 @@ import com.aliyun.teaopenapi.models.Config; import com.aliyun.teautil.models.RuntimeOptions; import com.dingtalk.api.DefaultDingTalkClient; import com.dingtalk.api.DingTalkClient; +import com.dingtalk.api.request.OapiGettokenRequest; 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.google.common.cache.Cache; @@ -72,6 +74,7 @@ import org.slf4j.LoggerFactory; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpMethod; import org.springframework.util.ObjectUtils; import org.springframework.web.bind.annotation.*; @@ -1169,6 +1172,8 @@ public class WhiteController extends CoreBaseController { private static final Long ACCESS_TOKEN_EXPIRE_TIME = 7080L; private static final String ACCESS_TOKEN_KEY = "ding_talk:access_token"; + private static final String ACCESS_MENU_TOKEN_KEY = "ding_talk:menu_access_token"; + /** * 钉钉单聊机器人批量发送消息 * @@ -1349,6 +1354,7 @@ public class WhiteController extends CoreBaseController { private String getAccessToken() { Object accessTokenCached = redisCore.getObject(ACCESS_TOKEN_KEY); if (accessTokenCached != null) { + LOGGER.info("通过缓存获取到的钉钉token, key={},value={}", ACCESS_TOKEN_KEY, accessTokenCached); return String.valueOf(accessTokenCached); } Config config = new Config(); @@ -1368,6 +1374,7 @@ public class WhiteController extends CoreBaseController { try { GetAccessTokenResponse response = client.getAccessToken(getAccessTokenRequest); if (!StringUtils.isEmpty(response.body.accessToken)) { + LOGGER.info("插入钉钉token缓存, key={},value={}", ACCESS_TOKEN_KEY, response.body.accessToken); redisCore.putObject(ACCESS_TOKEN_KEY, response.body.accessToken, ACCESS_TOKEN_EXPIRE_TIME); } return response.body.accessToken; @@ -1510,7 +1517,7 @@ public class WhiteController extends CoreBaseController { } Optional userInfo = - dingTalkService.getUserInfo(dingTalkUrl, dingTalkAppKey, dingTalkAppSecret, dingTalkTmpAuthCode); + dingTalkService.getUserInfo(dingTalkUrl, getMenuAccessToken(dingTalkUrl, dingTalkAppKey, dingTalkAppSecret), dingTalkTmpAuthCode); if (userInfo.isPresent()) { String mobile = userInfo.get().getResult().getMobile(); if (StringUtils.isEmpty(mobile)) { @@ -1526,4 +1533,35 @@ public class WhiteController extends CoreBaseController { } return sysUser; } + + /** + * 获取accessToken + * + * @return + */ + private String getMenuAccessToken(String dingUrl, String appKey, String appSecret) { + Object accessTokenCached = redisCore.getObject(ACCESS_MENU_TOKEN_KEY); + if (accessTokenCached != null) { + LOGGER.info("通过缓存获取到的钉钉menu_token, key={},value={}", ACCESS_MENU_TOKEN_KEY, accessTokenCached); + return String.valueOf(accessTokenCached); + } + String result = null; + DefaultDingTalkClient client = new DefaultDingTalkClient(dingUrl + "/gettoken"); + OapiGettokenRequest request = new OapiGettokenRequest(); + request.setAppkey(appKey); + request.setAppsecret(appSecret); + request.setHttpMethod(HttpMethod.GET.name()); + try { + OapiGettokenResponse response = client.execute(request); + result = response.isSuccess() ? response.getAccessToken() : null; + if (!StringUtils.isEmpty(result)) { + LOGGER.info("插入钉钉menu_token缓存, key={},value={}", ACCESS_MENU_TOKEN_KEY, response.getAccessToken()); + redisCore.putObject(ACCESS_MENU_TOKEN_KEY, response.getAccessToken(), ACCESS_TOKEN_EXPIRE_TIME); + } + } catch (ApiException e) { + LOGGER.error("获取钉钉AccessToken错误", e); + throw new ImppBusiException("获取钉钉AccessToken错误 " + e.getMessage()); + } + return result; + } } diff --git a/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties b/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties index 81cd07f..2cae99b 100644 --- a/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties +++ b/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties @@ -1,5 +1,5 @@ #\u672C\u673Aip -impp.server.ip=192.168.1.56 +impp.server.ip=192.168.6.140 #\u9879\u76EE\u7AEF\u53E3 server.port=8100 #\u94FE\u8DEF\u8FFD\u8E2Azipkin\u63A7\u5236\u53F0ip\u5730\u5740 diff --git a/modules/i3plus-core-apiservice/src/main/resources/application.properties b/modules/i3plus-core-apiservice/src/main/resources/application.properties index 7ed4297..e5c1776 100644 --- a/modules/i3plus-core-apiservice/src/main/resources/application.properties +++ b/modules/i3plus-core-apiservice/src/main/resources/application.properties @@ -1,5 +1,7 @@ #\u4F7F\u7528\u914D\u7F6E spring.profiles.active=docker + + #\u9879\u76EE\u63CF\u8FF0\u4FE1\u606F\uFF08swagger\u4E2D\u663E\u5F0F\uFF09\uFF0C\u4E2D\u6587\u4F7F\u7528uncode\u8F6C\u7801 desc.application.name=\u6838\u5FC3\u7BA1\u7406\u540E\u53F0