From 5995ee0c77b3cbe3110325dc1301f123f83b98eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com> Date: Thu, 15 Jun 2023 10:41:32 +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 --- .../com/dsideal/FengHuang/DingTalk/Init.java | 32 ++++++++----------- .../DingTalk/Util/DingTalkCommon.java | 8 +---- .../DingTalk/Util/FillRemainCount.java | 2 +- .../FengHuang/DingTalk/Util/Model.java | 10 +++--- .../FengHuang/DingTalk/Util/OrgPerson.java | 6 ++-- .../FengHuang/DingTalk/Util/RolePerson.java | 17 ++++++++-- 6 files changed, 39 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/dsideal/FengHuang/DingTalk/Init.java b/src/main/java/com/dsideal/FengHuang/DingTalk/Init.java index 50c967d..3ca0fc6 100644 --- a/src/main/java/com/dsideal/FengHuang/DingTalk/Init.java +++ b/src/main/java/com/dsideal/FengHuang/DingTalk/Init.java @@ -2,6 +2,7 @@ package com.dsideal.FengHuang.DingTalk; import com.dsideal.FengHuang.DingTalk.Util.DingTalkCommon; import com.dsideal.FengHuang.DingTalk.Util.Model; +import com.dsideal.FengHuang.DingTalk.Util.OrgPerson; import com.dsideal.FengHuang.DingTalk.Util.RolePerson; import com.dsideal.FengHuang.Util.CommonUtil; import com.jfinal.kit.PropKit; @@ -11,8 +12,6 @@ import com.jfinal.plugin.activerecord.dialect.MysqlDialect; import com.jfinal.plugin.druid.DruidPlugin; import com.jfinal.plugin.redis.RedisPlugin; -import java.util.List; - public class Init { public static void main(String[] args_) throws Exception { @@ -36,34 +35,29 @@ public class Init { String accessToken = DingTalkCommon.getAccessToken(appKey, appSecret); //同步钉钉与云平台中部门信息 - String orgName = "长春市东光学校"; + String orgName = "103中学"; Record rOrg = Model.getOrgByOrgName(orgName); //开发测试时专用,批量删除人员与组织机构 -// Model.fillDeptListByDataBase(rOrg);//从数据库中获取最新的部门列表(已与钉钉匹配完毕) -// OrgPerson.delBureauPerson(accessToken,rOrg); -// OrgPerson.delAllDept(accessToken); - + //Model.fillDeptListByDataBase(rOrg);//从数据库中获取最新的部门列表(已与钉钉匹配完毕) + //OrgPerson.delBureauPerson(accessToken,rOrg); + //OrgPerson.delAllDept(accessToken); //初始化组织机构【需提前手动删除此学校及下属部门】 //OrgPerson.InitOrg(accessToken, rOrg); //同步人员 - Model.fillDeptListByDataBase(rOrg);//从数据库中获取最新的部门列表(已与钉钉匹配完毕) - //OrgPerson.initPerson(accessToken, rOrg); - - - //创建角色组【执行一次即可】 - // 手动删除原有的职务等角色组,执行下面的语句,并记录返回的角色组值---> 3786695368 - //RolePerson.createRoleGroup(accessToken, "义务教育阶段角色组"); - - long groupId = 3786695368L; + //Model.fillDeptListByDataBase(rOrg);//从数据库中获取最新的部门列表(已与钉钉匹配完毕) + //OrgPerson.initPerson(accessToken, rOrg,10);//这里限定了上限人数为10 + //初始化角色组 + //long groupId = RolePerson.createRoleGroup(accessToken, "义务教育阶段角色组"); //初始化角色 - RolePerson.initRole(accessToken, groupId); + //RolePerson.initRole(accessToken, groupId); + + //同步人员角色信息 + //RolePerson.initPersonRole(accessToken, rOrg); - //获取云平台侧指定角色下人员信息 - List list2 = Model.getRolePersonReleation(); CommonUtil.Print("恭喜,所有操作成功完成!"); } } diff --git a/src/main/java/com/dsideal/FengHuang/DingTalk/Util/DingTalkCommon.java b/src/main/java/com/dsideal/FengHuang/DingTalk/Util/DingTalkCommon.java index 1b52e98..6776ea2 100644 --- a/src/main/java/com/dsideal/FengHuang/DingTalk/Util/DingTalkCommon.java +++ b/src/main/java/com/dsideal/FengHuang/DingTalk/Util/DingTalkCommon.java @@ -156,12 +156,6 @@ public class DingTalkCommon { sql = "select remain_count from t_dingtalk_actioncount where year=? and month=?"; Record record = Db.findFirst(sql, year, month); int remain_count = record.getInt("remain_count"); - int seconds = 2; - CommonUtil.Print("钉钉本月剩余API调用次数:" + remain_count + ",为防止调用过于频繁,将休息" + seconds + "秒后继续操作!"); - try { - Thread.sleep(seconds * 1000); - } catch (InterruptedException e) { - e.printStackTrace(); - } + CommonUtil.Print("钉钉本月剩余API调用次数:" + remain_count + "!"); } } diff --git a/src/main/java/com/dsideal/FengHuang/DingTalk/Util/FillRemainCount.java b/src/main/java/com/dsideal/FengHuang/DingTalk/Util/FillRemainCount.java index 5e6194a..9200d28 100644 --- a/src/main/java/com/dsideal/FengHuang/DingTalk/Util/FillRemainCount.java +++ b/src/main/java/com/dsideal/FengHuang/DingTalk/Util/FillRemainCount.java @@ -10,7 +10,7 @@ import com.jfinal.plugin.druid.DruidPlugin; public class FillRemainCount { public static void main(String[] args) { - PropKit.use("dingtalk.properties"); + PropKit.use("dingtalk_dalian.properties"); DruidPlugin druid = DingTalkCommon.createDruidPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password").trim(), PropKit.get("driverClassName")); druid.start(); diff --git a/src/main/java/com/dsideal/FengHuang/DingTalk/Util/Model.java b/src/main/java/com/dsideal/FengHuang/DingTalk/Util/Model.java index 57edb01..14effbf 100644 --- a/src/main/java/com/dsideal/FengHuang/DingTalk/Util/Model.java +++ b/src/main/java/com/dsideal/FengHuang/DingTalk/Util/Model.java @@ -58,14 +58,16 @@ public class Model { } public static void writeDingTalkRoleId(int role_id, long dt_role_id) { - String sql = "update t_im_role set dingtalk_role_id=? where role_id=?"; + String sql = "update t_dingtalk_role set dingtalk_role_id=? where role_id=?"; Db.update(sql, dt_role_id, role_id); } // 需要同步哪些人员角色信息 - public static List getRolePersonReleation() { - String sql = "select t1.person_id,t1.role_id,t2.dingtalk_role_id from t_sys_person_role as t1 inner join t_dingtalk_role as t2 on t1.role_id=t2.role_id where t1.bureau_id=?"; - List list=Db.find(sql); + public static List getRolePersonReleation(Record rOrg) { + String sql = "select t1.person_id,t2.dingtalk_role_id,t3.bureau_id from t_sys_person_role as t1 inner join t_dingtalk_role as t2 on t1.role_id=t2.role_id " + + "inner join t_base_person as t3 on t1.person_id=t3.person_id " + + " where t3.bureau_id=? and t3.b_use=1"; + List list=Db.find(sql,rOrg.getInt("org_id")); return list; } } diff --git a/src/main/java/com/dsideal/FengHuang/DingTalk/Util/OrgPerson.java b/src/main/java/com/dsideal/FengHuang/DingTalk/Util/OrgPerson.java index b0a43d7..0da7cf8 100644 --- a/src/main/java/com/dsideal/FengHuang/DingTalk/Util/OrgPerson.java +++ b/src/main/java/com/dsideal/FengHuang/DingTalk/Util/OrgPerson.java @@ -137,7 +137,7 @@ public class OrgPerson { //这个部门是在哪个部门下的 long dingTalkParentDeptId = 1; if (parentId > 0) dingTalkParentDeptId = Model.getDtDeptId(parentId); - long dt_dept_id = createDept(accessToken, org_name, dingTalkParentDeptId, sId, false); + long dt_dept_id = createDept(accessToken, org_name, dingTalkParentDeptId, sId, parentId == -1); Model.writeDtDeptId(org_id, String.valueOf(dt_dept_id)); CommonUtil.Print("成功创建部门:" + org_name); } @@ -239,7 +239,7 @@ public class OrgPerson { * @param rOrg * @throws ApiException */ - public static void initPerson(String accessToken, Record rOrg) throws ApiException { + public static void initPerson(String accessToken, Record rOrg, int limit) throws ApiException { int bureauId = rOrg.getInt("org_id"); //云平台 List list = Model.getDeptPerson(bureauId); @@ -247,7 +247,7 @@ public class OrgPerson { for (Record record : list) { //控制一下人员数量,防止钉钉的版本问题造成人员添加失败 cnt++; - if (cnt > 10) break; + if (limit > 0 && cnt > limit) break; // 增加 String person_id = record.getStr("person_id"); String person_name = record.getStr("person_name"); diff --git a/src/main/java/com/dsideal/FengHuang/DingTalk/Util/RolePerson.java b/src/main/java/com/dsideal/FengHuang/DingTalk/Util/RolePerson.java index d12991e..11073af 100644 --- a/src/main/java/com/dsideal/FengHuang/DingTalk/Util/RolePerson.java +++ b/src/main/java/com/dsideal/FengHuang/DingTalk/Util/RolePerson.java @@ -15,12 +15,15 @@ import java.util.*; public class RolePerson { //创建用户组,这个概念似乎不重要,可以手动创建即可 - public static void createRoleGroup(String access_token, String group_name) throws ApiException { + public static long createRoleGroup(String access_token, String group_name) throws ApiException { DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/role/add_role_group"); OapiRoleAddrolegroupRequest req = new OapiRoleAddrolegroupRequest(); req.setName(group_name); OapiRoleAddrolegroupResponse rsp = client.execute(req, access_token); System.out.println(rsp.getBody()); + JSONObject jo = JSONObject.parseObject(rsp.getBody()); + long groupId = jo.getLong("groupId"); + return groupId; } public static long createRole(String access_token, String role_name, long group_id) throws ApiException { @@ -63,7 +66,6 @@ public class RolePerson { } - public static void addRolePerson(String accessToken, String role_id, String ids) throws ApiException { //一次最多20个人员 DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/role/addrolesforemps"); @@ -83,4 +85,15 @@ public class RolePerson { System.out.println(rsp.getBody()); } + public static void initPersonRole(String accessToken, Record rOrg) throws ApiException { + //获取云平台侧指定角色下人员信息 + List listPeronRole = Model.getRolePersonReleation(rOrg); + for (Record record : listPeronRole) { + long dingtalk_role_id = record.getLong("dingtalk_role_id"); + int person_id = record.getInt("person_id"); + RolePerson.addRolePerson(accessToken, String.valueOf(dingtalk_role_id), String.valueOf(person_id)); + DingTalkCommon.WriteActionTimes(); + } + } + }