ldap-1-backend/public/client/dingtalk/dingtalk.go

108 lines
2.8 KiB
Go
Raw Normal View History

package dingtalk
import (
"fmt"
"strings"
"github.com/eryajf/go-ldap-admin/config"
"github.com/mozillazg/go-pinyin"
"github.com/zhaoyunxing92/dingtalk/v2/request"
)
// 官方文档地址: https://open.dingtalk.com/document/orgapp-server/obtain-the-department-list
// GetAllDepts 获取所有部门
func GetAllDepts() (ret []map[string]interface{}, err error) {
depts, err := InitDingTalkClient().FetchDeptList(1, true, "zh_CN")
if err != nil {
return ret, err
}
ret = make([]map[string]interface{}, 0)
for _, dept := range depts.Dept {
ele := make(map[string]interface{})
ele["id"] = dept.Id
ele["name_pinyin"] = strings.Join(pinyin.LazyConvert(dept.Name, nil), "")
ele["name"] = dept.Name
ele["parentid"] = dept.ParentId
ret = append(ret, ele)
}
return
}
// 官方文档地址: https://open.dingtalk.com/document/orgapp-server/queries-the-complete-information-of-a-department-user
// GetAllUsers 获取所有员工信息
func GetAllUsers() (ret []map[string]interface{}, err error) {
depts, err := GetAllDepts()
if err != nil {
return nil, err
}
for _, dept := range depts {
r := request.DeptDetailUserInfo{
DeptId: dept["id"].(int),
Cursor: 0,
Size: 99,
Language: "zh_CN",
}
for {
//获取钉钉部门人员信息
rsp, err := InitDingTalkClient().GetDeptDetailUserInfo(&r)
if err != nil {
return nil, err
}
for _, user := range rsp.DeptDetailUsers {
ele := make(map[string]interface{})
ele["userid"] = user.UserId
ele["unionid"] = user.UnionId
ele["name_pinyin"] = strings.Join(pinyin.LazyConvert(user.Name, nil), "")
ele["name"] = user.Name
ele["avatar"] = user.Avatar
ele["mobile"] = user.Mobile
ele["job_number"] = user.JobNumber
ele["title"] = user.Title
ele["work_place"] = user.WorkPlace
ele["remark"] = user.Remark
ele["leader"] = user.Leader
ele["org_email"] = user.OrgEmail
ele["email"] = user.Email
// 部门ids
var sourceDeptIds []string
for _, deptId := range user.DeptIds {
sourceDeptIds = append(sourceDeptIds, fmt.Sprintf("%s_%d", config.Conf.DingTalk.Flag, deptId))
}
ele["department_ids"] = sourceDeptIds
ret = append(ret, ele)
}
if !rsp.HasMore {
break
}
r.Cursor = rsp.NextCursor
}
}
return
}
// 官方文档https://open.dingtalk.com/document/orgapp-server/intelligent-personnel-query-company-turnover-list
2022-06-21 20:50:38 +08:00
// GetLeaveUserIds 获取离职人员ID列表
func GetLeaveUserIds() ([]string, error) {
var ids []string
ReqParm := struct {
Cursor int `json:"cursor"`
Size int `json:"size"`
}{
Cursor: 0,
Size: 50,
}
for {
rsp, err := InitDingTalkClient().GetHrmResignEmployeeIds(ReqParm.Cursor, ReqParm.Size)
if err != nil {
return nil, err
}
ids = append(ids, rsp.UserIds...)
if rsp.NextCursor == 0 {
break
}
ReqParm.Cursor = rsp.NextCursor
}
return ids, nil
}