main
黄海 2 years ago
parent 5995ee0c77
commit b9adbbfc66

@ -1,9 +1,6 @@
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.DingTalk.Util.*;
import com.dsideal.FengHuang.Util.CommonUtil;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
@ -12,7 +9,7 @@ import com.jfinal.plugin.activerecord.dialect.MysqlDialect;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.plugin.redis.RedisPlugin;
public class Init {
public class Full {
public static void main(String[] args_) throws Exception {
PropKit.use("dingtalk.properties");
@ -59,5 +56,8 @@ public class Init {
//RolePerson.initPersonRole(accessToken, rOrg);
CommonUtil.Print("恭喜,所有操作成功完成!");
// 记录全量同步完成时间
Progress.finishInit();
}
}

@ -0,0 +1,56 @@
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.Progress;
import com.dsideal.FengHuang.Util.CommonUtil;
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 java.util.Date;
import java.util.List;
public class Increment {
public static void main(String[] args_) throws Exception {
PropKit.use("dingtalk.properties");
final String appKey = PropKit.get("appKey");
String appSecret = PropKit.get("appSecret");
DruidPlugin druid = DingTalkCommon.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();
//accessToken
String accessToken = DingTalkCommon.getAccessToken(appKey, appSecret);
//同步钉钉与云平台中部门信息
String orgName = "103中学";
Record rOrg = Model.getOrgByOrgName(orgName);
//1、组织机构
Progress.syncOrg(accessToken, rOrg);
//2、人员
// dt = Progress.getLastSyncTime("t_base_person");
//
// //3、人员角色关系
// dt = Progress.getLastSyncTime("t_sys_person_role");
CommonUtil.Print("恭喜,所有操作成功完成!");
}
}

@ -0,0 +1,5 @@
ALTER TABLE `dsideal_db`.`t_base_organization`
ADD COLUMN `dingtalk_dept_id` BIGINT NULL COMMENT '钉钉架构中机构的代码' AFTER `zydz`;
ALTER TABLE `dsideal_db`.`t_base_person`
ADD COLUMN `dingtalk_person_id` varchar(255) NULL COMMENT '钉钉架构中人员ID' AFTER `pay_rate`;

@ -4,6 +4,7 @@ import com.jfinal.kit.Kv;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;
import java.util.Date;
import java.util.List;
public class Model {
@ -40,6 +41,11 @@ public class Model {
Db.update(sql, value, orgId);
}
public static void writePersonDingTalkId(int person_id) {
String sql = "update t_base_person set dingtalk_person_id=? where person_id=?";
Db.update(sql, person_id, person_id);
}
public static long getDtDeptId(int org_id) {
String sql = "select dingtalk_dept_id from t_base_organization where org_id=?";
Record r = Db.findFirst(sql, org_id);
@ -67,7 +73,27 @@ public class Model {
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<Record> list=Db.find(sql,rOrg.getInt("org_id"));
List<Record> list = Db.find(sql, rOrg.getInt("org_id"));
return list;
}
public static Date getLastSyncTime(String table_name) {
String sql = "select sync_last_update_time from t_dingtalk_progress where table_name=?";
return Db.findFirst(sql, table_name).getDate("getLastSyncTime");
}
public static void saveLastSyncTime(String table_name) {
String sql = "update t_dingtalk_progress set sync_last_update_time=now() where table_name=?";
Db.update(sql, table_name);
}
public static List<Record> getIncrementOrg(int org_id, Date dt) {
String sql = "select org_id,org_name,parent_id,b_use,dingtalk_dept_id,sort_id from t_base_organization where bureau_id=? and last_update_time>?";
return Db.find(sql, org_id, dt);
}
public static long getDingTalkOrgId(int org_id) {
String sql = "select dingtalk_dept_id from t_base_organization where org_id=?";
return Db.findFirst(sql, org_id).getLong("dingtalk_dept_id");
}
}

@ -12,6 +12,7 @@ import com.dingtalk.api.response.*;
import com.dsideal.FengHuang.Util.CommonUtil;
import com.jfinal.kit.Kv;
import com.jfinal.kit.StrKit;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;
import com.taobao.api.ApiException;
@ -154,16 +155,16 @@ public class OrgPerson {
* @param zhiWei
* @throws ApiException
*/
public static void createPerson(String access_token, String deptId, String userId, String personName, String tel, String zhiWei) throws ApiException {
public static void createPerson(String access_token, String deptId, int 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.setUserid(String.valueOf(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());
System.out.println(rsp.getBody());
}
/**
@ -249,7 +250,7 @@ public class OrgPerson {
cnt++;
if (limit > 0 && cnt > limit) break;
// 增加
String person_id = record.getStr("person_id");
int person_id = record.getInt("person_id");
String person_name = record.getStr("person_name");
String tel = record.getStr("tel");
//模拟处理一下手机号
@ -259,6 +260,9 @@ public class OrgPerson {
}
long deptId = record.getLong("dingtalk_dept_id");
createPerson(accessToken, String.valueOf(deptId), person_id, person_name, tel, "教师");
//回写标识
Model.writePersonDingTalkId(person_id);
CommonUtil.Print("成功加入人员:" + person_name);
DingTalkCommon.WriteActionTimes();
}

@ -0,0 +1,51 @@
package com.dsideal.FengHuang.DingTalk.Util;
import com.dsideal.FengHuang.Util.CommonUtil;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;
import com.taobao.api.ApiException;
import java.util.Date;
import java.util.List;
public class Progress {
public static void finishInit() {
List<Record> list = Db.findAll("t_dingtalk_progress");
for (Record record : list) {
Model.saveLastSyncTime(record.getStr("table_name"));
}
}
public static void syncOrg(String accessToken, Record rOrg) throws ApiException {
Date dt = Model.getLastSyncTime("t_base_organization");
//找出变更信息
List<Record> list = Model.getIncrementOrg(rOrg.getInt("org_id"), dt);
for (Record record : list) {
String org_name = record.getStr("org_name");
int sort_id = record.getInt("sort_id");
int b_use = record.getInt("b_use");
if (record.get("dingtalk_dept_id") == null) {
//新增
int parent_id = record.getInt("parent_id");
//查询一下它的父亲的dingtalk_dept_id
long parent_dingtalk_dept_id = Model.getDingTalkOrgId(parent_id);
OrgPerson.createDept(accessToken, org_name, parent_dingtalk_dept_id, sort_id, false);
CommonUtil.Print("新增部门:" + org_name);
} else {
int dingtalk_dept_id = record.getInt("dingtalk_dept_id");
if (b_use == 1) {
//修改
OrgPerson.updateDept(accessToken, dingtalk_dept_id, org_name, sort_id);
CommonUtil.Print("修改部门:" + org_name);
} else {
//删除
OrgPerson.delDept(accessToken, dingtalk_dept_id);
CommonUtil.Print("删除部门:" + org_name);
}
}
}
}
}
Loading…
Cancel
Save