From 80ffce4fe4c74360c11751661c7e871d6f71b9b5 Mon Sep 17 00:00:00 2001 From: "David P.G" Date: Tue, 2 Sep 2025 21:50:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DTOs/Events/DataLoadCompletedEventArgs.cs | 26 ++-- .../DTOs/Events/DeviceChangedEventArgs.cs | 17 +-- .../DTOs/Events/VariableChangedEventArgs.cs | 25 ++-- .../Events/VariableTableChangedEventArgs.cs | 25 ++-- DMS.Application/Services/DataCenterService.cs | 118 +++++++++++++----- .../DataCenterServiceTests.cs | 9 +- 6 files changed, 123 insertions(+), 97 deletions(-) diff --git a/DMS.Application/DTOs/Events/DataLoadCompletedEventArgs.cs b/DMS.Application/DTOs/Events/DataLoadCompletedEventArgs.cs index 9447a64..e98328d 100644 --- a/DMS.Application/DTOs/Events/DataLoadCompletedEventArgs.cs +++ b/DMS.Application/DTOs/Events/DataLoadCompletedEventArgs.cs @@ -9,19 +9,19 @@ namespace DMS.Application.DTOs.Events public class DataLoadCompletedEventArgs : System.EventArgs { /// - /// 加载的设备数量 + /// 加载的设备列表 /// - public int DeviceCount { get; } + public List Devices { get; } /// - /// 加载的变量表数量 + /// 加载的变量表列表 /// - public int VariableTableCount { get; } + public List VariableTables { get; } /// - /// 加载的变量数量 + /// 加载的变量列表 /// - public int VariableCount { get; } + public List Variables { get; } /// /// 加载是否成功 @@ -41,16 +41,16 @@ namespace DMS.Application.DTOs.Events /// /// 构造函数 /// - /// 设备数量 - /// 变量表数量 - /// 变量数量 + /// 设备列表 + /// 变量表列表 + /// 变量列表 /// 是否成功 /// 错误信息 - public DataLoadCompletedEventArgs(int deviceCount, int variableTableCount, int variableCount, bool isSuccess, string errorMessage = null) + public DataLoadCompletedEventArgs(List devices, List variableTables, List variables, bool isSuccess, string errorMessage = null) { - DeviceCount = deviceCount; - VariableTableCount = variableTableCount; - VariableCount = variableCount; + Devices = devices ?? new List(); + VariableTables = variableTables ?? new List(); + Variables = variables ?? new List(); IsSuccess = isSuccess; ErrorMessage = errorMessage; LoadTime = DateTime.Now; diff --git a/DMS.Application/DTOs/Events/DeviceChangedEventArgs.cs b/DMS.Application/DTOs/Events/DeviceChangedEventArgs.cs index 02acab4..f216214 100644 --- a/DMS.Application/DTOs/Events/DeviceChangedEventArgs.cs +++ b/DMS.Application/DTOs/Events/DeviceChangedEventArgs.cs @@ -13,14 +13,9 @@ namespace DMS.Application.DTOs.Events public DataChangeType ChangeType { get; } /// - /// 设备ID + /// 设备DTO /// - public int DeviceId { get; } - - /// - /// 设备名称 - /// - public string DeviceName { get; } + public DeviceDto Device { get; } /// /// 变更时间 @@ -31,13 +26,11 @@ namespace DMS.Application.DTOs.Events /// 构造函数 /// /// 变更类型 - /// 设备ID - /// 设备名称 - public DeviceChangedEventArgs(DataChangeType changeType, int deviceId, string deviceName) + /// 设备DTO + public DeviceChangedEventArgs(DataChangeType changeType, DeviceDto device) { ChangeType = changeType; - DeviceId = deviceId; - DeviceName = deviceName; + Device = device; ChangeTime = DateTime.Now; } } diff --git a/DMS.Application/DTOs/Events/VariableChangedEventArgs.cs b/DMS.Application/DTOs/Events/VariableChangedEventArgs.cs index 4644101..5e33f26 100644 --- a/DMS.Application/DTOs/Events/VariableChangedEventArgs.cs +++ b/DMS.Application/DTOs/Events/VariableChangedEventArgs.cs @@ -13,19 +13,14 @@ namespace DMS.Application.DTOs.Events public DataChangeType ChangeType { get; } /// - /// 变量ID + /// 变量DTO /// - public int VariableId { get; } + public VariableDto Variable { get; } /// - /// 变量名称 + /// 关联的变量表DTO /// - public string VariableName { get; } - - /// - /// 关联的变量表ID - /// - public int VariableTableId { get; } + public VariableTableDto VariableTable { get; } /// /// 变更时间 @@ -36,15 +31,13 @@ namespace DMS.Application.DTOs.Events /// 构造函数 /// /// 变更类型 - /// 变量ID - /// 变量名称 - /// 关联的变量表ID - public VariableChangedEventArgs(DataChangeType changeType, int variableId, string variableName, int variableTableId) + /// 变量DTO + /// 关联的变量表DTO + public VariableChangedEventArgs(DataChangeType changeType, VariableDto variable, VariableTableDto variableTable) { ChangeType = changeType; - VariableId = variableId; - VariableName = variableName; - VariableTableId = variableTableId; + Variable = variable; + VariableTable = variableTable; ChangeTime = DateTime.Now; } } diff --git a/DMS.Application/DTOs/Events/VariableTableChangedEventArgs.cs b/DMS.Application/DTOs/Events/VariableTableChangedEventArgs.cs index 04220eb..31bd448 100644 --- a/DMS.Application/DTOs/Events/VariableTableChangedEventArgs.cs +++ b/DMS.Application/DTOs/Events/VariableTableChangedEventArgs.cs @@ -13,19 +13,14 @@ namespace DMS.Application.DTOs.Events public DataChangeType ChangeType { get; } /// - /// 变量表ID + /// 变量表DTO /// - public int VariableTableId { get; } + public VariableTableDto VariableTable { get; } /// - /// 变量表名称 + /// 关联的设备DTO /// - public string VariableTableName { get; } - - /// - /// 关联的设备ID - /// - public int DeviceId { get; } + public DeviceDto Device { get; } /// /// 变更时间 @@ -36,15 +31,13 @@ namespace DMS.Application.DTOs.Events /// 构造函数 /// /// 变更类型 - /// 变量表ID - /// 变量表名称 - /// 关联的设备ID - public VariableTableChangedEventArgs(DataChangeType changeType, int variableTableId, string variableTableName, int deviceId) + /// 变量表DTO + /// 关联的设备DTO + public VariableTableChangedEventArgs(DataChangeType changeType, VariableTableDto variableTable, DeviceDto device) { ChangeType = changeType; - VariableTableId = variableTableId; - VariableTableName = variableTableName; - DeviceId = deviceId; + VariableTable = variableTable; + Device = device; ChangeTime = DateTime.Now; } } diff --git a/DMS.Application/Services/DataCenterService.cs b/DMS.Application/Services/DataCenterService.cs index 02a99a1..8129f75 100644 --- a/DMS.Application/Services/DataCenterService.cs +++ b/DMS.Application/Services/DataCenterService.cs @@ -147,7 +147,7 @@ public class DataCenterService : IDataCenterService { if (Devices.TryAdd(deviceDto.Id, deviceDto)) { - OnDeviceChanged(new DeviceChangedEventArgs(DataChangeType.Added, deviceDto.Id, deviceDto.Name)); + OnDeviceChanged(new DeviceChangedEventArgs(DataChangeType.Added, deviceDto)); } } @@ -157,7 +157,7 @@ public class DataCenterService : IDataCenterService public void UpdateDeviceInMemory(DeviceDto deviceDto) { Devices.AddOrUpdate(deviceDto.Id, deviceDto, (key, oldValue) => deviceDto); - OnDeviceChanged(new DeviceChangedEventArgs(DataChangeType.Updated, deviceDto.Id, deviceDto.Name)); + OnDeviceChanged(new DeviceChangedEventArgs(DataChangeType.Updated, deviceDto)); } /// @@ -167,7 +167,7 @@ public class DataCenterService : IDataCenterService { if (Devices.TryRemove(deviceId, out var deviceDto)) { - OnDeviceChanged(new DeviceChangedEventArgs(DataChangeType.Deleted, deviceId, deviceDto?.Name ?? "")); + OnDeviceChanged(new DeviceChangedEventArgs(DataChangeType.Deleted, deviceDto)); } } @@ -220,13 +220,18 @@ public class DataCenterService : IDataCenterService /// public void AddVariableTableToMemory(VariableTableDto variableTableDto) { + DeviceDto deviceDto = null; + if (Devices.TryGetValue(variableTableDto.DeviceId, out var device)) + { + deviceDto = device; + } + if (VariableTables.TryAdd(variableTableDto.Id, variableTableDto)) { OnVariableTableChanged(new VariableTableChangedEventArgs( DataChangeType.Added, - variableTableDto.Id, - variableTableDto.Name, - variableTableDto.DeviceId)); + variableTableDto, + deviceDto)); } } @@ -235,12 +240,17 @@ public class DataCenterService : IDataCenterService /// public void UpdateVariableTableInMemory(VariableTableDto variableTableDto) { + DeviceDto deviceDto = null; + if (Devices.TryGetValue(variableTableDto.DeviceId, out var device)) + { + deviceDto = device; + } + VariableTables.AddOrUpdate(variableTableDto.Id, variableTableDto, (key, oldValue) => variableTableDto); OnVariableTableChanged(new VariableTableChangedEventArgs( DataChangeType.Updated, - variableTableDto.Id, - variableTableDto.Name, - variableTableDto.DeviceId)); + variableTableDto, + deviceDto)); } /// @@ -250,11 +260,16 @@ public class DataCenterService : IDataCenterService { if (VariableTables.TryRemove(variableTableId, out var variableTableDto)) { + DeviceDto deviceDto = null; + if (variableTableDto != null && Devices.TryGetValue(variableTableDto.DeviceId, out var device)) + { + deviceDto = device; + } + OnVariableTableChanged(new VariableTableChangedEventArgs( DataChangeType.Deleted, - variableTableId, - variableTableDto?.Name ?? "", - variableTableDto?.DeviceId ?? 0)); + variableTableDto, + deviceDto)); } } @@ -347,13 +362,18 @@ public class DataCenterService : IDataCenterService /// public void AddVariableToMemory(VariableDto variableDto) { + VariableTableDto variableTableDto = null; + if (VariableTables.TryGetValue(variableDto.VariableTableId, out var variableTable)) + { + variableTableDto = variableTable; + } + if (Variables.TryAdd(variableDto.Id, variableDto)) { OnVariableChanged(new VariableChangedEventArgs( DataChangeType.Added, - variableDto.Id, - variableDto.Name, - variableDto.VariableTableId)); + variableDto, + variableTableDto)); } } @@ -362,12 +382,17 @@ public class DataCenterService : IDataCenterService /// public void UpdateVariableInMemory(VariableDto variableDto) { + VariableTableDto variableTableDto = null; + if (VariableTables.TryGetValue(variableDto.VariableTableId, out var variableTable)) + { + variableTableDto = variableTable; + } + Variables.AddOrUpdate(variableDto.Id, variableDto, (key, oldValue) => variableDto); OnVariableChanged(new VariableChangedEventArgs( DataChangeType.Updated, - variableDto.Id, - variableDto.Name, - variableDto.VariableTableId)); + variableDto, + variableTableDto)); } /// @@ -377,11 +402,16 @@ public class DataCenterService : IDataCenterService { if (Variables.TryRemove(variableId, out var variableDto)) { + VariableTableDto variableTableDto = null; + if (variableDto != null && VariableTables.TryGetValue(variableDto.VariableTableId, out var variableTable)) + { + variableTableDto = variableTable; + } + OnVariableChanged(new VariableChangedEventArgs( DataChangeType.Deleted, - variableId, - variableDto?.Name ?? "", - variableDto?.VariableTableId ?? 0)); + variableDto, + variableTableDto)); } } @@ -392,13 +422,18 @@ public class DataCenterService : IDataCenterService { foreach (var variable in variables) { + VariableTableDto variableTableDto = null; + if (VariableTables.TryGetValue(variable.VariableTableId, out var variableTable)) + { + variableTableDto = variableTable; + } + if (Variables.TryAdd(variable.Id, variable)) { OnVariableChanged(new VariableChangedEventArgs( DataChangeType.Added, - variable.Id, - variable.Name, - variable.VariableTableId)); + variable, + variableTableDto)); } } OnDataChanged(new DataChangedEventArgs(DataChangeType.BatchOperation)); @@ -411,12 +446,17 @@ public class DataCenterService : IDataCenterService { foreach (var variable in variables) { + VariableTableDto variableTableDto = null; + if (VariableTables.TryGetValue(variable.VariableTableId, out var variableTable)) + { + variableTableDto = variableTable; + } + Variables.AddOrUpdate(variable.Id, variable, (key, oldValue) => variable); OnVariableChanged(new VariableChangedEventArgs( DataChangeType.Updated, - variable.Id, - variable.Name, - variable.VariableTableId)); + variable, + variableTableDto)); } OnDataChanged(new DataChangedEventArgs(DataChangeType.BatchOperation)); } @@ -430,11 +470,16 @@ public class DataCenterService : IDataCenterService { if (Variables.TryRemove(variableId, out var variableDto)) { + VariableTableDto variableTableDto = null; + if (variableDto != null && VariableTables.TryGetValue(variableDto.VariableTableId, out var variableTable)) + { + variableTableDto = variableTable; + } + OnVariableChanged(new VariableChangedEventArgs( DataChangeType.Deleted, - variableId, - variableDto?.Name ?? "", - variableDto?.VariableTableId ?? 0)); + variableDto, + variableTableDto)); } } OnDataChanged(new DataChangedEventArgs(DataChangeType.BatchOperation)); @@ -551,15 +596,20 @@ public class DataCenterService : IDataCenterService // 触发数据加载完成事件 OnDataLoadCompleted(new DataLoadCompletedEventArgs( - deviceDtos.Count, - variableTableDtos.Count, - variableDtos.Count, + deviceDtos, + variableTableDtos, + variableDtos, true)); } catch (Exception ex) { // 触发数据加载失败事件 - OnDataLoadCompleted(new DataLoadCompletedEventArgs(0, 0, 0, false, ex.Message)); + OnDataLoadCompleted(new DataLoadCompletedEventArgs( + new List(), + new List(), + new List(), + false, + ex.Message)); throw new ApplicationException($"加载所有数据到内存时发生错误,错误信息:{ex.Message}", ex); } } diff --git a/DMS.Infrastructure.UnitTests/DataCenterServiceTests.cs b/DMS.Infrastructure.UnitTests/DataCenterServiceTests.cs index a767bca..0c29b6d 100644 --- a/DMS.Infrastructure.UnitTests/DataCenterServiceTests.cs +++ b/DMS.Infrastructure.UnitTests/DataCenterServiceTests.cs @@ -17,7 +17,6 @@ namespace DMS.Infrastructure.UnitTests { // Arrange var mockRepositoryManager = new Mock(); - var mockMapper = new Mock(); var mockDeviceAppService = new Mock(); var mockVariableTableAppService = new Mock(); var mockVariableAppService = new Mock(); @@ -25,7 +24,7 @@ namespace DMS.Infrastructure.UnitTests // Act var dataCenterService = new DataCenterService( mockRepositoryManager.Object, - mockMapper.Object, + null, // 在测试中不会使用到mapper mockDeviceAppService.Object, mockVariableTableAppService.Object, mockVariableAppService.Object); @@ -39,7 +38,6 @@ namespace DMS.Infrastructure.UnitTests { // Arrange var mockRepositoryManager = new Mock(); - var mockMapper = new Mock(); var mockDeviceAppService = new Mock(); var mockVariableTableAppService = new Mock(); var mockVariableAppService = new Mock(); @@ -47,7 +45,7 @@ namespace DMS.Infrastructure.UnitTests // Act var dataCenterService = new DataCenterService( mockRepositoryManager.Object, - mockMapper.Object, + null, // 在测试中不会使用到mapper mockDeviceAppService.Object, mockVariableTableAppService.Object, mockVariableAppService.Object); @@ -169,8 +167,7 @@ namespace DMS.Infrastructure.UnitTests // Assert Assert.NotNull(eventArgs); Assert.Equal(DataChangeType.Added, eventArgs.ChangeType); - Assert.Equal(1, eventArgs.DeviceId); - Assert.Equal("Test Device", eventArgs.DeviceName); + Assert.Equal(deviceDto, eventArgs.Device); } } } \ No newline at end of file