初步重构WPF项目中的DataService和App项目中的DataCenterServicce

This commit is contained in:
2025-09-09 13:35:16 +08:00
parent 84720f1ac4
commit 94ef1dec84
44 changed files with 1618 additions and 307 deletions

View File

@@ -21,21 +21,21 @@ namespace DMS.Infrastructure.Services
{
private readonly ILogger<MqttBackgroundService> _logger;
private readonly IMqttServiceManager _mqttServiceManager;
private readonly IDataCenterService _dataCenterService;
private readonly IAppDataCenterService _appDataCenterService;
private readonly ConcurrentDictionary<int, MqttServer> _mqttServers;
private readonly SemaphoreSlim _reloadSemaphore = new(0);
public MqttBackgroundService(
ILogger<MqttBackgroundService> logger,
IMqttServiceManager mqttServiceManager,
IDataCenterService dataCenterService)
IAppDataCenterService appDataCenterService)
{
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
_mqttServiceManager = mqttServiceManager ?? throw new ArgumentNullException(nameof(mqttServiceManager));
_dataCenterService = dataCenterService ?? throw new ArgumentNullException(nameof(dataCenterService));
_appDataCenterService = appDataCenterService ?? throw new ArgumentNullException(nameof(appDataCenterService));
_mqttServers = new ConcurrentDictionary<int, MqttServer>();
_dataCenterService.OnLoadDataCompleted += OnLoadDataCompleted;
_appDataCenterService.OnLoadDataCompleted += OnLoadDataCompleted;
}
private void OnLoadDataCompleted(object? sender, DataLoadCompletedEventArgs e)
@@ -185,7 +185,7 @@ namespace DMS.Infrastructure.Services
_mqttServers.Clear();
// 从数据服务中心获取所有激活的MQTT服务器
var mqttServerDtos = _dataCenterService.MqttServers.Values
var mqttServerDtos = _appDataCenterService.MqttServers.Values
.Where(m => m.IsActive)
.ToList();
@@ -252,7 +252,7 @@ namespace DMS.Infrastructure.Services
{
_logger.LogInformation("正在释放MQTT后台服务资源...");
_dataCenterService.OnLoadDataCompleted -= OnLoadDataCompleted;
_appDataCenterService.OnLoadDataCompleted -= OnLoadDataCompleted;
_reloadSemaphore?.Dispose();
base.Dispose();

View File

@@ -20,7 +20,7 @@ namespace DMS.Infrastructure.Services
{
private readonly ILogger<MqttServiceManager> _logger;
private readonly IDataProcessingService _dataProcessingService;
private readonly IDataCenterService _dataCenterService;
private readonly IAppDataCenterService _appDataCenterService;
private readonly IMqttServiceFactory _mqttServiceFactory;
private readonly ConcurrentDictionary<int, MqttDeviceContext> _mqttContexts;
private readonly SemaphoreSlim _semaphore;
@@ -29,12 +29,12 @@ namespace DMS.Infrastructure.Services
public MqttServiceManager(
ILogger<MqttServiceManager> logger,
IDataProcessingService dataProcessingService,
IDataCenterService dataCenterService,
IAppDataCenterService appDataCenterService,
IMqttServiceFactory mqttServiceFactory)
{
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
_dataProcessingService = dataProcessingService ?? throw new ArgumentNullException(nameof(dataProcessingService));
_dataCenterService = dataCenterService ?? throw new ArgumentNullException(nameof(dataCenterService));
_appDataCenterService = appDataCenterService ?? throw new ArgumentNullException(nameof(appDataCenterService));
_mqttServiceFactory = mqttServiceFactory ?? throw new ArgumentNullException(nameof(mqttServiceFactory));
_mqttContexts = new ConcurrentDictionary<int, MqttDeviceContext>();
_semaphore = new SemaphoreSlim(10, 10); // 默认最大并发连接数为10

View File

@@ -16,7 +16,7 @@ namespace DMS.Infrastructure.Services;
public class OpcUaBackgroundService : BackgroundService
{
private readonly IDataCenterService _dataCenterService;
private readonly IAppDataCenterService _appDataCenterService;
private readonly IDataProcessingService _dataProcessingService;
// private readonly IDataProcessingService _dataProcessingService;
@@ -70,9 +70,9 @@ public class OpcUaBackgroundService : BackgroundService
{ 1800000, TimeSpan.FromMilliseconds(1800000) } // ThirtyMinutes
};
public OpcUaBackgroundService(IDataCenterService dataCenterService,IDataProcessingService dataProcessingService, ILogger<OpcUaBackgroundService> logger)
public OpcUaBackgroundService(IAppDataCenterService appDataCenterService,IDataProcessingService dataProcessingService, ILogger<OpcUaBackgroundService> logger)
{
_dataCenterService = dataCenterService;
_appDataCenterService = appDataCenterService;
_dataProcessingService = dataProcessingService;
_logger = logger;
_opcUaServices = new ConcurrentDictionary<DeviceDto, OpcUaService>();
@@ -81,7 +81,7 @@ public class OpcUaBackgroundService : BackgroundService
_opcUaPollVariablesByDeviceId = new ConcurrentDictionary<int, List<Variable>>();
_opcUaVariablesByDeviceId = new ConcurrentDictionary<int, List<VariableDto>>();
_dataCenterService.OnLoadDataCompleted += OnLoadDataCompleted;
_appDataCenterService.OnLoadDataCompleted += OnLoadDataCompleted;
}
private void OnLoadDataCompleted(object? sender, DataLoadCompletedEventArgs e)
@@ -103,7 +103,7 @@ public class OpcUaBackgroundService : BackgroundService
break;
}
if (_dataCenterService.Devices.IsEmpty)
if (_appDataCenterService.Devices.IsEmpty)
{
_logger.LogInformation("没有可用的OPC UA设备等待设备列表更新...");
continue;
@@ -150,7 +150,7 @@ public class OpcUaBackgroundService : BackgroundService
_opcUaVariables.Clear();
_logger.LogInformation("开始加载OPC UA变量....");
var opcUaDevices = _dataCenterService
var opcUaDevices = _appDataCenterService
.Devices.Values.Where(d => d.Protocol == ProtocolType.OpcUa && d.IsActive == true)
.ToList();
int totalVariableCount = 0;

View File

@@ -19,7 +19,7 @@ namespace DMS.Infrastructure.Services
{
private readonly ILogger<OpcUaServiceManager> _logger;
private readonly IDataProcessingService _dataProcessingService;
private readonly IDataCenterService _dataCenterService;
private readonly IAppDataCenterService _appDataCenterService;
private readonly OpcUaServiceOptions _options;
private readonly ConcurrentDictionary<int, DeviceContext> _deviceContexts;
private readonly SemaphoreSlim _semaphore;
@@ -28,12 +28,12 @@ namespace DMS.Infrastructure.Services
public OpcUaServiceManager(
ILogger<OpcUaServiceManager> logger,
IDataProcessingService dataProcessingService,
IDataCenterService dataCenterService,
IAppDataCenterService appDataCenterService,
IOptions<OpcUaServiceOptions> options)
{
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
_dataProcessingService = dataProcessingService ?? throw new ArgumentNullException(nameof(dataProcessingService));
_dataCenterService = dataCenterService ?? throw new ArgumentNullException(nameof(dataCenterService));
_appDataCenterService = appDataCenterService ?? throw new ArgumentNullException(nameof(appDataCenterService));
_options = options?.Value ?? throw new ArgumentNullException(nameof(options));
_deviceContexts = new ConcurrentDictionary<int, DeviceContext>();
_semaphore = new SemaphoreSlim(_options.MaxConcurrentConnections, _options.MaxConcurrentConnections);
@@ -308,7 +308,7 @@ namespace DMS.Infrastructure.Services
newValue,
variable.UpdatedAt);
_dataCenterService.OnVariableValueChanged( eventArgs);
_appDataCenterService.OnVariableValueChanged( eventArgs);
// 推送到数据处理队列
await _dataProcessingService.EnqueueAsync(variable);

View File

@@ -18,21 +18,21 @@ namespace DMS.Infrastructure.Services
/// </summary>
public class OptimizedOpcUaBackgroundService : BackgroundService
{
private readonly IDataCenterService _dataCenterService;
private readonly IAppDataCenterService _appDataCenterService;
private readonly IOpcUaServiceManager _opcUaServiceManager;
private readonly ILogger<OptimizedOpcUaBackgroundService> _logger;
private readonly SemaphoreSlim _reloadSemaphore = new SemaphoreSlim(0);
public OptimizedOpcUaBackgroundService(
IDataCenterService dataCenterService,
IAppDataCenterService appDataCenterService,
IOpcUaServiceManager opcUaServiceManager,
ILogger<OptimizedOpcUaBackgroundService> logger)
{
_dataCenterService = dataCenterService ?? throw new ArgumentNullException(nameof(dataCenterService));
_appDataCenterService = appDataCenterService ?? throw new ArgumentNullException(nameof(appDataCenterService));
_opcUaServiceManager = opcUaServiceManager ?? throw new ArgumentNullException(nameof(opcUaServiceManager));
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
_dataCenterService.OnLoadDataCompleted += OnLoadDataCompleted;
_appDataCenterService.OnLoadDataCompleted += OnLoadDataCompleted;
}
private void OnLoadDataCompleted(object sender, DataLoadCompletedEventArgs e)
@@ -57,7 +57,7 @@ namespace DMS.Infrastructure.Services
if (stoppingToken.IsCancellationRequested)
break;
if (_dataCenterService.Devices.IsEmpty)
if (_appDataCenterService.Devices.IsEmpty)
{
_logger.LogInformation("没有可用的OPC UA设备等待设备列表更新...");
continue;
@@ -93,7 +93,7 @@ namespace DMS.Infrastructure.Services
try
{
// 获取所有活动的OPC UA设备
var opcUaDevices = _dataCenterService.Devices.Values
var opcUaDevices = _appDataCenterService.Devices.Values
.Where(d => d.Protocol == ProtocolType.OpcUa && d.IsActive)
.ToList();
@@ -145,7 +145,7 @@ namespace DMS.Infrastructure.Services
{
_logger.LogInformation("正在释放OPC UA后台服务资源...");
_dataCenterService.OnLoadDataCompleted -= OnLoadDataCompleted;
_appDataCenterService.OnLoadDataCompleted -= OnLoadDataCompleted;
_reloadSemaphore?.Dispose();
base.Dispose();

View File

@@ -20,7 +20,7 @@ namespace DMS.Infrastructure.Services;
/// </summary>
public class OptimizedS7BackgroundService : BackgroundService
{
private readonly IDataCenterService _dataCenterService;
private readonly IAppDataCenterService _appDataCenterService;
private readonly IDataProcessingService _dataProcessingService;
private readonly IS7ServiceManager _s7ServiceManager;
private readonly ILogger<OptimizedS7BackgroundService> _logger;
@@ -54,17 +54,17 @@ public class OptimizedS7BackgroundService : BackgroundService
/// 构造函数,注入数据服务和数据处理服务。
/// </summary>
public OptimizedS7BackgroundService(
IDataCenterService dataCenterService,
IAppDataCenterService appDataCenterService,
IDataProcessingService dataProcessingService,
IS7ServiceManager s7ServiceManager,
ILogger<OptimizedS7BackgroundService> logger)
{
_dataCenterService = dataCenterService;
_appDataCenterService = appDataCenterService;
_dataProcessingService = dataProcessingService;
_s7ServiceManager = s7ServiceManager;
_logger = logger;
_dataCenterService.OnLoadDataCompleted += OnLoadDataCompleted;
_appDataCenterService.OnLoadDataCompleted += OnLoadDataCompleted;
}
private void OnLoadDataCompleted(object? sender, DataLoadCompletedEventArgs e)
@@ -86,7 +86,7 @@ public class OptimizedS7BackgroundService : BackgroundService
break;
}
if (_dataCenterService.Devices.IsEmpty)
if (_appDataCenterService.Devices.IsEmpty)
{
_logger.LogInformation("没有可用的S7设备等待设备列表更新...");
continue;
@@ -134,7 +134,7 @@ public class OptimizedS7BackgroundService : BackgroundService
_variablesByPollingInterval.Clear();
_logger.LogInformation("开始加载S7变量....");
var s7Devices = _dataCenterService
var s7Devices = _appDataCenterService
.Devices.Values.Where(d => d.Protocol == ProtocolType.S7 && d.IsActive == true)
.ToList();
@@ -173,7 +173,7 @@ public class OptimizedS7BackgroundService : BackgroundService
private async Task ConnectS7ServiceAsync(CancellationToken stoppingToken)
{
var s7Devices = _dataCenterService
var s7Devices = _appDataCenterService
.Devices.Values.Where(d => d.Protocol == ProtocolType.S7 && d.IsActive == true)
.ToList();
@@ -237,7 +237,7 @@ public class OptimizedS7BackgroundService : BackgroundService
/// </summary>
private async Task PollVariablesForDeviceAsync(int deviceId, List<VariableDto> variables, CancellationToken stoppingToken)
{
if (!_dataCenterService.Devices.TryGetValue(deviceId, out var device))
if (!_appDataCenterService.Devices.TryGetValue(deviceId, out var device))
{
_logger.LogWarning($"轮询时没有找到设备ID{deviceId}");
return;

View File

@@ -22,7 +22,7 @@ namespace DMS.Infrastructure.Services;
/// </summary>
public class S7BackgroundService : BackgroundService
{
private readonly IDataCenterService _dataCenterService;
private readonly IAppDataCenterService _appDataCenterService;
private readonly IDataProcessingService _dataProcessingService;
private readonly IChannelBus _channelBus;
private readonly IMessenger _messenger;
@@ -39,19 +39,19 @@ public class S7BackgroundService : BackgroundService
/// 构造函数,注入所需的服务
/// </summary>
public S7BackgroundService(
IDataCenterService dataCenterService,
IAppDataCenterService appDataCenterService,
IDataProcessingService dataProcessingService,
IChannelBus channelBus,
IMessenger messenger,
ILogger<S7BackgroundService> logger)
{
_dataCenterService = dataCenterService;
_appDataCenterService = appDataCenterService;
_dataProcessingService = dataProcessingService;
_channelBus = channelBus;
_messenger = messenger;
_logger = logger;
_dataCenterService.OnLoadDataCompleted += OnLoadDataCompleted;
_appDataCenterService.OnLoadDataCompleted += OnLoadDataCompleted;
}
private void OnLoadDataCompleted(object? sender, DataLoadCompletedEventArgs e)
@@ -73,7 +73,7 @@ public class S7BackgroundService : BackgroundService
break;
}
if (_dataCenterService.Devices.IsEmpty)
if (_appDataCenterService.Devices.IsEmpty)
{
_logger.LogInformation("没有可用的S7设备等待设备列表更新...");
continue;
@@ -114,7 +114,7 @@ public class S7BackgroundService : BackgroundService
_logger.LogInformation("开始加载S7设备....");
// 获取所有激活的S7设备
var s7Devices = _dataCenterService
var s7Devices = _appDataCenterService
.Devices.Values.Where(d => d.Protocol == ProtocolType.S7 && d.IsActive == true)
.ToList();
@@ -134,7 +134,7 @@ public class S7BackgroundService : BackgroundService
// 为每个设备创建或更新代理
foreach (var deviceDto in s7Devices)
{
if (!_dataCenterService.Devices.TryGetValue(deviceDto.Id, out var device))
if (!_appDataCenterService.Devices.TryGetValue(deviceDto.Id, out var device))
continue;
// 创建或更新设备代理

View File

@@ -20,7 +20,7 @@ namespace DMS.Infrastructure.Services
{
private readonly ILogger<S7ServiceManager> _logger;
private readonly IDataProcessingService _dataProcessingService;
private readonly IDataCenterService _dataCenterService;
private readonly IAppDataCenterService _appDataCenterService;
private readonly IS7ServiceFactory _s7ServiceFactory;
private readonly ConcurrentDictionary<int, S7DeviceContext> _deviceContexts;
private readonly SemaphoreSlim _semaphore;
@@ -29,12 +29,12 @@ namespace DMS.Infrastructure.Services
public S7ServiceManager(
ILogger<S7ServiceManager> logger,
IDataProcessingService dataProcessingService,
IDataCenterService dataCenterService,
IAppDataCenterService appDataCenterService,
IS7ServiceFactory s7ServiceFactory)
{
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
_dataProcessingService = dataProcessingService ?? throw new ArgumentNullException(nameof(dataProcessingService));
_dataCenterService = dataCenterService ?? throw new ArgumentNullException(nameof(dataCenterService));
_appDataCenterService = appDataCenterService ?? throw new ArgumentNullException(nameof(appDataCenterService));
_s7ServiceFactory = s7ServiceFactory ?? throw new ArgumentNullException(nameof(s7ServiceFactory));
_deviceContexts = new ConcurrentDictionary<int, S7DeviceContext>();
_semaphore = new SemaphoreSlim(10, 10); // 默认最大并发连接数为10