企业微信部门人员同步

公司内部现在想从飞书转为用企业微信,然后内部所有数据都以SAP的数据为准。
所以需要写一个定时任务,定时从SAP(可理解为数据库)拉取所有部门和人员数据进行同步(部门变动、人员入离职),与企微现有的部门人员作一个比对,对企微进行部门人员异动的更新。
像这种两颗树多叉树型的结构比对和更新,不知怎么去写这个算法..
还是说利用数据库两张表,新数据表和旧数据表进行比对更快?
求一个实现方法,谢谢各位!

以树形结构进行处理,树形结构设计,根节点为部门,最左侧的叶子节点为根节点部门下的人员,其他叶子节点为根节点部门下的子部门。 如果不存在隶属关系,可以虚构一个隶属关系。
采用先序遍历,根左右形式同时遍历两个二叉树。 进行对比。

  1. 先判断叶子节点的数量,sap数量大于QW(企业微信),将多余的节点全部拷贝进QW中,将该节点从sap中剔除;sap数量小于QW,将QW中多余的节点全部剔除,将该节点从QW中剔除。处理过后,sap 与 QW的叶子节点数相同。
  2. 同时进入最左侧节点,遍历人员节点。比对人员信息,选择更新或者新增。(一般来说,比对的字段不是很多的话,比对几万次是很快的,几十秒就完成了)更新时,可以使用多线程,增加一点点的速度。
  3. 重复步骤 1.2 直到遍历完所有的节点。
    步骤中的难点,应该是比对的部分,这里有很多实现的方法,看你自己要怎么处理,耗时的部分,应该是步骤1,新增对象和删除对象是很慢的,你可以处理好了以后,在更新QW的内容。
    我看你上面的回答,部门3k+,人员8k+,数据量比较少,不是很多。目测,你执行下来,时间大概是 5-10分钟左右。
    方法不是很巧妙,但是应该可以完成你的任务。

对企微进行部门人员异动的更新,采用时间戳更新来判断。

第一次从源头表读取数据的动作完成之后,记录一下时间戳字段中最大的时间点,保存到一个记录表中。
第二次从源头表读取数据之前,先获取记录表中最后/最大的时间点,只读取源表中这个时间点以后的数据。
当加载过程全部成功完成之后再更新加载记录表,更新这次最后的时间点。

我们才从企业微信转到飞书

个人感觉利用数据库表比对的速度会快些,而且跟多叉树形结构的数据相比,数据库数据明显好处理一些。
给你提供一个简单思路:
1、首先查出飞书所有人员数据list1和企业微信所有人员数据list2,
2、比对list1中的主键id在list2中是否存在,不存在,直接往企业微信库中新增数据;如果存在,比对相同主键的创建时间或更新时间是否相同,不同说明有更新,然后修改企业微信中的数据;
如果list2中的数据在list1中不存在,说明该人员已离职,直接删除数据,
3、然后把上述逻辑放到定时器中,每天定时更新即可

两张表一个交集,一个差集就可以完成了吧

如果飞书和企微的组织ID不同,需要建一个ID映射关系,在表上增加一个source_id字段,然后根据source_id与匹配操作

定时器?你用触发器方便太多了,数据库也是可以跟网络对接编程的。
删除一个人,执行触发器
增加一个人,执行触发器
这样不知道节省多少资源。

已sap为准了,还要对比么?已天为周期,每天半夜整体刷新一下数据不行么?