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