专有钉钉对接集成
PC端对接专有钉钉, 获取相关接口数据, 整理了一下自己实现的思路
一、开发准备
- 仔细阅读官方相关文档, 相关api如何调用, 接口方法调用示例, 错误的解决方法
- 下载官方sdk:zwdd-sdk-java-1.2.0.jar
二、jar包导入到本地项目
- 项目同级目录创建libs文件夹,把jar包放入其中
- pom 文件配置,配置Jar包的dependency,包括groupId,artifactId,version三个属性,同时还要包含scope和systemPath属性,指定Jar包来源于本地文件。如下:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>xxpt</artifactId>
<version>1.2.0</version>
<scope>system</scope>
<!-- ${basedir}/lib/*.jar basedir为项目根目录 -->
<systemPath>${basedir}/libs/zwdd-sdk-java-1.2.0.jar</systemPath>
</dependency>
3.由于scope=system,打包时不会把本地jar包打进jar/war包中,所以需要通过插件进行打包
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.1.RELEASE</version>
<configuration>
<!--打包时允许添加本地jar包-->
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
二、application.yml文件配置
专有钉钉域名.AK.SK相关配置
# 第三方api地址
thirdapi:
# 专有钉钉对接参数配置
zydd:
# 请求协议
protocal: https
# 域名
domainName: xxx.xxxxx.xxx
# 应用的key
accessKey: xxxxxx
# 应用的密钥
secretKey: xxxxxxxx
三 、单列模式初始化
使用@Configuration
来定义配置类,被注解的类内部包含有一个或多个被@Bean注解的方法可以被AnnotationConfigApplicationContext
或者AnnotationConfigWebApplicationContext
进行扫描。用于构建bean定义以及初始化Spring容器。
package com.xxxx.xxx.core.config;
import com.alibaba.xxpt.gateway.shared.client.http.ExecutableClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @className ThirdZyddApiConfig
* @Description //第三方api
* @author uudream
* @date 2022-03-31 16:27
*/
@Configuration
public class ThirdZyddApiConfig {
/** 专有钉钉-请求协议 */
@Value("${thirdapi.zydd.protocal}")
private String zyddProtocal;
/** 专有钉钉-域名 */
@Value("${thirdapi.zydd.domainName}")
private String zyddDomainName;
/** 专有钉钉-应用的key */
@Value("${thirdapi.zydd.accessKey}")
private String zyddAccessKey;
/** 应用的密钥 */
@Value("${thirdapi.zydd.secretKey}")
private String zyddSecretKey;
@Bean(name = "zyddExecutableClient")
public ExecutableClient zyddExecutableClient(){
//executableClient要单例,并且使用前要初始化,只需要初始化一次
ExecutableClient executableClien = ExecutableClient.getInstance();
executableClien.setDomainName(zyddDomainName);
executableClien.setAccessKey(zyddAccessKey);
executableClien.setSecretKey(zyddSecretKey);
executableClien.setProtocal(zyddProtocal);
executableClien.init();
return executableClien;
}
}
四、Spring工具类SpringContextUtils
通过实现ApplicationContextAware
接口,来获取ApplicationContext
,再通过applicationContext的方法来获取对应的Bean,以下是SpringContextUtils中常用的方法
package xxx.xxx.common.utils;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.stereotype.Component;
/**
* @className SpringContextUtils
* @Description //Spring工具类
* @author uudream
* @date 2022-03-31 15:23
*/
@Component
public class SpringContextUtils implements ApplicationContextAware {
private static ConfigurableApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext context) throws BeansException {
applicationContext = (ConfigurableApplicationContext) context;
}
/**
* 根据bean的名称获取bean
*/
public static Object getBeanByName(String name){
return applicationContext.getBean(name);
}
/**
* 根据bean的class来查找对象
*/
public static <T> T getBeanByClass(Class<T> clazz){
return applicationContext.getBean(clazz);
}
/**
* 取得存储在静态变量中的ApplicationContext.
*/
public static ApplicationContext getApplicationContext() {
checkApplicationContext();
return applicationContext;
}
/**
* 清除applicationContext静态变量.
*/
public static void cleanApplicationContext() {
applicationContext = null;
}
private static void checkApplicationContext() {
if (applicationContext == null) {
throw new IllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder");
}
}
/**
* 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
*/
@SuppressWarnings("unchecked")
public static <T> T getBean(String name) {
checkApplicationContext();
return (T) applicationContext.getBean(name);
}
/**
* 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
*/
@SuppressWarnings("unchecked")
public static <T> T getBean(Class<T> clazz) {
checkApplicationContext();
return (T) applicationContext.getBeansOfType(clazz);
}
}
五、调用api获取数据
package com.xxxx.xxx.api.zydd;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.xxpt.gateway.shared.api.request.OapiMoziEmployeeGetByMobileRequest;
import com.alibaba.xxpt.gateway.shared.api.request.OapiMoziFusionGetEmployeePropertiesRequest;
import com.alibaba.xxpt.gateway.shared.api.request.OapiMoziOrganizationPageOrganizationEmployeePositionsRequest;
import com.alibaba.xxpt.gateway.shared.api.response.OapiMoziEmployeeGetByMobileResponse;
import com.alibaba.xxpt.gateway.shared.api.response.OapiMoziFusionGetEmployeePropertiesResponse;
import com.alibaba.xxpt.gateway.shared.api.response.OapiMoziOrganizationPageOrganizationEmployeePositionsResponse;
import com.xxxxx.common.core.controller.BaseController;
import com.xxxxx.common.core.domain.AjaxResult;
import com.xxxxx.common.core.domain.entity.SysUser;
import com.xxxxx.common.core.page.PageDomain;
import com.xxxxx.common.core.page.TableDataInfo;
import com.xxxxx.common.core.page.TableSupport;
import com.xxxxx.system.service.ISysUserService;
import com.xxxxx.common.utils.SpringContextUtils;
import com.xxxxx.web.dto.ZyddData;
import com.xxxxx.web.dto.ZyddUserData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import com.alibaba.xxpt.gateway.shared.api.request.OapiAuthScopesV2Request;
import com.alibaba.xxpt.gateway.shared.api.response.OapiAuthScopesV2Response;
import com.alibaba.xxpt.gateway.shared.client.http.ExecutableClient;
import com.alibaba.xxpt.gateway.shared.client.http.IntelligentGetClient;
import java.util.List;
/**
* @className ZyddClientController
* @Description //专有钉钉对接
* @author uudream
* @date 2022-03-31 18:44
*/
@Controller
@RequestMapping("/zydd")
public class ZyddClientController extends BaseController {
@Autowired
private ISysUserService userService;
private String prefix = "system/zydd";
public static void main(String[] args) {
ExecutableClient executableClient =ExecutableClient.getInstance();
executableClient.setDomainName("xxxxxx");
executableClient.setProtocal("https");
executableClient.setAccessKey("xxxxxx");
executableClient.setSecretKey("xxxxx");
executableClient.init();
IntelligentGetClient intelligentGetClient = executableClient.newIntelligentGetClient("/auth/scopesV2");
OapiAuthScopesV2Request oapiAuthScopesV2Request = new OapiAuthScopesV2Request();
//租户ID
oapiAuthScopesV2Request.setTenantId(1L);
//获取结果
OapiAuthScopesV2Response apiResult = intelligentGetClient.get(oapiAuthScopesV2Request);
}
/**
* 返回分页列表
* @return
*/
@GetMapping("/govEmployeePositions")
public String govEmployeePositions()
{
return prefix + "/zyddUserList";
}
@RequestMapping("/getOrganizationEmployeePositions")
@ResponseBody
public TableDataInfo getOrganizationEmployeePositions(ModelMap modelMap){
PageDomain pageDomain = TableSupport.buildPageRequest();
Integer pageNum = pageDomain.getPageNum();
Integer pageSize = pageDomain.getPageSize();
ExecutableClient executableClient = (ExecutableClient) SpringContextUtils.getBean("zyddExecutableClient");
if (executableClient == null) {
logger.error("未获取到初始化信息.....");
}
//executableClient保证单例
IntelligentGetClient intelligentGetClient = executableClient.newIntelligentGetClient("/mozi/organization/pageOrganizationEmployeePositions");
OapiMoziOrganizationPageOrganizationEmployeePositionsRequest oapiMoziOrganizationPageOrganizationEmployeePositionsRequest = new OapiMoziOrganizationPageOrganizationEmployeePositionsRequest();
//是否请求总数,默认是false
oapiMoziOrganizationPageOrganizationEmployeePositionsRequest.setReturnTotalSize(true);
//分页大小,默认是20,最大100
oapiMoziOrganizationPageOrganizationEmployeePositionsRequest.setPageSize(pageSize);
//员工状态,A为有效,F为无效,默认是所有
oapiMoziOrganizationPageOrganizationEmployeePositionsRequest.setEmployeeStatus("A");
//组织code
oapiMoziOrganizationPageOrganizationEmployeePositionsRequest.setOrganizationCode("xxxxxxxxxxxxx");
//请求起始页,默认是1
oapiMoziOrganizationPageOrganizationEmployeePositionsRequest.setPageNo(pageNum);
//租户id
oapiMoziOrganizationPageOrganizationEmployeePositionsRequest.setTenantId(1L);
//获取结果
OapiMoziOrganizationPageOrganizationEmployeePositionsResponse apiResult = intelligentGetClient.get(oapiMoziOrganizationPageOrganizationEmployeePositionsRequest);
TableDataInfo rspData = new TableDataInfo();
if ("0".equals(apiResult.getContent().getResponseCode())){
// logger.info("获取返回人员信息:{}",apiResult.getContent().getData());
//返回的json转成对象
List<ZyddData> zyddResult = JSON.parseArray(apiResult.getContent().getData(), ZyddData.class);
rspData.setCode(0);
rspData.setRows(zyddResult);
rspData.setPageNum(apiResult.getContent().getCurrentPage().intValue());
rspData.setPageSize(apiResult.getContent().getPageSize().intValue());
rspData.setTotal(apiResult.getContent().getTotalSize());
//modelMap.addAttribute("userId",userId);
return rspData;
}
return rspData;
}
@GetMapping("/getEmployeeProperties")
public AjaxResult getEmployeeProperties(){
//executableClient保证单例
ExecutableClient executableClient = (ExecutableClient) SpringContextUtils.getBean("zyddExecutableClient");
if (executableClient == null) {
logger.error("未获取到初始化信息.....");
}
IntelligentGetClient intelligentGetClient = executableClient.newIntelligentGetClient("/mozi/fusion/getEmployeeProperties");
OapiMoziFusionGetEmployeePropertiesRequest oapiMoziFusionGetEmployeePropertiesRequest = new OapiMoziFusionGetEmployeePropertiesRequest();
//租户id
oapiMoziFusionGetEmployeePropertiesRequest.setTenantId(1L);
//获取结果
OapiMoziFusionGetEmployeePropertiesResponse apiResult = intelligentGetClient.get(oapiMoziFusionGetEmployeePropertiesRequest);
logger.info("获取返回人员字段属性{}:",apiResult);
return AjaxResult.success(apiResult);
}
}
转载自:https://juejin.cn/post/7081470254798340104