From 3e0c8e38d2237c345413422083cbc2e58f499ef8 Mon Sep 17 00:00:00 2001 From: Xing Mao Date: Fri, 21 Jul 2023 17:48:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=B7=BB=E5=8A=A0=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E6=97=B6=EF=BC=8C=E6=A3=80=E9=AA=8C=E4=BC=81=E5=BE=AE?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E5=BA=94=E7=94=A8=E6=98=AF=E5=90=A6=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WeAgentController.java | 13 ++++++------- .../vo/agent/query/WeAgentRemoteQuery.java | 19 +++++++++++++++++++ .../fallback/QwAgentFallbackFactory.java | 6 ++++++ .../com/linkwechat/fegin/QwAgentClient.java | 10 ++++++++++ .../wecom/client/WeAgentClient.java | 8 ++++++++ .../wecom/controller/QwAgentController.java | 12 ++++++++++++ .../interceptor/WeAgentTokenInterceptor.java | 13 +++++++++++-- .../wecom/service/IQwAccessTokenService.java | 2 +- .../wecom/service/IQwAgentService.java | 14 ++++++++------ .../impl/QwAccessTokenServiceImpl.java | 15 ++++++++++----- .../service/impl/QwAgentServiceImpl.java | 15 ++++++--------- 11 files changed, 97 insertions(+), 30 deletions(-) create mode 100644 linkwe-service/src/main/java/com/linkwechat/domain/wecom/vo/agent/query/WeAgentRemoteQuery.java diff --git a/linkwe-api/src/main/java/com/linkwechat/controller/WeAgentController.java b/linkwe-api/src/main/java/com/linkwechat/controller/WeAgentController.java index 24649e7c0..2f5583d1f 100644 --- a/linkwe-api/src/main/java/com/linkwechat/controller/WeAgentController.java +++ b/linkwe-api/src/main/java/com/linkwechat/controller/WeAgentController.java @@ -8,7 +8,6 @@ import com.linkwechat.common.core.domain.AjaxResult; import com.linkwechat.common.core.page.TableDataInfo; import com.linkwechat.common.utils.SecurityUtils; import com.linkwechat.domain.WeAgentInfo; -import com.linkwechat.domain.WeAgentMsg; import com.linkwechat.domain.WeCorpAccount; import com.linkwechat.domain.agent.query.WeAgentAddQuery; import com.linkwechat.domain.agent.query.WeAgentEditQuery; @@ -17,7 +16,7 @@ import com.linkwechat.domain.agent.query.WeAgentMsgListQuery; import com.linkwechat.domain.agent.vo.LwAgentListVo; import com.linkwechat.domain.agent.vo.WeAgentMsgListVo; import com.linkwechat.domain.agent.vo.WeAgentMsgVo; -import com.linkwechat.domain.wecom.vo.agent.query.WeAgentQuery; +import com.linkwechat.domain.wecom.vo.agent.query.WeAgentRemoteQuery; import com.linkwechat.domain.wecom.vo.agent.vo.WeAgentDetailVo; import com.linkwechat.fegin.QwAgentClient; import com.linkwechat.service.IWeAgentInfoService; @@ -30,7 +29,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; import java.util.List; /** @@ -61,10 +59,11 @@ public class WeAgentController extends BaseController { public AjaxResult addAgent(@RequestBody @Validated WeAgentAddQuery query) { log.info("新增应用信息入参query:{}", JSONObject.toJSONString(query)); //校验新增的应用是否存在 - WeAgentQuery weAgentQuery = new WeAgentQuery(); - weAgentQuery.setAgentid(String.valueOf(query.getAgentId())); - weAgentQuery.setCorpid(SecurityUtils.getCorpId()); - WeAgentDetailVo weAgentDetailVo = qwAgentClient.getAgentDetail(weAgentQuery).getData(); + WeAgentRemoteQuery remoteQuery = new WeAgentRemoteQuery(); + remoteQuery.setAgentid(String.valueOf(query.getAgentId())); + remoteQuery.setSecret(query.getSecret()); + remoteQuery.setCorpid(SecurityUtils.getCorpId()); + WeAgentDetailVo weAgentDetailVo = qwAgentClient.getRemoteAgentDetail(remoteQuery).getData(); if(null == weAgentDetailVo){ return AjaxResult.error("当前应用不存在"); diff --git a/linkwe-service/src/main/java/com/linkwechat/domain/wecom/vo/agent/query/WeAgentRemoteQuery.java b/linkwe-service/src/main/java/com/linkwechat/domain/wecom/vo/agent/query/WeAgentRemoteQuery.java new file mode 100644 index 000000000..780465f73 --- /dev/null +++ b/linkwe-service/src/main/java/com/linkwechat/domain/wecom/vo/agent/query/WeAgentRemoteQuery.java @@ -0,0 +1,19 @@ +package com.linkwechat.domain.wecom.vo.agent.query; + +import com.linkwechat.domain.wecom.query.WeBaseQuery; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotBlank; + +@ApiModel +@Data +@EqualsAndHashCode(callSuper = true) +public class WeAgentRemoteQuery extends WeBaseQuery { + + @ApiModelProperty("应用密钥") + @NotBlank(message = "应用密钥不能为空") + private String secret; +} diff --git a/linkwe-service/src/main/java/com/linkwechat/fallback/QwAgentFallbackFactory.java b/linkwe-service/src/main/java/com/linkwechat/fallback/QwAgentFallbackFactory.java index d4fb11ce2..d9cd03b66 100644 --- a/linkwe-service/src/main/java/com/linkwechat/fallback/QwAgentFallbackFactory.java +++ b/linkwe-service/src/main/java/com/linkwechat/fallback/QwAgentFallbackFactory.java @@ -3,6 +3,7 @@ package com.linkwechat.fallback; import com.linkwechat.common.core.domain.AjaxResult; import com.linkwechat.domain.wecom.vo.WeResultVo; import com.linkwechat.domain.wecom.vo.agent.query.WeAgentQuery; +import com.linkwechat.domain.wecom.vo.agent.query.WeAgentRemoteQuery; import com.linkwechat.domain.wecom.vo.agent.vo.WeAgentDetailVo; import com.linkwechat.domain.wecom.vo.agent.vo.WeAgentListVo; import com.linkwechat.fegin.QwAgentClient; @@ -28,6 +29,11 @@ public class QwAgentFallbackFactory implements QwAgentClient { return null; } + @Override + public AjaxResult getRemoteAgentDetail(WeAgentRemoteQuery query) { + return null; + } + @Override public AjaxResult updateAgent(WeAgentQuery query) { return null; diff --git a/linkwe-service/src/main/java/com/linkwechat/fegin/QwAgentClient.java b/linkwe-service/src/main/java/com/linkwechat/fegin/QwAgentClient.java index 59f674bfb..7f8b98e1b 100644 --- a/linkwe-service/src/main/java/com/linkwechat/fegin/QwAgentClient.java +++ b/linkwe-service/src/main/java/com/linkwechat/fegin/QwAgentClient.java @@ -3,6 +3,7 @@ package com.linkwechat.fegin; import com.linkwechat.common.core.domain.AjaxResult; import com.linkwechat.domain.wecom.vo.WeResultVo; import com.linkwechat.domain.wecom.vo.agent.query.WeAgentQuery; +import com.linkwechat.domain.wecom.vo.agent.query.WeAgentRemoteQuery; import com.linkwechat.domain.wecom.vo.agent.vo.WeAgentDetailVo; import com.linkwechat.domain.wecom.vo.agent.vo.WeAgentListVo; import com.linkwechat.fallback.QwAgentFallbackFactory; @@ -35,6 +36,15 @@ public interface QwAgentClient { @PostMapping("/agent/getAgentDetail") public AjaxResult getAgentDetail(@RequestBody WeAgentQuery query); + /** + * 从企业微信查询应用详情 + * + * @param query 入参 + * @return WeAgentDetailVo + */ + @PostMapping("/agent/getRemoteAgentDetail") + public AjaxResult getRemoteAgentDetail(@RequestBody WeAgentRemoteQuery query); + /** * 设置应用 * diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeAgentClient.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeAgentClient.java index 8b2504ad5..fe9e2dffa 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeAgentClient.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeAgentClient.java @@ -3,6 +3,7 @@ package com.linkwechat.wecom.client; import com.dtflys.forest.annotation.*; import com.linkwechat.domain.wecom.vo.WeResultVo; import com.linkwechat.domain.wecom.vo.agent.query.WeAgentQuery; +import com.linkwechat.domain.wecom.vo.agent.query.WeAgentRemoteQuery; import com.linkwechat.domain.wecom.vo.agent.vo.WeAgentDetailVo; import com.linkwechat.domain.wecom.vo.agent.vo.WeAgentListVo; import com.linkwechat.wecom.interceptor.WeAgentTokenInterceptor; @@ -30,6 +31,13 @@ public interface WeAgentClient { @Get(url = "/agent/get?agentid={$query.agentid}") WeAgentDetailVo getAgentDetail(@Var("query") WeAgentQuery query); + /** + * 根据应用id获取应用详情 + * @param query 应用id + * @return {@link WeAgentDetailVo} + */ + @Get(url = "/agent/get?agentid={$query.agentid}") + WeAgentDetailVo getRemoteAgentDetail(@Var("query") WeAgentRemoteQuery query); /** * 设置应用 * @param query {@link WeAgentQuery} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/controller/QwAgentController.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/controller/QwAgentController.java index 4ddf7a64c..26326b596 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/controller/QwAgentController.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/controller/QwAgentController.java @@ -3,6 +3,7 @@ package com.linkwechat.wecom.controller; import com.linkwechat.common.core.domain.AjaxResult; import com.linkwechat.domain.wecom.vo.WeResultVo; import com.linkwechat.domain.wecom.vo.agent.query.WeAgentQuery; +import com.linkwechat.domain.wecom.vo.agent.query.WeAgentRemoteQuery; import com.linkwechat.domain.wecom.vo.agent.vo.WeAgentDetailVo; import com.linkwechat.domain.wecom.vo.agent.vo.WeAgentListVo; import com.linkwechat.wecom.service.IQwAgentService; @@ -50,6 +51,17 @@ public class QwAgentController { return AjaxResult.success(weAgentDetail); } + /** + * 应用详情 + * + * @param query 入参 + * @return WeAgentDetailVo + */ + @PostMapping("/getRemoteAgentDetail") + public AjaxResult getRemoteAgentDetail(@RequestBody WeAgentRemoteQuery query) { + WeAgentDetailVo weAgentDetail = qwAgentService.getRemoteAgentDetail(query); + return AjaxResult.success(weAgentDetail); + } /** * 设置应用 * diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/interceptor/WeAgentTokenInterceptor.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/interceptor/WeAgentTokenInterceptor.java index 345fba227..0db1d19fd 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/interceptor/WeAgentTokenInterceptor.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/interceptor/WeAgentTokenInterceptor.java @@ -14,6 +14,7 @@ import com.linkwechat.common.utils.StringUtils; import com.linkwechat.common.utils.spring.SpringUtils; import com.linkwechat.domain.wecom.query.WeBaseQuery; import com.linkwechat.domain.wecom.vo.WeResultVo; +import com.linkwechat.domain.wecom.vo.agent.query.WeAgentRemoteQuery; import com.linkwechat.wecom.service.IQwAccessTokenService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -39,6 +40,7 @@ public class WeAgentTokenInterceptor extends WeForestInterceptor implements Inte } String corpId = ""; Integer agentId = null; + String secret = null; Object[] arguments = request.getArguments(); for (Object argument : arguments) { if (argument instanceof WeBaseQuery) { @@ -46,11 +48,14 @@ public class WeAgentTokenInterceptor extends WeForestInterceptor implements Inte corpId = query.getCorpid(); agentId = Integer.valueOf(query.getAgentid()); } + if (argument instanceof WeAgentRemoteQuery) { + secret = ((WeAgentRemoteQuery) argument).getSecret(); + } } if (StringUtils.isEmpty(corpId) && Objects.isNull(agentId)) { throw new WeComException("未获取入参中的信息"); } - String token = iQwAccessTokenService.findAgentAccessToken(corpId, agentId); + String token = iQwAccessTokenService.findAgentAccessToken(corpId, agentId, secret); request.replaceOrAddQuery("access_token", token); return true; } @@ -106,6 +111,7 @@ public class WeAgentTokenInterceptor extends WeForestInterceptor implements Inte //删除缓存 String corpId = ""; Integer agentId = null; + String secret = null; Object[] arguments = request.getArguments(); for (Object argument : arguments) { if (argument instanceof WeBaseQuery) { @@ -113,12 +119,15 @@ public class WeAgentTokenInterceptor extends WeForestInterceptor implements Inte corpId = query.getCorpid(); agentId = Integer.valueOf(query.getAgentid()); } + if (argument instanceof WeAgentRemoteQuery) { + secret = ((WeAgentRemoteQuery) argument).getSecret(); + } } if (StringUtils.isEmpty(corpId) && Objects.isNull(agentId)) { throw new WeComException("未获取入参中的信息"); } iQwAccessTokenService.removeAgentAccessToken(corpId, agentId); - String token = iQwAccessTokenService.findAgentAccessToken(corpId, agentId); + String token = iQwAccessTokenService.findAgentAccessToken(corpId, agentId, secret); request.replaceOrAddQuery("access_token", token); } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IQwAccessTokenService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IQwAccessTokenService.java index 5a67c76cd..927950a04 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IQwAccessTokenService.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IQwAccessTokenService.java @@ -40,7 +40,7 @@ public interface IQwAccessTokenService { void removeAddressBookAccessToken(String corpId); - String findAgentAccessToken(String corpId, Integer agentId); + String findAgentAccessToken(String corpId, Integer agentId, String secret); void removeAgentAccessToken(String corpId, Integer agentId); diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IQwAgentService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IQwAgentService.java index 3ba317191..ee9f9376a 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IQwAgentService.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IQwAgentService.java @@ -1,15 +1,10 @@ package com.linkwechat.wecom.service; -import com.linkwechat.domain.wecom.query.WeBaseQuery; -import com.linkwechat.domain.wecom.query.agentdev.WeTransformExternalUserIdQuery; -import com.linkwechat.domain.wecom.query.agentdev.WeTransformUserIdQuery; import com.linkwechat.domain.wecom.vo.WeResultVo; import com.linkwechat.domain.wecom.vo.agent.query.WeAgentQuery; +import com.linkwechat.domain.wecom.vo.agent.query.WeAgentRemoteQuery; import com.linkwechat.domain.wecom.vo.agent.vo.WeAgentDetailVo; import com.linkwechat.domain.wecom.vo.agent.vo.WeAgentListVo; -import com.linkwechat.domain.wecom.vo.agentdev.WeTransformCorpVO; -import com.linkwechat.domain.wecom.vo.agentdev.WeTransformExternalUserIdVO; -import com.linkwechat.domain.wecom.vo.agentdev.WeTransformUserIdVO; /** * @author danmo @@ -31,6 +26,13 @@ public interface IQwAgentService { */ WeAgentDetailVo getAgentDetail(WeAgentQuery query); + /** + * 获取应用详情 + * @param query + * @return + */ + WeAgentDetailVo getRemoteAgentDetail(WeAgentRemoteQuery query); + /** * 设置应用 * @param query diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/QwAccessTokenServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/QwAccessTokenServiceImpl.java index cf28befa3..23efacf3b 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/QwAccessTokenServiceImpl.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/QwAccessTokenServiceImpl.java @@ -172,16 +172,21 @@ public class QwAccessTokenServiceImpl implements IQwAccessTokenService { } @Override - public String findAgentAccessToken(String corpId, Integer agentId) { + public String findAgentAccessToken(String corpId, Integer agentId, String secret) { String weAgentTokenKey = StringUtils.format(WeConstans.WE_AGENT_ACCESS_TOKEN, corpId, agentId); String weAccessToken = redisService.getCacheObject(weAgentTokenKey); //为空,请求微信服务器同时缓存到redis中 if (StringUtils.isEmpty(weAccessToken)) { - WeAgentInfo weAgentInfo = weAgentInfoService.getAgentInfoByAgentId(agentId); - if (Objects.isNull(weAgentInfo)) { - throw new WeComException("无可用的应用"); + String secretReal = secret; + if (StringUtils.isEmpty(secretReal)) { + WeAgentInfo weAgentInfo = weAgentInfoService.getAgentInfoByAgentId(agentId); + if (Objects.isNull(weAgentInfo)) { + throw new WeComException("无可用的应用"); + } + secretReal = weAgentInfo.getSecret(); } - WeCorpTokenVo weCorpTokenVo = weTokenClient.getToken(corpId, weAgentInfo.getSecret()); + + WeCorpTokenVo weCorpTokenVo = weTokenClient.getToken(corpId, secretReal); if (Objects.nonNull(weCorpTokenVo) && StringUtils.isNotEmpty(weCorpTokenVo.getAccessToken())) { weAccessToken = weCorpTokenVo.getAccessToken(); diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/QwAgentServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/QwAgentServiceImpl.java index 45a72b0e4..45879196a 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/QwAgentServiceImpl.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/QwAgentServiceImpl.java @@ -1,21 +1,13 @@ package com.linkwechat.wecom.service.impl; -import com.linkwechat.domain.wecom.query.WeBaseQuery; -import com.linkwechat.domain.wecom.query.agentdev.WeTransformExternalUserIdQuery; -import com.linkwechat.domain.wecom.query.agentdev.WeTransformUserIdQuery; import com.linkwechat.domain.wecom.vo.WeResultVo; import com.linkwechat.domain.wecom.vo.agent.query.WeAgentQuery; +import com.linkwechat.domain.wecom.vo.agent.query.WeAgentRemoteQuery; import com.linkwechat.domain.wecom.vo.agent.vo.WeAgentDetailVo; import com.linkwechat.domain.wecom.vo.agent.vo.WeAgentListVo; -import com.linkwechat.domain.wecom.vo.agentdev.WeTransformCorpVO; -import com.linkwechat.domain.wecom.vo.agentdev.WeTransformExternalUserIdVO; -import com.linkwechat.domain.wecom.vo.agentdev.WeTransformUserIdVO; import com.linkwechat.wecom.client.WeAgentClient; -import com.linkwechat.wecom.client.WeIDTransformClient; import com.linkwechat.wecom.service.IQwAgentService; -import com.linkwechat.wecom.service.IQwCorpService; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -43,6 +35,11 @@ public class QwAgentServiceImpl implements IQwAgentService { return weAgentClient.getAgentDetail(query); } + @Override + public WeAgentDetailVo getRemoteAgentDetail(WeAgentRemoteQuery query) { + return weAgentClient.getRemoteAgentDetail(query); + } + @Override public WeResultVo updateAgent(WeAgentQuery query) { return weAgentClient.updateAgent(query); -- Gitee