Files
qhmes/yy-admin-master/YY.Admin.Services/Service/Print/PrintBizTemplateBindSyncCoordinator.cs

78 lines
3.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Prism.Events;
using System.Text.Json;
using YY.Admin.Core;
using YY.Admin.Core.Events;
namespace YY.Admin.Services.Service.Print;
/// <summary>订阅 STOMPPRINT_BIZ_TEMPLATE_BIND_CHANGED驱动列表静默刷新网络恢复补偿。</summary>
public class PrintBizTemplateBindSyncCoordinator : ISingletonDependency
{
private readonly IEventAggregator _eventAggregator;
private readonly ILoggerService _logger;
private SubscriptionToken? _remoteCommandToken;
private SubscriptionToken? _networkStatusToken;
public PrintBizTemplateBindSyncCoordinator(
IEventAggregator eventAggregator,
SyncPollManager pollManager,
ILoggerService logger)
{
_eventAggregator = eventAggregator;
_logger = logger;
_remoteCommandToken = _eventAggregator
.GetEvent<RemoteCommandReceivedEvent>()
.Subscribe(OnRemoteCommand, ThreadOption.BackgroundThread);
_networkStatusToken = _eventAggregator
.GetEvent<NetworkStatusChangedEvent>()
.Subscribe(OnNetworkStatusChanged, ThreadOption.BackgroundThread);
pollManager.Register("业务打印绑定", () =>
{
_eventAggregator.GetEvent<PrintBizTemplateBindChangedEvent>()
.Publish(new PrintBizTemplateBindChangedPayload { Action = "poll" });
return Task.CompletedTask;
});
_logger.Information("[业务打印绑定推送] PrintBizTemplateBindSyncCoordinator 已启动");
}
private void OnNetworkStatusChanged(NetworkStatusChangedPayload payload)
{
if (!payload.IsOnline) return;
_logger.Information("[业务打印绑定推送] 网络恢复,触发补偿刷新");
_eventAggregator.GetEvent<PrintBizTemplateBindChangedEvent>()
.Publish(new PrintBizTemplateBindChangedPayload { Action = "reconnect" });
}
private void OnRemoteCommand(RemoteCommandPayload payload)
{
try
{
var json = payload.CommandJson ?? string.Empty;
if (string.IsNullOrWhiteSpace(json)) return;
using var doc = JsonDocument.Parse(json);
if (!doc.RootElement.TryGetProperty("cmd", out var cmdEl)) return;
var cmd = cmdEl.GetString() ?? string.Empty;
if (!cmd.Equals("PRINT_BIZ_TEMPLATE_BIND_CHANGED", StringComparison.OrdinalIgnoreCase)) return;
doc.RootElement.TryGetProperty("action", out var actionEl);
doc.RootElement.TryGetProperty("bindId", out var idEl);
var changedPayload = new PrintBizTemplateBindChangedPayload
{
Action = actionEl.GetString() ?? string.Empty,
BindId = idEl.ValueKind == JsonValueKind.String ? idEl.GetString() : null
};
_logger.Information($"[业务打印绑定推送] 收到变更 action={changedPayload.Action}, bindId={changedPayload.BindId}");
_eventAggregator.GetEvent<PrintBizTemplateBindChangedEvent>().Publish(changedPayload);
}
catch (Exception ex)
{
_logger.Warning($"[业务打印绑定推送] 处理 STOMP 信号失败: {ex.Message}");
}
}
}