77 "github.com/eryajf/go-ldap-admin/config"
88 "github.com/eryajf/go-ldap-admin/model"
99 "github.com/eryajf/go-ldap-admin/public/client/dingtalk"
10+ "github.com/eryajf/go-ldap-admin/public/common"
1011 "github.com/eryajf/go-ldap-admin/public/tools"
1112 "github.com/eryajf/go-ldap-admin/service/ildap"
1213 "github.com/eryajf/go-ldap-admin/service/isql"
@@ -21,19 +22,29 @@ func (d *DingTalkLogic) SyncDingTalkDepts(c *gin.Context, req interface{}) (data
2122 // 1.获取所有部门
2223 deptSource , err := dingtalk .GetAllDepts ()
2324 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 ))
2528 }
2629 depts , err := ConvertDeptData (config .Conf .DingTalk .Flag , deptSource )
2730 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 ))
2934 }
3035
3136 // 2.将远程数据转换成树
3237 deptTree := GroupListToTree (fmt .Sprintf ("%s_1" , config .Conf .DingTalk .Flag ), depts )
3338
3439 // 3.根据树进行创建
3540 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+ }
3646
47+ common .Log .Infof ("SyncDingTalkDepts: 钉钉部门同步成功" )
3748 return nil , err
3849}
3950
@@ -42,12 +53,16 @@ func (d DingTalkLogic) addDepts(depts []*model.Group) error {
4253 for _ , dept := range depts {
4354 err := d .AddDepts (dept )
4455 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 ))
4659 }
4760 if len (dept .Children ) != 0 {
4861 err = d .addDepts (dept .Children )
4962 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 ))
5166 }
5267 }
5368 }
@@ -83,19 +98,26 @@ func (d DingTalkLogic) SyncDingTalkUsers(c *gin.Context, req interface{}) (data
8398 // 1.获取钉钉用户列表
8499 staffSource , err := dingtalk .GetAllUsers ()
85100 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 ))
87104 }
88105 staffs , err := ConvertUserData (config .Conf .DingTalk .Flag , staffSource )
89106 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 ))
91110 }
92111 // 2.遍历用户,开始写入
93- for _ , staff := range staffs {
112+ for i , staff := range staffs {
94113 // 入库
95114 err = d .AddUsers (staff )
96115 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 ))
98119 }
120+ common .Log .Infof ("SyncDingTalkUsers: 成功同步用户[%s] (%d/%d)" , staff .Username , i + 1 , len (staffs ))
99121 }
100122
101123 // 3.获取钉钉已离职用户id列表
@@ -107,9 +129,13 @@ func (d DingTalkLogic) SyncDingTalkUsers(c *gin.Context, req interface{}) (data
107129 userIds , err = dingtalk .GetLeaveUserIdsDateRange (config .Conf .DingTalk .ULeaveRange )
108130 }
109131 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 ))
111135 }
136+
112137 // 4.遍历id,开始处理
138+ processedCount := 0
113139 for _ , uid := range userIds {
114140 if isql .User .Exist (
115141 tools.H {
@@ -119,21 +145,30 @@ func (d DingTalkLogic) SyncDingTalkUsers(c *gin.Context, req interface{}) (data
119145 user := new (model.User )
120146 err = isql .User .Find (tools.H {"source_user_id" : fmt .Sprintf ("%s_%s" , config .Conf .DingTalk .Flag , uid )}, user )
121147 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 ))
123151 }
124152 // 先从ldap删除用户
125153 err = ildap .User .Delete (user .UserDN )
126154 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 ))
128158 }
129159 // 然后更新MySQL中用户状态
130160 err = isql .User .ChangeStatus (int (user .ID ), 2 )
131161 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 ))
133165 }
166+ processedCount ++
167+ common .Log .Infof ("SyncDingTalkUsers: 成功处理离职用户[%s]" , user .Username )
134168 }
135169 }
136170
171+ common .Log .Infof ("SyncDingTalkUsers: 钉钉用户同步完成,共同步%d个在职用户,处理%d个离职用户" , len (staffs ), processedCount )
137172 return nil , nil
138173}
139174
0 commit comments