using System;
using DinkToPdf.Contracts;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using TEAMModelOS.SDK.DI;
using TEAMModelOS.SDK;
using TEAMModelOS.SDK.Extension;
namespace TEAMModelOS.Function
{
public class IESTimerTrigger
{
private readonly ILogger _logger;
///
/// 文档。https://docs.microsoft.com/zh-cn/azure/azure-functions/functions-bindings-timer?tabs=in-process&pivots=programming-language-csharp
/// Timer 在线测试 https://ncrontab.swimburger.net/
///
private readonly AzureCosmosFactory _azureCosmos;
private readonly DingDing _dingDing;
private readonly AzureStorageFactory _azureStorage;
private readonly AzureRedisFactory _azureRedis;
//private readonly IConverter _converter;
private readonly SnowflakeId _snowflakeId;
private readonly IHttpClientFactory _httpClient;
private readonly CoreAPIHttpService _coreAPIHttpService;
//private IPSearcher _ipSearcher;
private readonly IConfiguration _configuration;
public IESTimerTrigger(ILoggerFactory loggerFactory, IConfiguration configuration, CoreAPIHttpService coreAPIHttpService, IHttpClientFactory httpClient, SnowflakeId snowflakeId, AzureCosmosFactory azureCosmos, DingDing dingDing, AzureStorageFactory azureStorage, AzureRedisFactory azureRedis)
{
_logger = loggerFactory.CreateLogger();
_azureCosmos = azureCosmos;
_dingDing = dingDing;
_azureStorage = azureStorage;
_azureRedis = azureRedis;
// _converter = converter;
_snowflakeId=snowflakeId;
_httpClient = httpClient;
// _ipSearcher = ipSearcher;
_coreAPIHttpService = coreAPIHttpService;
_configuration= configuration;
}
///
/// //0 1 * * * * 一天中每小时的第 1 分钟
///0 */10 * * * * 每五分钟一次
///
///
///
[Function("DailyReport")]
public async Task DailyReport([TimerTrigger("0 1 * * * *")] TimerInfo myTimer)
{
_logger.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
try
{
await _dingDing.SendBotMsg($"{_coreAPIHttpService.options.location},定时任务{DateTimeOffset.Now.ToString("yyyy-MM-dd HH:mm:ss")}", GroupNames.成都开发測試群組);
string? local = Environment.GetEnvironmentVariable("Option:Location");
// if (local.Contains("Test")||local.Contains("Dep"))
{
int am = 9;
int pm = 20;
//int am = DateTimeOffset.Now.Hour;
//int pm = DateTimeOffset.Now.Hour;
var url = Environment.GetEnvironmentVariable("HaBookAuth:CoreAPI");
var clientID = Environment.GetEnvironmentVariable("HaBookAuth:CoreService:clientID");
var clientSecret = Environment.GetEnvironmentVariable("HaBookAuth:CoreService:clientSecret");
string location = "";
if (local!.Contains("China"))
{
location = "China";
}
else if (local.Contains("Global"))
{
location = "Global";
}
var client = _httpClient.CreateClient();
var token = CoreTokenExtensions.CreateAccessToken(clientID, clientSecret, location).Result;
if (client.DefaultRequestHeaders.Contains("Authorization"))
{
client.DefaultRequestHeaders.Remove("Authorization");
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {token.AccessToken}");
}
else
{
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {token.AccessToken}");
}
var data = await TEAMModelOS.SDK.Models.Service.SystemService.AccumulateDaily(_configuration, _azureRedis, _azureCosmos, _coreAPIHttpService, _dingDing, client, _snowflakeId, url, am, pm);
//await _dingDing.SendBotMsg($"返回数据{data.ToJsonString()}", GroupNames.成都开发測試群組);
}
}
catch (Exception ex)
{
await _dingDing.SendBotMsg($"{DailyReport}\n{ex.Message}\n{ex.StackTrace}", GroupNames.成都开发測試群組);
}
if (myTimer.ScheduleStatus is not null)
{
_logger.LogInformation($"Next timer schedule at: {myTimer.ScheduleStatus.Next}");
}
}
}
}