- 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
41 lines
1.3 KiB
C#
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
|
|
};
|
|
}
|
|
}
|