IESTimerTrigger.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. using System;
  2. using DinkToPdf.Contracts;
  3. using Microsoft.Azure.Functions.Worker;
  4. using Microsoft.Extensions.Configuration;
  5. using Microsoft.Extensions.Logging;
  6. using TEAMModelOS.SDK.DI;
  7. using TEAMModelOS.SDK;
  8. using TEAMModelOS.SDK.Extension;
  9. namespace TEAMModelOS.Function
  10. {
  11. public class IESTimerTrigger
  12. {
  13. private readonly ILogger _logger;
  14. /// <summary>
  15. /// 文档。https://docs.microsoft.com/zh-cn/azure/azure-functions/functions-bindings-timer?tabs=in-process&pivots=programming-language-csharp
  16. /// Timer 在线测试 https://ncrontab.swimburger.net/
  17. /// </summary>
  18. private readonly AzureCosmosFactory _azureCosmos;
  19. private readonly DingDing _dingDing;
  20. private readonly AzureStorageFactory _azureStorage;
  21. private readonly AzureRedisFactory _azureRedis;
  22. //private readonly IConverter _converter;
  23. private readonly SnowflakeId _snowflakeId;
  24. private readonly IHttpClientFactory _httpClient;
  25. private readonly CoreAPIHttpService _coreAPIHttpService;
  26. //private IPSearcher _ipSearcher;
  27. private readonly IConfiguration _configuration;
  28. public IESTimerTrigger(ILoggerFactory loggerFactory, IConfiguration configuration, CoreAPIHttpService coreAPIHttpService, IHttpClientFactory httpClient, SnowflakeId snowflakeId, AzureCosmosFactory azureCosmos, DingDing dingDing, AzureStorageFactory azureStorage, AzureRedisFactory azureRedis)
  29. {
  30. _logger = loggerFactory.CreateLogger<IESTimerTrigger>();
  31. _azureCosmos = azureCosmos;
  32. _dingDing = dingDing;
  33. _azureStorage = azureStorage;
  34. _azureRedis = azureRedis;
  35. // _converter = converter;
  36. _snowflakeId=snowflakeId;
  37. _httpClient = httpClient;
  38. // _ipSearcher = ipSearcher;
  39. _coreAPIHttpService = coreAPIHttpService;
  40. _configuration= configuration;
  41. }
  42. /// <summary>
  43. /// //0 1 * * * * 一天中每小时的第 1 分钟
  44. ///0 */10 * * * * 每五分钟一次
  45. /// </summary>
  46. /// <param name="myTimer"></param>
  47. /// <returns></returns>
  48. [Function("DailyReport")]
  49. public async Task DailyReport([TimerTrigger("0 1 * * * *")] TimerInfo myTimer)
  50. {
  51. _logger.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
  52. try
  53. {
  54. await _dingDing.SendBotMsg($"{_coreAPIHttpService.options.location},定时任务{DateTimeOffset.Now.ToString("yyyy-MM-dd HH:mm:ss")}", GroupNames.成都开发測試群組);
  55. string? local = Environment.GetEnvironmentVariable("Option:Location");
  56. // if (local.Contains("Test")||local.Contains("Dep"))
  57. {
  58. int am = 9;
  59. int pm = 20;
  60. //int am = DateTimeOffset.Now.Hour;
  61. //int pm = DateTimeOffset.Now.Hour;
  62. var url = Environment.GetEnvironmentVariable("HaBookAuth:CoreAPI");
  63. var clientID = Environment.GetEnvironmentVariable("HaBookAuth:CoreService:clientID");
  64. var clientSecret = Environment.GetEnvironmentVariable("HaBookAuth:CoreService:clientSecret");
  65. string location = "";
  66. if (local!.Contains("China"))
  67. {
  68. location = "China";
  69. }
  70. else if (local.Contains("Global"))
  71. {
  72. location = "Global";
  73. }
  74. var client = _httpClient.CreateClient();
  75. var token = CoreTokenExtensions.CreateAccessToken(clientID, clientSecret, location).Result;
  76. if (client.DefaultRequestHeaders.Contains("Authorization"))
  77. {
  78. client.DefaultRequestHeaders.Remove("Authorization");
  79. client.DefaultRequestHeaders.Add("Authorization", $"Bearer {token.AccessToken}");
  80. }
  81. else
  82. {
  83. client.DefaultRequestHeaders.Add("Authorization", $"Bearer {token.AccessToken}");
  84. }
  85. var data = await TEAMModelOS.SDK.Models.Service.SystemService.AccumulateDaily(_configuration, _azureRedis, _azureCosmos, _coreAPIHttpService, _dingDing, client, _snowflakeId, url, am, pm);
  86. //await _dingDing.SendBotMsg($"返回数据{data.ToJsonString()}", GroupNames.成都开发測試群組);
  87. }
  88. }
  89. catch (Exception ex)
  90. {
  91. await _dingDing.SendBotMsg($"{DailyReport}\n{ex.Message}\n{ex.StackTrace}", GroupNames.成都开发測試群組);
  92. }
  93. if (myTimer.ScheduleStatus is not null)
  94. {
  95. _logger.LogInformation($"Next timer schedule at: {myTimer.ScheduleStatus.Next}");
  96. }
  97. }
  98. }
  99. }