| | | 1 | | using Hangfire; |
| | | 2 | | using Services.ApiServices.TelegramBotApi; |
| | | 3 | | using Services.DailyWorkSummaryServices; |
| | | 4 | | using Services.HangfireService; |
| | | 5 | | |
| | | 6 | | namespace OzonOrdersWeb.WebServices.DailySummary; |
| | | 7 | | |
| | | 8 | | /// <summary>Вечерняя сводка дня в Telegram (20:00 по Москве): что сделано за сутки по данным БД.</summary> |
| | 0 | 9 | | public sealed class DailyWorkSummaryJob(IDailyWorkSummaryService summary, ITelegramNotifier telegram, TelegramBotConfig |
| | 0 | 10 | | ILogger<DailyWorkSummaryJob> logger) |
| | | 11 | | { |
| | | 12 | | public const string JobId = "daily-work-summary"; |
| | | 13 | | public const string DefaultCron = "0 20 * * *"; |
| | | 14 | | |
| | | 15 | | [Queue(HangfireQueueNames.Main)] |
| | | 16 | | [DisableConcurrentExecution(0)] |
| | | 17 | | [AutomaticRetry(Attempts = 0)] |
| | | 18 | | public async Task<string> ExecuteAsync() |
| | | 19 | | { |
| | 0 | 20 | | if (!telegram.IsConfigured) return "Telegram не настроен"; |
| | | 21 | | |
| | 0 | 22 | | var data = await summary.BuildAsync(); |
| | 0 | 23 | | var sent = 0; |
| | 0 | 24 | | foreach (var message in TelegramMessageFactory.DailySummary(data, config.SiteBaseUrl)) |
| | 0 | 25 | | if (await telegram.SendAsync(message)) sent++; |
| | | 26 | | |
| | 0 | 27 | | logger.LogInformation("Сводка дня отправлена: сообщений {Sent}, новых заказов {Orders}", sent, data.NewOrders); |
| | 0 | 28 | | return $"Отправлено сообщений: {sent}"; |
| | 0 | 29 | | } |
| | | 30 | | } |