本次提交对变量管理和数据处理进行了多项重构和优化:
1. 重构变量管理服务:
* 统一了单个和批量变量的更新逻辑,并引入 AutoMapper 进行对象映射,提高了代码的可维护性。
* 增加了对 IsHistoryEnabled 属性变更的跟踪,允许系统对此类变更做出响应。
2. 改进历史记录:
* HistoryProcessor 现在记录变量的 DisplayValue,使得历史数据与用户界面显示的值保持一致。
3. 修正值转换逻辑:
* ValueConvertProcessor 在应用转换公式后,会同时更新变量的 NumericValue 和 DisplayValue,确保了数据在处理链中的一致性。
This commit is contained in:
@@ -62,16 +62,21 @@ public class ValueConvertProcessor : IVariableProcessor
|
||||
// 使用 DataTable.Compute 来安全地计算表达式
|
||||
var result = new DataTable().Compute(expression, null);
|
||||
|
||||
// 将计算结果格式化后赋给 DisplayValue
|
||||
if (result is double || result is decimal || result is float)
|
||||
{
|
||||
variable.DisplayValue = string.Format("{0:F2}", result); // 默认格式化为两位小数,可根据需要调整
|
||||
}
|
||||
else
|
||||
{
|
||||
variable.DisplayValue = result.ToString();
|
||||
}
|
||||
}
|
||||
// 将计算结果格式化后赋给 DisplayValue
|
||||
if (result is double || result is decimal || result is float)
|
||||
{
|
||||
variable.DisplayValue = string.Format("{0:F2}", result); // 默认格式化为两位小数,可根据需要调整
|
||||
variable.NumericValue = Convert.ToDouble(result); // 更新NumericValue为计算后的值
|
||||
}
|
||||
else
|
||||
{
|
||||
variable.DisplayValue = result.ToString();
|
||||
// 尝试将字符串结果解析回double,以更新NumericValue
|
||||
if (double.TryParse(result.ToString(), NumberStyles.Any, CultureInfo.InvariantCulture, out var parsedResult))
|
||||
{
|
||||
variable.NumericValue = parsedResult;
|
||||
}
|
||||
} }
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, $"为变量 {variable.Name} (ID: {variable.Id}) 计算DisplayValue时出错。公式: '{variable.ConversionFormula}'");
|
||||
|
||||
Reference in New Issue
Block a user