diff --git a/DMS.Infrastructure/Entities/DbTriggerVariable.cs b/DMS.Infrastructure/Entities/DbTriggerVariable.cs index 03515fc..515d819 100644 --- a/DMS.Infrastructure/Entities/DbTriggerVariable.cs +++ b/DMS.Infrastructure/Entities/DbTriggerVariable.cs @@ -5,6 +5,7 @@ namespace DMS.Infrastructure.Entities; /// /// 数据库实体:表示触发器与变量的多对多关联关系。 /// +[SugarTable("TriggerVariables")] public class DbTriggerVariable { [SugarColumn(IsPrimaryKey = true, IsIdentity = true)] diff --git a/DMS.WPF/ItemViewModel/TriggerItem.cs b/DMS.WPF/ItemViewModel/TriggerItem.cs index f567735..d63c025 100644 --- a/DMS.WPF/ItemViewModel/TriggerItem.cs +++ b/DMS.WPF/ItemViewModel/TriggerItem.cs @@ -73,6 +73,6 @@ namespace DMS.WPF.ItemViewModel /// /// 关联的变量 ID 列表 /// - public ObservableCollection VariableIds { get; } = new ObservableCollection(); + public ObservableCollection Variables { get; } = new ObservableCollection(); } } \ No newline at end of file diff --git a/DMS.WPF/ItemViewModel/VariableItem.cs b/DMS.WPF/ItemViewModel/VariableItem.cs index 2b233ef..06bd39b 100644 --- a/DMS.WPF/ItemViewModel/VariableItem.cs +++ b/DMS.WPF/ItemViewModel/VariableItem.cs @@ -107,6 +107,12 @@ public partial class VariableItem : ObservableObject /// [ObservableProperty] private List _mqttAliases=new List(); + /// + /// 获取或设置与此变量关联的触发器列表。 + /// 一个变量可以有多个触发器。 + /// + [ObservableProperty] + private List _triggers=new List(); /// /// 获取或设置变量的信号类型 (如:AI, DI, AO, DO)。 diff --git a/DMS.WPF/Profiles/MappingProfile.cs b/DMS.WPF/Profiles/MappingProfile.cs index c485556..cd79193 100644 --- a/DMS.WPF/Profiles/MappingProfile.cs +++ b/DMS.WPF/Profiles/MappingProfile.cs @@ -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() .ForMember(dest => dest.MqttAliases, opt => opt.Ignore()) + .ForMember(dest => dest.Triggers, opt => opt.Ignore()) .ReverseMap(); CreateMap() .ReverseMap(); @@ -39,11 +40,12 @@ namespace DMS.WPF.Profiles .ReverseMap(); CreateMap().ReverseMap(); CreateMap().ReverseMap(); - + // 添加触发器相关映射 - CreateMap() - .ForMember(dest => dest.Variables, opt => opt.Ignore()) // 忽略Variables属性,因为这个通常在业务逻辑中处理 - .ReverseMap(); + CreateMap() + .ForMember(dest => dest.Variables, opt => opt.Ignore()); + CreateMap() + .ForMember(dest => dest.Variables, opt => opt.Ignore()); } } } diff --git a/DMS.WPF/Services/TriggerDataService.cs b/DMS.WPF/Services/TriggerDataService.cs index 813311b..921883b 100644 --- a/DMS.WPF/Services/TriggerDataService.cs +++ b/DMS.WPF/Services/TriggerDataService.cs @@ -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(triggerDto)); + TriggerItem triggerItem = _mapper.Map(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); } } diff --git a/DMS.WPF/ViewModels/TriggerDetailViewModel.cs b/DMS.WPF/ViewModels/TriggerDetailViewModel.cs index 9cf89b7..d0b7242 100644 --- a/DMS.WPF/ViewModels/TriggerDetailViewModel.cs +++ b/DMS.WPF/ViewModels/TriggerDetailViewModel.cs @@ -33,11 +33,6 @@ namespace DMS.WPF.ViewModels [ObservableProperty] private TriggerItem _currentTrigger; - /// - /// 与当前触发器关联的变量数据集合。 - /// - [ObservableProperty] - private ObservableCollection _associatedVariables; [ObservableProperty] private IList _selectedVariables = new ArrayList(); @@ -166,15 +161,6 @@ namespace DMS.WPF.ViewModels { CurrentTrigger = triggerItem; - // 初始化关联变量列表 - 从VariableIds创建VariableItems列表 - AssociatedVariables = new ObservableCollection(); - foreach (var variableId in CurrentTrigger.VariableIds) - { - if (_dataStorageService.Variables.TryGetValue(variableId, out var variableItem)) - { - AssociatedVariables.Add(variableItem); - } - } } return Task.CompletedTask; diff --git a/DMS.WPF/ViewModels/VariableTableViewModel.cs b/DMS.WPF/ViewModels/VariableTableViewModel.cs index 28d7d4e..1d4d48b 100644 --- a/DMS.WPF/ViewModels/VariableTableViewModel.cs +++ b/DMS.WPF/ViewModels/VariableTableViewModel.cs @@ -532,8 +532,7 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable } // 批量更新数据库中的变量数据 - var variableDtos = _mapper.Map>(validVariables); - var result = await _variableManagementService.UpdateVariablesAsync(variableDtos); + var result = await _variableManagementService.UpdateVariablesAsync(_mapper.Map>(validVariables)); if (result > 0) { diff --git a/DMS.WPF/Views/TriggerDetailView.xaml b/DMS.WPF/Views/TriggerDetailView.xaml index 29fda90..e89c903 100644 --- a/DMS.WPF/Views/TriggerDetailView.xaml +++ b/DMS.WPF/Views/TriggerDetailView.xaml @@ -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">