From 76dd8b086369ff0e963eaeac49e2653a24b8c4fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com> Date: Wed, 7 Jun 2023 07:54:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/UnitTest/TestDingTalk.java | 23 ++---- .../dsideal/FengHuang/Util/DingTalkUtil.java | 73 ++++++++++++++++++- target/classes/dingtalk.properties | 4 +- 3 files changed, 76 insertions(+), 24 deletions(-) diff --git a/src/main/java/UnitTest/TestDingTalk.java b/src/main/java/UnitTest/TestDingTalk.java index ce17214..3bf3c0a 100644 --- a/src/main/java/UnitTest/TestDingTalk.java +++ b/src/main/java/UnitTest/TestDingTalk.java @@ -1,21 +1,14 @@ package UnitTest; -import cn.binarywang.tools.generator.ChineseMobileNumberGenerator; import com.alibaba.druid.filter.stat.StatFilter; -import com.alibaba.fastjson.JSONObject; import com.dsideal.FengHuang.Util.CommonUtil; import com.dsideal.FengHuang.Util.DingTalkUtil; import com.jfinal.kit.PropKit; 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.sql.SQLOutput; -import java.util.*; public class TestDingTalk { public static DruidPlugin createDruidPlugin(String url, String username, String password, String driverClass) { @@ -70,18 +63,12 @@ public class TestDingTalk { String orgName = "长春市东光学校"; Record record = DingTalkUtil.getOrgByOrgName(orgName); int bureau_id = record.getInt("org_id"); - DingTalkUtil.syncOrg(accessToken, orgName); + int dingtalk_dept_id=record.getInt("dingtalk_dept_id"); + //同步组织机构 + //DingTalkUtil.syncOrg(accessToken, orgName); - List list = DingTalkUtil.getPersonList(bureau_id); - for (int i = 0; i < list.size(); i++) { - Record r = list.get(i); - long deptId = r.getLong("dingtalk_dept_id"); - int person_id = r.getInt("person_id"); - String person_name = r.getStr("person_name"); - String tel = ChineseMobileNumberGenerator.getInstance().generate(); - DingTalkUtil.createPerson(accessToken, String.valueOf(deptId), String.valueOf(person_id), person_name, tel, "教师"); - CommonUtil.Print("成功加入人员:"+person_name); - } + DingTalkUtil.getBureauPerson(accessToken,dingtalk_dept_id); + System.out.println(DingTalkUtil.personList.size()); // System.out.println(list); diff --git a/src/main/java/com/dsideal/FengHuang/Util/DingTalkUtil.java b/src/main/java/com/dsideal/FengHuang/Util/DingTalkUtil.java index 3840913..e831c8a 100644 --- a/src/main/java/com/dsideal/FengHuang/Util/DingTalkUtil.java +++ b/src/main/java/com/dsideal/FengHuang/Util/DingTalkUtil.java @@ -1,5 +1,6 @@ package com.dsideal.FengHuang.Util; +import cn.binarywang.tools.generator.ChineseMobileNumberGenerator; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.aliyun.dingtalkoauth2_1_0.models.*; @@ -244,7 +245,6 @@ public class DingTalkUtil { long childDeptId = j.getLongValue("dept_id"); kv.set("dept_id", childDeptId); kv.set("name", j.getString("name")); - //kv.set("parent_id", j.getLongValue("parent_id")); deptList.add(kv); getDeptList(access_token, childDeptId);//递归 } @@ -401,7 +401,72 @@ public class DingTalkUtil { } } - /**-----------------------------------------------------下面是数据库操作---------------------------------------------*/ + public static List personList = new ArrayList(); + + + public static void getDeptPerson(String access_token, long dept_id) throws ApiException { + DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/user/listsimple"); + long next_cursor = 0; + while (true) { + OapiUserListsimpleRequest req = new OapiUserListsimpleRequest(); + req.setDeptId(dept_id); + req.setCursor(next_cursor); + req.setSize(10L); + req.setOrderField("modify_desc"); + req.setContainAccessLimit(false); + req.setLanguage("zh_CN"); + OapiUserListsimpleResponse rsp = client.execute(req, access_token); + JSONObject jo = JSONObject.parseObject(rsp.getBody()); + + JSONArray ja = jo.getJSONObject("result").getJSONArray("list"); + if (ja == null) return; + for (int i = 0; i < ja.size(); i++) { + JSONObject j = ja.getJSONObject(i); + Kv kv = Kv.create(); + String userid = j.getString("userid"); + String name = j.getString("name"); + kv.set("userid", userid); + kv.set("name", name); + personList.add(kv); + } + if (jo.getJSONObject("result").getBoolean("has_more")) + next_cursor = jo.getJSONObject("result").getLong("next_cursor"); + else break; + } + } + + public static void getBureauPerson(String access_token, long dept_id) throws ApiException { + //获取有哪些部门 + deptList.clear(); + personList.clear(); + getDeptPerson(access_token, dept_id); + getDeptList(access_token, dept_id); + for (int i = 0; i < deptList.size(); i++) { + getDeptPerson(access_token, deptList.get(i).getInt("dept_id")); + } + } + + //TODO + public static void syncPerson(String accessToken, String orgName) throws ApiException { + Record rOrg = getOrgByOrgName(orgName); + int bureauId = rOrg.getInt("org_id"); + int sortId = rOrg.getInt("sort_id"); + + List list = DingTalkUtil.getDeptPerson(bureauId); + for (int i = 0; i < list.size(); i++) { + Record r = list.get(i); + long deptId = r.getLong("dingtalk_dept_id"); + int person_id = r.getInt("person_id"); + String person_name = r.getStr("person_name"); + String tel = ChineseMobileNumberGenerator.getInstance().generate(); + DingTalkUtil.createPerson(accessToken, String.valueOf(deptId), String.valueOf(person_id), person_name, tel, "教师"); + CommonUtil.Print("成功加入人员:" + person_name); + } + } + + /** + * -----------------------------------------------------下面是数据库操作--------------------------------------------- + */ public static List getOrgList(int orgId) { // 学校及学校下的部门 @@ -411,7 +476,7 @@ public class DingTalkUtil { } - public static List getPersonList(int bureau_id) { + public static List getDeptPerson(int bureau_id) { String sql = "select t1.person_id,t1.person_name,t2.dingtalk_dept_id from t_base_person as t1 " + "inner join t_base_organization as t2 on t1.org_id=t2.org_id " + " where t1.bureau_id=? and t1.b_use=1"; @@ -431,7 +496,7 @@ public class DingTalkUtil { } public static Record getOrgByOrgName(String org_name) { - String sql = "select org_id,org_name,sort_id from t_base_organization where org_name = ?"; + String sql = "select org_id,org_name,sort_id,dingtalk_dept_id from t_base_organization where org_name = ?"; return Db.findFirst(sql, org_name); } diff --git a/target/classes/dingtalk.properties b/target/classes/dingtalk.properties index 1958c46..dbfb4e3 100644 --- a/target/classes/dingtalk.properties +++ b/target/classes/dingtalk.properties @@ -1,7 +1,7 @@ +# 企业管理员可以直接点击登录钉钉开放平台 -【基本信息】-【开发信息(旧版)】查看企业的CorpID和SSOsecret。 # 公司ID corpId=dingbb7089b2561d88a435c2f4657eb6378f -# 企业管理员可以直接点击登录钉钉开放平台 -【基本信息】-【开发信息(旧版)】查看企业的CorpID和SSOsecret。 -SSOSecret=AnzvCq3MsUhOpEO4ieiig2ExPMACWY-A4IjBRTFnXQJ1XUngkQTraAbjDv4-kNPp + # 每个应用都拥有唯一的AgentId agentId=2620299417 # AK SK