@@ -2,6 +2,7 @@ package dingtalk
22
33import (
44 "fmt"
5+ "strconv"
56 "strings"
67
78 "github.com/eryajf/go-ldap-admin/config"
@@ -14,16 +15,69 @@ import (
1415func GetAllDepts () (ret []map [string ]interface {}, err error ) {
1516 depts , err := InitDingTalkClient ().FetchDeptList (1 , true , "zh_CN" )
1617 if err != nil {
17- return ret , err
18- }
19- ret = make ([]map [string ]interface {}, 0 )
20- for _ , dept := range depts .Dept {
21- ele := make (map [string ]interface {})
22- ele ["id" ] = dept .Id
23- ele ["name" ] = dept .Name
24- ele ["parentid" ] = dept .ParentId
25- ele ["custom_name_pinyin" ] = tools .ConvertToPinYin (dept .Name )
26- ret = append (ret , ele )
18+ return ret , err
19+ }
20+ if len (config .Conf .DingTalk .DeptList ) == 0 {
21+
22+ ret = make ([]map [string ]interface {}, 0 )
23+ for _ , dept := range depts .Dept {
24+ ele := make (map [string ]interface {})
25+ ele ["id" ] = dept .Id
26+ ele ["name" ] = dept .Name
27+ ele ["parentid" ] = dept .ParentId
28+ ele ["custom_name_pinyin" ] = tools .ConvertToPinYin (dept .Name )
29+ ret = append (ret , ele )
30+ }
31+ } else {
32+
33+ // 遍历配置的部门ID列表获取数据进行处理
34+ // 从取得的所有部门列表中将配置的部门ID筛选出来再去请求其子部门过滤为1和为配置值的部门ID
35+ ret = make ([]map [string ]interface {}, 0 )
36+
37+ for _ , dept := range depts .Dept {
38+ inset := false
39+ for _ , dep_s := range config .Conf .DingTalk .DeptList {
40+ if strings .HasPrefix (dep_s , "^" ) {
41+ continue
42+ }
43+ setdepid , _ := strconv .Atoi (dep_s )
44+ if dept .Id == setdepid {
45+ inset = true
46+ break
47+ }
48+ }
49+ if dept .Id == 1 || inset {
50+ ele := make (map [string ]interface {})
51+ ele ["id" ] = dept .Id
52+ ele ["name" ] = dept .Name
53+ ele ["parentid" ] = dept .ParentId
54+ ele ["custom_name_pinyin" ] = tools .ConvertToPinYin (dept .Name )
55+ ret = append (ret , ele )
56+ }
57+ }
58+
59+ for _ , dep_s := range config .Conf .DingTalk .DeptList {
60+ dept_id := dep_s
61+
62+ if strings .HasPrefix (dep_s , "^" ) || dept_id == "1" {
63+ continue
64+ }
65+ depid , _ := strconv .Atoi (dept_id )
66+ depts , err := InitDingTalkClient ().FetchDeptList (depid , true , "zh_CN" )
67+
68+ if err != nil {
69+ return ret , err
70+ }
71+
72+ for _ , dept := range depts .Dept {
73+ ele := make (map [string ]interface {})
74+ ele ["id" ] = dept .Id
75+ ele ["name" ] = dept .Name
76+ ele ["parentid" ] = dept .ParentId
77+ ele ["custom_name_pinyin" ] = tools .ConvertToPinYin (dept .Name )
78+ ret = append (ret , ele )
79+ }
80+ }
2781 }
2882 return
2983}
0 commit comments