Remove debug APIs and transport scan Hangfire; move Upsert to Order/Upsert*; keep original response shapes and put result+reason only in exception messages. Co-authored-by: Cursor <cursoragent@cursor.com>
79 lines
3.3 KiB
C#
79 lines
3.3 KiB
C#
using Hangfire;
|
||
using Microsoft.Extensions.Hosting;
|
||
using Microsoft.Extensions.Logging;
|
||
using Microsoft.Extensions.Options;
|
||
using TrackCenter.Application.Hangfire;
|
||
using TrackCenter.Application.Helpers;
|
||
using TrackCenter.Application.Options;
|
||
|
||
namespace TrackCenter.Application.HostServices;
|
||
|
||
/// <summary>
|
||
/// 预警任务组件初始化
|
||
/// tips:支持定时任务执行周期配置 动态更新并应用 √
|
||
/// </summary>
|
||
public class WarningTaskComponentHostedService : IHostedService
|
||
{
|
||
private readonly IOptionsMonitor<TrackWarningTaskOptions> _optionsMonitor;
|
||
private TrackWarningTaskOptions? _oldOptions;
|
||
private readonly ILogger<WarningTaskComponentHostedService> _logger;
|
||
private readonly IRecurringJobManager _recurringJobManager;
|
||
|
||
public WarningTaskComponentHostedService(
|
||
IOptionsMonitor<TrackWarningTaskOptions> optionsMonitor,
|
||
ILogger<WarningTaskComponentHostedService> logger,
|
||
IRecurringJobManager recurringJobManager)
|
||
{
|
||
_optionsMonitor = optionsMonitor;
|
||
_logger = logger;
|
||
_recurringJobManager = recurringJobManager;
|
||
// 防抖配置变更包装
|
||
var onChanged = DebounceHelper.WrapMethod(TimeSpan.FromSeconds(1), () => { ReloadConfig(optionsMonitor); });
|
||
optionsMonitor.OnChange(_ => onChanged.Debounce());
|
||
}
|
||
|
||
public Task StartAsync(CancellationToken cancellationToken)
|
||
{
|
||
// 立即初始化一次
|
||
ReloadConfig(_optionsMonitor);
|
||
return Task.CompletedTask;
|
||
}
|
||
|
||
public Task StopAsync(CancellationToken cancellationToken)
|
||
{
|
||
return Task.CompletedTask;
|
||
}
|
||
|
||
private void ReloadConfig(IOptionsMonitor<TrackWarningTaskOptions> optionsMonitor)
|
||
{
|
||
var newVal = optionsMonitor.CurrentValue;
|
||
_logger.LogInformation("扫描任务配置,预警通知扫描周期{a}h,回传重试推送任务扫描周期{b}min",
|
||
newVal.ScanWarningNotifyTaskHourInterval,
|
||
newVal.ScanReturnWarningRetryPushTaskMinuteInterval);
|
||
if ((_oldOptions?.ScanWarningNotifyTaskHourInterval ?? 0) != newVal.ScanWarningNotifyTaskHourInterval)
|
||
{
|
||
var q = GlobalConst.TaskQueueLevelDict[_optionsMonitor.CurrentValue.ScanWarningNotifyTaskLevel];
|
||
// 预警通知任务扫描
|
||
_recurringJobManager.AddOrUpdate<IWarningTaskScanner>("Scan_WarningNotifyTask",
|
||
q,
|
||
x => x.ScanNotifyTaskAndSchedulingAsync(),
|
||
$"0 */{newVal.ScanWarningNotifyTaskHourInterval} * * *");
|
||
}
|
||
|
||
if ((_oldOptions?.ScanReturnWarningRetryPushTaskMinuteInterval ?? 0) != newVal.ScanReturnWarningRetryPushTaskMinuteInterval)
|
||
{
|
||
var q = GlobalConst.TaskQueueLevelDict[_optionsMonitor.CurrentValue.ScanReturnWarningRetryPushTaskLevel];
|
||
// 回传预警通知重试推送任务扫描
|
||
_recurringJobManager.AddOrUpdate<IWarningTaskScanner>("Scan_ReturnWarningRetryPushTask",
|
||
q,
|
||
x => x.ScanReturnRetryPushTaskAndSchedulingAsync(),
|
||
$"*/{newVal.ScanReturnWarningRetryPushTaskMinuteInterval} * * * *");
|
||
}
|
||
|
||
// 移除历史运输预警明细生成任务扫描(若仍挂在 Hangfire 上)
|
||
_recurringJobManager.RemoveIfExists("Scan_TransportWarningDetailsGenerateTask");
|
||
|
||
_oldOptions = newVal;
|
||
}
|
||
}
|