钉钉官方并未提供nodejs包,第一次调用接口的时候非常费事,而且尝试去寻找相关的钉钉考勤数据模块的时候只找到了一些消息啊,只能办公啊,免登啊之类的模块,有关考勤数据的似乎没有
关于dd的npm包中一个有较全面,但是这个包似乎是egg的模块,我没有尝试单独使用
不得不说钉钉小程序的服务端api真的恶心,为了获得考勤数据要拿access_tonken然后再拿员工id列表,然后再拿员工id列表对应的员工姓名和部门,然后才能拿员工考勤数据,这个考勤数据还有限制,不能查询半年以前的,一次获取的结果还有限制,真的让人很无语,而且服务端还不支持websocket,也就是说每次查询还得
## 使用方法
需要拿考勤信息的人请注意因为拿下来的数据要放到内存当中处理,所以这个脚手架需要一点启动时间(100人大概3秒左右)才能拿到数据,3秒后随便调用考勤信息
如果仅仅是需要获取用户/部门信息,发送工作消息,则不需要准备时间(但是这这包会自动准备到用户id/姓名部门的对应表阶段,)
安装
npm install ddinit
觉得好用的话麻烦给个star吧,感激不尽
构建并使用,后三位选填,不填的话不会缓存周/月考勤数据,最后一位是每日考勤数据的更新速度,单位是毫秒
import DDdata from 'ddinit'
const dd = new DDdata('这里换成你的appkey', '这里换成你的appsecret', 4, 2, 500)
尽管这个包是用es6,7语法书写的,它仍然支持commonjs调用,这意味着你可以再例如koa2这种较为先进的node服务中使用,也可以在express中使用
详细使用可以参照这里的示例
我猜你很忙,所以这里先展示核心api,另外,所有的api参数都是选填,不传参数可以使用
构建时传入周/月数据缓存大小大于1时,会把请求结果暂存在内存中,方便开发和后续调用,使用时,直接**dd.moondata[0]**即可拿到缓存的上月数据,**dd.moondata[1]即可拿到缓存的上2月数据,以此类推,使用dd.weekdata[0]**获取缓存的上周的数据
**dd.daliyData[]**返回缓存的每日数据
**dd.data.userIdList[]**返回在职员工id列表,包含(2,试用期;3,正式;5,待离职;-1,无状态)
**dd.data.employee[]**返回在职员工花名册,包含(id,姓名,部门,职位)信息
dd.cooldata.dimissionList 返回离职员工id列表
dd.cooldata.employee 返回离职员工花名册,包含(id,姓名,部门,职位)信息
月考勤数据 dd.getMoonData()
传入参数(
[
{
"name": "张三",
"userId": "234567898765456",
"branch": "法律部",
"checkType": "OffDuty",
"timeResult": "Normal",
"workDay": "0",
"sortTime": 1561111490000,
"baseCheckTime": 1561111200000,
"locationResult": "Normal",
"userCheckTime": "6/21/2019, 6:04:50 PM"
},
{
"name": "代成伟",
"userId": "234567898765456",
"branch": "法律部",
"checkType": "OffDuty",
"timeResult": "Normal",
"workDay": "0",
"sortTime": 1560506875000,
"baseCheckTime": 1560506400000,
"locationResult": "Normal",
"userCheckTime": "6/14/2019, 6:07:55 PM"
},
..more
sortTime是Unix时间戳,单位为毫秒,可以以此与baseCheckTime计算迟到时间或先到时间,加班时间等,workDay为节假日判定,0表示工作日,1-3法定节假日,67分别代表周六和周日,其余返回值参考钉钉文档
周考勤数据 dd.getWeekData()
传入参数(
返回类型同上
每日考勤数据,这里根据构建时传入的更新速度自动更新dd.gettoDayData()
传入参数(
返回类型同上
获取任意两个时间之间的用户考勤信息,最长间隔7天dd.getKaoqingLists()
传入参数(
返回类型同上
这部分参考了dd-sdk模块
dd.AccessToken
dd.getUserId(code: string, token?: string)
dd.getUser(userid: string, token?: string)
dd.childDepartment(id: number, token?: string)
dd.department(id: number, token?: string)
dd.departmentInfo(id: number, token?: string)
dd.getAllDepartment(id: number, token?: string)
dd.departmentListParentDepts(userId: string, token?: string)
dd.getOrgUserCount(onlyActive: number, token?: string)
dd.setWorkerMessage(data: IMessage, token?: string)
dd.viewWorkerMessage(data: ITask, token?: string)
dd.resultWorkerMessage(data: ITask, token?: string)
dd.createProcessInstance(data: IInstance, token?: string)
dd.getProcessInstance(id: string, token?: string)
dd.registerCallBack(data: IRegisterCallBack, token?: string)
dd.instanceCrypto(data: ICrypto)
dd.getCallBack(token?: string)
dd.deleteCallBack(token?: string)
import { authEncrypto } from "dd-sdk";
authEncrypto(accessKey: string, appSecret: string, code: string)