13
13
14
14
namespace Admin . NET . Plugin . Job ;
15
15
16
-
17
16
/// <summary>
18
17
/// 同步钉钉用户job
19
18
/// </summary>
@@ -24,6 +23,7 @@ public class SyncDingTalkUserJob : IJob
24
23
private readonly IServiceScopeFactory _scopeFactory ;
25
24
private readonly IDingTalkApi _dingTalkApi ;
26
25
private readonly ILogger _logger ;
26
+
27
27
public SyncDingTalkUserJob ( IServiceScopeFactory scopeFactory , IDingTalkApi dingTalkApi , ILoggerFactory loggerFactory )
28
28
{
29
29
_scopeFactory = scopeFactory ;
@@ -37,17 +37,17 @@ public async Task ExecuteAsync(JobExecutingContext context, CancellationToken st
37
37
var _sysUserRep = serviceScope . ServiceProvider . GetRequiredService < SqlSugarRepository < SysUser > > ( ) ;
38
38
var _dingTalkUserRepo = serviceScope . ServiceProvider . GetRequiredService < SqlSugarRepository < DingTalkUser > > ( ) ;
39
39
var _dingTalkOptions = serviceScope . ServiceProvider . GetRequiredService < IOptions < DingTalkOptions > > ( ) ;
40
- // 获取token
40
+
41
+ // 获取Token
41
42
var tokenRes = await _dingTalkApi . GetDingTalkToken ( _dingTalkOptions . Value . ClientId , _dingTalkOptions . Value . ClientSecret ) ;
42
43
if ( tokenRes . ErrCode != 0 )
43
- {
44
44
throw Oops . Oh ( tokenRes . ErrMsg ) ;
45
- }
45
+
46
46
var dingTalkUserList = new List < DingTalkEmpRosterFieldVo > ( ) ;
47
47
var offset = 0 ;
48
48
while ( offset >= 0 )
49
49
{
50
- // 获取用户id列表
50
+ // 获取用户Id列表
51
51
var userIdsRes = await _dingTalkApi . GetDingTalkCurrentEmployeesList ( tokenRes . AccessToken , new GetDingTalkCurrentEmployeesListInput
52
52
{
53
53
StatusList = "2,3,5,-1" ,
@@ -59,7 +59,7 @@ public async Task ExecuteAsync(JobExecutingContext context, CancellationToken st
59
59
_logger . LogError ( userIdsRes . ErrMsg ) ;
60
60
break ;
61
61
}
62
- // 根据用户id获取花名册
62
+ // 根据用户Id获取花名册
63
63
var rosterRes = await _dingTalkApi . GetDingTalkCurrentEmployeesRosterList ( tokenRes . AccessToken , new GetDingTalkCurrentEmployeesRosterListInput ( )
64
64
{
65
65
UserIdList = string . Join ( "," , userIdsRes . Result . DataList ) ,
@@ -81,119 +81,83 @@ public async Task ExecuteAsync(JobExecutingContext context, CancellationToken st
81
81
}
82
82
83
83
// 判断新增还是更新
84
- var sysDingTalkUserIdList = await _dingTalkUserRepo . AsQueryable ( )
85
- . Select ( x => new
86
- {
87
- x . Id ,
88
- x . DingTalkUserId
89
- } )
90
- . ToListAsync ( ) ;
91
- // 需要更新的用户id
92
- var uDingTalkUser = dingTalkUserList . Where ( x => sysDingTalkUserIdList . Any ( d => d . DingTalkUserId == x . UserId ) ) ;
93
- // 需要新增的用户id
94
- var iDingTalkUser = dingTalkUserList . Where ( u => ! sysDingTalkUserIdList . Any ( d => d . DingTalkUserId == u . UserId ) ) ;
95
- #region 新增钉钉用户
96
- var iUser = iDingTalkUser
97
- . Select ( res => new DingTalkUser
98
- {
99
- DingTalkUserId = res . UserId ,
100
- Name = res . FieldDataList
101
- . Where ( f => f . FieldCode == DingTalkConst . NameField )
102
- . Select ( f => f . FieldValueList . Select ( v => v . Value ) . FirstOrDefault ( ) )
103
- . FirstOrDefault ( ) ,
104
- Mobile = res . FieldDataList
105
- . Where ( f => f . FieldCode == DingTalkConst . MobileField )
106
- . Select ( f => f . FieldValueList . Select ( v => v . Value ) . FirstOrDefault ( ) )
107
- . FirstOrDefault ( ) ,
108
- JobNumber = res . FieldDataList
109
- . Where ( f => f . FieldCode == DingTalkConst . JobNumberField )
110
- . Select ( f => f . FieldValueList . Select ( v => v . Value ) . FirstOrDefault ( ) )
111
- . FirstOrDefault ( ) ,
112
- } ) . ToList ( ) ;
84
+ var sysDingTalkUserIdList = await _dingTalkUserRepo . AsQueryable ( ) . Select ( u => new
85
+ {
86
+ u . Id ,
87
+ u . DingTalkUserId
88
+ } ) . ToListAsync ( ) ;
89
+
90
+ var uDingTalkUser = dingTalkUserList . Where ( u => sysDingTalkUserIdList . Any ( m => m . DingTalkUserId == u . UserId ) ) ; // 需要更新的用户Id
91
+ var iDingTalkUser = dingTalkUserList . Where ( u => ! sysDingTalkUserIdList . Any ( m => m . DingTalkUserId == u . UserId ) ) ; // 需要新增的用户Id
92
+
93
+ // 新增钉钉用户
94
+ var iUser = iDingTalkUser . Select ( res => new DingTalkUser
95
+ {
96
+ DingTalkUserId = res . UserId ,
97
+ Name = res . FieldDataList . Where ( u => u . FieldCode == DingTalkConst . NameField ) . Select ( u => u . FieldValueList . Select ( m => m . Value ) . FirstOrDefault ( ) ) . FirstOrDefault ( ) ,
98
+ Mobile = res . FieldDataList . Where ( u => u . FieldCode == DingTalkConst . MobileField ) . Select ( u => u . FieldValueList . Select ( m => m . Value ) . FirstOrDefault ( ) ) . FirstOrDefault ( ) ,
99
+ JobNumber = res . FieldDataList . Where ( u => u . FieldCode == DingTalkConst . JobNumberField ) . Select ( u => u . FieldValueList . Select ( m => m . Value ) . FirstOrDefault ( ) ) . FirstOrDefault ( ) ,
100
+ } ) . ToList ( ) ;
113
101
if ( iUser . Count > 0 )
114
102
{
115
- var iUserRes = await _dingTalkUserRepo . CopyNew ( ) . AsInsertable ( iUser ) . ExecuteCommandAsync ( ) ;
116
- if ( iUserRes <= 0 )
117
- {
118
- throw Oops . Oh ( "保存钉钉用户错误" ) ;
119
- }
103
+ await _dingTalkUserRepo . CopyNew ( ) . AsInsertable ( iUser ) . ExecuteCommandAsync ( ) ;
120
104
}
121
- #endregion
122
105
123
- #region 更新钉钉用户
124
- var uUser = uDingTalkUser
125
- . Select ( res => new DingTalkUser
106
+ // 更新钉钉用户
107
+ var uUser = uDingTalkUser . Select ( res => new DingTalkUser
126
108
{
127
- Id = sysDingTalkUserIdList . Where ( d => d . DingTalkUserId == res . UserId ) . Select ( d => d . Id ) . FirstOrDefault ( ) ,
109
+ Id = sysDingTalkUserIdList . Where ( u => u . DingTalkUserId == res . UserId ) . Select ( u => u . Id ) . FirstOrDefault ( ) ,
128
110
DingTalkUserId = res . UserId ,
129
- Name = res . FieldDataList
130
- . Where ( f => f . FieldCode == DingTalkConst . NameField )
131
- . Select ( f => f . FieldValueList . Select ( v => v . Value ) . FirstOrDefault ( ) )
132
- . FirstOrDefault ( ) ,
133
- Mobile = res . FieldDataList
134
- . Where ( f => f . FieldCode == DingTalkConst . MobileField )
135
- . Select ( f => f . FieldValueList . Select ( v => v . Value ) . FirstOrDefault ( ) )
136
- . FirstOrDefault ( ) ,
137
- JobNumber = res . FieldDataList
138
- . Where ( f => f . FieldCode == DingTalkConst . JobNumberField )
139
- . Select ( f => f . FieldValueList . Select ( v => v . Value ) . FirstOrDefault ( ) )
140
- . FirstOrDefault ( ) ,
111
+ Name = res . FieldDataList . Where ( u => u . FieldCode == DingTalkConst . NameField ) . Select ( u => u . FieldValueList . Select ( m => m . Value ) . FirstOrDefault ( ) ) . FirstOrDefault ( ) ,
112
+ Mobile = res . FieldDataList . Where ( u => u . FieldCode == DingTalkConst . MobileField ) . Select ( u => u . FieldValueList . Select ( m => m . Value ) . FirstOrDefault ( ) ) . FirstOrDefault ( ) ,
113
+ JobNumber = res . FieldDataList . Where ( u => u . FieldCode == DingTalkConst . JobNumberField ) . Select ( u => u . FieldValueList . Select ( m => m . Value ) . FirstOrDefault ( ) ) . FirstOrDefault ( ) ,
141
114
} ) . ToList ( ) ;
142
115
if ( uUser . Count > 0 )
143
116
{
144
- var uUserRes = await _dingTalkUserRepo . CopyNew ( ) . AsUpdateable ( uUser )
145
- . UpdateColumns ( d => new
117
+ await _dingTalkUserRepo . CopyNew ( ) . AsUpdateable ( uUser ) . UpdateColumns ( u => new
146
118
{
147
- d . DingTalkUserId ,
148
- d . Name ,
149
- d . Mobile ,
150
- d . JobNumber ,
151
- d . UpdateTime ,
152
- d . UpdateUserName ,
153
- d . UpdateUserId ,
119
+ u . DingTalkUserId ,
120
+ u . Name ,
121
+ u . Mobile ,
122
+ u . JobNumber ,
123
+ u . UpdateTime ,
124
+ u . UpdateUserName ,
125
+ u . UpdateUserId ,
154
126
} ) . ExecuteCommandAsync ( ) ;
155
- if ( uUserRes <= 0 )
156
- {
157
- throw Oops . Oh ( "更新钉钉用户错误" ) ;
158
- }
159
127
}
160
- #endregion
161
- // 通过系统用户账号(工号),更新钉钉用户表里面的系统用户id
162
- var sysUser = await _sysUserRep . AsQueryable ( ) . Select ( x => new
163
- {
164
- x . Id ,
165
- x . Account
166
- } ) . ToListAsync ( ) ;
128
+
129
+ // 通过系统用户账号(工号),更新钉钉用户表里面的系统用户Id
130
+ var sysUser = await _sysUserRep . AsQueryable ( )
131
+ . Select ( u => new
132
+ {
133
+ u . Id ,
134
+ u . Account
135
+ } ) . ToListAsync ( ) ;
167
136
var sysDingTalkUser = await _dingTalkUserRepo . AsQueryable ( )
168
- . Where ( d => sysUser . Any ( u => u . Account == d . JobNumber ) )
169
- . Select ( x => new
137
+ . Where ( u => sysUser . Any ( m => m . Account == u . JobNumber ) )
138
+ . Select ( u => new
170
139
{
171
- x . Id ,
172
- x . JobNumber ,
173
- x . Mobile
140
+ u . Id ,
141
+ u . JobNumber ,
142
+ u . Mobile
174
143
} ) . ToListAsync ( ) ;
175
- var uSysDingTalkUser = sysDingTalkUser . Select ( d => new DingTalkUser
144
+ var uSysDingTalkUser = sysDingTalkUser . Select ( u => new DingTalkUser
176
145
{
177
- Id = d . Id ,
178
- SysUserId = sysUser . Where ( u => u . Account == d . JobNumber ) . Select ( u => u . Id ) . FirstOrDefault ( ) ,
146
+ Id = u . Id ,
147
+ SysUserId = sysUser . Where ( m => m . Account == u . JobNumber ) . Select ( u => u . Id ) . FirstOrDefault ( ) ,
179
148
} ) . ToList ( ) ;
180
- var uSysDingTalkUserRes = await _dingTalkUserRepo . CopyNew ( ) . AsUpdateable ( uSysDingTalkUser )
181
- . UpdateColumns ( d => new
149
+
150
+ await _dingTalkUserRepo . CopyNew ( ) . AsUpdateable ( uSysDingTalkUser ) . UpdateColumns ( u => new
182
151
{
183
- d . SysUserId ,
184
- d . UpdateTime ,
185
- d . UpdateUserName ,
186
- d . UpdateUserId ,
152
+ u . SysUserId ,
153
+ u . UpdateTime ,
154
+ u . UpdateUserName ,
155
+ u . UpdateUserId ,
187
156
} ) . ExecuteCommandAsync ( ) ;
188
- if ( uSysDingTalkUserRes <= 0 )
189
- {
190
- _logger . LogError ( "同步钉钉用户错误" ) ;
191
- return ;
192
- }
157
+
193
158
var originColor = Console . ForegroundColor ;
194
- Console . ForegroundColor = ConsoleColor . Yellow ;
159
+ Console . ForegroundColor = ConsoleColor . Blue ;
195
160
Console . WriteLine ( "【" + DateTime . Now + "】同步钉钉用户" ) ;
196
161
Console . ForegroundColor = originColor ;
197
162
}
198
-
199
163
}
0 commit comments