using System.Text.Json; namespace Workflow.Domain.Expressions.Comparators; /// /// 数值对比器。处理 ==, !=, >, <, >=, <= 操作符。 /// 仅当两个值都能解析为 decimal 时才进行比较,否则返回 false。 /// public class NumericComparator : IValueComparator { private static readonly IReadOnlySet _supportedOperators = new HashSet { "==", "!=", ">", "<", ">=", "<=" }; public IReadOnlySet SupportedOperators => _supportedOperators; public bool Compare(object? fieldValue, string operatorName, object? conditionValue) { if (fieldValue is null || !_supportedOperators.Contains(operatorName)) return false; if (!ValueComparatorHelper.TryGetDecimal(fieldValue, out var fieldNum)) return false; if (!ValueComparatorHelper.TryGetDecimalFromCondition(conditionValue, out var condNum)) return false; return operatorName switch { "==" => fieldNum == condNum, "!=" => fieldNum != condNum, ">" => fieldNum > condNum, "<" => fieldNum < condNum, ">=" => fieldNum >= condNum, "<=" => fieldNum <= condNum, _ => false }; } }