Files
qhmes/yy-admin-master/YY.Admin.Services/Service/MixerMaterialTareStrategy/MixerMaterialTareStrategySyncCoordinator.cs

73 lines
2.9 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;
using YY.Admin.Core.Services;
namespace YY.Admin.Services.Service.MixerMaterialTareStrategy;
public class MixerMaterialTareStrategySyncCoordinator : ISingletonDependency
{
private readonly IEventAggregator _eventAggregator;
private readonly ILoggerService _logger;
public MixerMaterialTareStrategySyncCoordinator(
IEventAggregator eventAggregator,
SyncPollManager pollManager,
ILoggerService logger)
{
_eventAggregator = eventAggregator;
_logger = logger;
_eventAggregator.GetEvent<RemoteCommandReceivedEvent>()
.Subscribe(OnRemoteCommand, ThreadOption.BackgroundThread);
_eventAggregator.GetEvent<NetworkStatusChangedEvent>()
.Subscribe(OnNetworkStatusChanged, ThreadOption.BackgroundThread);
pollManager.Register("密炼物料皮重策略", () =>
{
_eventAggregator.GetEvent<MixerMaterialTareStrategyChangedEvent>()
.Publish(new MixerMaterialTareStrategyChangedPayload { Action = "poll" });
return Task.CompletedTask;
});
_logger.Information("[密炼物料皮重策略推送] MixerMaterialTareStrategySyncCoordinator 已启动");
}
private void OnNetworkStatusChanged(NetworkStatusChangedPayload payload)
{
if (!payload.IsOnline) return;
_logger.Information("[密炼物料皮重策略推送] 网络恢复,触发补偿刷新");
_eventAggregator.GetEvent<MixerMaterialTareStrategyChangedEvent>()
.Publish(new MixerMaterialTareStrategyChangedPayload { 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;
if (!cmdEl.GetString().Equals("MES_MIXER_MATERIAL_TARE_STRATEGY_CHANGED", StringComparison.OrdinalIgnoreCase))
return;
doc.RootElement.TryGetProperty("action", out var actionEl);
doc.RootElement.TryGetProperty("tareStrategyId", out var idEl);
var changed = new MixerMaterialTareStrategyChangedPayload
{
Action = actionEl.GetString() ?? string.Empty,
TareStrategyId = idEl.ValueKind == JsonValueKind.String ? idEl.GetString() : null
};
_logger.Information($"[密炼物料皮重策略推送] action={changed.Action}, tareStrategyId={changed.TareStrategyId}");
_eventAggregator.GetEvent<MixerMaterialTareStrategyChangedEvent>().Publish(changed);
}
catch (Exception ex)
{
_logger.Warning($"[密炼物料皮重策略推送] 处理STOMP命令失败{ex.Message}");
}
}
}