@ -1,31 +1,46 @@
package com.dsideal.FengHuang.DingTalk ;
package com.dsideal.FengHuang.DingTalk ;
import com.alibaba.fastjson.JSONArray ;
import com.alibaba.fastjson.JSONObject ;
import com.alibaba.fastjson.JSONObject ;
import com.dingtalk.api.DefaultDingTalkClient ;
import com.dingtalk.api.DefaultDingTalkClient ;
import com.dingtalk.api.DingTalkClient ;
import com.dingtalk.api.DingTalkClient ;
import com.dingtalk.api.request.* ;
import com.dingtalk.api.request.* ;
import com.dingtalk.api.response.* ;
import com.dingtalk.api.response.* ;
import com.dsideal.FengHuang.Util.CommonUtil ;
import com.jfinal.plugin.activerecord.Record ;
import com.taobao.api.ApiException ;
import com.taobao.api.ApiException ;
import java.util.ArrayList ;
import java.util.* ;
import java.util.List ;
public class RolePerson {
public class RolePerson {
//暂未改修改,因为我们的角色与测试架构的角色存在冲突,不能在人家的环境中实现全部测试功能,需要搭建自己的专用服务器+架构
//暂未改修改,因为我们的角色与测试架构的角色存在冲突,不能在人家的环境中实现全部测试功能,需要搭建自己的专用服务器+架构
/ *
/ *
- - 需 要 产 品 人 员 整 理 出 我 们 管 理 软 件 需 要 的 角 色 有 哪 些 , 是 现 在 云 平 台 角 色 表 的 子 集
- - 需 要 产 品 人 员 整 理 出 我 们 管 理 软 件 需 要 的 角 色 有 哪 些 , 是 现 在 云 平 台 角 色 表 的 子 集
select * from t_sys_role ;
DROP TABLE IF EXISTS ` t_im_role ` ;
- - 需 要 同 步 哪 些 人 员 角 色 信 息
CREATE TABLE ` t_im_role ` (
select * from t_sys_person_role where bureau_id = ? and role_id in ( 有 效 角 色 子 表 ) ;
` role_id ` int NOT NULL COMMENT ' 角 色 ID ' ,
* /
` role_name ` varchar ( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT ' 角 色 名 称 ' ,
` dingtalk_role_id ` bigint NULL DEFAULT NULL COMMENT ' 在 钉 钉 系 统 中 的 角 色 ID ' ,
PRIMARY KEY ( ` role_id ` ) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact ;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - Records of t_im_role
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
INSERT INTO ` t_im_role ` VALUES ( 174 , ' 班 主 任 ' , NULL ) ;
INSERT INTO ` t_im_role ` VALUES ( 323 , ' 学 校 校 长 ' , NULL ) ;
insert into ` t_im_role ` VALUES ( 4 , ' 普 通 教 师 ' , NULL ) ;
TODO
//让产品经理想好, 加入到此表中, 表示需要与IM钉钉系统对接的角色
* /
//创建用户组,这个概念似乎不重要,可以手动创建即可
public static void createRoleGroup ( String access_token , String group_name ) throws ApiException {
public static void createRoleGroup ( String access_token , String group_name ) throws ApiException {
DingTalkClient client = new DefaultDingTalkClient ( "https://oapi.dingtalk.com/role/add_role_group" ) ;
DingTalkClient client = new DefaultDingTalkClient ( "https://oapi.dingtalk.com/role/add_role_group" ) ;
OapiRoleAddrolegroupRequest req = new OapiRoleAddrolegroupRequest ( ) ;
OapiRoleAddrolegroupRequest req = new OapiRoleAddrolegroupRequest ( ) ;
req . setName ( group_name ) ;
req . setName ( group_name ) ;
OapiRoleAddrolegroupResponse rsp = client . execute ( req , access_token ) ;
OapiRoleAddrolegroupResponse rsp = client . execute ( req , access_token ) ;
System . out . println ( rsp . getBody ( ) ) ;
System . out . println ( rsp . getBody ( ) ) ;
//创建成功后, 需要将角色组信息记录到自己的表中, 钉钉未提供查询有哪些角色组的API
//groupId --> write to --->database
}
}
/ * *
/ * *
@ -35,23 +50,105 @@ public class RolePerson {
* @param group_id
* @param group_id
* @throws ApiException
* @throws ApiException
* /
* /
public static void getRoleList ( String access_token , long group_id ) throws ApiException {
public static List < Record > getRoleList ( String access_token , long group_id ) throws ApiException {
DingTalkClient client = new DefaultDingTalkClient ( "https://oapi.dingtalk.com/topapi/role/getrolegroup" ) ;
DingTalkClient client = new DefaultDingTalkClient ( "https://oapi.dingtalk.com/topapi/role/getrolegroup" ) ;
OapiRoleGetrolegroupRequest req = new OapiRoleGetrolegroupRequest ( ) ;
OapiRoleGetrolegroupRequest req = new OapiRoleGetrolegroupRequest ( ) ;
req . setGroupId ( group_id ) ;
req . setGroupId ( group_id ) ;
OapiRoleGetrolegroupResponse rsp = client . execute ( req , access_token ) ;
OapiRoleGetrolegroupResponse rsp = client . execute ( req , access_token ) ;
System . out . println ( rsp . getBody ( ) ) ;
JSONObject jo = JSONObject . parseObject ( rsp . getBody ( ) ) ;
JSONArray ja = jo . getJSONObject ( "role_group" ) . getJSONArray ( "roles" ) ;
List < Record > list = new ArrayList ( ) ;
for ( int i = 0 ; i < ja . size ( ) ; i + + ) {
Record record = new Record ( ) ;
record . set ( "role_id" , ( ( JSONObject ) ja . get ( i ) ) . getLong ( "role_id" ) ) ;
record . set ( "role_name" , ( ( JSONObject ) ja . get ( i ) ) . getString ( "role_name" ) ) ;
list . add ( record ) ;
}
return list ;
}
}
public static void createRole ( String access_token , String role_name , long group_id ) throws ApiException {
public static long createRole ( String access_token , String role_name , long group_id ) throws ApiException {
DingTalkClient client = new DefaultDingTalkClient ( "https://oapi.dingtalk.com/role/add_role" ) ;
DingTalkClient client = new DefaultDingTalkClient ( "https://oapi.dingtalk.com/role/add_role" ) ;
OapiRoleAddRoleRequest req = new OapiRoleAddRoleRequest ( ) ;
OapiRoleAddRoleRequest req = new OapiRoleAddRoleRequest ( ) ;
req . setRoleName ( role_name ) ;
req . setRoleName ( role_name ) ;
req . setGroupId ( group_id ) ;
req . setGroupId ( group_id ) ;
OapiRoleAddRoleResponse rsp = client . execute ( req , access_token ) ;
OapiRoleAddRoleResponse rsp = client . execute ( req , access_token ) ;
JSONObject jo = JSONObject . parseObject ( rsp . getBody ( ) ) ;
return jo . getLong ( "roleId" ) ;
}
public static void delRole ( String access_token , long role_id ) throws ApiException {
DingTalkClient client = new DefaultDingTalkClient ( "https://oapi.dingtalk.com/topapi/role/deleterole" ) ;
OapiRoleDeleteroleRequest req = new OapiRoleDeleteroleRequest ( ) ;
req . setRoleId ( role_id ) ;
OapiRoleDeleteroleResponse rsp = client . execute ( req , access_token ) ;
System . out . println ( rsp . getBody ( ) ) ;
}
public static void updateRole ( String access_token , long role_id , String role_name ) throws ApiException {
DingTalkClient client = new DefaultDingTalkClient ( "https://oapi.dingtalk.com/role/update_role" ) ;
OapiRoleUpdateRoleRequest req = new OapiRoleUpdateRoleRequest ( ) ;
req . setRoleId ( role_id ) ;
req . setRoleName ( role_name ) ;
OapiRoleUpdateRoleResponse rsp = client . execute ( req , access_token ) ;
System . out . println ( rsp . getBody ( ) ) ;
System . out . println ( rsp . getBody ( ) ) ;
}
}
public static void clearGroupRole ( String access_token , long group_id ) throws ApiException {
List < Record > list = getRoleList ( access_token , group_id ) ;
for ( int i = 0 ; i < list . size ( ) ; i + + ) {
delRole ( access_token , list . get ( i ) . getLong ( "role_id" ) ) ;
}
}
/ * *
* 功 能 : 同 步 角 色 信 息
*
* @param access_token
* @param group_id
* @throws ApiException
* /
public static void syncRole ( String access_token , long group_id ) throws ApiException {
//1、钉钉侧有哪些角色
List < Record > listA = getRoleList ( access_token , group_id ) ;
//2、数据库有哪些角色
List < Record > listB = Model . getRoleList ( ) ;
boolean flag ;
//3、在A不在B, 删除之
for ( int i = 0 ; i < listA . size ( ) ; i + + ) {
flag = false ;
for ( int j = 0 ; j < listB . size ( ) ; j + + ) {
if ( listB . get ( j ) . get ( "dingtalk_role_id" ) ! = null & & listA . get ( i ) . getLong ( "role_id" ) = = listB . get ( j ) . getLong ( "dingtalk_role_id" ) ) {
flag = true ;
break ;
}
}
if ( ! flag ) {
delRole ( access_token , listA . get ( i ) . getLong ( "role_id" ) ) ;
CommonUtil . Print ( "成功删除钉钉侧角色:" + listA . get ( i ) . getStr ( "role_name" ) ) ;
}
}
//4、在B不在A, 增加之
for ( int i = 0 ; i < listB . size ( ) ; i + + ) {
flag = false ;
for ( int j = 0 ; j < listA . size ( ) ; j + + ) {
if ( listB . get ( j ) . get ( "dingtalk_role_id" ) ! = null & & listA . get ( i ) . getLong ( "role_id" ) = = listB . get ( j ) . getLong ( "dingtalk_role_id" ) ) {
flag = true ;
break ;
}
}
if ( ! flag ) {
long dt_role_id = createRole ( access_token , listB . get ( i ) . getStr ( "role_name" ) , group_id ) ;
//回写
Model . writeDingTalkRoleId ( listB . get ( i ) . getInt ( "role_id" ) , dt_role_id ) ;
CommonUtil . Print ( "成功创建角色:" + listB . get ( i ) . getStr ( "role_name" ) ) ;
}
}
//5、在A也在B, 看看是不是角色名称需要修改
//TODO,因为角色名称不般不随意变化, 不写这块代码也是OK的
}
/ * *
/ * *
* 功 能 : 角 色 下 人 员 列 表
* 功 能 : 角 色 下 人 员 列 表
*
*
@ -59,21 +156,36 @@ public class RolePerson {
* @param role_id
* @param role_id
* @throws ApiException
* @throws ApiException
* /
* /
public static List < String > getRolePersonList ( String access_token , long role_id ) throws ApiException {
public static List < Record > rolePersonList = new ArrayList < > ( ) ;
public static long SZ = 2l ;
public static void getRolePersonList ( String access_token , long role_id , long start ) throws ApiException {
DingTalkClient client = new DefaultDingTalkClient ( "https://oapi.dingtalk.com/topapi/role/simplelist" ) ;
DingTalkClient client = new DefaultDingTalkClient ( "https://oapi.dingtalk.com/topapi/role/simplelist" ) ;
List < String > res = new ArrayList < > ( ) ;
OapiRoleSimplelistRequest req = new OapiRoleSimplelistRequest ( ) ;
long start = 0 ;
req . setRoleId ( role_id ) ;
while ( true ) {
req . setSize ( SZ ) ;
OapiRoleSimplelistRequest req = new OapiRoleSimplelistRequest ( ) ;
req . setOffset ( start ) ;
req . setRoleId ( role_id ) ;
OapiRoleSimplelistResponse rsp = client . execute ( req , access_token ) ;
req . setSize ( 20L ) ;
JSONObject jo = JSONObject . parseObject ( rsp . getBody ( ) ) ;
req . setOffset ( start ) ;
OapiRoleSimplelistResponse rsp = client . execute ( req , access_token ) ;
JSONArray ja = jo . getJSONObject ( "result" ) . getJSONArray ( "list" ) ;
JSONObject jo = JSONObject . parseObject ( rsp . getBody ( ) ) ;
for ( int i = 0 ; i < ja . size ( ) ; i + + ) {
System . out . println ( jo ) ;
Record record = new Record ( ) ;
break ;
String name = ( ( JSONObject ) ja . get ( i ) ) . getString ( "name" ) ;
String userid = ( ( JSONObject ) ja . get ( i ) ) . getString ( "userid" ) ;
record . set ( "person_name" , name ) ;
record . set ( "person_id" , userid ) ;
rolePersonList . add ( record ) ;
}
if ( jo . getJSONObject ( "result" ) . getBoolean ( "hasMore" ) ) {
getRolePersonList ( access_token , role_id , start + SZ ) ;
}
}
return res ;
}
public static void syncRolePersonReleation ( ) {
//getRolePersonList();
//Model.getRolePersonReleation();
}
}
/ * *
/ * *
@ -92,15 +204,6 @@ public class RolePerson {
}
}
public static void createRole ( String accessToken ) throws ApiException {
DingTalkClient client = new DefaultDingTalkClient ( "https://oapi.dingtalk.com/role/add_role" ) ;
OapiRoleAddRoleRequest req = new OapiRoleAddRoleRequest ( ) ;
req . setRoleName ( "测试1" ) ;
req . setGroupId ( 1507113595L ) ;
OapiRoleAddRoleResponse rsp = client . execute ( req , accessToken ) ;
System . out . println ( rsp . getBody ( ) ) ;
}
public static void updateRole ( String accessToken ) throws ApiException {
public static void updateRole ( String accessToken ) throws ApiException {
DingTalkClient client = new DefaultDingTalkClient ( "https://oapi.dingtalk.com/role/update_role" ) ;
DingTalkClient client = new DefaultDingTalkClient ( "https://oapi.dingtalk.com/role/update_role" ) ;
OapiRoleUpdateRoleRequest req = new OapiRoleUpdateRoleRequest ( ) ;
OapiRoleUpdateRoleRequest req = new OapiRoleUpdateRoleRequest ( ) ;
@ -110,13 +213,6 @@ public class RolePerson {
System . out . println ( rsp . getBody ( ) ) ;
System . out . println ( rsp . getBody ( ) ) ;
}
}
public static void delRole ( String accessToken ) throws ApiException {
DingTalkClient client = new DefaultDingTalkClient ( "https://oapi.dingtalk.com/topapi/role/deleterole" ) ;
OapiRoleDeleteroleRequest req = new OapiRoleDeleteroleRequest ( ) ;
req . setRoleId ( 1581321999L ) ;
OapiRoleDeleteroleResponse rsp = client . execute ( req , accessToken ) ;
System . out . println ( rsp . getBody ( ) ) ;
}
public static void addRolePerson ( String accessToken , String role_id , String ids ) throws ApiException {
public static void addRolePerson ( String accessToken , String role_id , String ids ) throws ApiException {
//一次最多20个人员
//一次最多20个人员