dingtalk2.1.0版本包添加按日期范围查询离职员工接口及 (#261)
Co-authored-by: 胡相全 <hxq@HXQSRV>
This commit is contained in:
parent
4fdc035e2c
commit
6d2ca5c1ac
|
@ -121,6 +121,7 @@ dingtalk:
|
||||||
#- "48456726" # 需要同步的部门ID
|
#- "48456726" # 需要同步的部门ID
|
||||||
#- "^61213417" # 不需要同步的部门ID
|
#- "^61213417" # 不需要同步的部门ID
|
||||||
is-update-syncd: false # 当钉钉用户的邮箱,手机号,部门等信息更新之后,是否同步更新,默认为false,如果你不了解这个字段的含义,则不建议开启
|
is-update-syncd: false # 当钉钉用户的邮箱,手机号,部门等信息更新之后,是否同步更新,默认为false,如果你不了解这个字段的含义,则不建议开启
|
||||||
|
user-leave-range: 1 #按配置天数查离职时间范围内的用户,为0时不限制
|
||||||
wecom:
|
wecom:
|
||||||
# 配置获取详细文档参考:http://ldapdoc.eryajf.net/pages/cf1698/
|
# 配置获取详细文档参考:http://ldapdoc.eryajf.net/pages/cf1698/
|
||||||
flag: "wecom" # 作为微信在平台的标识
|
flag: "wecom" # 作为微信在平台的标识
|
||||||
|
|
|
@ -169,6 +169,7 @@ type DingTalkConfig struct {
|
||||||
UserSyncTime string `mapstructure:"user-sync-time" json:"userSyncTime"`
|
UserSyncTime string `mapstructure:"user-sync-time" json:"userSyncTime"`
|
||||||
DeptList []string `mapstructure:"dept-list" json:"deptList"`
|
DeptList []string `mapstructure:"dept-list" json:"deptList"`
|
||||||
IsUpdateSyncd bool `mapstructure:"is-update-syncd" json:"isUpdateSyncd"`
|
IsUpdateSyncd bool `mapstructure:"is-update-syncd" json:"isUpdateSyncd"`
|
||||||
|
ULeaveRange uint `mapstructure:"user-leave-range" json:"userLevelRange"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type WeComConfig struct {
|
type WeComConfig struct {
|
||||||
|
|
2
go.mod
2
go.mod
|
@ -18,7 +18,7 @@ require (
|
||||||
github.com/robfig/cron/v3 v3.0.0
|
github.com/robfig/cron/v3 v3.0.0
|
||||||
github.com/spf13/viper v1.11.0
|
github.com/spf13/viper v1.11.0
|
||||||
github.com/thoas/go-funk v0.7.0
|
github.com/thoas/go-funk v0.7.0
|
||||||
github.com/zhaoyunxing92/dingtalk/v2 v2.0.7-0.20220601083444-173c10c3f835
|
github.com/zhaoyunxing92/dingtalk/v2 v2.1.1-0.20231013102126-c1568b7fbac5
|
||||||
go.uber.org/zap v1.19.1
|
go.uber.org/zap v1.19.1
|
||||||
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
|
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
|
||||||
gopkg.in/natefinch/lumberjack.v2 v2.0.0
|
gopkg.in/natefinch/lumberjack.v2 v2.0.0
|
||||||
|
|
2
go.sum
2
go.sum
|
@ -436,6 +436,8 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1
|
||||||
github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q=
|
github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q=
|
||||||
github.com/zhaoyunxing92/dingtalk/v2 v2.0.7-0.20220601083444-173c10c3f835 h1:T6/rI54b4nVpQlIDv0iB0hTff4hzlXe63QcBcZ3u73s=
|
github.com/zhaoyunxing92/dingtalk/v2 v2.0.7-0.20220601083444-173c10c3f835 h1:T6/rI54b4nVpQlIDv0iB0hTff4hzlXe63QcBcZ3u73s=
|
||||||
github.com/zhaoyunxing92/dingtalk/v2 v2.0.7-0.20220601083444-173c10c3f835/go.mod h1:MSvHUbYR94ffuWbJKFb8yHYyHg3qC/kQ3Hqpr6lK5ko=
|
github.com/zhaoyunxing92/dingtalk/v2 v2.0.7-0.20220601083444-173c10c3f835/go.mod h1:MSvHUbYR94ffuWbJKFb8yHYyHg3qC/kQ3Hqpr6lK5ko=
|
||||||
|
github.com/zhaoyunxing92/dingtalk/v2 v2.1.1-0.20231013102126-c1568b7fbac5 h1:Ur2sZLt+zwZeYw3aNi/YhsreTnXqIeM7YrmaSH3obmA=
|
||||||
|
github.com/zhaoyunxing92/dingtalk/v2 v2.1.1-0.20231013102126-c1568b7fbac5/go.mod h1:MSvHUbYR94ffuWbJKFb8yHYyHg3qC/kQ3Hqpr6lK5ko=
|
||||||
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
|
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
|
||||||
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
|
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
|
||||||
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||||
|
|
|
@ -99,7 +99,13 @@ func (d DingTalkLogic) SyncDingTalkUsers(c *gin.Context, req interface{}) (data
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3.获取钉钉已离职用户id列表
|
// 3.获取钉钉已离职用户id列表
|
||||||
userIds, err := dingtalk.GetLeaveUserIds()
|
// 根据配置判断是查全部离职用户还是只查指定时间范围内的离职用户
|
||||||
|
var userIds []string
|
||||||
|
if config.Conf.DingTalk.ULeaveRange == 0 {
|
||||||
|
userIds, err = dingtalk.GetLeaveUserIds()
|
||||||
|
} else {
|
||||||
|
userIds, err = dingtalk.GetLeaveUserIdsDateRange(config.Conf.DingTalk.ULeaveRange)
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, tools.NewOperationError(fmt.Errorf("SyncDingTalkUsers获取钉钉离职用户列表失败:%s", err.Error()))
|
return nil, tools.NewOperationError(fmt.Errorf("SyncDingTalkUsers获取钉钉离职用户列表失败:%s", err.Error()))
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/eryajf/go-ldap-admin/config"
|
"github.com/eryajf/go-ldap-admin/config"
|
||||||
"github.com/eryajf/go-ldap-admin/public/tools"
|
"github.com/eryajf/go-ldap-admin/public/tools"
|
||||||
|
@ -15,10 +16,10 @@ import (
|
||||||
func GetAllDepts() (ret []map[string]interface{}, err error) {
|
func GetAllDepts() (ret []map[string]interface{}, err error) {
|
||||||
depts, err := InitDingTalkClient().FetchDeptList(1, true, "zh_CN")
|
depts, err := InitDingTalkClient().FetchDeptList(1, true, "zh_CN")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ret, err
|
return ret, err
|
||||||
}
|
}
|
||||||
if len(config.Conf.DingTalk.DeptList) == 0 {
|
if len(config.Conf.DingTalk.DeptList) == 0 {
|
||||||
|
|
||||||
ret = make([]map[string]interface{}, 0)
|
ret = make([]map[string]interface{}, 0)
|
||||||
for _, dept := range depts.Dept {
|
for _, dept := range depts.Dept {
|
||||||
ele := make(map[string]interface{})
|
ele := make(map[string]interface{})
|
||||||
|
@ -102,7 +103,7 @@ func GetAllUsers() (ret []map[string]interface{}, err error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
for _, user := range rsp.DeptDetailUsers {
|
for _, user := range rsp.Page.List {
|
||||||
ele := make(map[string]interface{})
|
ele := make(map[string]interface{})
|
||||||
ele["userid"] = user.UserId
|
ele["userid"] = user.UserId
|
||||||
ele["unionid"] = user.UnionId
|
ele["unionid"] = user.UnionId
|
||||||
|
@ -131,10 +132,10 @@ func GetAllUsers() (ret []map[string]interface{}, err error) {
|
||||||
ele["department_ids"] = sourceDeptIds
|
ele["department_ids"] = sourceDeptIds
|
||||||
ret = append(ret, ele)
|
ret = append(ret, ele)
|
||||||
}
|
}
|
||||||
if !rsp.HasMore {
|
if !rsp.Page.HasMore {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
r.Cursor = rsp.NextCursor
|
r.Cursor = rsp.Page.NextCursor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
@ -157,11 +158,49 @@ func GetLeaveUserIds() ([]string, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
ids = append(ids, rsp.UserIds...)
|
ids = append(ids, rsp.Result.UserIds...)
|
||||||
if rsp.NextCursor == 0 {
|
if rsp.Result.NextCursor == 0 {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
ReqParm.Cursor = rsp.NextCursor
|
ReqParm.Cursor = rsp.Result.NextCursor
|
||||||
|
}
|
||||||
|
return ids, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// 官方文档:https://open.dingtalk.com/document/orgapp/query-the-details-of-employees-who-have-left-office
|
||||||
|
// GetLeaveUserIdsByDateRange 新接口根据时间范围获取离职人员ID列表
|
||||||
|
// GetHrmempLeaveRecordsKey = "/v1.0/contact/empLeaveRecords"
|
||||||
|
func GetLeaveUserIdsDateRange(pushDays uint) ([]string, error) {
|
||||||
|
var ids []string
|
||||||
|
// 配置值为正数,往前推转为负数
|
||||||
|
var leaveDays = int(0 - pushDays)
|
||||||
|
startTime := time.Now().AddDate(0, 0, leaveDays).Format("2006-01-02T15:04:05Z")
|
||||||
|
endTime := time.Now().Format("2006-01-02T15:04:05Z")
|
||||||
|
ReqParm := struct {
|
||||||
|
StartTime string `json:"startTime"`
|
||||||
|
EndTime string `json:"endTime"`
|
||||||
|
NextToken string `json:"nextToken"`
|
||||||
|
MaxResults int `json:"maxResults"`
|
||||||
|
}{
|
||||||
|
StartTime: startTime,
|
||||||
|
EndTime: endTime,
|
||||||
|
NextToken: "0",
|
||||||
|
MaxResults: 50,
|
||||||
|
}
|
||||||
|
// 使用新的使用时间范围查询离职人员接口获取离职用户ID
|
||||||
|
for {
|
||||||
|
rsp, err := InitDingTalkClient().GetHrmEmpLeaveRecords(ReqParm.StartTime, ReqParm.EndTime, ReqParm.NextToken, ReqParm.MaxResults)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
for _, g := range rsp.Records {
|
||||||
|
ids = append(ids, g.UserId)
|
||||||
|
}
|
||||||
|
|
||||||
|
if rsp.NextToken == "0" || rsp.NextToken == "" {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
ReqParm.NextToken = rsp.NextToken
|
||||||
}
|
}
|
||||||
return ids, nil
|
return ids, nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue