Browse Source

修改:山东通代码调整

dev
wangxianzhang 3 years ago
parent
commit
2f3b402e40
  1. 41
      epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/SdtAccessTokenRefreshTask.java
  2. 9
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/ThirdOpenFeignClient.java
  3. 5
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/entity/SdtAppInfoEntity.java
  4. 49
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/SdtServiceImpl.java
  5. 5
      epmet-module/epmet-third/epmet-third-server/src/main/resources/db/migration/V0.0.19__sdt_create_corp_info.sql

41
epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/SdtAccessTokenRefreshTask.java

@ -0,0 +1,41 @@
/**
* Copyright (c) 2018 人人开源 All rights reserved.
*
* https://www.renren.io
*
* 版权所有侵权必究
*/
package com.epmet.task;
import com.epmet.commons.tools.utils.Result;
import com.epmet.feign.ThirdOpenFeignClient;
import com.epmet.service.TestTaskService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* 山东通接口调用凭证定时刷新
* @author wxz
* @date 2022/11/6 上午12:51
*/
@Component("sdtAccessTokenRefreshTask")
public class SdtAccessTokenRefreshTask implements ITask{
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private ThirdOpenFeignClient thirdOpenFeignClient;
@Override
public void run(String params){
logger.info("sdtAccessTokenRefreshTask定时任务正在执行,参数为:{}", params);
Result result = thirdOpenFeignClient.refreshAccessToken();
if(result.success()){
logger.info("sdtAccessTokenRefreshTask定时任务执行成功");
}else{
logger.error("sdtAccessTokenRefreshTask定时任务执行失败:"+result.getMsg());
}
}
}

9
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/ThirdOpenFeignClient.java

@ -118,4 +118,13 @@ public interface ThirdOpenFeignClient {
*/
@GetMapping("/third/sdt/getUserDetailByUserId")
Result<SdtStaffDetailResult> getUserDetailByUserId(@RequestParam("userId") String userId, @RequestParam("customerId") String customerId);
/**
* 刷新山东通token
* @author wxz
* @date 2022/11/2 22:11
* @return Result
*/
@GetMapping("/third/sdt/refreshAccessToken")
Result refreshAccessToken();
}

5
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/entity/SdtAppInfoEntity.java

@ -30,7 +30,10 @@ public class SdtAppInfoEntity extends BaseEpmetEntity {
* 组织ID
*/
private String corpId;
/**
* 应用id
*/
private String agentId;
/**
* 秘钥
*/

49
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/SdtServiceImpl.java

@ -72,7 +72,7 @@ public class SdtServiceImpl implements SdtService {
return;
}
SdtGetAccessTokenResult sdtResult = JSON.parseObject(stringResult.getMsg(), SdtGetAccessTokenResult.class);
SdtGetAccessTokenResult sdtResult = JSON.parseObject(stringResult.getData(), SdtGetAccessTokenResult.class);
if (!sdtResult.success()) {
log.error("【山东通】刷新accessToken失败:{}", sdtResult.getErrmsg());
return;
@ -88,7 +88,7 @@ public class SdtServiceImpl implements SdtService {
sdtAppInfoDao.updateById(updateEntity);
// token刷新了以后,要刷新缓存中的token,这样下次才能获取到最新的token
String key = RedisKeys.getOpenApiAccessTokenKey(customerIdInner);
String key = RedisKeys.getSdtAccessToken(customerIdInner);
redisUtils.set(key, access_token, expires_in);
});
@ -129,17 +129,14 @@ public class SdtServiceImpl implements SdtService {
*/
@Override
public String getCachedAccessToken(String customerId) {
String key = RedisKeys.getOpenApiAccessTokenKey(customerId);
String key = RedisKeys.getSdtAccessToken(customerId);
String accessToken = redisUtils.getString(key);
if (StringUtils.isNotBlank(accessToken)) {
return accessToken;
}
// db中查询
LambdaQueryWrapper<SdtAppInfoEntity> query = new LambdaQueryWrapper<>();
query.eq(SdtAppInfoEntity::getCustomerId, customerId);
SdtAppInfoEntity sdtAppInfoEntity = sdtAppInfoDao.selectOne(query);
SdtAppInfoEntity sdtAppInfoEntity = getSdtInfoByCustomerId(customerId);
if (sdtAppInfoEntity == null) {
log.error("【查询山东通AccessToken】失败,原因:该客户id没有配置山东通相关信息");
return null;
@ -148,22 +145,44 @@ public class SdtServiceImpl implements SdtService {
accessToken = sdtAppInfoEntity.getAccessToken();
Date expiresAt = sdtAppInfoEntity.getExpiresAt();
if (StringUtils.isNotBlank(accessToken)) {
redisUtils.set(key, accessToken, getExpireIn(expiresAt));
Long expireIn = getExpireIn(expiresAt);
if (StringUtils.isNotBlank(accessToken) && expireIn > 0) {
// 没过期,可以用
redisUtils.set(key, accessToken, expireIn);
return accessToken;
} else {
// 配置了appInfo,但是没有accessToken,刷新token,刷新缓存,然后重新从缓存中取
// 配置了appInfo,但是没有accessToken或者accessToken已经过期,刷新token,刷新缓存,然后重新从缓存中取
refreshAccessToken(customerId);
return redisUtils.getString(key);
}
}
/**
* 使用客户id查询山东通信息
* @author wxz
* @date 2022/11/6 上午12:25
* @param customerId
* @return SdtAppInfoEntity
*/
private SdtAppInfoEntity getSdtInfoByCustomerId(String customerId) {
LambdaQueryWrapper<SdtAppInfoEntity> query = new LambdaQueryWrapper<>();
query.eq(SdtAppInfoEntity::getCustomerId, customerId);
return sdtAppInfoDao.selectOne(query);
}
@Override
public SdtStaffInfoResult getUserInfoByCode(String authCode, String customerId) {
SdtAppInfoEntity sdtAppInfoEntity = getSdtInfoByCustomerId(customerId);
if (sdtAppInfoEntity == null) {
log.error("【查询山东通AccessToken】失败,原因:该客户id没有配置山东通相关信息");
return null;
}
HashMap<String, Object> params = new HashMap<>();
params.put("access_token", getCachedAccessToken(customerId));
params.put("code", authCode);
Result<String> sdtResult = HttpClientManager.getInstance().sendGet(API_GET_USER_INFO_URL, params);
Result<String> sdtResult = HttpClientManager.getInstance().sendGet(sdtAppInfoEntity.getApiAddress() + API_GET_USER_INFO_URL, params);
if (!sdtResult.success()) {
// http状态判断
log.error("【山东通登录】查询用户编码-http错误:{}", sdtResult.getMsg());
@ -182,10 +201,16 @@ public class SdtServiceImpl implements SdtService {
@Override
public SdtStaffDetailResult getUserDetailByUserId(String userId, String customerId) {
SdtAppInfoEntity sdtAppInfoEntity = getSdtInfoByCustomerId(customerId);
if (sdtAppInfoEntity == null) {
log.error("【查询山东通AccessToken】失败,原因:该客户id没有配置山东通相关信息");
return null;
}
HashMap<String, Object> userDetailParams = new HashMap<>();
userDetailParams.put("access_token", getCachedAccessToken(customerId));
userDetailParams.put("userid", userId);
Result<String> userDetailResult = HttpClientManager.getInstance().sendGet(API_GET_USER_DETAIL_URL, userDetailParams);
Result<String> userDetailResult = HttpClientManager.getInstance().sendGet(sdtAppInfoEntity.getApiAddress() + API_GET_USER_DETAIL_URL, userDetailParams);
if (!userDetailResult.success()) {
// http状态判断
log.error("【山东通登录】查询用户详细信息-http错误:{}", userDetailResult.getMsg());

5
epmet-module/epmet-third/epmet-third-server/src/main/resources/db/migration/V0.0.19__sdt_create_corp_info.sql

@ -2,8 +2,9 @@ create table sdt_app_info
(
`ID` varchar(64) NOT NULL COMMENT '主键',
`CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户ID',
`CORPID` varchar(32) not null comment '组织ID',
`CORPSECRET` varchar(64) not null comment '秘钥',
`CORP_ID` varchar(32) not null comment '组织ID',
`AGENT_ID` varchar(32) not null comment '应用ID',
`CORP_SECRET` varchar(64) not null comment '秘钥',
`ACCESS_TOKEN` varchar(512) null comment '接口调用凭证',
`API_ADDRESS` varchar(128) not null comment 'api地址',
`EXPIRES_AT` datetime null comment '何时过期',

Loading…
Cancel
Save