修改使用TriggerDataService模式
This commit is contained in:
@@ -17,7 +17,7 @@ namespace DMS.WPF.ViewModels.Dialogs
|
||||
/// <summary>
|
||||
/// 触发器编辑器视图模型
|
||||
/// </summary>
|
||||
public partial class TriggerDialogViewModel : DialogViewModelBase<TriggerDefinitionDto?>
|
||||
public partial class TriggerDialogViewModel : DialogViewModelBase<TriggerItemViewModel?>
|
||||
{
|
||||
private readonly IVariableAppService _variableAppService; // To populate variable selection dropdown
|
||||
private readonly IDialogService _dialogService;
|
||||
@@ -28,7 +28,7 @@ namespace DMS.WPF.ViewModels.Dialogs
|
||||
private string _searchText = "";
|
||||
|
||||
[ObservableProperty]
|
||||
private TriggerDefinitionDto _trigger = new();
|
||||
private TriggerItemViewModel _trigger = new();
|
||||
|
||||
[ObservableProperty]
|
||||
private List<VariableItemViewModel> _availableVariables = new();
|
||||
@@ -129,9 +129,9 @@ namespace DMS.WPF.ViewModels.Dialogs
|
||||
/// <param name="parameter">待编辑的触发器 DTO</param>
|
||||
public async Task OnInitializedAsync(object? parameter)
|
||||
{
|
||||
if (parameter is TriggerDefinitionDto triggerDto)
|
||||
if (parameter is TriggerItemViewModel triggerItemViewModel)
|
||||
{
|
||||
Trigger = triggerDto;
|
||||
Trigger = triggerItemViewModel;
|
||||
Title = Trigger.Id == default(int) ? "新建触发器" : "编辑触发器";
|
||||
PrimaryButText = "保存";
|
||||
|
||||
@@ -217,7 +217,10 @@ namespace DMS.WPF.ViewModels.Dialogs
|
||||
}
|
||||
|
||||
// 设置选中的变量ID
|
||||
Trigger.VariableIds = SelectedVariables.Select(v => v.Id).ToList();
|
||||
foreach (var selectedVariable in SelectedVariables)
|
||||
{
|
||||
Trigger.VariableIds.Add(selectedVariable.Id);
|
||||
}
|
||||
|
||||
// Validate condition-specific fields
|
||||
switch (Trigger.Condition)
|
||||
|
||||
96
DMS.WPF/ViewModels/Items/TriggerItemViewModel.cs
Normal file
96
DMS.WPF/ViewModels/Items/TriggerItemViewModel.cs
Normal file
@@ -0,0 +1,96 @@
|
||||
using System.Collections.ObjectModel;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using DMS.Application.DTOs;
|
||||
using DMS.Core.Models.Triggers;
|
||||
|
||||
namespace DMS.WPF.ViewModels.Items
|
||||
{
|
||||
/// <summary>
|
||||
/// 触发器项视图模型
|
||||
/// </summary>
|
||||
public partial class TriggerItemViewModel : ObservableObject
|
||||
{
|
||||
/// <summary>
|
||||
/// 触发器唯一标识符
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
private int _id;
|
||||
|
||||
/// <summary>
|
||||
/// 触发器描述
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
private string _description = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 触发器是否处于激活状态
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
private bool _isActive;
|
||||
|
||||
/// <summary>
|
||||
/// 触发条件类型
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
private ConditionType _condition;
|
||||
|
||||
/// <summary>
|
||||
/// 阈值 (用于 GreaterThan, LessThan, EqualTo, NotEqualTo)
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
private double? _threshold;
|
||||
|
||||
/// <summary>
|
||||
/// 下限 (用于 InRange, OutOfRange)
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
private double? _lowerBound;
|
||||
|
||||
/// <summary>
|
||||
/// 上限 (用于 InRange, OutOfRange)
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
private double? _upperBound;
|
||||
|
||||
/// <summary>
|
||||
/// 动作类型
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
private ActionType _action;
|
||||
|
||||
/// <summary>
|
||||
/// 动作配置 JSON 字符串
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
private string _actionConfigurationJson = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 抑制持续时间
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
private TimeSpan? _suppressionDuration;
|
||||
|
||||
/// <summary>
|
||||
/// 上次触发的时间
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
private DateTime? _lastTriggeredAt;
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
private DateTime _createdAt;
|
||||
|
||||
/// <summary>
|
||||
/// 最后更新时间
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
private DateTime _updatedAt;
|
||||
|
||||
/// <summary>
|
||||
/// 关联的变量 ID 列表
|
||||
/// </summary>
|
||||
public ObservableCollection<int> VariableIds { get; } = new ObservableCollection<int>();
|
||||
}
|
||||
}
|
||||
@@ -1,59 +1,47 @@
|
||||
using System;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using DMS.Application.DTOs;
|
||||
using DMS.Application.Services.Triggers;
|
||||
using DMS.WPF.Interfaces;
|
||||
using DMS.WPF.Services;
|
||||
using DMS.WPF.ViewModels.Dialogs;
|
||||
using DMS.WPF.ViewModels.Items;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using ObservableCollections;
|
||||
|
||||
namespace DMS.WPF.ViewModels.Triggers
|
||||
namespace DMS.WPF.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// 触发器管理视图模型
|
||||
/// </summary>
|
||||
public partial class TriggersViewModel : ViewModelBase
|
||||
{
|
||||
private readonly ITriggerManagementService _triggerManagementService;
|
||||
private readonly ITriggerDataService _triggerDataService;
|
||||
private readonly IDataStorageService _dataStorageService;
|
||||
private readonly IDialogService _dialogService;
|
||||
private readonly INotificationService _notificationService;
|
||||
|
||||
[ObservableProperty]
|
||||
private ObservableCollection<TriggerDefinitionDto> _triggers = new();
|
||||
private ObservableDictionary<int, TriggerItemViewModel> _triggers ;
|
||||
|
||||
[ObservableProperty]
|
||||
private TriggerDefinitionDto? _selectedTrigger;
|
||||
private TriggerItemViewModel? _selectedTrigger;
|
||||
|
||||
public TriggersViewModel(
|
||||
ITriggerManagementService triggerManagementService,
|
||||
ITriggerDataService triggerDataService,
|
||||
IDataStorageService dataStorageService,
|
||||
IDialogService dialogService,
|
||||
INotificationService notificationService)
|
||||
{
|
||||
_triggerManagementService = triggerManagementService ?? throw new ArgumentNullException(nameof(triggerManagementService));
|
||||
_triggerDataService = triggerDataService ?? throw new ArgumentNullException(nameof(triggerDataService));
|
||||
_dataStorageService = dataStorageService ?? throw new ArgumentNullException(nameof(dataStorageService));
|
||||
_dialogService = dialogService ?? throw new ArgumentNullException(nameof(dialogService));
|
||||
_notificationService = notificationService ?? throw new ArgumentNullException(nameof(notificationService));
|
||||
|
||||
// 初始化时加载触发器数据
|
||||
Triggers=_dataStorageService.Triggers;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 加载所有触发器
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
private async Task LoadTriggersAsync()
|
||||
{
|
||||
try
|
||||
{
|
||||
var triggerList = await _triggerManagementService.GetAllTriggersAsync();
|
||||
Triggers = new ObservableCollection<TriggerDefinitionDto>(triggerList);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_notificationService.ShowError($"加载触发器失败: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 添加新触发器
|
||||
@@ -61,14 +49,14 @@ namespace DMS.WPF.ViewModels.Triggers
|
||||
[RelayCommand]
|
||||
private async Task AddTriggerAsync()
|
||||
{
|
||||
var newTrigger = new TriggerDefinitionDto
|
||||
{
|
||||
IsActive = true,
|
||||
Condition = Core.Models.Triggers.ConditionType.GreaterThan,
|
||||
Action = Core.Models.Triggers.ActionType.SendEmail,
|
||||
Description = "新建触发器",
|
||||
CreatedAt = DateTime.UtcNow,
|
||||
UpdatedAt = DateTime.UtcNow
|
||||
var newTrigger = new TriggerItemViewModel()
|
||||
{
|
||||
IsActive = true,
|
||||
Condition = Core.Models.Triggers.ConditionType.GreaterThan,
|
||||
Action = Core.Models.Triggers.ActionType.SendEmail,
|
||||
Description = "新建触发器",
|
||||
CreatedAt = DateTime.UtcNow,
|
||||
UpdatedAt = DateTime.UtcNow
|
||||
};
|
||||
|
||||
TriggerDialogViewModel viewModel = App.Current.Services.GetRequiredService<TriggerDialogViewModel>();
|
||||
@@ -79,10 +67,18 @@ namespace DMS.WPF.ViewModels.Triggers
|
||||
{
|
||||
try
|
||||
{
|
||||
var createdTrigger = await _triggerManagementService.CreateTriggerAsync(result);
|
||||
Triggers.Add(createdTrigger);
|
||||
SelectedTrigger = createdTrigger;
|
||||
_notificationService.ShowSuccess("触发器创建成功");
|
||||
// 使用TriggerDataService添加触发器
|
||||
var createdTrigger = await _triggerDataService.AddTrigger(newTrigger);
|
||||
|
||||
if (createdTrigger != null )
|
||||
{
|
||||
// 触发器已添加到数据存储中,只需更新本地集合
|
||||
_notificationService.ShowSuccess("触发器创建成功");
|
||||
}
|
||||
else
|
||||
{
|
||||
_notificationService.ShowError("触发器创建失败");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -121,6 +117,7 @@ namespace DMS.WPF.ViewModels.Triggers
|
||||
CreatedAt = SelectedTrigger.CreatedAt,
|
||||
UpdatedAt = SelectedTrigger.UpdatedAt
|
||||
};
|
||||
|
||||
TriggerDialogViewModel viewModel = App.Current.Services.GetRequiredService<TriggerDialogViewModel>();
|
||||
await viewModel.OnInitializedAsync(triggerToEdit);
|
||||
|
||||
@@ -129,20 +126,15 @@ namespace DMS.WPF.ViewModels.Triggers
|
||||
{
|
||||
try
|
||||
{
|
||||
var updatedTrigger = await _triggerManagementService.UpdateTriggerAsync(result.Id, result);
|
||||
if (updatedTrigger != null)
|
||||
// 使用TriggerDataService更新触发器
|
||||
var updatedTrigger = await _triggerDataService.UpdateTrigger(SelectedTrigger);
|
||||
if (updatedTrigger)
|
||||
{
|
||||
var index = Triggers.IndexOf(SelectedTrigger);
|
||||
if (index >= 0)
|
||||
{
|
||||
Triggers[index] = updatedTrigger;
|
||||
}
|
||||
SelectedTrigger = updatedTrigger;
|
||||
_notificationService.ShowSuccess("触发器更新成功");
|
||||
}
|
||||
else
|
||||
{
|
||||
_notificationService.ShowError("触发器更新失败,未找到对应记录");
|
||||
_notificationService.ShowError("触发器更新失败");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -169,11 +161,10 @@ namespace DMS.WPF.ViewModels.Triggers
|
||||
{
|
||||
try
|
||||
{
|
||||
var success = await _triggerManagementService.DeleteTriggerAsync(SelectedTrigger.Id);
|
||||
// 使用TriggerDataService删除触发器
|
||||
var success = await _triggerDataService.DeleteTrigger(SelectedTrigger);
|
||||
if (success)
|
||||
{
|
||||
Triggers.Remove(SelectedTrigger);
|
||||
SelectedTrigger = Triggers.FirstOrDefault();
|
||||
_notificationService.ShowSuccess("触发器删除成功");
|
||||
}
|
||||
else
|
||||
@@ -188,13 +179,5 @@ namespace DMS.WPF.ViewModels.Triggers
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 视图加载时执行的命令
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
private async Task OnLoadedAsync()
|
||||
{
|
||||
await LoadTriggersCommand.ExecuteAsync(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user