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();