7
7
"github.com/eryajf/go-ldap-admin/config"
8
8
"github.com/eryajf/go-ldap-admin/model"
9
9
"github.com/eryajf/go-ldap-admin/public/client/dingtalk"
10
+ "github.com/eryajf/go-ldap-admin/public/common"
10
11
"github.com/eryajf/go-ldap-admin/public/tools"
11
12
"github.com/eryajf/go-ldap-admin/service/ildap"
12
13
"github.com/eryajf/go-ldap-admin/service/isql"
@@ -21,19 +22,29 @@ func (d *DingTalkLogic) SyncDingTalkDepts(c *gin.Context, req interface{}) (data
21
22
// 1.获取所有部门
22
23
deptSource , err := dingtalk .GetAllDepts ()
23
24
if err != nil {
24
- return nil , tools .NewOperationError (fmt .Errorf ("获取钉钉部门列表失败:%s" , err .Error ()))
25
+ errMsg := fmt .Sprintf ("获取钉钉部门列表失败:%s" , err .Error ())
26
+ common .Log .Errorf ("SyncDingTalkDepts: %s" , errMsg )
27
+ return nil , tools .NewOperationError (fmt .Errorf (errMsg ))
25
28
}
26
29
depts , err := ConvertDeptData (config .Conf .DingTalk .Flag , deptSource )
27
30
if err != nil {
28
- return nil , tools .NewOperationError (fmt .Errorf ("转换钉钉部门数据失败:%s" , err .Error ()))
31
+ errMsg := fmt .Sprintf ("转换钉钉部门数据失败:%s" , err .Error ())
32
+ common .Log .Errorf ("SyncDingTalkDepts: %s" , errMsg )
33
+ return nil , tools .NewOperationError (fmt .Errorf (errMsg ))
29
34
}
30
35
31
36
// 2.将远程数据转换成树
32
37
deptTree := GroupListToTree (fmt .Sprintf ("%s_1" , config .Conf .DingTalk .Flag ), depts )
33
38
34
39
// 3.根据树进行创建
35
40
err = d .addDepts (deptTree .Children )
41
+ if err != nil {
42
+ errMsg := fmt .Sprintf ("创建钉钉部门失败:%s" , err .Error ())
43
+ common .Log .Errorf ("SyncDingTalkDepts: %s" , errMsg )
44
+ return nil , err
45
+ }
36
46
47
+ common .Log .Infof ("SyncDingTalkDepts: 钉钉部门同步成功" )
37
48
return nil , err
38
49
}
39
50
@@ -42,12 +53,16 @@ func (d DingTalkLogic) addDepts(depts []*model.Group) error {
42
53
for _ , dept := range depts {
43
54
err := d .AddDepts (dept )
44
55
if err != nil {
45
- return tools .NewOperationError (fmt .Errorf ("DsyncDingTalkDepts添加部门失败: %s" , err .Error ()))
56
+ errMsg := fmt .Sprintf ("DsyncDingTalkDepts添加部门[%s]失败: %s" , dept .GroupName , err .Error ())
57
+ common .Log .Errorf ("%s" , errMsg )
58
+ return tools .NewOperationError (fmt .Errorf (errMsg ))
46
59
}
47
60
if len (dept .Children ) != 0 {
48
61
err = d .addDepts (dept .Children )
49
62
if err != nil {
50
- return tools .NewOperationError (fmt .Errorf ("DsyncDingTalkDepts添加部门失败: %s" , err .Error ()))
63
+ errMsg := fmt .Sprintf ("DsyncDingTalkDepts添加子部门失败: %s" , err .Error ())
64
+ common .Log .Errorf ("%s" , errMsg )
65
+ return tools .NewOperationError (fmt .Errorf (errMsg ))
51
66
}
52
67
}
53
68
}
@@ -83,19 +98,26 @@ func (d DingTalkLogic) SyncDingTalkUsers(c *gin.Context, req interface{}) (data
83
98
// 1.获取钉钉用户列表
84
99
staffSource , err := dingtalk .GetAllUsers ()
85
100
if err != nil {
86
- return nil , tools .NewOperationError (fmt .Errorf ("SyncDingTalkUsers获取钉钉用户列表失败:%s" , err .Error ()))
101
+ errMsg := fmt .Sprintf ("获取钉钉用户列表失败:%s" , err .Error ())
102
+ common .Log .Errorf ("SyncDingTalkUsers: %s" , errMsg )
103
+ return nil , tools .NewOperationError (fmt .Errorf (errMsg ))
87
104
}
88
105
staffs , err := ConvertUserData (config .Conf .DingTalk .Flag , staffSource )
89
106
if err != nil {
90
- return nil , tools .NewOperationError (fmt .Errorf ("转换钉钉用户数据失败:%s" , err .Error ()))
107
+ errMsg := fmt .Sprintf ("转换钉钉用户数据失败:%s" , err .Error ())
108
+ common .Log .Errorf ("SyncDingTalkUsers: %s" , errMsg )
109
+ return nil , tools .NewOperationError (fmt .Errorf (errMsg ))
91
110
}
92
111
// 2.遍历用户,开始写入
93
- for _ , staff := range staffs {
112
+ for i , staff := range staffs {
94
113
// 入库
95
114
err = d .AddUsers (staff )
96
115
if err != nil {
97
- return nil , tools .NewOperationError (fmt .Errorf ("SyncDingTalkUsers写入用户失败:%s" , err .Error ()))
116
+ errMsg := fmt .Sprintf ("写入用户[%s]失败:%s" , staff .Username , err .Error ())
117
+ common .Log .Errorf ("SyncDingTalkUsers: %s" , errMsg )
118
+ return nil , tools .NewOperationError (fmt .Errorf (errMsg ))
98
119
}
120
+ common .Log .Infof ("SyncDingTalkUsers: 成功同步用户[%s] (%d/%d)" , staff .Username , i + 1 , len (staffs ))
99
121
}
100
122
101
123
// 3.获取钉钉已离职用户id列表
@@ -107,9 +129,13 @@ func (d DingTalkLogic) SyncDingTalkUsers(c *gin.Context, req interface{}) (data
107
129
userIds , err = dingtalk .GetLeaveUserIdsDateRange (config .Conf .DingTalk .ULeaveRange )
108
130
}
109
131
if err != nil {
110
- return nil , tools .NewOperationError (fmt .Errorf ("SyncDingTalkUsers获取钉钉离职用户列表失败:%s" , err .Error ()))
132
+ errMsg := fmt .Sprintf ("获取钉钉离职用户列表失败:%s" , err .Error ())
133
+ common .Log .Errorf ("SyncDingTalkUsers: %s" , errMsg )
134
+ return nil , tools .NewOperationError (fmt .Errorf (errMsg ))
111
135
}
136
+
112
137
// 4.遍历id,开始处理
138
+ processedCount := 0
113
139
for _ , uid := range userIds {
114
140
if isql .User .Exist (
115
141
tools.H {
@@ -119,21 +145,30 @@ func (d DingTalkLogic) SyncDingTalkUsers(c *gin.Context, req interface{}) (data
119
145
user := new (model.User )
120
146
err = isql .User .Find (tools.H {"source_user_id" : fmt .Sprintf ("%s_%s" , config .Conf .DingTalk .Flag , uid )}, user )
121
147
if err != nil {
122
- return nil , tools .NewMySqlError (fmt .Errorf ("在MySQL查询用户失败: " + err .Error ()))
148
+ errMsg := fmt .Sprintf ("在MySQL查询离职用户[%s]失败: %s" , uid , err .Error ())
149
+ common .Log .Errorf ("SyncDingTalkUsers: %s" , errMsg )
150
+ return nil , tools .NewMySqlError (fmt .Errorf (errMsg ))
123
151
}
124
152
// 先从ldap删除用户
125
153
err = ildap .User .Delete (user .UserDN )
126
154
if err != nil {
127
- return nil , tools .NewLdapError (fmt .Errorf ("在LDAP删除用户失败" + err .Error ()))
155
+ errMsg := fmt .Sprintf ("在LDAP删除离职用户[%s]失败: %s" , user .Username , err .Error ())
156
+ common .Log .Errorf ("SyncDingTalkUsers: %s" , errMsg )
157
+ return nil , tools .NewLdapError (fmt .Errorf (errMsg ))
128
158
}
129
159
// 然后更新MySQL中用户状态
130
160
err = isql .User .ChangeStatus (int (user .ID ), 2 )
131
161
if err != nil {
132
- return nil , tools .NewMySqlError (fmt .Errorf ("在MySQL更新用户状态失败: " + err .Error ()))
162
+ errMsg := fmt .Sprintf ("在MySQL更新离职用户[%s]状态失败: %s" , user .Username , err .Error ())
163
+ common .Log .Errorf ("SyncDingTalkUsers: %s" , errMsg )
164
+ return nil , tools .NewMySqlError (fmt .Errorf (errMsg ))
133
165
}
166
+ processedCount ++
167
+ common .Log .Infof ("SyncDingTalkUsers: 成功处理离职用户[%s]" , user .Username )
134
168
}
135
169
}
136
170
171
+ common .Log .Infof ("SyncDingTalkUsers: 钉钉用户同步完成,共同步%d个在职用户,处理%d个离职用户" , len (staffs ), processedCount )
137
172
return nil , nil
138
173
}
139
174
0 commit comments