1 feat: 重构触发器设计,移除触发条件并添加名称字段

2
    3 - 从Trigger、DbTriggerDefinition和TriggerItem类中移除了所有条件相关的属性(Condition, Threshold, LowerBound, UpperBound)
    4 - 删除了ConditionType枚举,简化了触发器逻辑
    5 - 为触发器添加了Name字段,在核心模型、数据库实体和视图模型中都添加了该属性
    6 - 删除了TriggerDialog界面中的变量选择和搜索功能
    7 - 从TriggerDialog界面中删除了触发条件相关的UI元素
    8 - 更新了TriggerDialogViewModel,移除了条件相关的验证和业务逻辑
    9 - 更新了TriggersViewModel,移除了条件的初始化设置
   10 - 更新了AutoMapper配置文件,增加TriggerItem与Trigger之间的映射
   11 - 在TriggerEvaluationService中移除了条件判断逻辑,现在激活的触发器会直接执行动作
   12 - 更新了App.xaml,移除了对已删除枚举的引用
   13 - 修改了保存验证逻辑,确保触发器名称不能为空
This commit is contained in:
2025-10-18 18:55:08 +08:00
parent cb984b1b91
commit 72d2440314
13 changed files with 44 additions and 552 deletions

View File

@@ -109,31 +109,10 @@ namespace DMS.Application.Services.Triggers.Impl
return false; // Cannot evaluate null
}
// Attempt conversion from object to double - adjust parsing logic as needed for your data types
if (!double.TryParse(currentValueObj.ToString(), out double currentValue))
{
_logger.LogWarning("Could not parse current value '{CurrentValue}' to double for trigger evaluation (trigger ID: {TriggerId}).", currentValueObj, trigger.Id);
return false;
}
// 由于移除了条件,所有激活的触发器都会被触发
_logger.LogInformation("Trigger activated for trigger ID: {TriggerId}", trigger.Id);
bool result = trigger.Condition switch
{
ConditionType.GreaterThan => currentValue > trigger.Threshold,
ConditionType.LessThan => currentValue < trigger.Threshold,
ConditionType.EqualTo => Math.Abs(currentValue - trigger.Threshold.GetValueOrDefault()) < double.Epsilon,
ConditionType.NotEqualTo => Math.Abs(currentValue - trigger.Threshold.GetValueOrDefault()) >= double.Epsilon,
ConditionType.InRange => currentValue >= trigger.LowerBound && currentValue <= trigger.UpperBound,
ConditionType.OutOfRange => currentValue < trigger.LowerBound || currentValue > trigger.UpperBound,
_ => false
};
if(result)
{
_logger.LogInformation("Trigger condition met: Variable value {CurrentValue} satisfies {Condition} for trigger ID: {TriggerId}",
currentValue, trigger.Condition, trigger.Id);
}
return result;
return true;
}
/// <summary>