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

108 lines
2.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
// 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
}