From 4e2926c4183104259cd554a77453816a35f0829b 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 11:26:54 +0800 Subject: [PATCH] 'commit' --- src/main/java/UnitTest/TestDingTalk.java | 215 +++++++++++++++++++++-- 1 file changed, 200 insertions(+), 15 deletions(-) diff --git a/src/main/java/UnitTest/TestDingTalk.java b/src/main/java/UnitTest/TestDingTalk.java index 6d6168c..99353d5 100644 --- a/src/main/java/UnitTest/TestDingTalk.java +++ b/src/main/java/UnitTest/TestDingTalk.java @@ -1,14 +1,19 @@ package UnitTest; import com.alibaba.fastjson.JSONObject; -import com.aliyun.dingtalkoauth2_1_0.models.CreateJsapiTicketResponse; -import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenResponse; -import com.aliyun.dingtalkoauth2_1_0.models.GetSsoAccessTokenRequest; -import com.aliyun.dingtalkoauth2_1_0.models.GetSsoAccessTokenResponse; +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.kit.PropKit; import com.jfinal.plugin.redis.Redis; import com.jfinal.plugin.redis.RedisPlugin; +import com.taobao.api.ApiException; + +import java.util.ArrayList; +import java.util.List; public class TestDingTalk { /** @@ -51,9 +56,7 @@ public class TestDingTalk { Redis.use().setex(KEY, 5400, accessToken);//5400:一个半小时过期 return accessToken; } else { - String str = Redis.use().get(KEY); - JSONObject jo = JSONObject.parseObject(str); - return jo.getString("access_token"); + return Redis.use().get(KEY); } } @@ -83,9 +86,7 @@ public class TestDingTalk { Redis.use().setex(KEY, 5400, jsApiToken);//5400:一个半小时过期 return jsApiToken; } else { - String str = Redis.use().get(KEY); - JSONObject jo = JSONObject.parseObject(str); - return jo.getString("ticket"); + return Redis.use().get(KEY); } } @@ -103,8 +104,8 @@ public class TestDingTalk { .setCorpid(corpId) .setSsoSecret(ssoSecret); try { - GetSsoAccessTokenResponse res=client.getSsoAccessToken(getSsoAccessTokenRequest); - ssoToken=res.getBody().getAccessToken(); + 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)) { } @@ -116,12 +117,164 @@ public class TestDingTalk { Redis.use().setex(KEY, 5400, ssoToken);//5400:一个半小时过期 return ssoToken; } else { - String str = Redis.use().get(KEY); - JSONObject jo = JSONObject.parseObject(str); - return jo.getString("access_token"); + 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 void main(String[] args_) throws Exception { PropKit.use("dingtalk.properties"); String corpId = PropKit.get("corpId"); @@ -142,5 +295,37 @@ public class TestDingTalk { 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); + + + //通过云平台查询到的学校、部门、教师、学生、班级等信息,需要写入到钉钉中来,并且获取到钉钉返回的唯一主键,回写到云平台的表中去 + //这样处理,才能保证下次再来同步数据时,找到相同的唯一主键 + } }