向宁 fc4ecbbacc feat: add gRPC auth, condition comparators, seed data, EF migrations
- gRPC auth service for token validation
- Value comparator system (string, numeric, boolean, datetime, collection)
- Condition evaluator with strategy chain
- Form definition and data improvements
- Workflow instance/task endpoints updated
- Seed data and EF design-time factory
- Test coverage for comparators and handlers
2026-05-20 20:28:35 +08:00

41 lines
1.3 KiB
C#

using System.Text.Json;
namespace Workflow.Domain.Expressions.Comparators;
/// <summary>
/// 数值对比器。处理 ==, !=, >, <, >=, <= 操作符。
/// 仅当两个值都能解析为 decimal 时才进行比较,否则返回 false。
/// </summary>
public class NumericComparator : IValueComparator
{
private static readonly IReadOnlySet<string> _supportedOperators = new HashSet<string>
{
"==", "!=", ">", "<", ">=", "<="
};
public IReadOnlySet<string> 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
};
}
}