using Admin.NET.Plugin.AiDOP.Production;
using Furion.Schedule;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System.Text.Json;
namespace Admin.NET.Plugin.AiDOP.Job;
///
/// S2 MDP 同步、标准化、DWD 与 KPI 计算定时任务。
///
[JobDetail("job_s2_mdp_sync_transform", Description = "S2 MDP同步与KPI计算", GroupName = "default", Concurrent = false)]
[Period(3600000, TriggerId = "trigger_s2_mdp_sync_transform", Description = "每60分钟执行")]
public class S2MdpSyncTransformJob : IJob
{
private readonly IServiceScopeFactory _scopeFactory;
private readonly ILogger _logger;
public S2MdpSyncTransformJob(IServiceScopeFactory scopeFactory, ILoggerFactory loggerFactory)
{
_scopeFactory = scopeFactory;
_logger = loggerFactory.CreateLogger(nameof(S2MdpSyncTransformJob));
}
public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
{
using var scope = _scopeFactory.CreateScope();
var service = scope.ServiceProvider.GetRequiredService();
try
{
var result = await service.RunFullAsync(stoppingToken);
_logger.LogInformation("S2MdpSyncTransformJob 完成 {Payload}", JsonSerializer.Serialize(result));
}
catch (OperationCanceledException) when (stoppingToken.IsCancellationRequested)
{
_logger.LogInformation("S2MdpSyncTransformJob 收到停止信号,结束本轮转换");
}
catch (Exception ex)
{
_logger.LogError(ex, "S2MdpSyncTransformJob 执行失败");
}
}
}