@@ -52,83 +52,137 @@ public override Task StopAsync(CancellationToken cancellationToken)
52
52
}
53
53
54
54
protected override async Task ExecuteAsync ( CancellationToken stoppingToken )
55
- {
55
+ {
56
56
_logger . LogInformation ( "Sync Executing" ) ;
57
57
await Task . Delay ( 5000 , stoppingToken ) ;
58
+
58
59
var dir = InitialDirectory ( ) ;
59
60
var launch = _options . Launch ?? false ;
60
61
var timeout = ( int ) _options . Timeout . GetValueOrDefault ( TimeSpan . FromMinutes ( 1.5 ) ) . TotalMilliseconds ;
61
62
var types = InitialConfigurations ( ) ;
62
- //_exportService.InitialConfigurations(_options.Tables);
63
63
64
- while ( ! stoppingToken . IsCancellationRequested )
64
+ if ( launch )
65
65
{
66
- var now = DateTime . Now ;
67
- if ( ! launch && await Check ( now , _time , stoppingToken ) ) continue ;
68
- launch = false ;
66
+ await HandlerAsync ( DateTime . Now , dir , types , timeout , stoppingToken ) ;
67
+ }
69
68
69
+ while ( ! stoppingToken . IsCancellationRequested )
70
+ {
70
71
try
71
72
{
72
- now = now . AddDays ( - 1 ) ;
73
- _logger . LogInformation ( "Executing synchronously data...." ) ;
74
- var completed = false ;
75
- while ( ! completed )
73
+ var now = DateTime . Now ;
74
+ var ret = await Check ( now , _time , stoppingToken ) ;
75
+ _logger . LogDebug ( "Sync Check: {ret}" , ret ) ;
76
+ if ( ! ret ) continue ;
77
+
78
+ await HandlerAsync ( now , dir , types , timeout , stoppingToken ) ;
79
+ }
80
+ catch ( Exception ex )
81
+ {
82
+ _logger . LogError ( ex , ex . Message ) ;
83
+ }
84
+ }
85
+
86
+ _logger . LogInformation ( "Sync Executed" ) ;
87
+ }
88
+
89
+ protected async Task HandlerAsync ( DateTime now , string dir , ConcurrentDictionary < string , TableInfo > types , int timeout , CancellationToken stoppingToken )
90
+ {
91
+ _logger . LogInformation ( "Sync Handler Executing" ) ;
92
+
93
+ try
94
+ {
95
+ now = now . AddDays ( - 1 ) ;
96
+ _logger . LogInformation ( "Executing synchronously data...." ) ;
97
+ var completed = false ;
98
+
99
+ while ( ! completed )
100
+ {
101
+ completed = true ;
102
+
103
+ foreach ( var table in _options . Tables )
76
104
{
77
- completed = true ;
78
- foreach ( var table in _options . Tables )
105
+ var ( date , tmp ) = GetDate ( dir , table . Code , now ) ;
106
+ if ( date > now ) continue ;
107
+
108
+ if ( date < now ) completed = false ;
109
+ var sw = Stopwatch . StartNew ( ) ;
110
+
111
+ try
79
112
{
80
- var ( date , tmp ) = GetDate ( dir , table . Code , now ) ;
81
- if ( date > now ) continue ;
82
- if ( date < now ) completed = false ;
83
- var sw = Stopwatch . StartNew ( ) ;
84
- try
113
+ _logger . LogInformation ( "Executing synchronously [{Table}]-{Date:yyyy-MM-dd} records to {Output} ..."
114
+ , table . Name
115
+ , date
116
+ , table . Output
117
+ ) ;
118
+ var exportService = _factory . Get ( table . Output ) ;
119
+ if ( exportService == null ) throw new NotSupportedException ( $ "No export service available for { table . Output } ") ;
120
+
121
+ var file = table . Output switch
85
122
{
86
- _logger . LogInformation ( "Executing synchronously [{Table}]-{Date:yyyy-MM-dd} records to {Output} ..."
87
- , table . Name
88
- , date
89
- , table . Output
90
- ) ;
91
- var exportService = _factory . Get ( table . Output ) ;
92
- if ( exportService == null ) throw new NotSupportedException ( $ "No export service available for { table . Output } ") ;
93
- var total = await FetchRecordAsync ( _freeSql , timeout , table , date , _path , types [ table . Code ] , exportService , _logger , stoppingToken ) ;
94
- sw . Stop ( ) ;
95
- _logger . LogInformation ( "Executing synchronously [{Table}]-{Date:yyyy-MM-dd} export to {Output} {Total} records completed used {Time}."
96
- , table . Name
97
- , date
98
- , table . Output
99
- , total
100
- , sw . Elapsed ) ;
101
- }
102
- catch ( Exception ex )
123
+ "Csv" => Path . Combine ( _path , $ "{ table . Name } -{ date : yyyy-MM-dd} .csv") ,
124
+ "Xlsx" => Path . Combine ( _path , $ "{ table . Name } -{ date : yyyy-MM-dd} .xlsx") ,
125
+ _ => null
126
+ } ;
127
+
128
+ var total = await FetchRecordAsync ( _freeSql , timeout , table , date , _path , types [ table . Code ] , exportService , _logger , stoppingToken ) ;
129
+ sw . Stop ( ) ;
130
+ _logger . LogInformation ( "Executing synchronously [{Table}]-{Date:yyyy-MM-dd} export to {Output} {Total} records completed used {Time}."
131
+ , table . Name
132
+ , date
133
+ , Path . GetFileName ( file )
134
+ , total
135
+ , sw . Elapsed ) ;
136
+
137
+ if ( total < 1 )
103
138
{
104
- _logger . LogError ( ex , ex . Message ) ;
105
- if ( sw . IsRunning ) sw . Stop ( ) ;
106
- completed = true ;
107
- break ;
108
- }
109
- finally
110
- {
111
- #if NETFRAMEWORK || NETSTANDARD2_0
112
- File . WriteAllText ( tmp , $ "{ date . AddDays ( 1 ) : yyyy-MM-dd} ") ;
113
- #else
114
- await File . WriteAllTextAsync ( tmp , $ "{ date . AddDays ( 1 ) : yyyy-MM-dd} ", stoppingToken ) ;
115
- #endif
139
+ try
140
+ {
141
+ if ( file != null && File . Exists ( file ) )
142
+ {
143
+ File . Delete ( file ) ;
144
+ _logger . LogDebug ( "Executing synchronously [{Table}]-{Date:yyyy-MM-dd} delete file {File}"
145
+ , table . Name
146
+ , date
147
+ , Path . GetFileName ( file ) ) ;
148
+ }
149
+ }
150
+ catch ( Exception ex )
151
+ {
152
+ _logger . LogError ( ex , ex . Message ) ;
153
+ }
116
154
}
117
- }
118
155
119
- if ( ! completed )
156
+ #if NETFRAMEWORK || NETSTANDARD2_0
157
+ File . WriteAllText ( tmp , $ "{ date . AddDays ( 1 ) : yyyy-MM-dd} ") ;
158
+ #else
159
+ await File . WriteAllTextAsync ( tmp , $ "{ date . AddDays ( 1 ) : yyyy-MM-dd} ", stoppingToken ) ;
160
+ #endif
161
+ }
162
+ catch ( Exception ex )
120
163
{
121
- await Task . Delay ( _options . Interval , stoppingToken ) ;
164
+ _logger . LogError ( ex , ex . Message ) ;
165
+ if ( sw . IsRunning ) sw . Stop ( ) ;
166
+ completed = true ;
167
+ break ;
122
168
}
123
169
}
124
170
125
- _logger . LogInformation ( "Executing synchronously mes data completed" ) ;
126
- }
127
- finally
128
- {
129
- await Task . Delay ( TimeSpan . FromMinutes ( 1 ) , stoppingToken ) ;
171
+ if ( ! completed )
172
+ {
173
+ await Task . Delay ( _options . Interval , stoppingToken ) ;
174
+ }
130
175
}
176
+
177
+ _logger . LogInformation ( "Executing synchronously mes data completed" ) ;
178
+ }
179
+ catch ( Exception ex )
180
+ {
181
+ _logger . LogError ( ex , ex . Message ) ;
131
182
}
183
+
184
+ await Task . Delay ( TimeSpan . FromMinutes ( 1 ) , stoppingToken ) ;
185
+ _logger . LogInformation ( "Sync Handler Executed" ) ;
132
186
}
133
187
134
188
private static async Task < int > FetchRecordAsync ( IFreeSql freeSql ,
@@ -240,37 +294,33 @@ private static (DateTime Date, string Path) GetDate(string dir, string table, Da
240
294
241
295
private static async Task < bool > Check ( DateTime now , TimeSpan span , CancellationToken stoppingToken )
242
296
{
243
- var t1 = now . Date . Add ( span - TimeSpan . FromHours ( 1 ) ) ;
244
- var t2 = now . Date . Add ( span - TimeSpan . FromMinutes ( 15 ) ) ;
297
+ var t2 = now . Date . Add ( span - TimeSpan . FromMinutes ( 5 ) ) ;
298
+ // target time - 1 minute
245
299
var t3 = now . Date . Add ( span - TimeSpan . FromMinutes ( 1 ) ) ;
300
+ // target time
246
301
var t4 = now . Date . Add ( span ) ;
247
- var t5 = now . Date . Add ( span + TimeSpan . FromSeconds ( 59 ) ) ;
248
-
249
- if ( now < t1 || now > t5 )
250
- {
251
- await Task . Delay ( TimeSpan . FromHours ( 1 ) , stoppingToken ) ;
252
- return true ;
253
- }
302
+ // target time + 1 minute
303
+ var t5 = now . Date . Add ( span + TimeSpan . FromMinutes ( 1 ) ) ;
254
304
255
- if ( now < t4 )
305
+ if ( now < t2 || now > t5 )
256
306
{
257
- await Task . Delay ( TimeSpan . FromSeconds ( 1 ) , stoppingToken ) ;
258
- return true ;
307
+ await Task . Delay ( TimeSpan . FromMinutes ( 5 ) , stoppingToken ) ;
308
+ return false ;
259
309
}
260
310
261
311
if ( now < t3 )
262
312
{
263
- await Task . Delay ( TimeSpan . FromMinutes ( 1 ) , stoppingToken ) ;
264
- return true ;
313
+ await Task . Delay ( TimeSpan . FromSeconds ( 5 ) , stoppingToken ) ;
314
+ return false ;
265
315
}
266
316
267
- if ( now < t2 )
317
+ if ( now < t4 )
268
318
{
269
- await Task . Delay ( TimeSpan . FromMinutes ( 10 ) , stoppingToken ) ;
270
- return true ;
319
+ await Task . Delay ( TimeSpan . FromSeconds ( 1 ) , stoppingToken ) ;
320
+ return false ;
271
321
}
272
-
273
- return false ;
322
+
323
+ return true ;
274
324
}
275
325
276
326
private ConcurrentDictionary < string , TableInfo > InitialConfigurations ( )
0 commit comments