dev #2
@ -6,6 +6,7 @@ using JiShe.CollectBus.FreeSql;
|
|||||||
using JiShe.CollectBus.IoTDBProvider;
|
using JiShe.CollectBus.IoTDBProvider;
|
||||||
using JiShe.CollectBus.IotSystems.PrepayModel;
|
using JiShe.CollectBus.IotSystems.PrepayModel;
|
||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
namespace JiShe.CollectBus.Samples;
|
namespace JiShe.CollectBus.Samples;
|
||||||
|
|
||||||
@ -20,11 +21,12 @@ public class SampleAppService : CollectBusAppService, ISampleAppService
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public async Task AddReadingAsync()
|
[HttpGet]
|
||||||
|
public async Task AddReadingAsync(int buildTabletMode = 1)
|
||||||
{
|
{
|
||||||
ElectricityMeter meter = new ElectricityMeter()
|
ElectricityMeter meter = new ElectricityMeter()
|
||||||
{
|
{
|
||||||
SystemName = "Energy",
|
SystemName = "energy",
|
||||||
DeviceId = "402440506",
|
DeviceId = "402440506",
|
||||||
DeviceType = "Ammeter",
|
DeviceType = "Ammeter",
|
||||||
Current = 10,
|
Current = 10,
|
||||||
@ -32,7 +34,7 @@ public class SampleAppService : CollectBusAppService, ISampleAppService
|
|||||||
ProjectCode = "10059",
|
ProjectCode = "10059",
|
||||||
Voltage = 10
|
Voltage = 10
|
||||||
};
|
};
|
||||||
await _iotDBProvider.InsertAsync(meter,2);
|
await _iotDBProvider.InsertAsync(meter, buildTabletMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<SampleDto> GetAsync()
|
public Task<SampleDto> GetAsync()
|
||||||
|
|||||||
@ -58,6 +58,12 @@
|
|||||||
<ProjectReference Include="..\JiShe.CollectBus.MongoDB\JiShe.CollectBus.MongoDB.csproj" />
|
<ProjectReference Include="..\JiShe.CollectBus.MongoDB\JiShe.CollectBus.MongoDB.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Content Update="appsettings.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Update="Plugins\JiShe.CollectBus.Protocol.dll">
|
<None Update="Plugins\JiShe.CollectBus.Protocol.dll">
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
|||||||
@ -73,18 +73,12 @@
|
|||||||
"Version": "V1"
|
"Version": "V1"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"Cap": {
|
|
||||||
"RabbitMq": {
|
|
||||||
"HostName": "118.190.144.92",
|
|
||||||
"UserName": "collectbus",
|
|
||||||
"Password": "123456",
|
|
||||||
"Port": 5672
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"IoTDBOptions": {
|
"IoTDBOptions": {
|
||||||
"UserName": "root",
|
"UserName": "root",
|
||||||
"Password": "root",
|
"Password": "root",
|
||||||
"ClusterList": [ "192.168.56.102:6667" ],
|
"ClusterList": [ "192.168.56.102:6667" ],
|
||||||
"PoolSize": 10
|
"PoolSize": 10,
|
||||||
|
"DataBaseName": "energy",
|
||||||
|
"OpenDebugMode": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -11,6 +11,11 @@ namespace JiShe.CollectBus.IoTDBProvider
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class IoTDBOptions
|
public class IoTDBOptions
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 数据库名称
|
||||||
|
/// </summary>
|
||||||
|
public string DataBaseName { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 集群列表
|
/// 集群列表
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -28,5 +33,10 @@ namespace JiShe.CollectBus.IoTDBProvider
|
|||||||
/// 连接池大小
|
/// 连接池大小
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int PoolSize { get; set; } = 3;
|
public int PoolSize { get; set; } = 3;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否开启调试模式,生产环境请关闭,因为底层的实现方式,可能会导致内存持续增长。
|
||||||
|
/// </summary>
|
||||||
|
public bool OpenDebugMode { get; set;}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,14 +12,14 @@ namespace JiShe.CollectBus.IoTDBProvider
|
|||||||
public static class DevicePathBuilder
|
public static class DevicePathBuilder
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 构建设备路径
|
/// 构建设备路径,由于路径的层级约束规范不能是纯数字字符,所以需要做特殊处理。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="T"></typeparam>
|
/// <typeparam name="T"></typeparam>
|
||||||
/// <param name="entity"></param>
|
/// <param name="entity"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static string GetDeviceId<T>(T entity) where T : IoTEntity
|
public static string GetDeviceId<T>(T entity) where T : IoTEntity
|
||||||
{
|
{
|
||||||
return $"root.{entity.SystemName}.{entity.ProjectCode}.{entity.DeviceId}";
|
return $"root.{entity.SystemName.ToLower()}.`{entity.ProjectCode}`.`{entity.DeviceId}`";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -32,7 +32,7 @@ namespace JiShe.CollectBus.IoTDBProvider
|
|||||||
public static string GetTableName<T>() where T : IoTEntity
|
public static string GetTableName<T>() where T : IoTEntity
|
||||||
{
|
{
|
||||||
var type = typeof(T);
|
var type = typeof(T);
|
||||||
return $"{type.Name}";
|
return $"{type.Name.ToLower()}";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -32,10 +32,18 @@ namespace JiShe.CollectBus.IoTDBProvider
|
|||||||
.SetNodeUrls(_options.ClusterList)
|
.SetNodeUrls(_options.ClusterList)
|
||||||
.SetUsername(_options.UserName)
|
.SetUsername(_options.UserName)
|
||||||
.SetPassword(_options.Password)
|
.SetPassword(_options.Password)
|
||||||
|
.SetDatabase(_options.DataBaseName)
|
||||||
.SetFetchSize(_options.PoolSize)
|
.SetFetchSize(_options.PoolSize)
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
_sessionPool.Open(false).Wait();
|
_sessionPool.Open(false).Wait();
|
||||||
|
if (_options.OpenDebugMode)
|
||||||
|
{
|
||||||
|
_sessionPool.OpenDebugMode(builder =>
|
||||||
|
{
|
||||||
|
builder.AddConsole();
|
||||||
|
});
|
||||||
|
}
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,7 +58,11 @@ namespace JiShe.CollectBus.IoTDBProvider
|
|||||||
var metadata = GetMetadata<T>();
|
var metadata = GetMetadata<T>();
|
||||||
|
|
||||||
var tablet = BuildTablet(new[] { entity }, metadata, buildTabletMode);
|
var tablet = BuildTablet(new[] { entity }, metadata, buildTabletMode);
|
||||||
await _sessionPool.InsertAsync(tablet);
|
var result = await _sessionPool.InsertAsync(tablet);
|
||||||
|
if (result <=0)
|
||||||
|
{
|
||||||
|
_logger.LogWarning($"{typeof(T).Name}插入数据没有成功");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -69,7 +81,11 @@ namespace JiShe.CollectBus.IoTDBProvider
|
|||||||
foreach (var batch in batches)
|
foreach (var batch in batches)
|
||||||
{
|
{
|
||||||
var tablet = BuildTablet(batch, metadata, buildTabletMode);
|
var tablet = BuildTablet(batch, metadata, buildTabletMode);
|
||||||
await _sessionPool.InsertAsync(tablet);
|
var result = await _sessionPool.InsertAsync(tablet);
|
||||||
|
if (result <= 0)
|
||||||
|
{
|
||||||
|
_logger.LogWarning($"{typeof(T).Name} 批量插入数据第{batch}批次没有成功,共{batches}批次。");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -320,61 +336,6 @@ namespace JiShe.CollectBus.IoTDBProvider
|
|||||||
var metadata = BuildDeviceMetadata(columns);
|
var metadata = BuildDeviceMetadata(columns);
|
||||||
return metadata;
|
return metadata;
|
||||||
});
|
});
|
||||||
|
|
||||||
//return _metadataCache.GetOrAdd(typeof(T), type =>
|
|
||||||
//{
|
|
||||||
// var metadata = new DeviceMetadata();
|
|
||||||
// List<Tuple<string, ColumnCategory, TSDataType>> columns = new();
|
|
||||||
// foreach (var prop in type.GetProperties())
|
|
||||||
// {
|
|
||||||
// //标签列
|
|
||||||
// var attrTAG = prop.GetCustomAttribute<TAGColumnAttribute>();
|
|
||||||
// if (attrTAG != null)
|
|
||||||
// {
|
|
||||||
// columns.Add(Tuple.Create(prop.PropertyType.Name, ColumnCategory.TAG, GetDataTypeFromStr(prop.PropertyType.Name)));
|
|
||||||
// continue;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// //属性列
|
|
||||||
// var attrATTRIBUTE = prop.GetCustomAttribute<ATTRIBUTEColumnAttribute>();
|
|
||||||
// if (attrATTRIBUTE != null)
|
|
||||||
// {
|
|
||||||
// columns.Add(Tuple.Create(prop.PropertyType.Name, ColumnCategory.ATTRIBUTE, GetDataTypeFromStr(prop.PropertyType.Name)));
|
|
||||||
// continue;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// //数据列
|
|
||||||
// var attrFIELD = prop.GetCustomAttribute<FIELDColumnAttribute>();
|
|
||||||
// if (attrFIELD != null)
|
|
||||||
// {
|
|
||||||
// columns.Add(Tuple.Create(prop.PropertyType.Name, ColumnCategory.FIELD, GetDataTypeFromStr(prop.PropertyType.Name)));
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// var columnCategories = EnumExtensions.ToEnumDictionary<ColumnCategory>();
|
|
||||||
// foreach (var item in columnCategories)
|
|
||||||
// {
|
|
||||||
// if (item.Value == ColumnCategory.TAG)
|
|
||||||
// {
|
|
||||||
// metadata.ColumnNames.AddRange(columns.Where(d => d.Item2 == ColumnCategory.FIELD).Select(d => d.Item1).ToList());
|
|
||||||
// metadata.ColumnCategories.AddRange(columns.Where(d => d.Item2 == ColumnCategory.TAG).Select(d => d.Item2).ToList());
|
|
||||||
// metadata.DataTypes.AddRange(columns.Where(d => d.Item2 == ColumnCategory.TAG).Select(d => d.Item3).ToList());
|
|
||||||
// }
|
|
||||||
// else if (item.Value == ColumnCategory.ATTRIBUTE)
|
|
||||||
// {
|
|
||||||
// metadata.ColumnNames.AddRange(columns.Where(d => d.Item2 == ColumnCategory.ATTRIBUTE).Select(d => d.Item1).ToList());
|
|
||||||
// metadata.ColumnCategories.AddRange(columns.Where(d => d.Item2 == ColumnCategory.ATTRIBUTE).Select(d => d.Item2).ToList());
|
|
||||||
// metadata.DataTypes.AddRange(columns.Where(d => d.Item2 == ColumnCategory.ATTRIBUTE).Select(d => d.Item3).ToList());
|
|
||||||
// }
|
|
||||||
// else if (item.Value == ColumnCategory.FIELD)
|
|
||||||
// {
|
|
||||||
// metadata.ColumnNames.AddRange(columns.Where(d => d.Item2 == ColumnCategory.FIELD).Select(d => d.Item1).ToList());
|
|
||||||
// metadata.ColumnCategories.AddRange(columns.Where(d => d.Item2 == ColumnCategory.FIELD).Select(d => d.Item2).ToList());
|
|
||||||
// metadata.DataTypes.AddRange(columns.Where(d => d.Item2 == ColumnCategory.FIELD).Select(d => d.Item3).ToList());
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return metadata;
|
|
||||||
//});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user