S7MdpRefreshJob.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using Admin.NET.Plugin.AiDOP.FinishedWarehouse;
  2. using Furion.Schedule;
  3. using Microsoft.Extensions.DependencyInjection;
  4. using Microsoft.Extensions.Logging;
  5. using System.Text.Json;
  6. namespace Admin.NET.Plugin.AiDOP.Job;
  7. /// <summary>
  8. /// S7 成品仓储 T8 KPI 自动跑批任务。
  9. /// 每日 02:00 / 07:00 / 12:00 / 17:00 / 22:00 共 5 次(间隔 5h;22:00 是当天最后一次跑批,22:01~01:59 安静期)。
  10. /// 调用 S7MdpSyncTransformService.RunFullAsync(triggerType="AUTO");失败通知由 service 内部 MarkTransformRunFailedAsync 触发。
  11. /// </summary>
  12. [JobDetail("job_s7_t8_kpi_refresh",
  13. Description = "S7 T8 KPI 自动跑批(5 次/天:02/07/12/17/22)",
  14. GroupName = "default",
  15. Concurrent = false)]
  16. [Cron("0 2,7,12,17,22 * * *",
  17. TriggerId = "trigger_s7_t8_kpi_refresh",
  18. Description = "每日 02:00/07:00/12:00/17:00/22:00 触发(5 字段:分 时 日 月 周,默认 CronStringFormat.Default)")]
  19. public class S7MdpRefreshJob : IJob
  20. {
  21. private readonly IServiceScopeFactory _scopeFactory;
  22. private readonly ILogger _logger;
  23. public S7MdpRefreshJob(IServiceScopeFactory scopeFactory, ILoggerFactory loggerFactory)
  24. {
  25. _scopeFactory = scopeFactory;
  26. _logger = loggerFactory.CreateLogger(nameof(S7MdpRefreshJob));
  27. }
  28. public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
  29. {
  30. using var scope = _scopeFactory.CreateScope();
  31. var service = scope.ServiceProvider.GetRequiredService<S7MdpSyncTransformService>();
  32. try
  33. {
  34. var result = await service.RunFullAsync(stoppingToken, "AUTO");
  35. _logger.LogInformation("S7MdpRefreshJob 完成 {Payload}", JsonSerializer.Serialize(result));
  36. }
  37. catch (OperationCanceledException) when (stoppingToken.IsCancellationRequested)
  38. {
  39. _logger.LogInformation("S7MdpRefreshJob 收到停止信号,结束本轮");
  40. }
  41. catch (Exception ex)
  42. {
  43. // 失败通知由 service 内部 MarkTransformRunFailedAsync 触发;此处仅记录 Job 层失败
  44. _logger.LogError(ex, "S7MdpRefreshJob 执行失败");
  45. }
  46. }
  47. }