diff --git a/modules/JiShe.CollectBus.Analyzers/ComplexTypeSourceAnalyzers.cs b/modules/JiShe.CollectBus.Analyzers/ComplexTypeSourceAnalyzers.cs
index 2f943d8..15179af 100644
--- a/modules/JiShe.CollectBus.Analyzers/ComplexTypeSourceAnalyzers.cs
+++ b/modules/JiShe.CollectBus.Analyzers/ComplexTypeSourceAnalyzers.cs
@@ -183,6 +183,9 @@ namespace JiShe.CollectBus.IncrementalGenerator
var propList = GetAllPropertiesInHierarchy(classSymbol);
+ //类名称
+ code.AppendLine($" public string EntityName {{get;}} = \"{classSymbol.Name}\";");
+
foreach (var prop in propList)
{
// 安全类型转换
@@ -216,6 +219,12 @@ namespace JiShe.CollectBus.IncrementalGenerator
return code.ToString();
}
+ ///
+ /// 生成ValueTuple元组属性访问器
+ ///
+ ///
+ ///
+ ///
private static void GenerateTupleAccessors(
IPropertySymbol prop,
INamedTypeSymbol tupleType,
@@ -291,7 +300,7 @@ namespace JiShe.CollectBus.IncrementalGenerator
}
}
}
-
+
///
/// 增强的工厂类实现
///
@@ -466,30 +475,48 @@ namespace JiShe.CollectBus.IncrementalGenerator
/// 生成当前类属性信息集合
///
private static void GenerateEntityMemberInfoList(
- IEnumerable propList,
- StringBuilder code,
- Compilation compilation,
- INamedTypeSymbol classSymbol)
+ IEnumerable propList,
+ StringBuilder code,
+ Compilation compilation,
+ INamedTypeSymbol classSymbol)
{
- code.AppendLine(" public List MemberList { get; } = new()");
+ code.AppendLine(" public List MemberList { get; } = new()");
code.AppendLine(" {");
var initializerLines = new List();
- var index = 0;
foreach (var prop in propList)
{
var propType = prop.Type.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat);
var parentType = prop.ContainingType.ToDisplayString();
- // 主属性
- initializerLines.Add(
+
+ // 处理主属性
+ var propAttributes = prop.GetAttributes()
+ .Where(a => !IsCompilerGeneratedAttribute(a))
+ .ToList();
+
+ var attributeInitializers = propAttributes
+ .Select(GenerateAttributeInitializer)
+ .Where(s => !string.IsNullOrEmpty(s));
+
+ var mainMember = new StringBuilder();
+ mainMember.Append(
$"new EntityMemberInfo(" +
$"\"{prop.Name}\", " +
- $"typeof({parentType}), " +
+ $"typeof({propType}), " +
$"(e) => Get{prop.Name}(({parentType})e), " +
$"(e, v) => Set{prop.Name}(({parentType})e, ({propType})v))");
- // 元组元素
+ if (attributeInitializers.Any())
+ {
+ mainMember.AppendLine();
+ mainMember.Append(" { CustomAttributes = new List");
+ mainMember.Append($" {{ {string.Join(", ", attributeInitializers)} }} }}");
+ }
+
+ initializerLines.Add(mainMember.ToString());
+
+ // 处理元组元素(假设不需要处理元组元素的特性)
if (prop.Type is INamedTypeSymbol { IsTupleType: true } tupleType)
{
foreach (var element in tupleType.TupleElements)
@@ -509,6 +536,90 @@ namespace JiShe.CollectBus.IncrementalGenerator
code.AppendLine(string.Join(",\n", initializerLines));
code.AppendLine(" };");
- }
+ }
+
+
+ private static string GenerateAttributeInitializer(AttributeData attribute)
+ {
+ if (attribute.AttributeClass == null)
+ return string.Empty;
+
+ var attributeClass = attribute.AttributeClass.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat);
+ var args = attribute.ConstructorArguments;
+ var namedArgs = attribute.NamedArguments;
+
+ var parameters = new List();
+ foreach (var arg in args)
+ {
+ parameters.Add(ConvertTypedConstantToCode(arg));
+ }
+
+ var constructorArgs = string.Join(", ", parameters);
+
+ var initializer = new StringBuilder();
+ initializer.Append($"new {attributeClass}({constructorArgs})");
+
+ if (namedArgs.Any())
+ {
+ initializer.Append(" { ");
+ var namedArgsList = namedArgs.Select(n => $"{n.Key} = {ConvertTypedConstantToCode(n.Value)}");
+ initializer.Append(string.Join(", ", namedArgsList));
+ initializer.Append(" }");
+ }
+
+ return initializer.ToString();
+ }
+
+ private static string ConvertTypedConstantToCode(TypedConstant constant)
+ {
+ if (constant.IsNull)
+ return "null";
+
+ switch (constant.Kind)
+ {
+ case TypedConstantKind.Array:
+ var elements = constant.Values.Select(ConvertTypedConstantToCode);
+ return $"new[] {{ {string.Join(", ", elements)} }}";
+ case TypedConstantKind.Type:
+ var typeSymbol = (ITypeSymbol)constant.Value!;
+ return $"typeof({typeSymbol.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat)})";
+ case TypedConstantKind.Enum:
+ return ConvertEnumTypedConstant(constant);
+ default:
+ return ConvertPrimitiveConstant(constant);
+ }
+ }
+
+ private static string ConvertEnumTypedConstant(TypedConstant constant)
+ {
+ var enumType = constant.Type!;
+ var enumValue = constant.Value!;
+ var enumTypeName = enumType.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat);
+
+ foreach (var member in enumType.GetMembers().OfType())
+ {
+ if (member.ConstantValue != null && member.ConstantValue.Equals(enumValue))
+ return $"{enumTypeName}.{member.Name}";
+ }
+
+ return $"({enumTypeName})({enumValue})";
+ }
+
+ private static string ConvertPrimitiveConstant(TypedConstant constant)
+ {
+ var value = constant.Value!;
+ return value switch
+ {
+ string s => $"\"{s}\"",
+ char c => $"'{c}'",
+ bool b => b ? "true" : "false",
+ _ => value.ToString()
+ };
+ }
+
+ private static bool IsCompilerGeneratedAttribute(AttributeData attribute)
+ {
+ return attribute.AttributeClass?.ToDisplayString() == "System.Runtime.CompilerServices.CompilerGeneratedAttribute";
+ }
}
}
\ No newline at end of file
diff --git a/modules/JiShe.CollectBus.IoTDB/Attribute/ATTRIBUTEColumnAttribute.cs b/modules/JiShe.CollectBus.IoTDB/Attributes/ATTRIBUTEColumnAttribute.cs
similarity index 83%
rename from modules/JiShe.CollectBus.IoTDB/Attribute/ATTRIBUTEColumnAttribute.cs
rename to modules/JiShe.CollectBus.IoTDB/Attributes/ATTRIBUTEColumnAttribute.cs
index d188c36..7ef13f3 100644
--- a/modules/JiShe.CollectBus.IoTDB/Attribute/ATTRIBUTEColumnAttribute.cs
+++ b/modules/JiShe.CollectBus.IoTDB/Attributes/ATTRIBUTEColumnAttribute.cs
@@ -1,4 +1,4 @@
-namespace JiShe.CollectBus.IoTDB.Attribute
+namespace JiShe.CollectBus.IoTDB.Attributes
{
///
/// Column分类标记特性(ATTRIBUTE字段),也就是属性字段
diff --git a/modules/JiShe.CollectBus.IoTDB/Attribute/EntityTypeAttribute.cs b/modules/JiShe.CollectBus.IoTDB/Attributes/EntityTypeAttribute.cs
similarity index 90%
rename from modules/JiShe.CollectBus.IoTDB/Attribute/EntityTypeAttribute.cs
rename to modules/JiShe.CollectBus.IoTDB/Attributes/EntityTypeAttribute.cs
index 3610c00..89a4e38 100644
--- a/modules/JiShe.CollectBus.IoTDB/Attribute/EntityTypeAttribute.cs
+++ b/modules/JiShe.CollectBus.IoTDB/Attributes/EntityTypeAttribute.cs
@@ -1,6 +1,6 @@
using JiShe.CollectBus.IoTDB.Enums;
-namespace JiShe.CollectBus.IoTDB.Attribute
+namespace JiShe.CollectBus.IoTDB.Attributes
{
///
/// IoTDB实体类型特性
diff --git a/modules/JiShe.CollectBus.IoTDB/Attribute/FIELDColumnAttribute.cs b/modules/JiShe.CollectBus.IoTDB/Attributes/FIELDColumnAttribute.cs
similarity index 82%
rename from modules/JiShe.CollectBus.IoTDB/Attribute/FIELDColumnAttribute.cs
rename to modules/JiShe.CollectBus.IoTDB/Attributes/FIELDColumnAttribute.cs
index 7cabdf4..43d699f 100644
--- a/modules/JiShe.CollectBus.IoTDB/Attribute/FIELDColumnAttribute.cs
+++ b/modules/JiShe.CollectBus.IoTDB/Attributes/FIELDColumnAttribute.cs
@@ -1,4 +1,4 @@
-namespace JiShe.CollectBus.IoTDB.Attribute
+namespace JiShe.CollectBus.IoTDB.Attributes
{
///
/// Column分类标记特性(FIELD字段),数据列字段
diff --git a/modules/JiShe.CollectBus.IoTDB/Attribute/SingleMeasuringAttribute.cs b/modules/JiShe.CollectBus.IoTDB/Attributes/SingleMeasuringAttribute.cs
similarity index 91%
rename from modules/JiShe.CollectBus.IoTDB/Attribute/SingleMeasuringAttribute.cs
rename to modules/JiShe.CollectBus.IoTDB/Attributes/SingleMeasuringAttribute.cs
index 5f0ca07..481bfa2 100644
--- a/modules/JiShe.CollectBus.IoTDB/Attribute/SingleMeasuringAttribute.cs
+++ b/modules/JiShe.CollectBus.IoTDB/Attributes/SingleMeasuringAttribute.cs
@@ -1,4 +1,4 @@
-namespace JiShe.CollectBus.IoTDB.Attribute
+namespace JiShe.CollectBus.IoTDB.Attributes
{
///
/// 用于标识当前实体为单侧点模式,单侧点模式只有一个Filed标识字段,类型是Tuple,Item1=>测点名称,Item2=>测点值,泛型
diff --git a/modules/JiShe.CollectBus.IoTDB/Attribute/TAGColumnAttribute.cs b/modules/JiShe.CollectBus.IoTDB/Attributes/TAGColumnAttribute.cs
similarity index 82%
rename from modules/JiShe.CollectBus.IoTDB/Attribute/TAGColumnAttribute.cs
rename to modules/JiShe.CollectBus.IoTDB/Attributes/TAGColumnAttribute.cs
index 6f40a47..48a3830 100644
--- a/modules/JiShe.CollectBus.IoTDB/Attribute/TAGColumnAttribute.cs
+++ b/modules/JiShe.CollectBus.IoTDB/Attributes/TAGColumnAttribute.cs
@@ -1,4 +1,4 @@
-namespace JiShe.CollectBus.IoTDB.Attribute
+namespace JiShe.CollectBus.IoTDB.Attributes
{
///
/// Column分类标记特性(TAG字段),标签字段
diff --git a/modules/JiShe.CollectBus.IoTDB/Attribute/TableNameOrTreePathAttribute.cs b/modules/JiShe.CollectBus.IoTDB/Attributes/TableNameOrTreePathAttribute.cs
similarity index 92%
rename from modules/JiShe.CollectBus.IoTDB/Attribute/TableNameOrTreePathAttribute.cs
rename to modules/JiShe.CollectBus.IoTDB/Attributes/TableNameOrTreePathAttribute.cs
index 1b4f4f0..ba0ca12 100644
--- a/modules/JiShe.CollectBus.IoTDB/Attribute/TableNameOrTreePathAttribute.cs
+++ b/modules/JiShe.CollectBus.IoTDB/Attributes/TableNameOrTreePathAttribute.cs
@@ -1,6 +1,6 @@
using JiShe.CollectBus.IoTDB.Enums;
-namespace JiShe.CollectBus.IoTDB.Attribute
+namespace JiShe.CollectBus.IoTDB.Attributes
{
///
/// IoTDB实体存储路径或表名称,一般用于已经明确的存储路径或表名称,例如日志存储
diff --git a/modules/JiShe.CollectBus.IoTDB/Model/IoTEntity.cs b/modules/JiShe.CollectBus.IoTDB/Model/IoTEntity.cs
index 48bc248..40403ed 100644
--- a/modules/JiShe.CollectBus.IoTDB/Model/IoTEntity.cs
+++ b/modules/JiShe.CollectBus.IoTDB/Model/IoTEntity.cs
@@ -1,5 +1,5 @@
using JiShe.CollectBus.Common.Attributes;
-using JiShe.CollectBus.IoTDB.Attribute;
+using JiShe.CollectBus.IoTDB.Attributes;
namespace JiShe.CollectBus.IoTDB.Model
{
diff --git a/modules/JiShe.CollectBus.IoTDB/Model/TableModelSingleMeasuringEntity.cs b/modules/JiShe.CollectBus.IoTDB/Model/TableModelSingleMeasuringEntity.cs
index ed0fd4d..a5c98cf 100644
--- a/modules/JiShe.CollectBus.IoTDB/Model/TableModelSingleMeasuringEntity.cs
+++ b/modules/JiShe.CollectBus.IoTDB/Model/TableModelSingleMeasuringEntity.cs
@@ -1,5 +1,5 @@
using JiShe.CollectBus.Analyzers.Shared;
-using JiShe.CollectBus.IoTDB.Attribute;
+using JiShe.CollectBus.IoTDB.Attributes;
using JiShe.CollectBus.IoTDB.Enums;
namespace JiShe.CollectBus.IoTDB.Model
diff --git a/modules/JiShe.CollectBus.IoTDB/Model/TreeModelSingleMeasuringEntity.cs b/modules/JiShe.CollectBus.IoTDB/Model/TreeModelSingleMeasuringEntity.cs
index c87516c..6244cdf 100644
--- a/modules/JiShe.CollectBus.IoTDB/Model/TreeModelSingleMeasuringEntity.cs
+++ b/modules/JiShe.CollectBus.IoTDB/Model/TreeModelSingleMeasuringEntity.cs
@@ -1,5 +1,5 @@
using JiShe.CollectBus.Analyzers.Shared;
-using JiShe.CollectBus.IoTDB.Attribute;
+using JiShe.CollectBus.IoTDB.Attributes;
using JiShe.CollectBus.IoTDB.Enums;
namespace JiShe.CollectBus.IoTDB.Model
diff --git a/modules/JiShe.CollectBus.IoTDB/Provider/IoTDBProvider.cs b/modules/JiShe.CollectBus.IoTDB/Provider/IoTDBProvider.cs
index 0047122..c88403f 100644
--- a/modules/JiShe.CollectBus.IoTDB/Provider/IoTDBProvider.cs
+++ b/modules/JiShe.CollectBus.IoTDB/Provider/IoTDBProvider.cs
@@ -12,7 +12,7 @@ using JiShe.CollectBus.Common.Enums;
using JiShe.CollectBus.Common.Extensions;
using JiShe.CollectBus.Common.Helpers;
using JiShe.CollectBus.Common.Models;
-using JiShe.CollectBus.IoTDB.Attribute;
+using JiShe.CollectBus.IoTDB.Attributes;
using JiShe.CollectBus.IoTDB.Context;
using JiShe.CollectBus.IoTDB.Interface;
using JiShe.CollectBus.IoTDB.Model;
@@ -213,7 +213,7 @@ namespace JiShe.CollectBus.IoTDB.Provider
var query = await BuildQuerySQL(options);
var sessionDataSet = await CurrentSession.ExecuteQueryStatementAsync(query);
-
+
_logger.LogWarning($"{nameof(QueryAsync)} 主题的任务 {options.TableNameOrTreePath} 路径批次{options.PageIndex}任务数据读取完成,共消耗{stopwatch2.ElapsedMilliseconds}毫秒。");
var result = new BusPagedResult
{
@@ -319,71 +319,71 @@ namespace JiShe.CollectBus.IoTDB.Provider
}
}
- //foreach (var measurement in tempColumnNames)
- //{
+ //foreach (var measurement in tempColumnNames)
+ //{
- // PropertyInfo propertyInfo = typeof(T).GetProperty(measurement);
- // if (propertyInfo == null)
- // {
- // throw new Exception($"{nameof(BuildTablet)} 构建表模型{typeof(T).Name}时,没有找到{measurement}属性,属于异常情况,-101。");
- // }
+ // PropertyInfo propertyInfo = typeof(T).GetProperty(measurement);
+ // if (propertyInfo == null)
+ // {
+ // throw new Exception($"{nameof(BuildTablet)} 构建表模型{typeof(T).Name}时,没有找到{measurement}属性,属于异常情况,-101。");
+ // }
- // var value = propertyInfo.GetValue(entity);
- // if (propertyInfo.IsDefined(typeof(SingleMeasuringAttribute), false) && metadata.IsSingleMeasuring == true)//表示当前对象是单测点模式
- // {
- // if (value != null)
- // {
- // Type tupleType = value.GetType();
- // Type[] tupleArgs = tupleType.GetGenericArguments();
- // Type item2Type = tupleArgs[1]; // T 的实际类型
- // var item1 = tupleType.GetProperty("Item1")!.GetValue(value);
- // var item2 = tupleType.GetProperty("Item2")!.GetValue(value);
- // if (item1 == null || item2 == null)
- // {
- // throw new Exception($"{nameof(BuildTablet)} 构建表模型{typeof(T).Name}时,单测点模式构建失败,没有获取测点名称或者测点值,-102。");
- // }
+ // var value = propertyInfo.GetValue(entity);
+ // if (propertyInfo.IsDefined(typeof(SingleMeasuringAttribute), false) && metadata.IsSingleMeasuring == true)//表示当前对象是单测点模式
+ // {
+ // if (value != null)
+ // {
+ // Type tupleType = value.GetType();
+ // Type[] tupleArgs = tupleType.GetGenericArguments();
+ // Type item2Type = tupleArgs[1]; // T 的实际类型
+ // var item1 = tupleType.GetProperty("Item1")!.GetValue(value);
+ // var item2 = tupleType.GetProperty("Item2")!.GetValue(value);
+ // if (item1 == null || item2 == null)
+ // {
+ // throw new Exception($"{nameof(BuildTablet)} 构建表模型{typeof(T).Name}时,单测点模式构建失败,没有获取测点名称或者测点值,-102。");
+ // }
- // var indexOf = metadata.ColumnNames.IndexOf(measurement);
- // metadata.ColumnNames[indexOf] = (string)item1!;
+ // var indexOf = metadata.ColumnNames.IndexOf(measurement);
+ // metadata.ColumnNames[indexOf] = (string)item1!;
- // rowValues.Add(item2);
- // }
- // else
- // {
- // rowValues.Add(null);
- // }
+ // rowValues.Add(item2);
+ // }
+ // else
+ // {
+ // rowValues.Add(null);
+ // }
- // //同时如果是单测点模式,且是table模型存储,路径只能通过DevicePathBuilder.GetDeviceTableName(entity)获取
- // if (_runtimeContext.UseTableSessionPool)
- // {
- // tableNameOrTreePath = DevicePathBuilder.GetDeviceTableName(entity);
- // }
- // }
- // else
- // {
+ // //同时如果是单测点模式,且是table模型存储,路径只能通过DevicePathBuilder.GetDeviceTableName(entity)获取
+ // if (_runtimeContext.UseTableSessionPool)
+ // {
+ // tableNameOrTreePath = DevicePathBuilder.GetDeviceTableName(entity);
+ // }
+ // }
+ // else
+ // {
- // //需要根据value的类型,进行相应的值映射转换,例如datetime转换为long的时间戳值
- // if (value != null)
- // {
- // Type tupleType = value.GetType();
- // var tempValue = tupleType.Name.ToUpper() switch
- // {
- // "DATETIME" => Convert.ToDateTime(value).GetDateTimeOffset().ToUnixTimeNanoseconds(),
- // _ => value
- // };
+ // //需要根据value的类型,进行相应的值映射转换,例如datetime转换为long的时间戳值
+ // if (value != null)
+ // {
+ // Type tupleType = value.GetType();
+ // var tempValue = tupleType.Name.ToUpper() switch
+ // {
+ // "DATETIME" => Convert.ToDateTime(value).GetDateTimeOffset().ToUnixTimeNanoseconds(),
+ // _ => value
+ // };
- // rowValues.Add(tempValue);
- // }
- // else
- // {
- // rowValues.Add(value);
- // }
+ // rowValues.Add(tempValue);
+ // }
+ // else
+ // {
+ // rowValues.Add(value);
+ // }
- // }
+ // }
- //}
+ //}
- values.Add(rowValues);
+ values.Add(rowValues);
//如果指定了路径
if (!string.IsNullOrWhiteSpace(tableNameOrTreePath))
@@ -634,44 +634,57 @@ namespace JiShe.CollectBus.IoTDB.Provider
private List CollectColumnMetadata(ISourceEntityAccessor accessor)
{
var columns = new List();
-
- foreach (var prop in accessor.MemberList)
- {
- string typeName = string.Empty;
- Type declaredType = prop.Type;
+ foreach (var member in accessor.MemberList)
+ {
+ //元组的子项字段详情不处理。
+ if (member.NameOrPath.Contains(".Item"))
+ {
+ continue;
+ }
+
+ string declaredTypeName = string.Empty;
+
+ Type declaredType = member.DeclaredType;//属性的类型,如string,int等
+
// 处理可空类型
if (declaredType.IsGenericType && declaredType.GetGenericTypeDefinition() == typeof(Nullable<>))
{
Type underlyingType = Nullable.GetUnderlyingType(declaredType);
- typeName = underlyingType.Name;
+ declaredTypeName = underlyingType.Name;
}
else
{
- typeName = declaredType.Name;
+ declaredTypeName = member.NameOrPath;
}
+
+ var tagAttr = member.CustomAttributes?.OfType().FirstOrDefault();
+ var attrColumn = member.CustomAttributes?.OfType().FirstOrDefault();
+ var fieldColumn = member.CustomAttributes?.OfType().FirstOrDefault();
+
+ //判断是否是单测数据
+ var singleMeasuringAttribute = member.CustomAttributes?.OfType().FirstOrDefault();
+
//先获取Tag标签和属性标签
- ColumnInfo? column = declaredType.GetCustomAttribute() is not null ? new ColumnInfo(
- name: prop.Path,
+ ColumnInfo? column = tagAttr != null ? new ColumnInfo(
+ name: member.NameOrPath,
category: ColumnCategory.TAG,
- dataType: GetDataTypeFromTypeName(typeName),
+ dataType: GetDataTypeFromTypeName(declaredTypeName),
false
- ) : declaredType.GetCustomAttribute() is not null ? new ColumnInfo(
- prop.Path,
+ ) : attrColumn != null ? new ColumnInfo(
+ member.NameOrPath,
ColumnCategory.ATTRIBUTE,
- GetDataTypeFromTypeName(typeName),
+ GetDataTypeFromTypeName(declaredTypeName),
false
- ) : declaredType.GetCustomAttribute() is not null ? new ColumnInfo(
- prop.Path,
+ ) : fieldColumn != null ? new ColumnInfo(
+ member.NameOrPath,
ColumnCategory.FIELD,
- GetDataTypeFromTypeName(typeName),
+ GetDataTypeFromTypeName(declaredTypeName),
false)
: null;
- //最先检查是不是单侧点模式
- SingleMeasuringAttribute singleMeasuringAttribute = declaredType.GetCustomAttribute();
-
+ //检查是不是单侧点模式
if (singleMeasuringAttribute != null && column == null)
{
//warning: 单侧点模式注意事项
@@ -679,15 +692,19 @@ namespace JiShe.CollectBus.IoTDB.Provider
//只有一个Filed字段。
//MeasuringName 默认为 SingleMeasuringAttribute.FieldName,以便于在获取对应的Value的时候重置为 Item1 的值。
- //Type tupleType = prop.PropertyType;
- //Type[] tupleArgs = tupleType.GetGenericArguments();
+ Type tupleType = accessor.MemberList.Where(d => d.NameOrPath == $"{member.NameOrPath}.Item2").FirstOrDefault()?.DeclaredType;
- //column = new ColumnInfo(
- // singleMeasuringAttribute.FieldName,
- // ColumnCategory.FIELD,
- // GetDataTypeFromTypeName(tupleArgs[1].Name),
- // true
- //);
+ if (tupleType == null)
+ {
+ throw new Exception($"{nameof(CollectColumnMetadata)} {accessor.EntityName} {member.NameOrPath} 属性解析异常");
+ }
+
+ column = new ColumnInfo(
+ member.NameOrPath,
+ ColumnCategory.FIELD,
+ GetDataTypeFromTypeName(tupleType.Name),
+ true
+ );
}
if (column.HasValue)
diff --git a/services/JiShe.CollectBus.Domain/Ammeters/ElectricityMeter.cs b/services/JiShe.CollectBus.Domain/Ammeters/ElectricityMeter.cs
index c04a554..ca1d0db 100644
--- a/services/JiShe.CollectBus.Domain/Ammeters/ElectricityMeter.cs
+++ b/services/JiShe.CollectBus.Domain/Ammeters/ElectricityMeter.cs
@@ -1,12 +1,12 @@
using JiShe.CollectBus.Analyzers.Shared;
-using JiShe.CollectBus.IoTDB.Attribute;
+using JiShe.CollectBus.IoTDB.Attributes;
using JiShe.CollectBus.IoTDB.Enums;
using JiShe.CollectBus.IoTDB.Model;
namespace JiShe.CollectBus.Ammeters
{
[EntityType(EntityTypeEnum.TableModel)]
- //[SourceAnalyzers]
+ [SourceAnalyzers]
public class ElectricityMeter : IoTEntity
{
[ATTRIBUTEColumn]
@@ -31,7 +31,7 @@ namespace JiShe.CollectBus.Ammeters
public double Current { get; set; }
[FIELDColumn]
- public double Power => Voltage * Current;
+ public double Power { get; set; }
[FIELDColumn]
public double? Currentd { get; set; }
diff --git a/services/JiShe.CollectBus.Domain/Ammeters/ElectricityMeterTreeModel.cs b/services/JiShe.CollectBus.Domain/Ammeters/ElectricityMeterTreeModel.cs
index 982c144..5fb6010 100644
--- a/services/JiShe.CollectBus.Domain/Ammeters/ElectricityMeterTreeModel.cs
+++ b/services/JiShe.CollectBus.Domain/Ammeters/ElectricityMeterTreeModel.cs
@@ -1,5 +1,5 @@
using JiShe.CollectBus.Analyzers.Shared;
-using JiShe.CollectBus.IoTDB.Attribute;
+using JiShe.CollectBus.IoTDB.Attributes;
using JiShe.CollectBus.IoTDB.Enums;
using JiShe.CollectBus.IoTDB.Model;
using System;
diff --git a/services/JiShe.CollectBus.Domain/IotSystems/MeterReadingRecords/MeterReadingTelemetryPacketInfo.cs b/services/JiShe.CollectBus.Domain/IotSystems/MeterReadingRecords/MeterReadingTelemetryPacketInfo.cs
index 4b61e99..1d361be 100644
--- a/services/JiShe.CollectBus.Domain/IotSystems/MeterReadingRecords/MeterReadingTelemetryPacketInfo.cs
+++ b/services/JiShe.CollectBus.Domain/IotSystems/MeterReadingRecords/MeterReadingTelemetryPacketInfo.cs
@@ -1,5 +1,5 @@
using JiShe.CollectBus.Analyzers.Shared;
-using JiShe.CollectBus.IoTDB.Attribute;
+using JiShe.CollectBus.IoTDB.Attributes;
using JiShe.CollectBus.IoTDB.Enums;
using JiShe.CollectBus.IoTDB.Model;
using System;
diff --git a/shared/JiShe.CollectBus.Analyzers.Shared/EntityMemberInfo.cs b/shared/JiShe.CollectBus.Analyzers.Shared/EntityMemberInfo.cs
index a45f4c2..28520be 100644
--- a/shared/JiShe.CollectBus.Analyzers.Shared/EntityMemberInfo.cs
+++ b/shared/JiShe.CollectBus.Analyzers.Shared/EntityMemberInfo.cs
@@ -9,24 +9,45 @@ namespace JiShe.CollectBus.Analyzers.Shared
///
public sealed class EntityMemberInfo
{
- public string Path { get; set; }
- public Type Type { get; set; }
- private readonly Func