新增原料入场记录功能,包含免密接口和数据同步,更新相关控制器、实体和服务,支持条码/批次号生成及管理,优化用户体验和系统实时数据处理能力。
This commit is contained in:
58
yy-admin-master/YY.Admin.Services/Service/SyncPollManager.cs
Normal file
58
yy-admin-master/YY.Admin.Services/Service/SyncPollManager.cs
Normal file
@@ -0,0 +1,58 @@
|
||||
using YY.Admin.Core;
|
||||
|
||||
namespace YY.Admin.Services.Service;
|
||||
|
||||
/// <summary>
|
||||
/// 统一后台轮询管理器。
|
||||
/// 各模块通过 <see cref="Register"/> 注册轮询任务,定时器统一触发。
|
||||
/// ★ 只需修改 <see cref="PollInterval"/> 即可调整所有模块的轮询间隔。
|
||||
/// </summary>
|
||||
public class SyncPollManager : ISingletonDependency
|
||||
{
|
||||
// ★ 唯一轮询间隔配置 — 修改这里即可调整所有模块的轮询频率
|
||||
public static readonly TimeSpan PollInterval = TimeSpan.FromMinutes(5);
|
||||
|
||||
private readonly List<(string Name, Func<Task> Task)> _tasks = [];
|
||||
private readonly Timer _timer;
|
||||
private readonly ILoggerService _logger;
|
||||
|
||||
public SyncPollManager(ILoggerService logger)
|
||||
{
|
||||
_logger = logger;
|
||||
// 首次延迟一个完整周期,确保所有协调器启动后都已完成注册
|
||||
_timer = new Timer(OnTick, null, PollInterval, PollInterval);
|
||||
_logger.Information($"[轮询管理器] 已启动,间隔 {PollInterval.TotalMinutes} 分钟");
|
||||
}
|
||||
|
||||
/// <summary>注册一个需要定时执行的轮询任务</summary>
|
||||
/// <param name="name">任务名称,用于日志</param>
|
||||
/// <param name="pollTask">异步轮询委托</param>
|
||||
public void Register(string name, Func<Task> pollTask)
|
||||
{
|
||||
lock (_tasks)
|
||||
_tasks.Add((name, pollTask));
|
||||
_logger.Information($"[轮询管理器] 注册任务: {name}");
|
||||
}
|
||||
|
||||
private void OnTick(object? _)
|
||||
{
|
||||
_ = Task.Run(async () =>
|
||||
{
|
||||
List<(string Name, Func<Task> Task)> snapshot;
|
||||
lock (_tasks) snapshot = [.. _tasks];
|
||||
|
||||
_logger.Debug($"[轮询管理器] 触发,执行 {snapshot.Count} 个任务");
|
||||
foreach (var (name, task) in snapshot)
|
||||
{
|
||||
try
|
||||
{
|
||||
await task().ConfigureAwait(false);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Warning($"[轮询管理器] 任务 [{name}] 异常: {ex.Message}");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user