dev #2
@ -20,7 +20,7 @@ namespace JiShe.CollectBus.IoTDBProvider
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 测量值集合,用于构建Table的测量值,也就是columnNames参数
|
/// 测量值集合,用于构建Table的测量值,也就是columnNames参数
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<string> ColumnNames { get; } = new();
|
public List<string> ColumnNames { get; set; } = new();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 列类型集合,用于构建Table的列类型,也就是columnCategories参数
|
/// 列类型集合,用于构建Table的列类型,也就是columnCategories参数
|
||||||
@ -30,6 +30,6 @@ namespace JiShe.CollectBus.IoTDBProvider
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 值类型集合,用于构建Table的值类型,也就是dataTypes参数
|
/// 值类型集合,用于构建Table的值类型,也就是dataTypes参数
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<TSDataType>DataTypes { get; } = new();
|
public List<TSDataType> DataTypes { get; } = new();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,6 +9,7 @@ using Microsoft.Extensions.Hosting;
|
|||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@ -42,7 +43,7 @@ namespace JiShe.CollectBus.IoTDBProvider
|
|||||||
_runtimeContext = runtimeContext;
|
_runtimeContext = runtimeContext;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 插入数据
|
/// 插入数据
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -143,29 +144,39 @@ namespace JiShe.CollectBus.IoTDBProvider
|
|||||||
var timestamps = new List<long>();
|
var timestamps = new List<long>();
|
||||||
var values = new List<List<object>>();
|
var values = new List<List<object>>();
|
||||||
var devicePaths = new HashSet<string>();
|
var devicePaths = new HashSet<string>();
|
||||||
|
List<string> tempColumnNames = new List<string>();
|
||||||
|
tempColumnNames.AddRange(metadata.ColumnNames);
|
||||||
|
|
||||||
foreach (var entity in entities)
|
foreach (var entity in entities)
|
||||||
{
|
{
|
||||||
timestamps.Add(entity.Timestamps);
|
timestamps.Add(entity.Timestamps);
|
||||||
var rowValues = new List<object>();
|
var rowValues = new List<object>();
|
||||||
foreach (var measurement in metadata.ColumnNames)
|
foreach (var measurement in tempColumnNames)
|
||||||
{
|
{
|
||||||
|
|
||||||
PropertyInfo propertyInfo = typeof(T).GetProperty(measurement);
|
PropertyInfo propertyInfo = typeof(T).GetProperty(measurement);
|
||||||
if (propertyInfo == null)
|
if (propertyInfo == null)
|
||||||
{
|
{
|
||||||
throw new Exception($"{nameof(BuildTablet)} 构建表模型{typeof(T).Name}时,没有找到{measurement}属性,属于异常情况。");
|
throw new Exception($"{nameof(BuildTablet)} 构建表模型{typeof(T).Name}时,没有找到{measurement}属性,属于异常情况,-101。");
|
||||||
}
|
}
|
||||||
|
|
||||||
var value = propertyInfo.GetValue(entity);
|
var value = propertyInfo.GetValue(entity);
|
||||||
if (propertyInfo.IsDefined(typeof(SingleMeasuringAttribute), false) && value != null)//表示当前对象是单测点模式,
|
if (propertyInfo.IsDefined(typeof(SingleMeasuringAttribute), false) && value != null)//表示当前对象是单测点模式
|
||||||
{
|
{
|
||||||
Type tupleType = value.GetType();
|
Type tupleType = value.GetType();
|
||||||
Type[] tupleArgs = tupleType.GetGenericArguments();
|
Type[] tupleArgs = tupleType.GetGenericArguments();
|
||||||
Type item2Type = tupleArgs[1]; // T 的实际类型
|
Type item2Type = tupleArgs[1]; // T 的实际类型
|
||||||
var item2 = tupleType.GetProperty("Item2")!.GetValue(value);
|
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。");
|
||||||
|
}
|
||||||
|
|
||||||
rowValues.Add(item2);
|
var indexOf = metadata.ColumnNames.IndexOf(measurement);
|
||||||
|
metadata.ColumnNames[indexOf] = (string)item1!;
|
||||||
|
|
||||||
|
rowValues.Add(item2);
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -389,12 +400,34 @@ namespace JiShe.CollectBus.IoTDBProvider
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private DeviceMetadata GetMetadata<T>() where T : IoTEntity
|
private DeviceMetadata GetMetadata<T>() where T : IoTEntity
|
||||||
{
|
{
|
||||||
return _metadataCache.GetOrAdd(typeof(T), type =>
|
|
||||||
{
|
var columns = CollectColumnMetadata(typeof(T));
|
||||||
var columns = CollectColumnMetadata(type);
|
var metadata = BuildDeviceMetadata(columns);
|
||||||
var metadata = BuildDeviceMetadata(columns);
|
|
||||||
return metadata;
|
return _metadataCache.AddOrUpdate(
|
||||||
});
|
typeof(T),
|
||||||
|
addValueFactory: t => metadata, // 如果键不存在,用此值添加
|
||||||
|
updateValueFactory: (t, existingValue) =>
|
||||||
|
{
|
||||||
|
var columns = CollectColumnMetadata(t);
|
||||||
|
var metadata = BuildDeviceMetadata(columns);
|
||||||
|
|
||||||
|
//对现有值 existingValue 进行修改,返回新值
|
||||||
|
existingValue.ColumnNames = metadata.ColumnNames;
|
||||||
|
return existingValue;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
//return _metadataCache.GetOrAdd(typeof(T), type =>
|
||||||
|
//{
|
||||||
|
// var columns = CollectColumnMetadata(type);
|
||||||
|
// var metadata = BuildDeviceMetadata(columns);
|
||||||
|
// //if (metadata.IsSingleMeasuring)
|
||||||
|
// //{
|
||||||
|
// // _metadataCache.Remove(typeof(T));
|
||||||
|
// //}
|
||||||
|
// return metadata;
|
||||||
|
//});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -434,7 +467,7 @@ namespace JiShe.CollectBus.IoTDBProvider
|
|||||||
//warning: 单侧点模式注意事项
|
//warning: 单侧点模式注意事项
|
||||||
//Entity实体 字段类型是 Tuple<string,T>,Item1=>测点名称,Item2=>测点值,泛型
|
//Entity实体 字段类型是 Tuple<string,T>,Item1=>测点名称,Item2=>测点值,泛型
|
||||||
//只有一个Filed字段。
|
//只有一个Filed字段。
|
||||||
//MeasuringName 默认为 SingleMeasuringAttribute.FieldName。
|
//MeasuringName 默认为 SingleMeasuringAttribute.FieldName,以便于在获取对应的Value的时候重置为 Item1 的值。
|
||||||
|
|
||||||
Type tupleType = prop.PropertyType;
|
Type tupleType = prop.PropertyType;
|
||||||
Type[] tupleArgs = tupleType.GetGenericArguments();
|
Type[] tupleArgs = tupleType.GetGenericArguments();
|
||||||
@ -446,7 +479,7 @@ namespace JiShe.CollectBus.IoTDBProvider
|
|||||||
true
|
true
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (column.HasValue)
|
if (column.HasValue)
|
||||||
{
|
{
|
||||||
columns.Add(column.Value);
|
columns.Add(column.Value);
|
||||||
|
|||||||
@ -54,6 +54,11 @@ namespace JiShe.CollectBus.IoTDBProvider.Provider
|
|||||||
public async Task<int> InsertAsync(Tablet tablet)
|
public async Task<int> InsertAsync(Tablet tablet)
|
||||||
{
|
{
|
||||||
var result = await _sessionPool.InsertAlignedTabletAsync(tablet);
|
var result = await _sessionPool.InsertAlignedTabletAsync(tablet);
|
||||||
|
if (result != 0)
|
||||||
|
{
|
||||||
|
throw new Exception($"{nameof(TableSessionPoolAdapter)} ");
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user