提供钉钉菜单查询

yun-zuoyi
zhang.xw 3 years ago
parent fe58b08062
commit c2571fa89a

@ -55,7 +55,9 @@ import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions; import com.aliyun.teautil.models.RuntimeOptions;
import com.dingtalk.api.DefaultDingTalkClient; import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient; import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiGettokenRequest;
import com.dingtalk.api.request.OapiV2UserGetbymobileRequest; import com.dingtalk.api.request.OapiV2UserGetbymobileRequest;
import com.dingtalk.api.response.OapiGettokenResponse;
import com.dingtalk.api.response.OapiV2UserGetResponse; import com.dingtalk.api.response.OapiV2UserGetResponse;
import com.dingtalk.api.response.OapiV2UserGetbymobileResponse; import com.dingtalk.api.response.OapiV2UserGetbymobileResponse;
import com.google.common.cache.Cache; import com.google.common.cache.Cache;
@ -72,6 +74,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpMethod;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*; 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 Long ACCESS_TOKEN_EXPIRE_TIME = 7080L;
private static final String ACCESS_TOKEN_KEY = "ding_talk:access_token"; 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() { private String getAccessToken() {
Object accessTokenCached = redisCore.getObject(ACCESS_TOKEN_KEY); Object accessTokenCached = redisCore.getObject(ACCESS_TOKEN_KEY);
if (accessTokenCached != null) { if (accessTokenCached != null) {
LOGGER.info("通过缓存获取到的钉钉token, key={},value={}", ACCESS_TOKEN_KEY, accessTokenCached);
return String.valueOf(accessTokenCached); return String.valueOf(accessTokenCached);
} }
Config config = new Config(); Config config = new Config();
@ -1368,6 +1374,7 @@ public class WhiteController extends CoreBaseController {
try { try {
GetAccessTokenResponse response = client.getAccessToken(getAccessTokenRequest); GetAccessTokenResponse response = client.getAccessToken(getAccessTokenRequest);
if (!StringUtils.isEmpty(response.body.accessToken)) { 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); redisCore.putObject(ACCESS_TOKEN_KEY, response.body.accessToken, ACCESS_TOKEN_EXPIRE_TIME);
} }
return response.body.accessToken; return response.body.accessToken;
@ -1510,7 +1517,7 @@ public class WhiteController extends CoreBaseController {
} }
Optional<OapiV2UserGetResponse> userInfo = Optional<OapiV2UserGetResponse> userInfo =
dingTalkService.getUserInfo(dingTalkUrl, dingTalkAppKey, dingTalkAppSecret, dingTalkTmpAuthCode); dingTalkService.getUserInfo(dingTalkUrl, getMenuAccessToken(dingTalkUrl, dingTalkAppKey, dingTalkAppSecret), dingTalkTmpAuthCode);
if (userInfo.isPresent()) { if (userInfo.isPresent()) {
String mobile = userInfo.get().getResult().getMobile(); String mobile = userInfo.get().getResult().getMobile();
if (StringUtils.isEmpty(mobile)) { if (StringUtils.isEmpty(mobile)) {
@ -1526,4 +1533,35 @@ public class WhiteController extends CoreBaseController {
} }
return sysUser; 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;
}
} }

@ -1,5 +1,5 @@
#\u672C\u673Aip #\u672C\u673Aip
impp.server.ip=192.168.1.56 impp.server.ip=192.168.6.140
#\u9879\u76EE\u7AEF\u53E3 #\u9879\u76EE\u7AEF\u53E3
server.port=8100 server.port=8100
#\u94FE\u8DEF\u8FFD\u8E2Azipkin\u63A7\u5236\u53F0ip\u5730\u5740 #\u94FE\u8DEF\u8FFD\u8E2Azipkin\u63A7\u5236\u53F0ip\u5730\u5740

@ -1,5 +1,7 @@
#\u4F7F\u7528\u914D\u7F6E #\u4F7F\u7528\u914D\u7F6E
spring.profiles.active=docker spring.profiles.active=docker
#\u9879\u76EE\u63CF\u8FF0\u4FE1\u606F\uFF08swagger\u4E2D\u663E\u5F0F\uFF09\uFF0C\u4E2D\u6587\u4F7F\u7528uncode\u8F6C\u7801 #\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 desc.application.name=\u6838\u5FC3\u7BA1\u7406\u540E\u53F0

Loading…
Cancel
Save