using Admin.NET.Plugin.AiDOP.DataPlatform.MdpRebuild; using Furion.Schedule; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using System.Text.Json; namespace Admin.NET.Plugin.AiDOP.Job; [JobDetail("job_s3_mdp_sync_transform", Description = "S3 MDP同步与标准化转换(含供应采购/仓储库存域原子聚合层)", GroupName = "default", Concurrent = false)] [Period(3600000, TriggerId = "trigger_s3_mdp_sync_transform", Description = "每60分钟执行")] public class S3MdpSyncTransformJob : IJob { private readonly IServiceScopeFactory _scopeFactory; private readonly ILogger _logger; public S3MdpSyncTransformJob(IServiceScopeFactory scopeFactory, ILoggerFactory loggerFactory) { _scopeFactory = scopeFactory; _logger = loggerFactory.CreateLogger(nameof(S3MdpSyncTransformJob)); } public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) { using var scope = _scopeFactory.CreateScope(); try { var payload = await ModuleRebuildJobRunner.EnqueueEnabledScopesAsync(scope.ServiceProvider, "S3", "AUTO", stoppingToken, _logger); _logger.LogInformation("S3MdpSyncTransformJob 入队 {Payload}", JsonSerializer.Serialize(payload)); } catch (OperationCanceledException) when (stoppingToken.IsCancellationRequested) { _logger.LogInformation("S3MdpSyncTransformJob 收到停止信号,结束本轮转换"); } catch (Exception ex) { _logger.LogError(ex, "S3MdpSyncTransformJob 执行失败"); } } }