重构触发器与变量关联关系的实现
This commit is contained in:
@@ -5,6 +5,7 @@ namespace DMS.Infrastructure.Entities;
|
||||
/// <summary>
|
||||
/// 数据库实体:表示触发器与变量的多对多关联关系。
|
||||
/// </summary>
|
||||
[SugarTable("TriggerVariables")]
|
||||
public class DbTriggerVariable
|
||||
{
|
||||
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
||||
|
||||
@@ -73,6 +73,6 @@ namespace DMS.WPF.ItemViewModel
|
||||
/// <summary>
|
||||
/// 关联的变量 ID 列表
|
||||
/// </summary>
|
||||
public ObservableCollection<int> VariableIds { get; } = new ObservableCollection<int>();
|
||||
public ObservableCollection<VariableItem> Variables { get; } = new ObservableCollection<VariableItem>();
|
||||
}
|
||||
}
|
||||
@@ -107,6 +107,12 @@ public partial class VariableItem : ObservableObject
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
private List<MqttAliasItem> _mqttAliases=new List<MqttAliasItem>();
|
||||
/// <summary>
|
||||
/// 获取或设置与此变量关联的触发器列表。
|
||||
/// 一个变量可以有多个触发器。
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
private List<TriggerItem> _triggers=new List<TriggerItem>();
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置变量的信号类型 (如:AI, DI, AO, DO)。
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
using AutoMapper;
|
||||
using DMS.Application.DTOs;
|
||||
using DMS.Core.Models;
|
||||
using DMS.Core.Models.Triggers;
|
||||
using DMS.Infrastructure.Models;
|
||||
using DMS.WPF.ItemViewModel;
|
||||
using DMS.WPF.ItemViewModel;
|
||||
|
||||
namespace DMS.WPF.Profiles
|
||||
{
|
||||
@@ -15,6 +15,7 @@ namespace DMS.WPF.Profiles
|
||||
.ReverseMap();
|
||||
CreateMap<Variable, VariableItem>()
|
||||
.ForMember(dest => dest.MqttAliases, opt => opt.Ignore())
|
||||
.ForMember(dest => dest.Triggers, opt => opt.Ignore())
|
||||
.ReverseMap();
|
||||
CreateMap<VariableTable, VariableTableItem>()
|
||||
.ReverseMap();
|
||||
@@ -41,9 +42,10 @@ namespace DMS.WPF.Profiles
|
||||
CreateMap<TriggerItem, TriggerItem>().ReverseMap();
|
||||
|
||||
// 添加触发器相关映射
|
||||
CreateMap<TriggerItem, Core.Models.Triggers.Trigger>()
|
||||
.ForMember(dest => dest.Variables, opt => opt.Ignore()) // 忽略Variables属性,因为这个通常在业务逻辑中处理
|
||||
.ReverseMap();
|
||||
CreateMap<TriggerItem, Trigger>()
|
||||
.ForMember(dest => dest.Variables, opt => opt.Ignore());
|
||||
CreateMap<Trigger, TriggerItem>()
|
||||
.ForMember(dest => dest.Variables, opt => opt.Ignore());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,9 +61,19 @@ public class TriggerDataService : ITriggerDataService
|
||||
public void LoadAllTriggers()
|
||||
{
|
||||
_dataStorageService.Triggers.Clear();
|
||||
foreach (var triggerDto in _appStorageService.Triggers.Values)
|
||||
foreach (var trigger in _appStorageService.Triggers.Values)
|
||||
{
|
||||
_dataStorageService.Triggers.Add(triggerDto.Id, _mapper.Map<TriggerItem>(triggerDto));
|
||||
TriggerItem triggerItem = _mapper.Map<TriggerItem>(trigger);
|
||||
foreach (var variable in trigger.Variables)
|
||||
{
|
||||
if (_dataStorageService.Variables.TryGetValue(variable.Id,out var variableItem))
|
||||
{
|
||||
variableItem.Triggers.Add(triggerItem);
|
||||
triggerItem.Variables.Add(variableItem);
|
||||
}
|
||||
}
|
||||
|
||||
_dataStorageService.Triggers.Add(trigger.Id, triggerItem);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -33,11 +33,6 @@ namespace DMS.WPF.ViewModels
|
||||
[ObservableProperty]
|
||||
private TriggerItem _currentTrigger;
|
||||
|
||||
/// <summary>
|
||||
/// 与当前触发器关联的变量数据集合。
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
private ObservableCollection<VariableItem> _associatedVariables;
|
||||
|
||||
[ObservableProperty]
|
||||
private IList _selectedVariables = new ArrayList();
|
||||
@@ -166,15 +161,6 @@ namespace DMS.WPF.ViewModels
|
||||
{
|
||||
CurrentTrigger = triggerItem;
|
||||
|
||||
// 初始化关联变量列表 - 从VariableIds创建VariableItems列表
|
||||
AssociatedVariables = new ObservableCollection<VariableItem>();
|
||||
foreach (var variableId in CurrentTrigger.VariableIds)
|
||||
{
|
||||
if (_dataStorageService.Variables.TryGetValue(variableId, out var variableItem))
|
||||
{
|
||||
AssociatedVariables.Add(variableItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Task.CompletedTask;
|
||||
|
||||
@@ -532,8 +532,7 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
|
||||
}
|
||||
|
||||
// 批量更新数据库中的变量数据
|
||||
var variableDtos = _mapper.Map<List<Variable>>(validVariables);
|
||||
var result = await _variableManagementService.UpdateVariablesAsync(variableDtos);
|
||||
var result = await _variableManagementService.UpdateVariablesAsync(_mapper.Map<List<Variable>>(validVariables));
|
||||
|
||||
if (result > 0)
|
||||
{
|
||||
|
||||
@@ -9,7 +9,8 @@
|
||||
xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
|
||||
xmlns:converters="clr-namespace:DMS.WPF.Converters"
|
||||
xmlns:valueConverts="clr-namespace:DMS.WPF.ValueConverts"
|
||||
xmlns:triggers="clr-namespace:DMS.Core.Models.Triggers;assembly=DMS.Core"
|
||||
xmlns:vm="clr-namespace:DMS.WPF.ViewModels"
|
||||
d:DataContext="{d:DesignInstance vm:TriggerDetailViewModel}"
|
||||
d:DesignHeight="450"
|
||||
d:DesignWidth="800"
|
||||
mc:Ignorable="d">
|
||||
@@ -377,7 +378,7 @@
|
||||
CanUserAddRows="False"
|
||||
CanUserDeleteRows="False"
|
||||
IsReadOnly="True"
|
||||
ItemsSource="{Binding AssociatedVariables}"
|
||||
ItemsSource="{Binding CurrentTrigger.Variables}"
|
||||
SelectionMode="Extended">
|
||||
|
||||
<i:Interaction.Behaviors>
|
||||
|
||||
Reference in New Issue
Block a user