143 lines
5.3 KiB
C#
Raw Normal View History

using JiShe.CollectBus.Common.Enums;
2025-04-25 13:42:08 +08:00
using JiShe.CollectBus.DynamicModule;
using JiShe.CollectBus.Interceptors;
2025-04-15 17:57:47 +08:00
using JiShe.CollectBus.IotSystems.MessageIssueds;
2025-04-25 13:42:08 +08:00
using JiShe.CollectBus.IotSystems.Protocols;
using JiShe.CollectBus.Protocol.Interfaces;
using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
2025-04-16 16:12:38 +08:00
using System.Diagnostics;
using System.Linq;
2025-04-24 21:01:01 +08:00
using System.Reflection;
2025-04-25 13:42:08 +08:00
using System.Threading.Tasks;
2025-04-24 00:34:00 +08:00
using Volo.Abp.Modularity;
2025-04-15 17:57:47 +08:00
namespace JiShe.CollectBus.Samples;
[AllowAnonymous]
2025-04-16 16:12:38 +08:00
public class TestAppService : CollectBusAppService
2025-04-15 17:57:47 +08:00
{
private readonly ILogger<TestAppService> _logger;
//private readonly ICassandraRepository<MessageIssued, string> _messageReceivedCassandraRepository;
//private readonly ICassandraProvider _cassandraProvider;
private readonly IProtocolService _protocolService;
2025-04-24 00:34:00 +08:00
private readonly IServiceProvider _serviceProvider;
2025-04-24 21:01:01 +08:00
private readonly IDynamicModuleManager _dynamicModuleManager;
2025-04-24 00:34:00 +08:00
2025-04-16 16:12:38 +08:00
2025-04-15 17:57:47 +08:00
public TestAppService(
ILogger<TestAppService> logger,
//ICassandraRepository<MessageIssued, string> messageReceivedCassandraRepository,
//ICassandraProvider cassandraProvider,
IProtocolService protocolService,IServiceProvider serviceProvider, IDynamicModuleManager dynamicModuleManager)
2025-04-15 17:57:47 +08:00
{
_logger = logger;
//_messageReceivedCassandraRepository = messageReceivedCassandraRepository;
//_cassandraProvider = cassandraProvider;
_protocolService = protocolService;
2025-04-24 00:34:00 +08:00
_serviceProvider = serviceProvider;
2025-04-24 21:01:01 +08:00
_dynamicModuleManager = dynamicModuleManager;
2025-04-15 17:57:47 +08:00
}
2025-04-16 16:12:38 +08:00
public async Task AddMessageOfCassandra()
2025-04-15 17:57:47 +08:00
{
//var stopwatch = Stopwatch.StartNew();
//for (int i = 1; i <= 10000; i++)
//{
// var str = Guid.NewGuid().ToString();
// await _messageReceivedCassandraRepository.InsertAsync(new MessageIssued
// {
// ClientId = str,
// DeviceNo = i.ToString(),
// MessageId = str,
// Type = IssuedEventType.Data,
// Id = str,
// Message = str.GetBytes()
// });
//}
//stopwatch.Stop();
//_logger.LogWarning($"插入 {10000} 条记录完成,耗时: {stopwatch.ElapsedMilliseconds} 毫秒");
2025-04-16 16:12:38 +08:00
}
public async Task AddMessageOfBulkInsertCassandra()
{
//var records = new List<MessageIssued>();
//var prepared = await _cassandraProvider.Session.PrepareAsync(
// $"INSERT INTO {_cassandraProvider.CassandraConfig.Keyspace}.{nameof(MessageIssued)} (id, clientid, message, deviceno,type,messageid) VALUES (?, ?, ?, ?, ?, ?)");
2025-04-16 16:12:38 +08:00
//for (int i = 1; i <= 100000; i++)
//{
// var str = Guid.NewGuid().ToString();
// records.Add(new MessageIssued
// {
// ClientId = str,
// DeviceNo = i.ToString(),
// MessageId = str,
// Type = IssuedEventType.Data,
// Id = str,
// Message = str.GetBytes()
// });
//}
//var stopwatch = Stopwatch.StartNew();
//await BulkInsertAsync(_cassandraProvider.Session, prepared, records);
//stopwatch.Stop();
//_logger.LogWarning($"插入 {100000} 条记录完成,耗时: {stopwatch.ElapsedMilliseconds} 毫秒");
2025-04-16 16:12:38 +08:00
}
//private static async Task BulkInsertAsync(ISession session, PreparedStatement prepared, List<MessageIssued> records)
//{
// var tasks = new List<Task>();
// var batch = new BatchStatement();
2025-04-16 16:12:38 +08:00
// for (int i = 0; i < records.Count; i++)
// {
// var record = records[i];
// var boundStatement = prepared.Bind(
// record.Id,
// record.ClientId,
// record.Message,
// record.DeviceNo,
// (int)record.Type,
// record.MessageId);
2025-04-16 16:12:38 +08:00
// // 设置一致性级别为ONE以提高性能
// boundStatement.SetConsistencyLevel(ConsistencyLevel.One);
2025-04-16 16:12:38 +08:00
// batch.Add(boundStatement);
2025-04-16 16:12:38 +08:00
// // 当达到批处理大小时执行
// if (batch.Statements.Count() >= 1000 || i == records.Count - 1)
// {
// tasks.Add(session.ExecuteAsync(batch));
// batch = new BatchStatement();
// }
// }
2025-04-16 16:12:38 +08:00
// // 等待所有批处理完成
// await Task.WhenAll(tasks);
//}
2025-04-21 09:54:34 +08:00
[LogIntercept]
public virtual Task<string> LogInterceptorTest(string str)
2025-04-21 09:54:34 +08:00
{
_logger.LogWarning(str);
return Task.FromResult(str) ;
}
public virtual async Task<ProtocolInfo> GetProtocol(string deviceCode, bool isSpecial = false)
{
var protocol = await _protocolService.FirstOrDefaultByDeviceAsync(deviceCode, isSpecial);
return protocol;
2025-04-21 09:54:34 +08:00
}
2025-04-24 00:34:00 +08:00
// 重新加载插件方法
public async Task ReloadPluginsAsync()
{
2025-04-24 21:01:01 +08:00
var aa = Assembly.LoadFile(
@"D:\Codes\CollectBusV5\JiShe.CollectBus\web\JiShe.CollectBus.Host\bin\Debug\net8.0\Plugins\JiShe.CollectBus.Protocol.Test.dll");
var module = aa.GetTypes().First(a=> typeof(IAbpModule).IsAssignableFrom(a));
await _dynamicModuleManager.ReinitializeModuleAsync(module);
2025-04-24 00:34:00 +08:00
}
2025-04-15 17:57:47 +08:00
}