修复变量值不更新的问题

This commit is contained in:
2025-09-09 15:57:04 +08:00
parent 1dad2a0d2f
commit 7fad87fff5
8 changed files with 44 additions and 17 deletions

View File

@@ -1,7 +1,7 @@
using DMS.Application.DTOs; using DMS.Application.DTOs;
using DMS.Application.DTOs.Events; using DMS.Application.DTOs.Events;
namespace DMS.Application.Services; namespace DMS.Application.Interfaces;
public interface ILogManagementService public interface ILogManagementService
{ {

View File

@@ -1,6 +1,6 @@
using DMS.Application.DTOs; using DMS.Application.DTOs;
namespace DMS.Application.Services; namespace DMS.Application.Interfaces;
public interface IMenuManagementService public interface IMenuManagementService
{ {

View File

@@ -1,6 +1,6 @@
using DMS.Application.DTOs; using DMS.Application.DTOs;
namespace DMS.Application.Services; namespace DMS.Application.Interfaces;
public interface IMqttManagementService public interface IMqttManagementService
{ {

View File

@@ -1,6 +1,7 @@
using System.Collections.Concurrent; using System.Collections.Concurrent;
using DMS.Application.DTOs; using DMS.Application.DTOs;
using DMS.Application.DTOs.Events; using DMS.Application.DTOs.Events;
using DMS.Core.Models;
namespace DMS.Application.Services; namespace DMS.Application.Services;
@@ -56,8 +57,15 @@ public interface IVariableManagementService
/// </summary> /// </summary>
void RemoveVariableFromMemory(int variableId, ConcurrentDictionary<int, VariableTableDto> variableTables); void RemoveVariableFromMemory(int variableId, ConcurrentDictionary<int, VariableTableDto> variableTables);
void VariableValueChanged(VariableValueChangedEventArgs eventArgs);
/// <summary> /// <summary>
/// 当变量数据发生变化时触发 /// 当变量数据发生变化时触发
/// </summary> /// </summary>
event EventHandler<VariableChangedEventArgs> OnVariableChanged; event EventHandler<VariableChangedEventArgs> OnVariableChanged;
/// <summary>
/// 当变量数据发生变化时触发
/// </summary>
event EventHandler<VariableValueChangedEventArgs> OnVariableValueChanged;
} }

View File

@@ -25,7 +25,13 @@ public class VariableManagementService : IVariableManagementService
/// </summary> /// </summary>
public event EventHandler<VariableChangedEventArgs> OnVariableChanged; public event EventHandler<VariableChangedEventArgs> OnVariableChanged;
public VariableManagementService(IVariableAppService variableAppService,IAppDataStorageService appDataStorageService) /// <summary>
/// 当变量数据发生变化时触发
/// </summary>
public event EventHandler<VariableValueChangedEventArgs> OnVariableValueChanged;
public VariableManagementService(IVariableAppService variableAppService,
IAppDataStorageService appDataStorageService)
{ {
_variableAppService = variableAppService; _variableAppService = variableAppService;
_appDataStorageService = appDataStorageService; _appDataStorageService = appDataStorageService;
@@ -102,14 +108,16 @@ public class VariableManagementService : IVariableManagementService
if (_appDataStorageService.Variables.TryAdd(variableDto.Id, variableDto)) if (_appDataStorageService.Variables.TryAdd(variableDto.Id, variableDto))
{ {
OnVariableChanged?.Invoke(this,new VariableChangedEventArgs(DataChangeType.Added, variableDto, variableTableDto)); OnVariableChanged?.Invoke(
this, new VariableChangedEventArgs(DataChangeType.Added, variableDto, variableTableDto));
} }
} }
/// <summary> /// <summary>
/// 在内存中更新变量 /// 在内存中更新变量
/// </summary> /// </summary>
public void UpdateVariableInMemory(VariableDto variableDto, ConcurrentDictionary<int, VariableTableDto> variableTables) public void UpdateVariableInMemory(VariableDto variableDto,
ConcurrentDictionary<int, VariableTableDto> variableTables)
{ {
VariableTableDto variableTableDto = null; VariableTableDto variableTableDto = null;
if (variableTables.TryGetValue(variableDto.VariableTableId, out var variableTable)) if (variableTables.TryGetValue(variableDto.VariableTableId, out var variableTable))
@@ -118,7 +126,8 @@ public class VariableManagementService : IVariableManagementService
} }
_appDataStorageService.Variables.AddOrUpdate(variableDto.Id, variableDto, (key, oldValue) => variableDto); _appDataStorageService.Variables.AddOrUpdate(variableDto.Id, variableDto, (key, oldValue) => variableDto);
OnVariableChanged?.Invoke(this,new VariableChangedEventArgs(DataChangeType.Updated, variableDto, variableTableDto)); OnVariableChanged?.Invoke(
this, new VariableChangedEventArgs(DataChangeType.Updated, variableDto, variableTableDto));
} }
/// <summary> /// <summary>
@@ -135,8 +144,13 @@ public class VariableManagementService : IVariableManagementService
variableTable.Variables.Remove(variableDto); variableTable.Variables.Remove(variableDto);
} }
OnVariableChanged?.Invoke(this,new VariableChangedEventArgs(DataChangeType.Deleted, variableDto, variableTableDto)); OnVariableChanged?.Invoke(
this, new VariableChangedEventArgs(DataChangeType.Deleted, variableDto, variableTableDto));
} }
} }
public void VariableValueChanged(VariableValueChangedEventArgs eventArgs)
{
OnVariableValueChanged?.Invoke(this, eventArgs);
}
} }

View File

@@ -300,6 +300,8 @@ namespace DMS.Infrastructure.Services
variable.DisplayValue = newValue; variable.DisplayValue = newValue;
variable.UpdatedAt = DateTime.Now; variable.UpdatedAt = DateTime.Now;
_logger.LogDebug($"节点:{variable.OpcUaNodeId}值发生了变化:{newValue}");
// 触发变量值变更事件 // 触发变量值变更事件
var eventArgs = new VariableValueChangedEventArgs( var eventArgs = new VariableValueChangedEventArgs(
variable.Id, variable.Id,
@@ -308,7 +310,7 @@ namespace DMS.Infrastructure.Services
newValue, newValue,
variable.UpdatedAt); variable.UpdatedAt);
// _appDataCenterService.OnVariableValueChanged( eventArgs); _appDataCenterService.VariableManagementService.VariableValueChanged( eventArgs);
// 推送到数据处理队列 // 推送到数据处理队列
await _dataProcessingService.EnqueueAsync(variable); await _dataProcessingService.EnqueueAsync(variable);

View File

@@ -37,7 +37,7 @@ public class DataEventService : IDataEventService
// 监听变量值变更事件 // 监听变量值变更事件
_appDataCenterService.VariableManagementService.OnVariableChanged += OnVariableValueChanged; _appDataCenterService.VariableManagementService.OnVariableValueChanged += OnVariableValueChanged;
_appDataCenterService.DataLoaderService.OnLoadDataCompleted += OnLoadDataCompleted; _appDataCenterService.DataLoaderService.OnLoadDataCompleted += OnLoadDataCompleted;
// 监听日志变更事件 // 监听日志变更事件
// _appDataCenterService.OnLogChanged += _logDataService.OnNlogChanged; // _appDataCenterService.OnLogChanged += _logDataService.OnNlogChanged;
@@ -60,18 +60,18 @@ public class DataEventService : IDataEventService
/// <summary> /// <summary>
/// 处理变量值变更事件。 /// 处理变量值变更事件。
/// </summary> /// </summary>
private void OnVariableValueChanged(object? sender, VariableChangedEventArgs e) private void OnVariableValueChanged(object? sender, VariableValueChangedEventArgs e)
{ {
// 在UI线程上更新变量值 // 在UI线程上更新变量值
App.Current.Dispatcher.BeginInvoke(new Action(() => App.Current.Dispatcher.BeginInvoke(new Action(() =>
{ {
// 查找并更新对应的变量 // 查找并更新对应的变量
var variableToUpdate = _dataStorageService.Variables.FirstOrDefault(v => v.Id == e.Variable.Id); var variableToUpdate = _dataStorageService.Variables.FirstOrDefault(v => v.Id == e.VariableId);
if (variableToUpdate != null) if (variableToUpdate != null)
{ {
variableToUpdate.DataValue = e.Variable.DataValue; variableToUpdate.DataValue = e.NewValue;
variableToUpdate.DisplayValue = e.Variable.DisplayValue; variableToUpdate.DisplayValue = e.NewValue;
variableToUpdate.UpdatedAt = e.Variable.UpdatedAt; variableToUpdate.UpdatedAt = e.UpdateTime;
} }
})); }));
} }

View File

@@ -32,9 +32,12 @@ public class VariableTableDataService : IVariableTableDataService
public void LoadAllVariableTables() public void LoadAllVariableTables()
{ {
foreach (var variableTable in _dataStorageService.VariableTables) foreach (var device in _dataStorageService.Devices)
{ {
_dataStorageService.VariableTables.Add(variableTable); foreach (var variableTable in device.VariableTables)
{
_dataStorageService.VariableTables.Add(variableTable);
}
} }
} }