diff --git a/DMS.Application/DTOs/VariableHistoryDto.cs b/DMS.Application/DTOs/VariableHistoryDto.cs
index f8bd630..f0665ff 100644
--- a/DMS.Application/DTOs/VariableHistoryDto.cs
+++ b/DMS.Application/DTOs/VariableHistoryDto.cs
@@ -11,5 +11,6 @@ public class VariableHistoryDto
public int VariableId { get; set; }
public string VariableName { get; set; }
public string Value { get; set; }
+ public double NumericValue { get; set; }
public DateTime Timestamp { get; set; }
}
\ No newline at end of file
diff --git a/DMS.Application/Services/Processors/HistoryProcessor.cs b/DMS.Application/Services/Processors/HistoryProcessor.cs
index 8ac9c02..c854f70 100644
--- a/DMS.Application/Services/Processors/HistoryProcessor.cs
+++ b/DMS.Application/Services/Processors/HistoryProcessor.cs
@@ -42,6 +42,7 @@ public class HistoryProcessor : IVariableProcessor, IDisposable
{
VariableId = context.Data.Id,
Value = context.Data.DisplayValue?.ToString() ?? string.Empty,
+ NumericValue = context.Data.NumericValue,
Timestamp = DateTime.Now // 记录当前时间
};
diff --git a/DMS.Application/Services/Processors/ValueConvertProcessor.cs b/DMS.Application/Services/Processors/ValueConvertProcessor.cs
index 01d2695..233d2ae 100644
--- a/DMS.Application/Services/Processors/ValueConvertProcessor.cs
+++ b/DMS.Application/Services/Processors/ValueConvertProcessor.cs
@@ -3,6 +3,7 @@ using System.Globalization;
using DMS.Application.DTOs;
using DMS.Application.Interfaces;
using DMS.Application.Models;
+using DMS.Core.Enums;
using Microsoft.Extensions.Logging;
namespace DMS.Application.Services.Processors;
@@ -19,20 +20,36 @@ public class ValueConvertProcessor : IVariableProcessor
public Task ProcessAsync(VariableContext context)
{
var oldValue = context.Data.DataValue;
-
- // 步骤 1: 将原始值转换为 DataValue 和 NumericValue
- ConvertS7ValueToStringAndNumeric(context.Data, context.NewValue);
-
- // 步骤 2: 根据公式计算 DisplayValue
- CalculateDisplayValue(context.Data);
-
- context.Data.UpdatedAt = DateTime.Now;
-
// 如果值没有变化则中断处理链
- if (context.Data.DataValue == oldValue)
+ if (context.Data.DataValue == context.NewValue)
{
context.IsHandled = true;
}
+
+ // 步骤 1: 将原始值转换为 DataValue 和 NumericValue
+ context.Data.DataValue = context.NewValue;
+ if (context.Data.DataType == DataType.Bool)
+ {
+ context.Data.NumericValue=context.NewValue=="True"?1:0;
+ context.Data.DisplayValue = context.NewValue;
+ }
+ else
+ {
+ if (double.TryParse(context.Data.DataValue, NumberStyles.Float, CultureInfo.InvariantCulture, out var parsedFromStr))
+ {
+ context.Data.NumericValue = parsedFromStr;
+
+ }
+ // 步骤 2: 根据公式计算 DisplayValue
+ CalculateDisplayValue(context.Data);
+ }
+
+
+
+
+ context.Data.UpdatedAt = DateTime.Now;
+
+
return Task.CompletedTask;
}
@@ -89,76 +106,20 @@ public class ValueConvertProcessor : IVariableProcessor
///
/// 关联的变量 DTO
/// 从 S7 读取的原始对象值
- private void ConvertS7ValueToStringAndNumeric(VariableDto variable, object value)
+ private void ConvertS7ValueToStringAndNumeric(VariableDto variable, string value)
{
if (value == null)
return;
string directConversion = null;
double numericValue = 0.0;
-
- switch (value)
+ if (variable.DataType == DataType.Bool)
{
- case double d:
- directConversion = d.ToString("G17", CultureInfo.InvariantCulture);
- numericValue = d;
- break;
- case float f:
- directConversion = f.ToString("G9", CultureInfo.InvariantCulture);
- numericValue = f;
- break;
- case int i:
- directConversion = i.ToString(CultureInfo.InvariantCulture);
- numericValue = i;
- break;
- case uint ui:
- directConversion = ui.ToString(CultureInfo.InvariantCulture);
- numericValue = ui;
- break;
- case short s:
- directConversion = s.ToString(CultureInfo.InvariantCulture);
- numericValue = s;
- break;
- case ushort us:
- directConversion = us.ToString(CultureInfo.InvariantCulture);
- numericValue = us;
- break;
- case byte b:
- directConversion = b.ToString(CultureInfo.InvariantCulture);
- numericValue = b;
- break;
- case sbyte sb:
- directConversion = sb.ToString(CultureInfo.InvariantCulture);
- numericValue = sb;
- break;
- case long l:
- directConversion = l.ToString(CultureInfo.InvariantCulture);
- numericValue = l;
- break;
- case ulong ul:
- directConversion = ul.ToString(CultureInfo.InvariantCulture);
- numericValue = ul;
- break;
- case bool boolValue:
- directConversion = boolValue.ToString().ToLowerInvariant();
- numericValue = boolValue ? 1.0 : 0.0;
- break;
- case string str:
- directConversion = str;
- if (double.TryParse(str, NumberStyles.Float, CultureInfo.InvariantCulture, out var parsedFromStr))
- {
- numericValue = parsedFromStr;
- }
- break;
- default:
- _logger.LogWarning($"变量 {variable.Name} 读取到未预期的数据类型: {value.GetType().Name}, 值: {value}");
- directConversion = value.ToString() ?? string.Empty;
- if (double.TryParse(directConversion, NumberStyles.Float, CultureInfo.InvariantCulture, out var parsedFromObj))
- {
- numericValue = parsedFromObj;
- }
- break;
+ numericValue=value.ToString()=="True"?1.0:0.0;
+ directConversion = value.ToString();
+ return;
}
+
variable.DataValue = directConversion ?? value.ToString() ?? string.Empty;
variable.NumericValue = numericValue;
diff --git a/DMS.Core/Models/VariableHistory.cs b/DMS.Core/Models/VariableHistory.cs
index b7ac7c6..5658265 100644
--- a/DMS.Core/Models/VariableHistory.cs
+++ b/DMS.Core/Models/VariableHistory.cs
@@ -9,5 +9,6 @@ public class VariableHistory
public int VariableId { get; set; }
public Variable Variable { get; set; }
public string Value { get; set; } // 以字符串形式存储,便于通用性
+ public double NumericValue { get; set; }
public DateTime Timestamp { get; set; }
}
\ No newline at end of file
diff --git a/DMS.Infrastructure/Data/SqlSugarDbContext.cs b/DMS.Infrastructure/Data/SqlSugarDbContext.cs
index 28b640e..b87a271 100644
--- a/DMS.Infrastructure/Data/SqlSugarDbContext.cs
+++ b/DMS.Infrastructure/Data/SqlSugarDbContext.cs
@@ -5,14 +5,20 @@ namespace DMS.Infrastructure.Data;
public class SqlSugarDbContext
{
- private readonly SqlSugarClient _db;
+ private readonly AppSettings _settings;
public SqlSugarDbContext(AppSettings settings)
{
- var connectionString = settings.ToConnectionString();
- var dbType = (SqlSugar.DbType)Enum.Parse(typeof(SqlSugar.DbType), settings.Database.DbType);
+ _settings = settings;
+ }
- _db = new SqlSugarClient(new ConnectionConfig
+
+ public SqlSugarClient GetInstance()
+ {
+ var connectionString = _settings.ToConnectionString();
+ var dbType = (SqlSugar.DbType)Enum.Parse(typeof(SqlSugar.DbType), _settings.Database.DbType);
+
+ return new SqlSugarClient(new ConnectionConfig
{
ConnectionString = connectionString,
DbType = dbType,
@@ -20,10 +26,4 @@ public class SqlSugarDbContext
InitKeyType = InitKeyType.Attribute
});
}
-
-
- public SqlSugarClient GetInstance()
- {
- return _db;
- }
}
\ No newline at end of file
diff --git a/DMS.Infrastructure/Entities/DbVariableHistory.cs b/DMS.Infrastructure/Entities/DbVariableHistory.cs
index 248cca8..c7a7271 100644
--- a/DMS.Infrastructure/Entities/DbVariableHistory.cs
+++ b/DMS.Infrastructure/Entities/DbVariableHistory.cs
@@ -9,5 +9,6 @@ public class DbVariableHistory
public long Id { get; set; }
public int VariableId { get; set; }
public string Value { get; set; }
+ public double NumericValue { get; set; }
public DateTime Timestamp { get; set; }
}
\ No newline at end of file