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") @GetMapping("/third/sdt/getUserDetailByUserId")
Result<SdtStaffDetailResult> getUserDetailByUserId(@RequestParam("userId") String userId, @RequestParam("customerId") String customerId); 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 * 组织ID
*/ */
private String corpId; 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; return;
} }
SdtGetAccessTokenResult sdtResult = JSON.parseObject(stringResult.getMsg(), SdtGetAccessTokenResult.class); SdtGetAccessTokenResult sdtResult = JSON.parseObject(stringResult.getData(), SdtGetAccessTokenResult.class);
if (!sdtResult.success()) { if (!sdtResult.success()) {
log.error("【山东通】刷新accessToken失败:{}", sdtResult.getErrmsg()); log.error("【山东通】刷新accessToken失败:{}", sdtResult.getErrmsg());
return; return;
@ -88,7 +88,7 @@ public class SdtServiceImpl implements SdtService {
sdtAppInfoDao.updateById(updateEntity); sdtAppInfoDao.updateById(updateEntity);
// token刷新了以后,要刷新缓存中的token,这样下次才能获取到最新的token // token刷新了以后,要刷新缓存中的token,这样下次才能获取到最新的token
String key = RedisKeys.getOpenApiAccessTokenKey(customerIdInner); String key = RedisKeys.getSdtAccessToken(customerIdInner);
redisUtils.set(key, access_token, expires_in); redisUtils.set(key, access_token, expires_in);
}); });
@ -129,17 +129,14 @@ public class SdtServiceImpl implements SdtService {
*/ */
@Override @Override
public String getCachedAccessToken(String customerId) { public String getCachedAccessToken(String customerId) {
String key = RedisKeys.getOpenApiAccessTokenKey(customerId); String key = RedisKeys.getSdtAccessToken(customerId);
String accessToken = redisUtils.getString(key); String accessToken = redisUtils.getString(key);
if (StringUtils.isNotBlank(accessToken)) { if (StringUtils.isNotBlank(accessToken)) {
return accessToken; return accessToken;
} }
// db中查询 // db中查询
LambdaQueryWrapper<SdtAppInfoEntity> query = new LambdaQueryWrapper<>(); SdtAppInfoEntity sdtAppInfoEntity = getSdtInfoByCustomerId(customerId);
query.eq(SdtAppInfoEntity::getCustomerId, customerId);
SdtAppInfoEntity sdtAppInfoEntity = sdtAppInfoDao.selectOne(query);
if (sdtAppInfoEntity == null) { if (sdtAppInfoEntity == null) {
log.error("【查询山东通AccessToken】失败,原因:该客户id没有配置山东通相关信息"); log.error("【查询山东通AccessToken】失败,原因:该客户id没有配置山东通相关信息");
return null; return null;
@ -148,22 +145,44 @@ public class SdtServiceImpl implements SdtService {
accessToken = sdtAppInfoEntity.getAccessToken(); accessToken = sdtAppInfoEntity.getAccessToken();
Date expiresAt = sdtAppInfoEntity.getExpiresAt(); Date expiresAt = sdtAppInfoEntity.getExpiresAt();
if (StringUtils.isNotBlank(accessToken)) { Long expireIn = getExpireIn(expiresAt);
redisUtils.set(key, accessToken, getExpireIn(expiresAt));
if (StringUtils.isNotBlank(accessToken) && expireIn > 0) {
// 没过期,可以用
redisUtils.set(key, accessToken, expireIn);
return accessToken; return accessToken;
} else { } else {
// 配置了appInfo,但是没有accessToken,刷新token,刷新缓存,然后重新从缓存中取 // 配置了appInfo,但是没有accessToken或者accessToken已经过期,刷新token,刷新缓存,然后重新从缓存中取
refreshAccessToken(customerId); refreshAccessToken(customerId);
return redisUtils.getString(key); 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 @Override
public SdtStaffInfoResult getUserInfoByCode(String authCode, String customerId) { 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<>(); HashMap<String, Object> params = new HashMap<>();
params.put("access_token", getCachedAccessToken(customerId)); params.put("access_token", getCachedAccessToken(customerId));
params.put("code", authCode); 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()) { if (!sdtResult.success()) {
// http状态判断 // http状态判断
log.error("【山东通登录】查询用户编码-http错误:{}", sdtResult.getMsg()); log.error("【山东通登录】查询用户编码-http错误:{}", sdtResult.getMsg());
@ -182,10 +201,16 @@ public class SdtServiceImpl implements SdtService {
@Override @Override
public SdtStaffDetailResult getUserDetailByUserId(String userId, String customerId) { 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<>(); HashMap<String, Object> userDetailParams = new HashMap<>();
userDetailParams.put("access_token", getCachedAccessToken(customerId)); userDetailParams.put("access_token", getCachedAccessToken(customerId));
userDetailParams.put("userid", userId); 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()) { if (!userDetailResult.success()) {
// http状态判断 // http状态判断
log.error("【山东通登录】查询用户详细信息-http错误:{}", userDetailResult.getMsg()); 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 '主键', `ID` varchar(64) NOT NULL COMMENT '主键',
`CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户ID', `CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户ID',
`CORPID` varchar(32) not null comment '组织ID', `CORP_ID` varchar(32) not null comment '组织ID',
`CORPSECRET` varchar(64) not null comment '秘钥', `AGENT_ID` varchar(32) not null comment '应用ID',
`CORP_SECRET` varchar(64) not null comment '秘钥',
`ACCESS_TOKEN` varchar(512) null comment '接口调用凭证', `ACCESS_TOKEN` varchar(512) null comment '接口调用凭证',
`API_ADDRESS` varchar(128) not null comment 'api地址', `API_ADDRESS` varchar(128) not null comment 'api地址',
`EXPIRES_AT` datetime null comment '何时过期', `EXPIRES_AT` datetime null comment '何时过期',

Loading…
Cancel
Save