From d22090f2634f4cd476e574d111f8a08a72ce4a66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E7=9B=B8=E5=85=A8?= Date: Tue, 19 Sep 2023 16:53:48 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=92=89=E9=92=89?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=90=8C=E6=AD=A5=E6=8C=87=E5=AE=9A=E9=83=A8?= =?UTF-8?q?=E9=97=A8=E5=92=8C=E7=94=A8=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.yml | 4 ++ config/config.go | 17 +++---- public/client/dingtalk/dingtalk.go | 75 +++++++++++++++++++++++++----- 3 files changed, 77 insertions(+), 19 deletions(-) diff --git a/config.yml b/config.yml index 6856b74..017c9a9 100644 --- a/config.yml +++ b/config.yml @@ -117,6 +117,10 @@ dingtalk: enable-sync: false # 是否开启定时同步钉钉的任务 dept-sync-time: "0 30 2 * * *" # 部门同步任务的时间点 * * * * * * 秒 分 时 日 月 周, 请把时间设置在凌晨 1 ~ 5 点 user-sync-time: "0 30 3 * * *" # 用户同步任务的时间点 * * * * * * 秒 分 时 日 月 周, 请把时间设置在凌晨 1 ~ 5 点,注意请把用户同步的任务滞后于部门同步时间,比如部门为2点,则用户为3点 + dept-list: #部门列表,不设置则使用公司根部门,在开头加^表示不同步此部门,只需配置需要同步的部门ID + #- "1" #根组织ID + - "48456726" #需要同步的部门ID + #- "^61213417" #不同步的ID,不配置即只同步上一ID wecom: # 配置获取详细文档参考:http://ldapdoc.eryajf.net/pages/cf1698/ flag: "wecom" # 作为微信在平台的标识 diff --git a/config/config.go b/config/config.go index 2f10749..651e2db 100644 --- a/config/config.go +++ b/config/config.go @@ -159,14 +159,15 @@ type EmailConfig struct { } type DingTalkConfig struct { - AppKey string `mapstructure:"app-key" json:"appKey"` - AppSecret string `mapstructure:"app-secret" json:"appSecret"` - AgentId string `mapstructure:"agent-id" json:"agentId"` - RootOuName string `mapstructure:"root-ou-name" json:"rootOuName"` - Flag string `mapstructure:"flag" json:"flag"` - EnableSync bool `mapstructure:"enable-sync" json:"enableSync"` - DeptSyncTime string `mapstructure:"dept-sync-time" json:"deptSyncTime"` - UserSyncTime string `mapstructure:"user-sync-time" json:"userSyncTime"` + AppKey string `mapstructure:"app-key" json:"appKey"` + AppSecret string `mapstructure:"app-secret" json:"appSecret"` + AgentId string `mapstructure:"agent-id" json:"agentId"` + RootOuName string `mapstructure:"root-ou-name" json:"rootOuName"` + Flag string `mapstructure:"flag" json:"flag"` + EnableSync bool `mapstructure:"enable-sync" json:"enableSync"` + DeptSyncTime string `mapstructure:"dept-sync-time" json:"deptSyncTime"` + UserSyncTime string `mapstructure:"user-sync-time" json:"userSyncTime"` + DeptList []string `mapstructure:"dept-list" json:"deptList"` } type WeComConfig struct { diff --git a/public/client/dingtalk/dingtalk.go b/public/client/dingtalk/dingtalk.go index 669c05a..2390914 100644 --- a/public/client/dingtalk/dingtalk.go +++ b/public/client/dingtalk/dingtalk.go @@ -2,6 +2,7 @@ package dingtalk import ( "fmt" + "strconv" "strings" "github.com/eryajf/go-ldap-admin/config" @@ -13,17 +14,69 @@ import ( // 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"] = dept.Name - ele["parentid"] = dept.ParentId - ele["custom_name_pinyin"] = tools.ConvertToPinYin(dept.Name) - ret = append(ret, ele) + if len(config.Conf.DingTalk.DeptList) == 0 { + 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"] = dept.Name + ele["parentid"] = dept.ParentId + ele["custom_name_pinyin"] = tools.ConvertToPinYin(dept.Name) + ret = append(ret, ele) + } + } else { + + // 遍历配置的部门ID列表获取数据进行处理 + // 从取得的所有部门列表中将配置的部门ID筛选出来再去请求其子部门过滤为1和为配置值的部门ID + ret = make([]map[string]interface{}, 0) + + for _, dept := range depts.Dept { + inset := false + for _, dep_s := range config.Conf.DingTalk.DeptList { + if strings.HasPrefix(dep_s, "^") { + continue + } + setdepid, _ := strconv.Atoi(dep_s) + if dept.Id == setdepid { + inset = true + break + } + } + if dept.Id == 1 || inset { + ele := make(map[string]interface{}) + ele["id"] = dept.Id + ele["name"] = dept.Name + ele["parentid"] = dept.ParentId + ele["custom_name_pinyin"] = tools.ConvertToPinYin(dept.Name) + ret = append(ret, ele) + } + } + + for _, dep_s := range config.Conf.DingTalk.DeptList { + dept_id := dep_s + + if strings.HasPrefix(dep_s, "^") || dept_id == "1" { + continue + } + depid, _ := strconv.Atoi(dept_id) + depts, err := InitDingTalkClient().FetchDeptList(depid, true, "zh_CN") + + if err != nil { + return ret, err + } + + for _, dept := range depts.Dept { + ele := make(map[string]interface{}) + ele["id"] = dept.Id + ele["name"] = dept.Name + ele["parentid"] = dept.ParentId + ele["custom_name_pinyin"] = tools.ConvertToPinYin(dept.Name) + ret = append(ret, ele) + } + } } return } -- Gitee From 7e631ba6cd3019456c549eea9e5753bdf0edd8aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E7=9B=B8=E5=85=A8?= Date: Tue, 19 Sep 2023 17:59:07 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=88=A4=E6=96=AD=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E6=8F=90=E5=89=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/client/dingtalk/dingtalk.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/client/dingtalk/dingtalk.go b/public/client/dingtalk/dingtalk.go index 2390914..2564795 100644 --- a/public/client/dingtalk/dingtalk.go +++ b/public/client/dingtalk/dingtalk.go @@ -14,10 +14,10 @@ import ( // GetAllDepts 获取所有部门 func GetAllDepts() (ret []map[string]interface{}, err error) { depts, err := InitDingTalkClient().FetchDeptList(1, true, "zh_CN") - if len(config.Conf.DingTalk.DeptList) == 0 { - if err != nil { + if err != nil { return ret, err } + if len(config.Conf.DingTalk.DeptList) == 0 { ret = make([]map[string]interface{}, 0) for _, dept := range depts.Dept { ele := make(map[string]interface{}) -- Gitee