公司内部现在想从飞书转为用企业微信,然后内部所有数据都以SAP的数据为准。
所以需要写一个定时任务,定时从SAP(可理解为数据库)拉取所有部门和人员数据进行同步(部门变动、人员入离职),与企微现有的部门人员作一个比对,对企微进行部门人员异动的更新。
像这种两颗树多叉树型的结构比对和更新,不知怎么去写这个算法..
还是说利用数据库两张表,新数据表和旧数据表进行比对更快?
求一个实现方法,谢谢各位!
以树形结构进行处理,树形结构设计,根节点为部门,最左侧的叶子节点为根节点部门下的人员,其他叶子节点为根节点部门下的子部门。 如果不存在隶属关系,可以虚构一个隶属关系。
采用先序遍历,根左右形式同时遍历两个二叉树。 进行对比。
对企微进行部门人员异动的更新,采用时间戳更新来判断。
第一次从源头表读取数据的动作完成之后,记录一下时间戳字段中最大的时间点,保存到一个记录表中。
第二次从源头表读取数据之前,先获取记录表中最后/最大的时间点,只读取源表中这个时间点以后的数据。
当加载过程全部成功完成之后再更新加载记录表,更新这次最后的时间点。
我们才从企业微信转到飞书
个人感觉利用数据库表比对的速度会快些,而且跟多叉树形结构的数据相比,数据库数据明显好处理一些。
给你提供一个简单思路:
1、首先查出飞书所有人员数据list1和企业微信所有人员数据list2,
2、比对list1中的主键id在list2中是否存在,不存在,直接往企业微信库中新增数据;如果存在,比对相同主键的创建时间或更新时间是否相同,不同说明有更新,然后修改企业微信中的数据;
如果list2中的数据在list1中不存在,说明该人员已离职,直接删除数据,
3、然后把上述逻辑放到定时器中,每天定时更新即可
两张表一个交集,一个差集就可以完成了吧
如果飞书和企微的组织ID不同,需要建一个ID映射关系,在表上增加一个source_id字段,然后根据source_id与匹配操作
定时器?你用触发器方便太多了,数据库也是可以跟网络对接编程的。
删除一个人,执行触发器
增加一个人,执行触发器
这样不知道节省多少资源。
已sap为准了,还要对比么?已天为周期,每天半夜整体刷新一下数据不行么?