From 25cd43d4368a045ad33a8bfa81d241d4c9baa3dc Mon Sep 17 00:00:00 2001 From: "David P.G" Date: Sun, 14 Sep 2025 09:03:07 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=A7=E7=BB=AD=E4=BF=AE=E6=94=B9=E6=8A=A5?= =?UTF-8?q?=E8=AD=A6=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DMS.Application/DTOs/DeviceDto.cs | 2 +- .../EventHandlers/AlarmEventHandler.cs | 56 +++++++++++++++++-- .../VariableTableManagementService.cs | 6 ++ DMS.WPF/Services/DeviceDataService.cs | 30 ++++++++-- 4 files changed, 85 insertions(+), 9 deletions(-) diff --git a/DMS.Application/DTOs/DeviceDto.cs b/DMS.Application/DTOs/DeviceDto.cs index e8e1591..d2b3961 100644 --- a/DMS.Application/DTOs/DeviceDto.cs +++ b/DMS.Application/DTOs/DeviceDto.cs @@ -80,5 +80,5 @@ public class DeviceDto /// /// 设备关联的变量表集合 /// - public List VariableTables { get; set; } + public List VariableTables { get; set; }=new List(); } \ No newline at end of file diff --git a/DMS.Application/EventHandlers/AlarmEventHandler.cs b/DMS.Application/EventHandlers/AlarmEventHandler.cs index 30a644b..7fbf15c 100644 --- a/DMS.Application/EventHandlers/AlarmEventHandler.cs +++ b/DMS.Application/EventHandlers/AlarmEventHandler.cs @@ -1,3 +1,4 @@ +using DMS.Application.DTOs; using DMS.Application.Interfaces; using DMS.Core.Events; using DMS.Core.Interfaces.Repositories; @@ -10,12 +11,16 @@ namespace DMS.Application.EventHandlers { private readonly ILogger _logger; private readonly IAlarmHistoryRepository _alarmHistoryRepository; - // 可以注入其他服务,如 IEmailService, ISmsService 等 + private readonly IEmailAppService _emailAppService; // 注入邮件服务 - public AlarmEventHandler(ILogger logger, IAlarmHistoryRepository alarmHistoryRepository) + public AlarmEventHandler( + ILogger logger, + IAlarmHistoryRepository alarmHistoryRepository, + IEmailAppService emailAppService) // 添加邮件服务依赖 { _logger = logger; _alarmHistoryRepository = alarmHistoryRepository; + _emailAppService = emailAppService; } public async void HandleAlarm(object sender, AlarmEventArgs e) @@ -50,9 +55,52 @@ namespace DMS.Application.EventHandlers _logger.LogError(ex, $"保存报警记录时发生错误: {ex.Message}"); } - // 在这里添加其他报警处理逻辑 + // 发送邮件通知 + try + { + // 获取默认邮件账户 + var emailAccounts = await _emailAppService.GetAllEmailAccountsAsync(); + var defaultAccount = emailAccounts.FirstOrDefault(); // 简单选择第一个账户 + + if (defaultAccount != null) + { + // 构建邮件内容 + var emailRequest = new SendEmailRequest + { + EmailAccountId = defaultAccount.Id, + To = "peigangwei@qq.com", // 这里应该从配置或用户信息中获取 + Subject = $"设备报警通知 - {e.VariableName}", + Body = $@" + + +

设备报警通知

+

报警时间: {e.Timestamp:yyyy-MM-dd HH:mm:ss}

+

变量名称: {e.VariableName}

+

当前值: {e.CurrentValue}

+

阈值: {e.ThresholdValue}

+

报警类型: {e.AlarmType}

+

报警消息: {e.Message}

+ +", + IsHtml = true + }; + + // 发送邮件 + await _emailAppService.SendEmailAsync(emailRequest); + _logger.LogInformation($"报警邮件已发送: {e.Message}"); + } + else + { + _logger.LogWarning("未配置邮件账户,无法发送报警邮件"); + } + } + catch (Exception ex) + { + _logger.LogError(ex, $"发送报警邮件时发生错误: {ex.Message}"); + } + + // 在这里可以添加其他报警处理逻辑 // 例如: - // 2. 发送邮件或短信通知 // 3. 触发其他操作 } } diff --git a/DMS.Application/Services/VariableTableManagementService.cs b/DMS.Application/Services/VariableTableManagementService.cs index 358569e..32f877d 100644 --- a/DMS.Application/Services/VariableTableManagementService.cs +++ b/DMS.Application/Services/VariableTableManagementService.cs @@ -78,10 +78,16 @@ public class VariableTableManagementService : IVariableTableManagementService /// public void AddVariableTableToMemory(VariableTableDto variableTableDto) { + // 添加null检查 + if (variableTableDto == null) + return; + DeviceDto deviceDto = null; if (_appDataStorageService.Devices.TryGetValue(variableTableDto.DeviceId, out var device)) { deviceDto = device; + // 确保VariableTables不为null + device.VariableTables ??= new List(); device.VariableTables.Add(variableTableDto); variableTableDto.Device = device; } diff --git a/DMS.WPF/Services/DeviceDataService.cs b/DMS.WPF/Services/DeviceDataService.cs index 6bbc825..0f14df0 100644 --- a/DMS.WPF/Services/DeviceDataService.cs +++ b/DMS.WPF/Services/DeviceDataService.cs @@ -89,13 +89,35 @@ public class DeviceDataService : IDeviceDataService //更新当前界面 _dataStorageService.Devices.Add(_mapper.Map(addDto.Device)); _menuDataService.AddMenuItem(_mapper.Map(addDto.DeviceMenu)); - await _variableDataService.AddVariableTable(addDto.VariableTable); - _menuDataService.AddMenuItem(_mapper.Map(addDto.VariableTableMenu)); + + // 添加null检查 + if (addDto.VariableTable != null) + { + await _variableDataService.AddVariableTable(addDto.VariableTable); + } + + // 添加null检查 + if (addDto.VariableTableMenu != null) + { + _menuDataService.AddMenuItem(_mapper.Map(addDto.VariableTableMenu)); + } + //更新数据中心 _appDataCenterService.DeviceManagementService.AddDeviceToMemory(addDto.Device); - _appDataCenterService.VariableTableManagementService.AddVariableTableToMemory(addDto.VariableTable); + + // 添加null检查 + if (addDto.VariableTable != null) + { + _appDataCenterService.VariableTableManagementService.AddVariableTableToMemory(addDto.VariableTable); + } + _appDataCenterService.MenuManagementService.AddMenuToMemory(addDto.DeviceMenu); - _appDataCenterService.MenuManagementService.AddMenuToMemory(addDto.VariableTableMenu); + + // 添加null检查 + if (addDto.VariableTableMenu != null) + { + _appDataCenterService.MenuManagementService.AddMenuToMemory(addDto.VariableTableMenu); + } _menuDataService.BuildMenuTrees();