diff --git a/DMS.Application/DTOs/Triggers/TriggerDefinitionDto.cs b/DMS.Application/DTOs/Triggers/TriggerDefinitionDto.cs
index 2d56723..7d7f348 100644
--- a/DMS.Application/DTOs/Triggers/TriggerDefinitionDto.cs
+++ b/DMS.Application/DTOs/Triggers/TriggerDefinitionDto.cs
@@ -11,12 +11,12 @@ namespace DMS.Application.DTOs.Triggers
///
/// 触发器唯一标识符
///
- public Guid Id { get; set; }
+ public int Id { get; set; }
///
/// 关联的变量 ID
///
- public Guid VariableId { get; set; }
+ public int VariableId { get; set; }
///
/// 触发器是否处于激活状态
diff --git a/DMS.Application/Profiles/MappingProfile.cs b/DMS.Application/Profiles/MappingProfile.cs
index 5501201..c863d5d 100644
--- a/DMS.Application/Profiles/MappingProfile.cs
+++ b/DMS.Application/Profiles/MappingProfile.cs
@@ -1,6 +1,8 @@
using AutoMapper;
using DMS.Core.Models;
using DMS.Application.DTOs;
+using DMS.Application.DTOs.Triggers;
+using DMS.Core.Models.Triggers;
namespace DMS.Application.Profiles;
@@ -56,5 +58,6 @@ public class MappingProfile : Profile
CreateMap().ReverseMap();
CreateMap().ReverseMap();
+ CreateMap().ReverseMap();
}
}
diff --git a/DMS.Application/Services/Triggers/ITriggerManagementService.cs b/DMS.Application/Services/Triggers/ITriggerManagementService.cs
index e76b925..4d956cf 100644
--- a/DMS.Application/Services/Triggers/ITriggerManagementService.cs
+++ b/DMS.Application/Services/Triggers/ITriggerManagementService.cs
@@ -21,7 +21,7 @@ namespace DMS.Application.Services.Triggers
///
/// 触发器 ID
/// 触发器定义 DTO,如果未找到则返回 null
- Task GetTriggerByIdAsync(Guid id);
+ Task GetTriggerByIdAsync(int id);
///
/// 创建一个新的触发器定义
@@ -36,20 +36,20 @@ namespace DMS.Application.Services.Triggers
/// 要更新的触发器 ID
/// 包含更新信息的触发器定义 DTO
/// 更新后的触发器定义 DTO,如果未找到则返回 null
- Task UpdateTriggerAsync(Guid id, TriggerDefinitionDto triggerDto);
+ Task UpdateTriggerAsync(int id, TriggerDefinitionDto triggerDto);
///
/// 删除一个触发器定义
///
/// 要删除的触发器 ID
/// 删除成功返回 true,否则返回 false
- Task DeleteTriggerAsync(Guid id);
+ Task DeleteTriggerAsync(int id);
///
/// 获取与指定变量关联的所有触发器定义
///
/// 变量 ID
/// 该变量关联的触发器定义列表
- Task> GetTriggersForVariableAsync(Guid variableId);
+ Task> GetTriggersForVariableAsync(int variableId);
}
}
\ No newline at end of file
diff --git a/DMS.Application/Services/Triggers/Impl/TriggerEvaluationService.cs b/DMS.Application/Services/Triggers/Impl/TriggerEvaluationService.cs
index 82eacd3..1fb3a2c 100644
--- a/DMS.Application/Services/Triggers/Impl/TriggerEvaluationService.cs
+++ b/DMS.Application/Services/Triggers/Impl/TriggerEvaluationService.cs
@@ -23,7 +23,7 @@ namespace DMS.Application.Services.Triggers.Impl
private readonly ITriggerActionExecutor _actionExecutor;
private readonly ILogger _logger; // 使用标准日志接口
// 为每个触发器存储抑制定时器
- private readonly ConcurrentDictionary _suppressionTimers = new();
+ private readonly ConcurrentDictionary _suppressionTimers = new();
public TriggerEvaluationService(
ITriggerManagementService triggerManagementService,
diff --git a/DMS.Application/Services/Triggers/Impl/TriggerManagementService.cs b/DMS.Application/Services/Triggers/Impl/TriggerManagementService.cs
index 9f09a27..c68a70a 100644
--- a/DMS.Application/Services/Triggers/Impl/TriggerManagementService.cs
+++ b/DMS.Application/Services/Triggers/Impl/TriggerManagementService.cs
@@ -35,7 +35,7 @@ namespace DMS.Application.Services.Triggers.Impl
///
/// 根据 ID 获取触发器定义
///
- public async Task GetTriggerByIdAsync(Guid id)
+ public async Task GetTriggerByIdAsync(int id)
{
var trigger = await _repositoryManager.Triggers.GetByIdAsync(id);
return trigger != null ? _mapper.Map(trigger) : null;
@@ -64,7 +64,7 @@ namespace DMS.Application.Services.Triggers.Impl
///
/// 更新一个已存在的触发器定义
///
- public async Task UpdateTriggerAsync(Guid id, TriggerDefinitionDto triggerDto)
+ public async Task UpdateTriggerAsync(int id, TriggerDefinitionDto triggerDto)
{
// 1. 获取现有实体
var existingTrigger = await _repositoryManager.Triggers.GetByIdAsync(id);
@@ -90,7 +90,7 @@ namespace DMS.Application.Services.Triggers.Impl
///
/// 删除一个触发器定义
///
- public async Task DeleteTriggerAsync(Guid id)
+ public async Task DeleteTriggerAsync(int id)
{
return await _repositoryManager.Triggers.DeleteAsync(id);
}
@@ -98,7 +98,7 @@ namespace DMS.Application.Services.Triggers.Impl
///
/// 获取与指定变量关联的所有触发器定义
///
- public async Task> GetTriggersForVariableAsync(Guid variableId)
+ public async Task> GetTriggersForVariableAsync(int variableId)
{
var triggers = await _repositoryManager.Triggers.GetByVariableIdAsync(variableId);
return _mapper.Map>(triggers);
diff --git a/DMS.Application/Services/VariableTableManagementService.cs b/DMS.Application/Services/VariableTableManagementService.cs
index 32f877d..3a18f87 100644
--- a/DMS.Application/Services/VariableTableManagementService.cs
+++ b/DMS.Application/Services/VariableTableManagementService.cs
@@ -83,21 +83,31 @@ public class VariableTableManagementService : IVariableTableManagementService
return;
DeviceDto deviceDto = null;
- if (_appDataStorageService.Devices.TryGetValue(variableTableDto.DeviceId, out var device))
+ if (_appDataStorageService.Devices != null &&
+ _appDataStorageService.Devices.TryGetValue(variableTableDto.DeviceId, out var device))
{
deviceDto = device;
// 确保VariableTables不为null
- device.VariableTables ??= new List();
+ if (device.VariableTables == null)
+ device.VariableTables = new List();
+
device.VariableTables.Add(variableTableDto);
- variableTableDto.Device = device;
+
+ // 确保Device属性不为null
+ if (variableTableDto != null)
+ variableTableDto.Device = device;
}
- if (_variableTables.TryAdd(variableTableDto.Id, variableTableDto))
+ // 确保_variableTables和variableTableDto不为null
+ if (_variableTables != null && variableTableDto != null)
{
- OnVariableTableChanged?.Invoke(this,new VariableTableChangedEventArgs(
- DataChangeType.Added,
- variableTableDto,
- deviceDto));
+ if (_variableTables.TryAdd(variableTableDto.Id, variableTableDto))
+ {
+ OnVariableTableChanged?.Invoke(this, new VariableTableChangedEventArgs(
+ DataChangeType.Added,
+ variableTableDto,
+ deviceDto));
+ }
}
}
diff --git a/DMS.Core/Interfaces/Repositories/Triggers/ITriggerRepository.cs b/DMS.Core/Interfaces/Repositories/Triggers/ITriggerRepository.cs
index 81a3efe..71699df 100644
--- a/DMS.Core/Interfaces/Repositories/Triggers/ITriggerRepository.cs
+++ b/DMS.Core/Interfaces/Repositories/Triggers/ITriggerRepository.cs
@@ -21,7 +21,7 @@ namespace DMS.Core.Interfaces.Repositories.Triggers
///
/// 触发器 ID
/// 触发器定义实体,如果未找到则返回 null
- Task GetByIdAsync(Guid id);
+ Task GetByIdAsync(int id);
///
/// 添加一个新的触发器定义
@@ -42,13 +42,13 @@ namespace DMS.Core.Interfaces.Repositories.Triggers
///
/// 要删除的触发器 ID
/// 删除成功返回 true,否则返回 false
- Task DeleteAsync(Guid id);
+ Task DeleteAsync(int id);
///
/// 获取与指定变量关联的所有触发器定义
///
/// 变量 ID
/// 该变量关联的触发器定义实体列表
- Task> GetByVariableIdAsync(Guid variableId);
+ Task> GetByVariableIdAsync(int variableId);
}
}
\ No newline at end of file
diff --git a/DMS.Core/Models/Triggers/TriggerDefinition.cs b/DMS.Core/Models/Triggers/TriggerDefinition.cs
index 4bc3890..852d070 100644
--- a/DMS.Core/Models/Triggers/TriggerDefinition.cs
+++ b/DMS.Core/Models/Triggers/TriggerDefinition.cs
@@ -34,12 +34,12 @@ namespace DMS.Core.Models.Triggers
///
/// 触发器唯一标识符
///
- public Guid Id { get; set; } = Guid.NewGuid();
+ public int Id { get; set; }
///
/// 关联的变量 ID
///
- public Guid VariableId { get; set; }
+ public int VariableId { get; set; }
///
/// 触发器是否处于激活状态
diff --git a/DMS.Infrastructure/Entities/DbTriggerDefinition.cs b/DMS.Infrastructure/Entities/DbTriggerDefinition.cs
index bc2ad3d..ce842bb 100644
--- a/DMS.Infrastructure/Entities/DbTriggerDefinition.cs
+++ b/DMS.Infrastructure/Entities/DbTriggerDefinition.cs
@@ -14,13 +14,13 @@ public class DbTriggerDefinition
///
/// 触发器唯一标识符,主键。
///
- [SugarColumn(IsPrimaryKey = true)]
- public Guid Id { get; set; }
+ [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+ public int Id { get; set; }
///
/// 关联的变量 ID。
///
- public Guid VariableId { get; set; }
+ public int VariableId { get; set; }
///
/// 触发器是否处于激活状态。
diff --git a/DMS.Infrastructure/Repositories/BaseRepository.cs b/DMS.Infrastructure/Repositories/BaseRepository.cs
index 16f506f..a1a937b 100644
--- a/DMS.Infrastructure/Repositories/BaseRepository.cs
+++ b/DMS.Infrastructure/Repositories/BaseRepository.cs
@@ -100,10 +100,12 @@ public abstract class BaseRepository
return entities;
}
+
+
///
- /// 异步根据主键 ID 获取单个实体。
+ /// 异步根据主键 ID (int类型) 获取单个实体。
///
- /// 实体的主键 ID。
+ /// 实体的主键 ID (int类型)。
/// 返回找到的实体,如果未找到则返回 null。
public virtual async Task GetByIdAsync(int id)
{
diff --git a/DMS.Infrastructure/Repositories/TriggerRepository.cs b/DMS.Infrastructure/Repositories/TriggerRepository.cs
index c482a89..f04d131 100644
--- a/DMS.Infrastructure/Repositories/TriggerRepository.cs
+++ b/DMS.Infrastructure/Repositories/TriggerRepository.cs
@@ -40,7 +40,7 @@ namespace DMS.Infrastructure.Repositories
///
/// 根据 ID 获取触发器定义
///
- public async Task GetByIdAsync(Guid id)
+ public async Task GetByIdAsync(int id)
{
var dbTrigger = await base.GetByIdAsync(id);
return _mapper.Map(dbTrigger);
@@ -67,7 +67,7 @@ namespace DMS.Infrastructure.Repositories
///
/// 删除一个触发器定义
///
- public async Task DeleteAsync(Guid id)
+ public async Task DeleteAsync(int id)
{
var stopwatch = new Stopwatch();
stopwatch.Start();
@@ -82,7 +82,7 @@ namespace DMS.Infrastructure.Repositories
///
/// 获取与指定变量关联的所有触发器定义
///
- public async Task> GetByVariableIdAsync(Guid variableId)
+ public async Task> GetByVariableIdAsync(int variableId)
{
var stopwatch = new Stopwatch();
stopwatch.Start();
diff --git a/DMS.WPF/Services/DeviceDataService.cs b/DMS.WPF/Services/DeviceDataService.cs
index 0f14df0..db89507 100644
--- a/DMS.WPF/Services/DeviceDataService.cs
+++ b/DMS.WPF/Services/DeviceDataService.cs
@@ -85,42 +85,67 @@ public class DeviceDataService : IDeviceDataService
///
public async Task AddDevice(CreateDeviceWithDetailsDto dto)
{
+ // 添加null检查
+ if (dto == null || _appDataCenterService == null || _appDataCenterService.DeviceManagementService == null)
+ return null;
+
var addDto = await _appDataCenterService.DeviceManagementService.CreateDeviceWithDetailsAsync(dto);
- //更新当前界面
- _dataStorageService.Devices.Add(_mapper.Map(addDto.Device));
- _menuDataService.AddMenuItem(_mapper.Map(addDto.DeviceMenu));
// 添加null检查
- if (addDto.VariableTable != null)
+ if (_dataStorageService != null && addDto != null && addDto.Device != null)
+ {
+ //更新当前界面
+ _dataStorageService.Devices.Add(_mapper.Map(addDto.Device));
+ }
+
+ // 添加null检查
+ if (_menuDataService != null && addDto != null && addDto.DeviceMenu != null)
+ {
+ _menuDataService.AddMenuItem(_mapper.Map(addDto.DeviceMenu));
+ }
+
+ // 添加null检查
+ if (addDto != null && addDto.VariableTable != null)
{
await _variableDataService.AddVariableTable(addDto.VariableTable);
}
// 添加null检查
- if (addDto.VariableTableMenu != null)
+ if (_menuDataService != null && addDto != null && addDto.VariableTableMenu != null)
{
_menuDataService.AddMenuItem(_mapper.Map(addDto.VariableTableMenu));
}
- //更新数据中心
- _appDataCenterService.DeviceManagementService.AddDeviceToMemory(addDto.Device);
+ // 添加null检查
+ if (_appDataCenterService.DeviceManagementService != null && addDto != null && addDto.Device != null)
+ {
+ //更新数据中心
+ _appDataCenterService.DeviceManagementService.AddDeviceToMemory(addDto.Device);
+ }
// 添加null检查
- if (addDto.VariableTable != null)
+ if (_appDataCenterService.VariableTableManagementService != null && addDto != null && addDto.VariableTable != null)
{
_appDataCenterService.VariableTableManagementService.AddVariableTableToMemory(addDto.VariableTable);
}
- _appDataCenterService.MenuManagementService.AddMenuToMemory(addDto.DeviceMenu);
+ // 添加null检查
+ if (_appDataCenterService.MenuManagementService != null && addDto != null && addDto.DeviceMenu != null)
+ {
+ _appDataCenterService.MenuManagementService.AddMenuToMemory(addDto.DeviceMenu);
+ }
// 添加null检查
- if (addDto.VariableTableMenu != null)
+ if (_appDataCenterService.MenuManagementService != null && addDto != null && addDto.VariableTableMenu != null)
{
_appDataCenterService.MenuManagementService.AddMenuToMemory(addDto.VariableTableMenu);
}
- _menuDataService.BuildMenuTrees();
-
+ // 添加null检查
+ if (_menuDataService != null)
+ {
+ _menuDataService.BuildMenuTrees();
+ }
return addDto;
}
diff --git a/DMS.WPF/Services/VariableDataService.cs b/DMS.WPF/Services/VariableDataService.cs
index d8e0b13..a9edf8a 100644
--- a/DMS.WPF/Services/VariableDataService.cs
+++ b/DMS.WPF/Services/VariableDataService.cs
@@ -51,20 +51,39 @@ public class VariableDataService : IVariableDataService
public async Task AddVariableTable(VariableTableDto variableTableDto,
MenuBeanDto menuDto = null, bool isAddDb = false)
{
+ // 添加null检查
if (variableTableDto == null)
return false;
+ // 添加_appDataCenterService和_variableTableManagementService的null检查
+ if (_appDataCenterService == null || _appDataCenterService.VariableTableManagementService == null)
+ return false;
+
if (isAddDb && menuDto != null)
{
+ // 添加null检查
+ if (_appDataCenterService.VariableTableManagementService == null)
+ return false;
+
CreateVariableTableWithMenuDto createDto = new CreateVariableTableWithMenuDto();
createDto.VariableTable = variableTableDto;
createDto.DeviceId = variableTableDto.DeviceId;
createDto.Menu = menuDto;
+
+ // 添加null检查
+ if (_appDataCenterService.VariableTableManagementService == null)
+ return false;
+
var resDto = await _appDataCenterService.VariableTableManagementService.CreateVariableTableAsync(createDto);
- _mapper.Map(resDto.VariableTable, variableTableDto);
+
+ // 添加null检查
+ if (resDto != null && resDto.VariableTable != null && variableTableDto != null)
+ _mapper.Map(resDto.VariableTable, variableTableDto);
}
- _appDataCenterService.VariableTableManagementService.AddVariableTableToMemory(variableTableDto);
+ // 添加null检查
+ if (_appDataCenterService.VariableTableManagementService != null && variableTableDto != null)
+ _appDataCenterService.VariableTableManagementService.AddVariableTableToMemory(variableTableDto);
return true;
}
diff --git a/DMS.WPF/ViewModels/DevicesViewModel.cs b/DMS.WPF/ViewModels/DevicesViewModel.cs
index 0b9c67f..22a3899 100644
--- a/DMS.WPF/ViewModels/DevicesViewModel.cs
+++ b/DMS.WPF/ViewModels/DevicesViewModel.cs
@@ -89,7 +89,16 @@ public partial class DevicesViewModel : ViewModelBase, INavigatable
CreateDeviceWithDetailsDto dto = new CreateDeviceWithDetailsDto();
- dto.Device = _mapper.Map(device);
+ // 添加null检查
+ if (_mapper != null)
+ {
+ dto.Device = _mapper.Map(device);
+ }
+ else
+ {
+ _notificationService?.ShowError("映射服务未初始化");
+ return;
+ }
dto.DeviceMenu = new MenuBeanDto()
@@ -98,6 +107,7 @@ public partial class DevicesViewModel : ViewModelBase, INavigatable
Icon = SegoeFluentIcons.Devices2.Glyph,
TargetViewKey = "DeviceDetailView"
};
+
if (device.IsAddDefVarTable)
{
dto.VariableTable = new VariableTableDto()
@@ -116,14 +126,34 @@ public partial class DevicesViewModel : ViewModelBase, INavigatable
// 添加设备
- var addDto = await _wpfDataService.DeviceDataService.AddDevice(dto);
-
- _notificationService.ShowSuccess($"设备添加成功:{addDto.Device.Name}");
+ // 添加null检查
+ if (_wpfDataService != null && _wpfDataService.DeviceDataService != null)
+ {
+ var addDto = await _wpfDataService.DeviceDataService.AddDevice(dto);
+
+ // 添加null检查
+ if (addDto != null && addDto.Device != null && _notificationService != null)
+ {
+ _notificationService.ShowSuccess($"设备添加成功:{addDto.Device.Name}");
+ }
+ else if (_notificationService != null)
+ {
+ _notificationService.ShowError("设备添加失败");
+ }
+ }
+ else if (_notificationService != null)
+ {
+ _notificationService.ShowError("数据服务未初始化");
+ }
}
catch (Exception e)
{
Console.WriteLine(e);
- _notificationService.ShowError($"添加设备的过程中发生错误:{e.Message}", e);
+ // 添加null检查
+ if (_notificationService != null)
+ {
+ _notificationService.ShowError($"添加设备的过程中发生错误:{e.Message}", e);
+ }
}
}
diff --git a/DMS.WPF/ViewModels/Dialogs/TriggerDialogViewModel.cs b/DMS.WPF/ViewModels/Dialogs/TriggerDialogViewModel.cs
index 287ace7..10ed01d 100644
--- a/DMS.WPF/ViewModels/Dialogs/TriggerDialogViewModel.cs
+++ b/DMS.WPF/ViewModels/Dialogs/TriggerDialogViewModel.cs
@@ -54,7 +54,7 @@ namespace DMS.WPF.ViewModels.Dialogs
if (parameter is TriggerDefinitionDto triggerDto)
{
Trigger = triggerDto;
- Title = Trigger.Id == Guid.Empty ? "新建触发器" : "编辑触发器";
+ Title = Trigger.Id == default(int) ? "新建触发器" : "编辑触发器";
PrimaryButText = "保存";
// Load available variables for selection dropdown
@@ -109,7 +109,7 @@ namespace DMS.WPF.ViewModels.Dialogs
private async Task SaveAsync()
{
// Basic validation
- if (Trigger.VariableId == Guid.Empty)
+ if (Trigger.VariableId == default(int))
{
_notificationService.ShowWarn("请选择关联的变量");
return;
@@ -187,10 +187,10 @@ namespace DMS.WPF.ViewModels.Dialogs
// Set timestamps
Trigger.UpdatedAt = DateTime.UtcNow;
- if (Trigger.Id == Guid.Empty)
+ if (Trigger.Id == default(int))
{
Trigger.CreatedAt = DateTime.UtcNow;
- Trigger.Id = Guid.NewGuid();
+ Trigger.Id = 0; // 对于自增ID,设置为0让数据库自动生成
}
// Close dialog with the updated trigger DTO
diff --git a/DMS.WPF/ViewModels/TriggersViewModel.cs b/DMS.WPF/ViewModels/TriggersViewModel.cs
index 62e1691..d087eec 100644
--- a/DMS.WPF/ViewModels/TriggersViewModel.cs
+++ b/DMS.WPF/ViewModels/TriggersViewModel.cs
@@ -63,7 +63,6 @@ namespace DMS.WPF.ViewModels.Triggers
{
var newTrigger = new TriggerDefinitionDto
{
- Id = Guid.NewGuid(),
IsActive = true,
Condition = Core.Models.Triggers.ConditionType.GreaterThan,
Action = Core.Models.Triggers.ActionType.SendEmail,