From d3a689074018dde4a8dd6553619a21501e5e2d52 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com>
Date: Tue, 6 Jun 2023 14:04:47 +0800
Subject: [PATCH] 'commit'
---
pom.xml | 7 +
src/main/java/UnitTest/TestDingTalk.java | 386 ++++--------------
.../dsideal/FengHuang/Util/DingTalkUtil.java | 268 ++++++++++++
src/main/resource/dingtalk.properties | 7 +
target/classes/dingtalk.properties | 7 +
5 files changed, 370 insertions(+), 305 deletions(-)
create mode 100644 src/main/java/com/dsideal/FengHuang/Util/DingTalkUtil.java
diff --git a/pom.xml b/pom.xml
index a139666..ca7cdfc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -280,6 +280,13 @@
kafka-clients
3.4.0
+
+
+
+ com.github.binarywang
+ java-testdata-generator
+ 1.1.2
+
diff --git a/src/main/java/UnitTest/TestDingTalk.java b/src/main/java/UnitTest/TestDingTalk.java
index 99353d5..83344bf 100644
--- a/src/main/java/UnitTest/TestDingTalk.java
+++ b/src/main/java/UnitTest/TestDingTalk.java
@@ -1,278 +1,41 @@
package UnitTest;
-import com.alibaba.fastjson.JSONObject;
-import com.aliyun.dingtalkoauth2_1_0.models.*;
-import com.aliyun.tea.TeaException;
-import com.dingtalk.api.DefaultDingTalkClient;
-import com.dingtalk.api.DingTalkClient;
-import com.dingtalk.api.request.*;
-import com.dingtalk.api.response.*;
+import com.alibaba.druid.filter.stat.StatFilter;
+import com.dsideal.FengHuang.Util.DingTalkUtil;
import com.jfinal.kit.PropKit;
-import com.jfinal.plugin.redis.Redis;
+import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
+import com.jfinal.plugin.activerecord.Db;
+import com.jfinal.plugin.activerecord.Record;
+import com.jfinal.plugin.activerecord.dialect.MysqlDialect;
+import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.plugin.redis.RedisPlugin;
-import com.taobao.api.ApiException;
-import java.util.ArrayList;
import java.util.List;
public class TestDingTalk {
- /**
- * 使用 Token 初始化账号Client
- *
- * @return Client
- * @throws Exception
- */
- private static com.aliyun.dingtalkoauth2_1_0.Client createClient() throws Exception {
- com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config();
- config.protocol = "https";
- config.regionId = "central";
- return new com.aliyun.dingtalkoauth2_1_0.Client(config);
- }
-
- /*
- 功能:获取钉钉的AccessToken
- 作者:黄海
- 时间:2023-06-06
- */
- public static String getAccessToken(String appKey, String appSecret) throws Exception {
- final String KEY = "DingTalkAccessToken";
- if (!Redis.use().exists(KEY)) {
- String accessToken = null;
- com.aliyun.dingtalkoauth2_1_0.Client client = createClient();
- com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenRequest getAccessTokenRequest = new com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenRequest()
- .setAppKey(appKey)
- .setAppSecret(appSecret);
- try {
- GetAccessTokenResponse res = client.getAccessToken(getAccessTokenRequest);
- accessToken = res.getBody().getAccessToken();
- } catch (TeaException err) {
- if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
- }
- } catch (Exception _err) {
- TeaException err = new TeaException(_err.getMessage(), _err);
- if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
- }
- }
- Redis.use().setex(KEY, 5400, accessToken);//5400:一个半小时过期
- return accessToken;
- } else {
- return Redis.use().get(KEY);
- }
- }
-
- /*
- 功能:获取钉钉的JsApiToken->ticket
- 作者:黄海
- 时间:2023-06-06
- */
- public static String getJsApiToken(String access_token) throws Exception {
- final String KEY = "DingTalkJsApiToken";
- if (!Redis.use().exists(KEY)) {
- String jsApiToken = null;
- com.aliyun.dingtalkoauth2_1_0.Client client = createClient();
- com.aliyun.dingtalkoauth2_1_0.models.CreateJsapiTicketHeaders createJsapiTicketHeaders = new com.aliyun.dingtalkoauth2_1_0.models.CreateJsapiTicketHeaders();
- createJsapiTicketHeaders.xAcsDingtalkAccessToken = access_token;
- try {
- CreateJsapiTicketResponse res = client.createJsapiTicketWithOptions(createJsapiTicketHeaders, new com.aliyun.teautil.models.RuntimeOptions());
- jsApiToken = res.getBody().getJsapiTicket();
- } catch (TeaException err) {
- if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
- }
- } catch (Exception _err) {
- TeaException err = new TeaException(_err.getMessage(), _err);
- if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
- }
- }
- Redis.use().setex(KEY, 5400, jsApiToken);//5400:一个半小时过期
- return jsApiToken;
- } else {
- return Redis.use().get(KEY);
- }
- }
-
- /*
- 功能:获取钉钉的SsoToken
- 作者:黄海
- 时间:2023-06-06
- */
- public static String getSsoToken(String corpId, String ssoSecret) throws Exception {
- final String KEY = "DingTalkSsoToken";
- if (!Redis.use().exists(KEY)) {
- String ssoToken = null;
- com.aliyun.dingtalkoauth2_1_0.Client client = createClient();
- GetSsoAccessTokenRequest getSsoAccessTokenRequest = new GetSsoAccessTokenRequest()
- .setCorpid(corpId)
- .setSsoSecret(ssoSecret);
- try {
- GetSsoAccessTokenResponse res = client.getSsoAccessToken(getSsoAccessTokenRequest);
- ssoToken = res.getBody().getAccessToken();
- } catch (TeaException err) {
- if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
- }
- } catch (Exception _err) {
- TeaException err = new TeaException(_err.getMessage(), _err);
- if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
- }
- }
- Redis.use().setex(KEY, 5400, ssoToken);//5400:一个半小时过期
- return ssoToken;
- } else {
- return Redis.use().get(KEY);
- }
- }
-
- /**
- * 功能:获取单个人员信息
- *
- * @param access_token
- * @param userId
- * @return
- */
- public static String getPerson(String access_token, String userId) {
- try {
- DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/get");
- OapiV2UserGetRequest req = new OapiV2UserGetRequest();
- req.setUserid(userId);
- req.setLanguage("zh_CN");
- OapiV2UserGetResponse rsp = client.execute(req, access_token);
- return rsp.getBody();
- } catch (ApiException e) {
- e.printStackTrace();
- }
- return null;
- }
-
- public static String getPersonToken(String appKey, String appSecret) throws Exception {
- com.aliyun.dingtalkoauth2_1_0.Client client = createClient();
- GetUserTokenRequest getUserTokenRequest = new GetUserTokenRequest()
- .setClientId(appKey)
- .setClientSecret(appSecret)
- //.setCode("abcd")
- .setRefreshToken("abcd")
- .setGrantType("authorization_code");
- try {
- GetUserTokenResponse res = client.getUserToken(getUserTokenRequest);
- System.out.println(res.getBody().getAccessToken());
- System.out.println(res.getBody().getRefreshToken());
- } catch (TeaException err) {
- System.out.println(err);
- } catch (Exception _err) {
- System.out.println(_err);
- }
- return null;
- }
-
- public static void createPerson(String access_token) throws ApiException {
- DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/create");
- OapiV2UserCreateRequest req = new OapiV2UserCreateRequest();
- req.setUserid("002");
- req.setName("小钉");
- req.setSeniorMode(false);
- req.setMobile("185xxxxxxxx");
- req.setTitle("教职人员");
- req.setEmail("test@xx.com");
- req.setOrgEmail("test@xxx.com");
- req.setOrgEmailType("profession");
- ArrayList deptTitles = new ArrayList<>();
- OapiV2UserCreateRequest.DeptTitle deptTitle = new OapiV2UserCreateRequest.DeptTitle();
- //deptTitle.setDeptId(4868821xxL);
- deptTitle.setTitle("测试");
- OapiV2UserCreateRequest.DeptTitle deptTitle1 = new OapiV2UserCreateRequest.DeptTitle();
- // deptTitle1.setDeptId(6099161xxL);
- deptTitle1.setTitle("专员");
- deptTitles.add(deptTitle);
- deptTitles.add(deptTitle1);
- req.setDeptTitleList(deptTitles);
- req.setHideMobile(false);
- req.setTelephone("010-8xxxxx6-2345");
- req.setJobNumber("100828");
- req.setHiredDate(1615219200000L);
- req.setWorkPlace("未来park");
- req.setRemark("备注备注");
- //req.setDeptIdList("4868821xx,6099161xx");
- List deptOrderList = new ArrayList();
- OapiV2UserCreateRequest.DeptOrder deptOrder = new OapiV2UserCreateRequest.DeptOrder();
- //deptOrder.setDeptId(4868821xxL);
- // deptOrder.setOrder(1L);
- OapiV2UserCreateRequest.DeptOrder deptOrder1 = new OapiV2UserCreateRequest.DeptOrder();
- //deptOrder1.setDeptId(6099161xxL);
- //deptOrder1.setOrder(1L);
- deptOrderList.add(deptOrder);
- deptOrderList.add(deptOrder1);
- req.setDeptOrderList(deptOrderList);
- req.setExtension("{\"爱好\":\"[爱好](http://test.com?userid=#userid#&corpid=#corpid#)\"}");
- req.setManagerUserid("001");
- req.setLoginEmail("test@xxx.com");
- OapiV2UserCreateResponse rsp = client.execute(req, access_token);
- System.out.println(rsp.getBody());
- }
-
- /**
- * 功能:创建部门
- *
- * @param access_token
- * @throws ApiException
- */
- public static long createDept(String access_token, String deptName, long parentId, long orderId) throws ApiException {
- DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/create");
- OapiV2DepartmentCreateRequest req = new OapiV2DepartmentCreateRequest();
- req.setParentId(parentId);
- req.setOrder(orderId);
- req.setName(deptName);
- OapiV2DepartmentCreateResponse rsp = client.execute(req, access_token);
- JSONObject jo = JSONObject.parseObject(rsp.getBody());
- if (jo.getLong("errcode") > 0) {
- return -1;
- }
- return jo.getJSONObject("result").getLong("dept_id");
- }
-
- /**
- * 功能:删除部门
- *
- * @param access_token
- * @param deptId
- * @throws ApiException
- */
- public static void delDept(String access_token, long deptId) throws ApiException {
- DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/delete");
- OapiV2DepartmentDeleteRequest req = new OapiV2DepartmentDeleteRequest();
- req.setDeptId(deptId);
- OapiV2DepartmentDeleteResponse rsp = client.execute(req, access_token);
- System.out.println(rsp.getBody());
- }
-
- /**
- * 功能:更新部门信息
- * @param access_token
- * @param deptId
- * @param deptName
- * @param orderId
- * @throws ApiException
- */
- public static void updateDept(String access_token, long deptId,String deptName,long orderId) throws ApiException {
- DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/update");
- OapiV2DepartmentUpdateRequest req = new OapiV2DepartmentUpdateRequest();
- req.setDeptId(deptId);
- req.setOrder(orderId);
- req.setName(deptName);
- req.setLanguage("zh_CN");
- OapiV2DepartmentUpdateResponse rsp = client.execute(req, access_token);
- System.out.println(rsp.getBody());
- }
-
- /**
- * 功能:获取部门列表
- * @param access_token
- * @throws ApiException
- */
- public static void getDeptList(String access_token) throws ApiException {
- DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/listsub");
- OapiV2DepartmentListsubRequest req = new OapiV2DepartmentListsubRequest();
- req.setDeptId(1L);
- req.setLanguage("zh_CN");
- OapiV2DepartmentListsubResponse rsp = client.execute(req, access_token);
- System.out.println(rsp.getBody());
+ public static DruidPlugin createDruidPlugin(String url, String username, String password, String driverClass) {
+ DruidPlugin druidPlugin = new DruidPlugin(url, username, password, driverClass);
+ //最大连接池数量
+ druidPlugin.setMaxActive(20);
+ //最小连接池数量
+ druidPlugin.setMinIdle(1);
+ //初始化时建立物理连接的个数,默认为0
+ druidPlugin.setInitialSize(1);
+ //获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
+ druidPlugin.setMaxWait(60000);
+ //如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接。
+ druidPlugin.setTimeBetweenEvictionRunsMillis(60000);
+ //连接保持空闲而不被驱逐的最小时间
+ druidPlugin.setMinEvictableIdleTimeMillis(300000);
+ //建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
+ druidPlugin.setTestWhileIdle(true);
+ //申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。默认为true
+ druidPlugin.setTestOnBorrow(false);
+ //归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。默认为true
+ druidPlugin.setTestOnReturn(false);
+ //数据监控
+ druidPlugin.addFilter(new StatFilter());
+ return druidPlugin;
}
public static void main(String[] args_) throws Exception {
@@ -283,49 +46,62 @@ public class TestDingTalk {
final String appKey = PropKit.get("appKey");
String appSecret = PropKit.get("appSecret");
+ DruidPlugin druid = createDruidPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password").trim(), PropKit.get("driverClassName"));
+ druid.start();
+
+ ActiveRecordPlugin arp = new ActiveRecordPlugin(druid);
+ arp.setDevMode(false);
+ arp.setDialect(new MysqlDialect());
+ arp.start();
+
// 用于缓存模块的redis服务
RedisPlugin redis = new RedisPlugin("myRedis", PropKit.get("redis_ip"), PropKit.getInt("redis_port"), 10 * 1000);
redis.start();
- String accessToken = getAccessToken(appKey, appSecret);
- System.out.println("accessToken=" + accessToken);
-
- String jsApiToken = getJsApiToken(accessToken);
- System.out.println("ticket=" + jsApiToken);
-
- String SsoToken = getSsoToken(corpId, ssoSecret);
- System.out.println("ssoToken=" + SsoToken);
- String res = getPerson(accessToken, "manager3180");
- System.out.println(res);
-
- //TODO
- //getPersonToken(appKey, appSecret);
-
- //TODO
- //createPerson(accessToken);
-
- //创建部门
- long dept_id = createDept(accessToken, "黄海的测试部门A", 1, 1);
- if (dept_id == -1) {
- System.out.println("部门名称已存在,无法创建!");
- }
- // 钉钉开发踩坑:请求的部门 id 不在授权范围内 http://roc.havemail.cn/archives/595.html
- getDeptList(accessToken);
-
- //修改部门
- updateDept(accessToken,dept_id,"黄海的测试部门B",2);
- //查询看一下
- getDeptList(accessToken);
-
- //删除部门
- delDept(accessToken, dept_id);
- //查询看一下
- getDeptList(accessToken);
-
-
- //通过云平台查询到的学校、部门、教师、学生、班级等信息,需要写入到钉钉中来,并且获取到钉钉返回的唯一主键,回写到云平台的表中去
+ //通过云平台查询到的学校、部门、教师等信息,需要写入到钉钉中来,并且获取到钉钉返回的唯一主键,回写到云平台的表中去
//这样处理,才能保证下次再来同步数据时,找到相同的唯一主键
-
+ String accessToken = DingTalkUtil.getAccessToken(appKey, appSecret);
+
+ //1、读取云平台数据,创建学校
+ /*
+ 需要先手动执行,对表增加一列,记录钉钉的部门ID号:
+ ALTER TABLE `dsideal_db`.`t_base_organization`
+ ADD COLUMN `dingtalk_dept_id` bigint NULL COMMENT '钉钉中的部门ID' AFTER `zydz`,
+ ADD INDEX(`dingtalk_dept_id`);
+ */
+ String sql = "select org_id,org_name from t_base_organization where org_name = '长春市教育局'";
+ Record record = Db.findFirst(sql);
+ int orgId = record.getInt("org_id");
+ //单位需要清空一下这个属性
+ sql = "update t_base_organization set dingtalk_dept_id=null where org_id=?";
+ Db.update(sql, orgId);
+
+ // 学校及学校下的部门
+ sql = "select org_id,org_name,parent_id,sort_id from t_base_organization where bureau_id=? order by org_id";
+ List list = Db.find(sql, orgId);
+
+ for (int i = 0; i < list.size(); i++) {
+ orgId = list.get(i).getInt("org_id");
+ int yptParentId = list.get(i).getInt("parent_id");
+ if (yptParentId == -1) yptParentId = orgId;
+ String dept_name = list.get(i).getStr("org_name");
+
+ sql = "select dingtalk_dept_id from t_base_organization where org_id=?";
+ Record r = Db.findFirst(sql, yptParentId);
+ long dingtalk_dept_id;
+ if (r.get("dingtalk_dept_id") == null) {
+ dingtalk_dept_id = 1;
+ } else {
+ dingtalk_dept_id = r.getLong("dingtalk_dept_id");
+ }
+ long sortId = list.get(i).getLong("sort_id");
+ //创建
+ long dt_dept_id = DingTalkUtil.createDept(accessToken, dept_name, dingtalk_dept_id, sortId);
+ //回写
+ sql = "update t_base_organization set dingtalk_dept_id=? where org_id=?";
+ Db.update(sql, dt_dept_id, orgId);
+ }
+ System.out.println("恭喜,所有操作成功完成!");
}
}
diff --git a/src/main/java/com/dsideal/FengHuang/Util/DingTalkUtil.java b/src/main/java/com/dsideal/FengHuang/Util/DingTalkUtil.java
new file mode 100644
index 0000000..b0e6478
--- /dev/null
+++ b/src/main/java/com/dsideal/FengHuang/Util/DingTalkUtil.java
@@ -0,0 +1,268 @@
+package com.dsideal.FengHuang.Util;
+
+import com.alibaba.fastjson.JSONObject;
+import com.aliyun.dingtalkoauth2_1_0.models.*;
+import com.aliyun.tea.TeaException;
+import com.dingtalk.api.DefaultDingTalkClient;
+import com.dingtalk.api.DingTalkClient;
+import com.dingtalk.api.request.*;
+import com.dingtalk.api.response.*;
+import com.jfinal.plugin.redis.Redis;
+import com.taobao.api.ApiException;
+
+public class DingTalkUtil {
+ /**
+ * 使用 Token 初始化账号Client
+ *
+ * @return Client
+ * @throws Exception
+ */
+ private static com.aliyun.dingtalkoauth2_1_0.Client createClient() throws Exception {
+ com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config();
+ config.protocol = "https";
+ config.regionId = "central";
+ return new com.aliyun.dingtalkoauth2_1_0.Client(config);
+ }
+
+ /*
+ 功能:获取钉钉的AccessToken
+ 作者:黄海
+ 时间:2023-06-06
+ */
+ public static String getAccessToken(String appKey, String appSecret) throws Exception {
+ final String KEY = "DingTalkAccessToken";
+ if (!Redis.use().exists(KEY)) {
+ String accessToken = null;
+ com.aliyun.dingtalkoauth2_1_0.Client client = createClient();
+ com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenRequest getAccessTokenRequest = new com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenRequest()
+ .setAppKey(appKey)
+ .setAppSecret(appSecret);
+ try {
+ GetAccessTokenResponse res = client.getAccessToken(getAccessTokenRequest);
+ accessToken = res.getBody().getAccessToken();
+ } catch (TeaException err) {
+ if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
+ }
+ } catch (Exception _err) {
+ TeaException err = new TeaException(_err.getMessage(), _err);
+ if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
+ }
+ }
+ Redis.use().setex(KEY, 5400, accessToken);//5400:一个半小时过期
+ return accessToken;
+ } else {
+ return Redis.use().get(KEY);
+ }
+ }
+
+ /*
+ 功能:获取钉钉的JsApiToken->ticket
+ 作者:黄海
+ 时间:2023-06-06
+ */
+ public static String getJsApiToken(String access_token) throws Exception {
+ final String KEY = "DingTalkJsApiToken";
+ if (!Redis.use().exists(KEY)) {
+ String jsApiToken = null;
+ com.aliyun.dingtalkoauth2_1_0.Client client = createClient();
+ com.aliyun.dingtalkoauth2_1_0.models.CreateJsapiTicketHeaders createJsapiTicketHeaders = new com.aliyun.dingtalkoauth2_1_0.models.CreateJsapiTicketHeaders();
+ createJsapiTicketHeaders.xAcsDingtalkAccessToken = access_token;
+ try {
+ CreateJsapiTicketResponse res = client.createJsapiTicketWithOptions(createJsapiTicketHeaders, new com.aliyun.teautil.models.RuntimeOptions());
+ jsApiToken = res.getBody().getJsapiTicket();
+ } catch (TeaException err) {
+ if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
+ }
+ } catch (Exception _err) {
+ TeaException err = new TeaException(_err.getMessage(), _err);
+ if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
+ }
+ }
+ Redis.use().setex(KEY, 5400, jsApiToken);//5400:一个半小时过期
+ return jsApiToken;
+ } else {
+ return Redis.use().get(KEY);
+ }
+ }
+
+ /*
+ 功能:获取钉钉的SsoToken
+ 作者:黄海
+ 时间:2023-06-06
+ */
+ public static String getSsoToken(String corpId, String ssoSecret) throws Exception {
+ final String KEY = "DingTalkSsoToken";
+ if (!Redis.use().exists(KEY)) {
+ String ssoToken = null;
+ com.aliyun.dingtalkoauth2_1_0.Client client = createClient();
+ GetSsoAccessTokenRequest getSsoAccessTokenRequest = new GetSsoAccessTokenRequest()
+ .setCorpid(corpId)
+ .setSsoSecret(ssoSecret);
+ try {
+ GetSsoAccessTokenResponse res = client.getSsoAccessToken(getSsoAccessTokenRequest);
+ ssoToken = res.getBody().getAccessToken();
+ } catch (TeaException err) {
+ if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
+ }
+ } catch (Exception _err) {
+ TeaException err = new TeaException(_err.getMessage(), _err);
+ if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
+ }
+ }
+ Redis.use().setex(KEY, 5400, ssoToken);//5400:一个半小时过期
+ return ssoToken;
+ } else {
+ return Redis.use().get(KEY);
+ }
+ }
+
+ /**
+ * 功能:获取单个人员信息
+ *
+ * @param access_token
+ * @param userId
+ * @return
+ */
+ public static String getPerson(String access_token, String userId) {
+ try {
+ DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/get");
+ OapiV2UserGetRequest req = new OapiV2UserGetRequest();
+ req.setUserid(userId);
+ req.setLanguage("zh_CN");
+ OapiV2UserGetResponse rsp = client.execute(req, access_token);
+ return rsp.getBody();
+ } catch (ApiException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ public static String getPersonToken(String appKey, String appSecret) throws Exception {
+ com.aliyun.dingtalkoauth2_1_0.Client client = createClient();
+ GetUserTokenRequest getUserTokenRequest = new GetUserTokenRequest()
+ .setClientId(appKey)
+ .setClientSecret(appSecret)
+ //.setCode("abcd")
+ .setRefreshToken("abcd")
+ .setGrantType("authorization_code");
+ try {
+ GetUserTokenResponse res = client.getUserToken(getUserTokenRequest);
+ System.out.println(res.getBody().getAccessToken());
+ System.out.println(res.getBody().getRefreshToken());
+ } catch (TeaException err) {
+ System.out.println(err);
+ } catch (Exception _err) {
+ System.out.println(_err);
+ }
+ return null;
+ }
+
+
+ /**
+ * 功能:创建部门
+ *
+ * @param access_token
+ * @throws ApiException
+ */
+ public static long createDept(String access_token, String deptName, long parentId, long orderId) throws ApiException {
+ DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/create");
+ OapiV2DepartmentCreateRequest req = new OapiV2DepartmentCreateRequest();
+ req.setParentId(parentId);
+ req.setOrder(orderId);
+ req.setName(deptName);
+ OapiV2DepartmentCreateResponse rsp = client.execute(req, access_token);
+ JSONObject jo = JSONObject.parseObject(rsp.getBody());
+ if (jo.getLong("errcode") > 0) {
+ return -1;
+ }
+ return jo.getJSONObject("result").getLong("dept_id");
+ }
+
+ /**
+ * 功能:删除部门
+ *
+ * @param access_token
+ * @param deptId
+ * @throws ApiException
+ */
+ public static void delDept(String access_token, long deptId) throws ApiException {
+ DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/delete");
+ OapiV2DepartmentDeleteRequest req = new OapiV2DepartmentDeleteRequest();
+ req.setDeptId(deptId);
+ OapiV2DepartmentDeleteResponse rsp = client.execute(req, access_token);
+ System.out.println(rsp.getBody());
+ }
+
+ /**
+ * 功能:更新部门信息
+ *
+ * @param access_token
+ * @param deptId
+ * @param deptName
+ * @param orderId
+ * @throws ApiException
+ */
+ public static void updateDept(String access_token, long deptId, String deptName, long orderId) throws ApiException {
+ DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/update");
+ OapiV2DepartmentUpdateRequest req = new OapiV2DepartmentUpdateRequest();
+ req.setDeptId(deptId);
+ req.setOrder(orderId);
+ req.setName(deptName);
+ req.setLanguage("zh_CN");
+ OapiV2DepartmentUpdateResponse rsp = client.execute(req, access_token);
+ System.out.println(rsp.getBody());
+ }
+
+ /**
+ * 功能:获取部门列表
+ *
+ * @param access_token
+ * @throws ApiException
+ */
+ public static void getDeptList(String access_token, long dept_id) throws ApiException {
+ DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/listsub");
+ OapiV2DepartmentListsubRequest req = new OapiV2DepartmentListsubRequest();
+ req.setDeptId(dept_id);
+ req.setLanguage("zh_CN");
+ OapiV2DepartmentListsubResponse rsp = client.execute(req, access_token);
+ System.out.println(rsp.getBody());
+ }
+
+ /**
+ * 功能:创建人员
+ *
+ * @param access_token
+ * @param deptId
+ * @param userId
+ * @param personName
+ * @param tel
+ * @param zhiWei
+ * @throws ApiException
+ */
+ public static void createPerson(String access_token, String deptId, String userId, String personName, String tel, String zhiWei) throws ApiException {
+ DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/create");
+ OapiV2UserCreateRequest req = new OapiV2UserCreateRequest();
+ req.setUserid(userId);
+ req.setName(personName);
+ req.setMobile(tel);
+ req.setTitle(zhiWei);
+ req.setDeptIdList(deptId);
+ OapiV2UserCreateResponse rsp = client.execute(req, access_token);
+ System.out.println(rsp.getBody());
+ }
+
+ /**
+ * 功能:删除人员
+ *
+ * @param access_token
+ * @param userId
+ * @throws ApiException
+ */
+ public static void delPerson(String access_token, String userId) throws ApiException {
+ DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/delete");
+ OapiV2UserDeleteRequest req = new OapiV2UserDeleteRequest();
+ req.setUserid(userId);
+ OapiV2UserDeleteResponse rsp = client.execute(req, access_token);
+ System.out.println(rsp.getBody());
+ }
+}
diff --git a/src/main/resource/dingtalk.properties b/src/main/resource/dingtalk.properties
index 62ad214..fd37a98 100644
--- a/src/main/resource/dingtalk.properties
+++ b/src/main/resource/dingtalk.properties
@@ -10,3 +10,10 @@ appSecret=hnxZ93QqkGJpRyBziaR2vlbOPZo1U9eeqj73DfFuFnIxIUHNPbMR2DkIol9oGteh
redis_ip=10.10.14.169
# redis port
redis_port=18890
+
+
+# 数据库信息
+driverClassName=com.mysql.cj.jdbc.Driver
+user=root
+password=DsideaL147258369
+jdbcUrl=jdbc:mysql://10.10.14.199:22066/dsideal_db?rewriteBatchedStatements=true&useUnicode=true&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
diff --git a/target/classes/dingtalk.properties b/target/classes/dingtalk.properties
index 62ad214..fd37a98 100644
--- a/target/classes/dingtalk.properties
+++ b/target/classes/dingtalk.properties
@@ -10,3 +10,10 @@ appSecret=hnxZ93QqkGJpRyBziaR2vlbOPZo1U9eeqj73DfFuFnIxIUHNPbMR2DkIol9oGteh
redis_ip=10.10.14.169
# redis port
redis_port=18890
+
+
+# 数据库信息
+driverClassName=com.mysql.cj.jdbc.Driver
+user=root
+password=DsideaL147258369
+jdbcUrl=jdbc:mysql://10.10.14.199:22066/dsideal_db?rewriteBatchedStatements=true&useUnicode=true&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai