diff --git a/DMS.Application/DTOs/CreateTriggerWithMenuDto.cs b/DMS.Application/DTOs/CreateTriggerWithMenuDto.cs
new file mode 100644
index 0000000..7741b53
--- /dev/null
+++ b/DMS.Application/DTOs/CreateTriggerWithMenuDto.cs
@@ -0,0 +1,21 @@
+using DMS.Core.Models;
+using DMS.Core.Models.Triggers;
+
+namespace DMS.Application.DTOs
+{
+ ///
+ /// 创建触发器及其关联菜单的数据传输对象
+ ///
+ public class CreateTriggerWithMenuDto
+ {
+ ///
+ /// 触发器信息
+ ///
+ public Trigger Trigger { get; set; }
+
+ ///
+ /// 菜单项信息
+ ///
+ public MenuBean TriggerMenu { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/DMS.Application/Services/Database/TriggerAppService.cs b/DMS.Application/Services/Database/TriggerAppService.cs
index 2f12893..b285ad9 100644
--- a/DMS.Application/Services/Database/TriggerAppService.cs
+++ b/DMS.Application/Services/Database/TriggerAppService.cs
@@ -177,7 +177,7 @@ namespace DMS.Application.Services.Database
// // 获取关联的触发器ID列表
// var triggerIds = await _repositoryManager.GetTriggerIdsByVariableIdAsync(variableId);
- // var triggers = new List();
+ // var triggers = new List();
// if (triggerIds.Any())
// {
// // 获取所有关联的触发器
diff --git a/DMS.Application/Services/Management/TriggerManagementService.cs b/DMS.Application/Services/Management/TriggerManagementService.cs
index 6ccd17b..ceea41b 100644
--- a/DMS.Application/Services/Management/TriggerManagementService.cs
+++ b/DMS.Application/Services/Management/TriggerManagementService.cs
@@ -59,13 +59,10 @@ namespace DMS.Application.Services.Management
// 3. 调用仓储保存实体
var createdTrigger = await _repositoryManager.Triggers.AddAsync(triggerEntity);
- // 4. 转换回 DTO 并返回
- var result = _mapper.Map(createdTrigger);
-
// 5. 同步更新AppDataStorageService中的Triggers字典
- _appStorageService.Triggers[result.Id] = result;
+ _appStorageService.Triggers[createdTrigger.Id] = createdTrigger;
- return result;
+ return createdTrigger;
}
///
@@ -122,7 +119,7 @@ namespace DMS.Application.Services.Management
public async Task> GetTriggersForVariableAsync(int variableId)
{
// var triggers = await _repositoryManager.Triggers.GetByVariableIdAsync(variableId);
- // return _mapper.Map>(triggers);
+ // return _mapper.Map>(triggers);
return null;
}
@@ -141,7 +138,7 @@ namespace DMS.Application.Services.Management
}
///
- /// 内部方法:验证 Trigger 的有效性
+ /// 内部方法:验证 TriggerMenu 的有效性
///
private void ValidateTriggerDto(Trigger dto)
{
diff --git a/DMS.Application/Services/Triggers/Impl/TriggerEvaluationService.cs b/DMS.Application/Services/Triggers/Impl/TriggerEvaluationService.cs
index aa02d76..4162ed0 100644
--- a/DMS.Application/Services/Triggers/Impl/TriggerEvaluationService.cs
+++ b/DMS.Application/Services/Triggers/Impl/TriggerEvaluationService.cs
@@ -110,7 +110,7 @@ namespace DMS.Application.Services.Triggers.Impl
}
// 由于移除了条件,所有激活的触发器都会被触发
- _logger.LogInformation("Trigger activated for trigger ID: {TriggerId}", trigger.Id);
+ _logger.LogInformation("TriggerMenu activated for trigger ID: {TriggerId}", trigger.Id);
return true;
}
@@ -128,7 +128,7 @@ namespace DMS.Application.Services.Triggers.Impl
if(isSuppressed)
{
- _logger.LogTrace("Trigger is suppressed (until {SuppressionEnd}) for trigger ID: {TriggerId}", suppressionEndTime, trigger.Id);
+ _logger.LogTrace("TriggerMenu is suppressed (until {SuppressionEnd}) for trigger ID: {TriggerId}", suppressionEndTime, trigger.Id);
}
return isSuppressed;
diff --git a/DMS.Core/Enums/MenuType.cs b/DMS.Core/Enums/MenuType.cs
index 04d22e6..ab0408a 100644
--- a/DMS.Core/Enums/MenuType.cs
+++ b/DMS.Core/Enums/MenuType.cs
@@ -7,5 +7,6 @@ public enum MenuType
VariableTableMenu,
VariableMenu,
MqttMenu,
- MqttServerMenu
+ MqttServerMenu,
+ TriggerMenu
}
\ No newline at end of file
diff --git a/DMS.Core/Interfaces/Repositories/Triggers/ITriggerRepository.cs b/DMS.Core/Interfaces/Repositories/Triggers/ITriggerRepository.cs
index f2ee511..e4d3486 100644
--- a/DMS.Core/Interfaces/Repositories/Triggers/ITriggerRepository.cs
+++ b/DMS.Core/Interfaces/Repositories/Triggers/ITriggerRepository.cs
@@ -7,7 +7,7 @@ using DMS.Core.Interfaces.Repositories;
namespace DMS.Core.Interfaces.Repositories.Triggers
{
///
- /// 触发器仓储接口 (定义对 Trigger 实体的数据访问方法)
+ /// 触发器仓储接口 (定义对 TriggerMenu 实体的数据访问方法)
///
public interface ITriggerRepository : IBaseRepository
{
diff --git a/DMS.Infrastructure/Repositories/InitializeRepository.cs b/DMS.Infrastructure/Repositories/InitializeRepository.cs
index 5aaf02d..9e858a6 100644
--- a/DMS.Infrastructure/Repositories/InitializeRepository.cs
+++ b/DMS.Infrastructure/Repositories/InitializeRepository.cs
@@ -140,7 +140,7 @@ public class InitializeRepository : IInitializeRepository
},
new DbMenu
{
- Id = 5, Header = "触发器", Icon = "\uE7BA", ParentId = 0,
+ Id = 5, Header = "触发器", Icon = "\uE945", ParentId = 0,
MenuType = MenuType.MainMenu, TargetViewKey = "TriggersViewModel",
DisplayOrder = 5
},
diff --git a/DMS.WPF/Interfaces/ITriggerDataService.cs b/DMS.WPF/Interfaces/ITriggerDataService.cs
index 491efee..39f57d3 100644
--- a/DMS.WPF/Interfaces/ITriggerDataService.cs
+++ b/DMS.WPF/Interfaces/ITriggerDataService.cs
@@ -19,6 +19,11 @@ public interface ITriggerDataService
///
Task AddTrigger(TriggerItem triggerItem);
+ ///
+ /// 添加触发器及其关联菜单。
+ ///
+ Task AddTriggerWithMenu(CreateTriggerWithMenuDto dto);
+
///
/// 删除触发器。
///
diff --git a/DMS.WPF/Services/TriggerDataService.cs b/DMS.WPF/Services/TriggerDataService.cs
index f3149cd..b256e5e 100644
--- a/DMS.WPF/Services/TriggerDataService.cs
+++ b/DMS.WPF/Services/TriggerDataService.cs
@@ -1,12 +1,14 @@
-using System.Windows.Threading;
using AutoMapper;
using DMS.Application.DTOs;
using DMS.Application.Interfaces;
+using DMS.Application.Services;
+using DMS.Core.Enums;
using DMS.Core.Events;
using DMS.Core.Models.Triggers;
using DMS.WPF.Interfaces;
using DMS.WPF.ItemViewModel;
using Opc.Ua;
+using System.Windows.Threading;
namespace DMS.WPF.Services;
@@ -100,6 +102,48 @@ public class TriggerDataService : ITriggerDataService
return true;
}
+ ///
+ /// 添加触发器及其关联菜单。
+ ///
+ public async Task AddTriggerWithMenu(CreateTriggerWithMenuDto dto)
+ {
+ // 添加null检查
+ if (dto == null || dto.Trigger == null)
+ return null;
+
+ try
+ {
+ // 首先添加触发器
+ var createdTrigger = await _appCenterService.TriggerManagementService.CreateTriggerAsync(dto.Trigger);
+ if (createdTrigger == null)
+ return null;
+
+
+ var parentMenu=_appStorageService.Menus.Values.OrderBy(m=>m.Id).FirstOrDefault(m=>m.MenuType==MenuType.TriggerMenu);
+ if (parentMenu is not null)
+ {
+ // 将菜单关联到触发器
+ dto.TriggerMenu.TargetId = createdTrigger.Id;
+ dto.TriggerMenu.MenuType = MenuType.TriggerMenu;
+
+ }
+
+
+
+
+ // 添加到UI数据存储
+ var addItem = _mapper.Map(createdTrigger);
+ _dataStorageService.Triggers.Add(createdTrigger.Id, addItem);
+
+ return dto;
+ }
+ catch (Exception ex)
+ {
+ _notificationService?.ShowError($"添加触发器及菜单时发生错误:{ex.Message}", ex);
+ return null;
+ }
+ }
+
///
/// 更新触发器。
///
diff --git a/DMS.WPF/ViewModels/TriggersViewModel.cs b/DMS.WPF/ViewModels/TriggersViewModel.cs
index 0a85619..9e84720 100644
--- a/DMS.WPF/ViewModels/TriggersViewModel.cs
+++ b/DMS.WPF/ViewModels/TriggersViewModel.cs
@@ -71,8 +71,8 @@ namespace DMS.WPF.ViewModels
IsActive = true,
Action = Core.Models.Triggers.ActionType.SendEmail,
Description = "新建触发器",
- CreatedAt = DateTime.UtcNow,
- UpdatedAt = DateTime.UtcNow
+ CreatedAt = DateTime.Now,
+ UpdatedAt = DateTime.Now
};
TriggerDialogViewModel viewModel = App.Current.Services.GetRequiredService();
@@ -83,13 +83,33 @@ namespace DMS.WPF.ViewModels
{
try
{
- // 使用TriggerDataService添加触发器
- var createdTrigger = await _triggerDataService.AddTrigger(newTrigger);
-
- if (createdTrigger != null )
+ // 创建包含菜单信息的 DTO
+ CreateTriggerWithMenuDto dto = new CreateTriggerWithMenuDto();
+ if (_mapper != null)
{
- // 触发器已添加到数据存储中,只需更新本地集合
- _notificationService.ShowSuccess("触发器创建成功");
+ dto.Trigger = _mapper.Map(result);
+ }
+ else
+ {
+ _notificationService?.ShowError("映射服务未初始化");
+ return;
+ }
+
+ // 创建菜单项
+ dto.TriggerMenu = new MenuBean()
+ {
+ Header = result.Name ?? result.Description,
+ Icon = "\uE945", // 使用触发器图标
+ TargetViewKey = nameof(TriggerDetailViewModel),
+ };
+
+ // 使用TriggerDataService添加触发器和菜单
+ var createdTriggerDto = await _triggerDataService.AddTriggerWithMenu(dto);
+
+ if (createdTriggerDto != null && createdTriggerDto.Trigger != null)
+ {
+ // 更新UI显示
+ _notificationService.ShowSuccess($"触发器创建成功:{createdTriggerDto.Trigger.Name ?? createdTriggerDto.Trigger.Description}");
}
else
{