场景说明:
公司用的是钉钉考勤进行员工打卡,但是人事薪酬系统需要钉钉的考勤数据,那么现在需要把钉钉考勤数据同步并加工到本地数据库中。
实施方案对比
钉钉存储了考勤记录、组织架构、审批流程等关键业务数据。传统同步方案需开发API接口、处理Token管理、错误重试等复杂逻辑,耗时且易出错。而通过逻辑引擎(如JVS/ETLCloud),只需可视化配置节点即可完成全流程编排,实现以下场景:
- 薪资核算:每月自动同步考勤数据至工资系统,避免手动导出错误。
- 实时监控:管理层需动态查看部门出勤率,依赖小时级更新的数据。
- 跨系统集成:将钉钉审批数据同步至Flowable流程引擎,驱动自动化审批流。
传统手工代码实现 |
逻辑引擎配置实现 |
需编写Python/Java脚本调用API |
拖拽节点配置API请求,零代码完成 |
手动处理Token过期和重试机制 |
内置Token动态管理节点,自动刷新缓存 |
横表转纵表需用Pandas脚本转换 |
可视化循环节点+公式引擎直接转换 |
需求分析
1. 定时同步机制设计
- 考勤打卡记录 每小时增量同步 逻辑引擎Cron触发器+时间戳过滤
- 组织架构变更 事件驱动实时同步 订阅钉钉Stream事件流
- 全量历史数据 每月全量备份 逻辑引擎批处理任务
2. 按照人员、时间、上班打卡(时间/结果),下班(时间/结果)
按照不同的场景将多条数据进行合并,根据数据情况不同,采用新增/修改 当日用户的打卡数据
3. 数据结构转换:
- 目标:将原始打卡数据(单行多日)转为每行单日记录,(钉钉横表 → 本地纵表),支持工时计算。
转换流程:
字段映射示例:
钉钉横表字段 本地纵表字段 转换规则
user_name user_id 直接映射
day1 date + check_in/out 拆分为日期列,取最早/最晚时间
work_hours 动态计算字段 下班时间-上班时间-午休时长
实施步骤
步骤1:准备工作
- 钉钉应用创建
- 开通权限:通讯录读写、考勤数据读取。
- 逻辑引擎选择:JVS逻辑引擎
步骤2:配置主逻辑流(核心环节)
- Token动态管理
- 节点1:查询数据库缓存Token(有效期7200秒)
- 节点2:若失效则调用钉钉Token接口(https://oapi.dingtalk.com/gettoken)
- 节点3:新Token存入数据库并绑定变量。
- 数据拉取与转换
- 节点4:获取在职员工列表(接口:/topapi/smartwork/hrm/employee/queryonjob)
- 节点5:循环调用考勤接口(/attendance/list),传入userid列表。
- 节点6:横表转纵表关键配置:
// 循环节点设置
“loop_config”: {
“input_path”: “$.day*”, // 匹配所有日期字段
“output_template”: {
“user_id”: “${parent.userid}”,
“date”: “${current_field_name}”,
“checks”: “${current_field_value}” // 数组格式:[08:30, 12:00, …]
}
}
- 节点7:公式节点计算工时(示例公式:LAST(checks) - FIRST(checks) - 1.5)。
- 数据落地(判断条件、新增或者修改数据)
- 节点8:写入MySQL/ES,按部门分表存储。
- 节点9:同步日志入库,失败时触发钉钉机器人告警。
步骤3:自动化与扩展
定时触发器:配置Cron表达式(如 0 0 2 ? 每日凌晨2点执行)。
高级场景扩展
- 跨端数据接力:通过钉钉协同引擎(CoClipboard组件)实现手机端数据采集 → 电脑端自动同步至逻辑引擎。
- 数据增量同步:缩短执行的周期,加快同步的速度,那么做好增量同步,按照时间点进行同步。
- 容错保障:调用失败后,增阿基失败后重试,当重试失败后,增加消息通知
- 离线可用性保障:启用PendingQueue缓存本地操作,弱网时自动重试。
- 薪资核算联动:纵表数据直连财务系统,自动生成工资条(如集成i人事平台)。
- 效率对比:某制造企业200人考勤处理,手动转换需3小时/月,本方案全自动化执行,人力成本降为0。
在线demo:https://logic.bctools.cn/
gitee地址:https://gitee.com/software-minister/jvs-logic