更新代码

This commit is contained in:
ChenYi 2025-04-03 16:46:26 +08:00
parent 5772ce906d
commit 50639f6fcf
6 changed files with 46 additions and 73 deletions

View File

@ -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()

View File

@ -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>

View File

@ -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
} }
} }

View File

@ -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;}
} }
} }

View File

@ -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()}";
} }
} }

View File

@ -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>