2025-06-06 14:15:31 +08:00
|
|
|
|
using JiShe.CollectBus.Ammeters;
|
2025-04-14 16:41:41 +08:00
|
|
|
|
using JiShe.CollectBus.Common.Consts;
|
2025-04-14 23:42:18 +08:00
|
|
|
|
using JiShe.CollectBus.Common.DeviceBalanceControl;
|
2025-04-21 14:20:49 +08:00
|
|
|
|
using JiShe.CollectBus.Common.Extensions;
|
2025-04-22 16:44:47 +08:00
|
|
|
|
using JiShe.CollectBus.Common.Helpers;
|
2025-05-12 15:14:19 +08:00
|
|
|
|
using JiShe.CollectBus.IotSystems.Devices;
|
2025-04-21 14:20:49 +08:00
|
|
|
|
using JiShe.CollectBus.IotSystems.PrepayModel;
|
2025-04-25 14:23:06 +08:00
|
|
|
|
using JiShe.CollectBus.Protocol.Interfaces;
|
2025-06-06 14:15:31 +08:00
|
|
|
|
using JiShe.ServicePro.FreeSqlProvider;
|
|
|
|
|
|
using JiShe.ServicePro.IoTDBManagement.Options;
|
|
|
|
|
|
using JiShe.ServicePro.IoTDBManagement.SessionPools;
|
|
|
|
|
|
using JiShe.ServicePro.Kafka.Internal;
|
|
|
|
|
|
using JiShe.ServicePro.Kafka.Producer;
|
2025-04-21 14:20:49 +08:00
|
|
|
|
using Microsoft.AspNetCore.Authorization;
|
|
|
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
|
|
using Microsoft.Extensions.Options;
|
2025-05-08 11:25:08 +08:00
|
|
|
|
using TouchSocket.Sockets;
|
2024-12-19 16:07:07 +08:00
|
|
|
|
|
|
|
|
|
|
namespace JiShe.CollectBus.Samples;
|
|
|
|
|
|
|
2025-04-15 15:49:22 +08:00
|
|
|
|
public class SampleAppService : CollectBusAppService, ISampleAppService, IKafkaSubscribe
|
2024-12-19 16:07:07 +08:00
|
|
|
|
{
|
2025-04-08 17:44:42 +08:00
|
|
|
|
private readonly ILogger<SampleAppService> _logger;
|
2025-06-06 14:15:31 +08:00
|
|
|
|
private readonly IoTDBSessionPoolProvider _iotDBProvider;
|
2025-04-21 10:17:40 +08:00
|
|
|
|
private readonly IoTDbOptions _options;
|
2025-04-16 17:36:46 +08:00
|
|
|
|
private readonly IRedisDataCacheService _redisDataCacheService;
|
2025-04-02 17:46:33 +08:00
|
|
|
|
|
2025-05-08 11:25:08 +08:00
|
|
|
|
private readonly IProducerService _producerService;
|
|
|
|
|
|
private readonly ITcpService _tcpService;
|
2025-06-06 14:15:31 +08:00
|
|
|
|
public SampleAppService(IoTDBSessionPoolProvider iotDBProvider, IOptions<IoTDbOptions> options,
|
|
|
|
|
|
ILogger<SampleAppService> logger, IRedisDataCacheService redisDataCacheService, IProducerService producerService, ITcpService tcpService)
|
2025-04-02 17:46:33 +08:00
|
|
|
|
{
|
|
|
|
|
|
_iotDBProvider = iotDBProvider;
|
2025-04-07 10:56:40 +08:00
|
|
|
|
_options = options.Value;
|
2025-04-08 17:44:42 +08:00
|
|
|
|
_logger = logger;
|
2025-04-16 17:36:46 +08:00
|
|
|
|
_redisDataCacheService = redisDataCacheService;
|
2025-05-15 23:59:10 +08:00
|
|
|
|
_producerService = producerService;
|
|
|
|
|
|
_tcpService = tcpService;
|
2025-04-02 17:46:33 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-04-16 17:36:46 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 测试 UseSessionPool
|
|
|
|
|
|
/// </summary>
|
2025-04-21 14:20:49 +08:00
|
|
|
|
/// <param name="testTime"></param>
|
2025-04-16 17:36:46 +08:00
|
|
|
|
/// <returns></returns>
|
2025-04-03 16:46:26 +08:00
|
|
|
|
[HttpGet]
|
2025-04-22 16:44:47 +08:00
|
|
|
|
public async Task UseSessionPool(long testTime)
|
|
|
|
|
|
{
|
2025-05-06 23:46:12 +08:00
|
|
|
|
var dataTime = DateTime.Now;
|
|
|
|
|
|
|
|
|
|
|
|
List<string> values = new List<string>() { $"{dataTime:yy}", $"{dataTime:MM}", $"{dataTime:dd}", $"{dataTime:HH}", $"{dataTime:mm}", };
|
|
|
|
|
|
|
2025-04-08 17:44:42 +08:00
|
|
|
|
|
2025-06-06 14:15:31 +08:00
|
|
|
|
|
2025-04-29 09:14:58 +08:00
|
|
|
|
//ElectricityMeterTreeModelExtension.GetCurrent()
|
2025-05-06 23:46:12 +08:00
|
|
|
|
//SourceEntityAccessorFactory.SetCurrent(meter);
|
2025-05-07 10:15:45 +08:00
|
|
|
|
|
2025-05-07 16:37:26 +08:00
|
|
|
|
//ElectricityMeterTreeModelAccessor.
|
|
|
|
|
|
//TableModelSingleMeasuringEntityExtension
|
2025-05-12 17:08:09 +08:00
|
|
|
|
//TableModelSingleMeasuringEntityAccessor.GetSystemName(meter);
|
2025-06-06 14:15:31 +08:00
|
|
|
|
//ElectricityMeterAccessor
|
2025-04-02 17:46:33 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-04-16 17:36:46 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 测试Session切换
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
2025-04-07 10:56:40 +08:00
|
|
|
|
[HttpGet]
|
2025-04-21 14:20:49 +08:00
|
|
|
|
public async Task UseTableSessionPool(DateTime time)
|
2025-04-07 10:56:40 +08:00
|
|
|
|
{
|
2025-05-15 23:59:10 +08:00
|
|
|
|
var testTime = time;
|
2025-06-06 14:15:31 +08:00
|
|
|
|
|
2025-05-12 17:08:09 +08:00
|
|
|
|
|
2025-04-21 14:20:49 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 测试Session切换3
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
[HttpGet]
|
|
|
|
|
|
public async Task UseTableSessionPool3(DateTime time)
|
|
|
|
|
|
{
|
|
|
|
|
|
var testTime = time;
|
2025-06-06 14:15:31 +08:00
|
|
|
|
|
2025-04-21 14:20:49 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2025-04-21 14:57:12 +08:00
|
|
|
|
/// 测试树模型单个测点数据项
|
2025-04-21 14:20:49 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="measuring"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
[HttpGet]
|
2025-04-21 14:57:12 +08:00
|
|
|
|
public async Task TestTreeModelSingleMeasuringEntity(string measuring, string value, DateTime time)
|
2025-04-21 14:20:49 +08:00
|
|
|
|
{
|
2025-06-06 14:15:31 +08:00
|
|
|
|
|
2025-04-21 14:20:49 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2025-04-21 14:57:12 +08:00
|
|
|
|
/// 测试树模型单个测点数据项2
|
2025-04-21 14:20:49 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="measuring"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
[HttpGet]
|
2025-04-21 14:57:12 +08:00
|
|
|
|
public async Task TestTreeModelSingleMeasuringEntity2(string measuring, int value, DateTime time)
|
2025-04-21 14:20:49 +08:00
|
|
|
|
{
|
2025-06-06 14:15:31 +08:00
|
|
|
|
|
2025-04-07 10:56:40 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-05-12 15:14:19 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 测试树模型单个测点数据项查询
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="measuring"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
[HttpGet]
|
|
|
|
|
|
public async Task TestTreeModelSingleMeasuringEntityQuery()
|
|
|
|
|
|
{
|
|
|
|
|
|
|
2025-06-06 14:15:31 +08:00
|
|
|
|
|
2025-05-12 15:14:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-04-21 14:57:12 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 测试表模型单个测点数据项
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="measuring"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
[HttpGet]
|
|
|
|
|
|
public async Task TestTableModelSingleMeasuringEntity(string measuring, string value, DateTime time)
|
|
|
|
|
|
{
|
2025-05-07 16:37:26 +08:00
|
|
|
|
time = DateTime.Now;
|
|
|
|
|
|
|
2025-06-06 14:15:31 +08:00
|
|
|
|
|
2025-04-21 14:57:12 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 测试表模型单个测点数据项2
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="measuring"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
[HttpGet]
|
|
|
|
|
|
public async Task TestTableModelSingleMeasuringEntity2(string measuring, int value, DateTime time)
|
|
|
|
|
|
{
|
2025-05-07 16:37:26 +08:00
|
|
|
|
time = DateTime.Now;
|
|
|
|
|
|
|
2025-06-06 14:15:31 +08:00
|
|
|
|
|
2025-04-21 14:57:12 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-04-09 23:11:36 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 测试设备分组均衡控制算法
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="deviceCount"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
[HttpGet]
|
|
|
|
|
|
public async Task TestDeviceGroupBalanceControl(int deviceCount = 200000)
|
|
|
|
|
|
{
|
2025-04-14 16:41:41 +08:00
|
|
|
|
//var deviceList = new List<string>();
|
|
|
|
|
|
//for (int i = 0; i < deviceCount; i++)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// deviceList.Add($"Device_{Guid.NewGuid()}");
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
//// 初始化缓存
|
|
|
|
|
|
//DeviceGroupBalanceControl.InitializeCache(deviceList);
|
|
|
|
|
|
|
2025-05-13 14:51:38 +08:00
|
|
|
|
//var timeDensity = "15";
|
|
|
|
|
|
////获取缓存中的电表信息
|
|
|
|
|
|
//var redisKeyList = $"{string.Format(RedisConst.CacheMeterInfoHashKey, "Energy", "JiSheCollectBus", MeterTypeEnum.Ammeter.ToString(), timeDensity)}*";
|
|
|
|
|
|
|
|
|
|
|
|
//var oneMinutekeyList = await FreeRedisProvider.Instance.KeysAsync(redisKeyList);
|
|
|
|
|
|
//var meterInfos = await GetMeterRedisCacheListData<AmmeterInfo>(oneMinutekeyList, "Energy", "JiSheCollectBus", timeDensity, MeterTypeEnum.Ammeter);
|
|
|
|
|
|
//List<string> focusAddressDataLista = new List<string>();
|
|
|
|
|
|
//foreach (var item in meterInfos)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// focusAddressDataLista.Add(item.FocusAddress);
|
|
|
|
|
|
//}
|
2025-04-09 23:11:36 +08:00
|
|
|
|
|
2025-05-13 14:51:38 +08:00
|
|
|
|
//DeviceGroupBalanceControl.InitializeCache(focusAddressDataLista);
|
2025-05-15 23:59:10 +08:00
|
|
|
|
|
2025-05-13 14:51:38 +08:00
|
|
|
|
//// 打印分布统计
|
|
|
|
|
|
//DeviceGroupBalanceControl.PrintDistributionStats();
|
2025-04-09 23:11:36 +08:00
|
|
|
|
|
|
|
|
|
|
await Task.CompletedTask;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-04-14 16:41:41 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 测试设备分组均衡控制算法获取分组Id
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="deviceAddress"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
[HttpGet]
|
|
|
|
|
|
public async Task TestGetDeviceGroupBalanceControl(string deviceAddress)
|
2025-05-15 23:59:10 +08:00
|
|
|
|
{
|
2025-04-14 16:41:41 +08:00
|
|
|
|
var groupId = DeviceGroupBalanceControl.GetDeviceGroupId(deviceAddress);
|
|
|
|
|
|
Console.WriteLine(groupId);
|
|
|
|
|
|
|
|
|
|
|
|
await Task.CompletedTask;
|
|
|
|
|
|
}
|
2025-05-15 23:59:10 +08:00
|
|
|
|
|
2025-04-11 11:56:23 +08:00
|
|
|
|
|
2025-04-16 17:36:46 +08:00
|
|
|
|
/// <summary>
|
2025-04-17 11:29:26 +08:00
|
|
|
|
/// 测试Redis批量读取10万条数据性能
|
2025-04-16 17:36:46 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
[HttpGet]
|
|
|
|
|
|
public async Task TestRedisCacheGetAllPagedData()
|
|
|
|
|
|
{
|
2025-05-13 14:51:38 +08:00
|
|
|
|
//var timeDensity = "15";
|
|
|
|
|
|
//string SystemType = "Energy";
|
|
|
|
|
|
//string ServerTagName = "JiSheCollectBus2";
|
|
|
|
|
|
//var redisCacheMeterInfoHashKeyTemp = $"{string.Format(RedisConst.CacheMeterInfoHashKey, SystemType, ServerTagName, MeterTypeEnum.Ammeter, timeDensity)}";
|
|
|
|
|
|
//var redisCacheMeterInfoSetIndexKeyTemp = $"{string.Format(RedisConst.CacheMeterInfoSetIndexKey, SystemType, ServerTagName, MeterTypeEnum.Ammeter, timeDensity)}";
|
|
|
|
|
|
//var redisCacheMeterInfoZSetScoresIndexKeyTemp = $"{string.Format(RedisConst.CacheMeterInfoZSetScoresIndexKey, SystemType, ServerTagName, MeterTypeEnum.Ammeter, timeDensity)}";
|
|
|
|
|
|
|
|
|
|
|
|
//var timer1 = Stopwatch.StartNew();
|
|
|
|
|
|
//decimal? cursor = null;
|
|
|
|
|
|
//string member = null;
|
|
|
|
|
|
//bool hasNext;
|
|
|
|
|
|
//List<AmmeterInfo> meterInfos = new List<AmmeterInfo>();
|
|
|
|
|
|
//do
|
|
|
|
|
|
//{
|
|
|
|
|
|
// var page = await _redisDataCacheService.GetAllPagedData<AmmeterInfo>(
|
|
|
|
|
|
// redisCacheMeterInfoHashKeyTemp,
|
|
|
|
|
|
// redisCacheMeterInfoZSetScoresIndexKeyTemp,
|
|
|
|
|
|
// pageSize: 1000,
|
|
|
|
|
|
// lastScore: cursor,
|
|
|
|
|
|
// lastMember: member);
|
|
|
|
|
|
|
|
|
|
|
|
// meterInfos.AddRange(page.Items);
|
|
|
|
|
|
// cursor = page.HasNext ? page.NextScore : null;
|
|
|
|
|
|
// member = page.HasNext ? page.NextMember : null;
|
|
|
|
|
|
// hasNext = page.HasNext;
|
|
|
|
|
|
//} while (hasNext);
|
|
|
|
|
|
|
|
|
|
|
|
//timer1.Stop();
|
|
|
|
|
|
//_logger.LogError($"读取数据更花费时间{timer1.ElapsedMilliseconds}毫秒");
|
|
|
|
|
|
|
|
|
|
|
|
//List<string> focusAddressDataLista = new List<string>();
|
|
|
|
|
|
//foreach (var item in meterInfos)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// focusAddressDataLista.Add(item.FocusAddress);
|
|
|
|
|
|
//}
|
2025-04-17 17:23:20 +08:00
|
|
|
|
|
2025-05-13 14:51:38 +08:00
|
|
|
|
//DeviceGroupBalanceControl.InitializeCache(focusAddressDataLista);
|
2025-04-17 17:23:20 +08:00
|
|
|
|
|
2025-05-13 14:51:38 +08:00
|
|
|
|
//// 打印分布统计
|
|
|
|
|
|
//DeviceGroupBalanceControl.PrintDistributionStats();
|
2025-04-17 17:23:20 +08:00
|
|
|
|
|
|
|
|
|
|
await Task.CompletedTask;
|
2025-04-16 17:36:46 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-04-11 11:56:23 +08:00
|
|
|
|
|
2025-04-18 17:46:24 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 下一个采集时间点验证
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
[HttpGet]
|
|
|
|
|
|
public async Task<DateTime> TestCalculateNextCollectionTime(string time, int timeDensity)
|
|
|
|
|
|
{
|
|
|
|
|
|
DateTime nextTaskTime = Convert.ToDateTime(time);
|
|
|
|
|
|
|
2025-05-15 23:59:10 +08:00
|
|
|
|
return await Task.FromResult(nextTaskTime.CalculateNextCollectionTime(timeDensity));
|
2025-04-18 17:46:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-12-19 16:07:07 +08:00
|
|
|
|
public Task<SampleDto> GetAsync()
|
|
|
|
|
|
{
|
|
|
|
|
|
return Task.FromResult(
|
|
|
|
|
|
new SampleDto
|
|
|
|
|
|
{
|
|
|
|
|
|
Value = 42
|
|
|
|
|
|
}
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Authorize]
|
|
|
|
|
|
public Task<SampleDto> GetAuthorizedAsync()
|
|
|
|
|
|
{
|
|
|
|
|
|
return Task.FromResult(
|
|
|
|
|
|
new SampleDto
|
|
|
|
|
|
{
|
|
|
|
|
|
Value = 42
|
|
|
|
|
|
}
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[AllowAnonymous]
|
|
|
|
|
|
public async Task<List<Vi_BaseAmmeterInfo>> Test()
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
var ammeterList = await SqlProvider.Instance.Change(DbEnum.PrepayDB).Select<Vi_BaseAmmeterInfo>().Where(d => d.TB_CustomerID == 5).Take(10).ToListAsync();
|
|
|
|
|
|
return ammeterList;
|
|
|
|
|
|
}
|
2025-04-11 17:12:29 +08:00
|
|
|
|
|
|
|
|
|
|
[AllowAnonymous]
|
|
|
|
|
|
public bool GetTestProtocol()
|
|
|
|
|
|
{
|
2025-05-15 23:59:10 +08:00
|
|
|
|
var aa = LazyServiceProvider.GetKeyedService<IProtocolPlugin>("TestProtocolPlugin");
|
2025-04-11 17:12:29 +08:00
|
|
|
|
return aa == null;
|
|
|
|
|
|
}
|
2025-04-15 11:15:42 +08:00
|
|
|
|
|
2025-06-06 14:15:31 +08:00
|
|
|
|
[KafkaSubscribe(KafkaTopicConsts.TESTTOPIC)]
|
2025-04-15 11:15:42 +08:00
|
|
|
|
|
2025-04-15 18:58:38 +08:00
|
|
|
|
public async Task<ISubscribeAck> KafkaSubscribeAsync(object obj)
|
2025-04-15 15:49:22 +08:00
|
|
|
|
{
|
|
|
|
|
|
_logger.LogWarning($"收到订阅消息: {obj}");
|
2025-05-15 23:59:10 +08:00
|
|
|
|
return SubscribeAck.Success();
|
2025-04-15 15:49:22 +08:00
|
|
|
|
}
|
2025-05-08 11:25:08 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 测试Kafka下发报文
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="input"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
[AllowAnonymous]
|
|
|
|
|
|
public async Task<bool> KafkaSendAsync(KafkaSendDto input)
|
|
|
|
|
|
{
|
2025-05-15 23:59:10 +08:00
|
|
|
|
ArgumentException.ThrowIfNullOrWhiteSpace(input.Address);
|
2025-05-08 11:25:08 +08:00
|
|
|
|
ArgumentException.ThrowIfNullOrWhiteSpace(input.Frame);
|
|
|
|
|
|
input.Frame = input.Frame.Replace(" ", "");
|
2025-06-06 14:15:31 +08:00
|
|
|
|
await _producerService.ProduceAsync<KafkaSendDto>(KafkaTopicConsts.TESTSENDTOPIC, input);
|
2025-05-08 11:25:08 +08:00
|
|
|
|
return await Task.FromResult(true);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 订阅下发的数据
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="dto"></param>
|
|
|
|
|
|
/// <returns></returns>
|
2025-06-06 14:15:31 +08:00
|
|
|
|
[KafkaSubscribe(KafkaTopicConsts.TESTSENDTOPIC), ApiExplorerSettings(IgnoreApi = true)]
|
2025-05-08 11:25:08 +08:00
|
|
|
|
|
|
|
|
|
|
public async Task<ISubscribeAck> KafkaSubscribeTestSendAsync(KafkaSendDto dto)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (_tcpService.ClientExists(dto.Address))
|
|
|
|
|
|
{
|
|
|
|
|
|
// 发送给设备
|
2025-05-08 11:58:26 +08:00
|
|
|
|
await _tcpService.SendAsync(dto.Address, Convert.FromHexString(dto.Frame));
|
2025-05-08 11:25:08 +08:00
|
|
|
|
_logger.LogWarning($"{dto.Address}下发消息报文:{dto.Frame}");
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
_logger.LogWarning($"{dto.Address}集中器未上线: {dto.Serialize()}");
|
|
|
|
|
|
}
|
2025-05-15 23:59:10 +08:00
|
|
|
|
// 测试不管是否上线都ACK
|
2025-05-08 11:25:08 +08:00
|
|
|
|
return SubscribeAck.Success();
|
|
|
|
|
|
}
|
2025-05-12 15:14:19 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 测试Redis批量读取10万条数据性能
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
[HttpGet]
|
|
|
|
|
|
public async Task TestRedisCacheGetData(string scores)
|
|
|
|
|
|
{
|
2025-05-13 14:51:38 +08:00
|
|
|
|
//var timeDensity = "15";
|
|
|
|
|
|
//string SystemType = "Energy";
|
|
|
|
|
|
//string ServerTagName = "JiSheCollectBus5";
|
|
|
|
|
|
//var redisCacheMeterInfoHashKeyTemp = $"{string.Format(RedisConst.CacheMeterInfoHashKey, SystemType, ServerTagName, MeterTypeEnum.Ammeter, timeDensity)}";
|
|
|
|
|
|
//var redisCacheMeterInfoSetIndexKeyTemp = $"{string.Format(RedisConst.CacheMeterInfoSetIndexKey, SystemType, ServerTagName, MeterTypeEnum.Ammeter, timeDensity)}";
|
|
|
|
|
|
//var redisCacheMeterInfoZSetScoresIndexKeyTemp = $"{string.Format(RedisConst.CacheMeterInfoZSetScoresIndexKey, SystemType, ServerTagName, MeterTypeEnum.Ammeter, timeDensity)}";
|
|
|
|
|
|
|
|
|
|
|
|
//var page = await _redisDataCacheService.GetSingleData<AmmeterInfo>(
|
|
|
|
|
|
// redisCacheMeterInfoHashKeyTemp,
|
|
|
|
|
|
// redisCacheMeterInfoZSetScoresIndexKeyTemp,
|
|
|
|
|
|
// "973219481:17",
|
|
|
|
|
|
// pageSize: 1000,
|
|
|
|
|
|
// lastScore: 100,
|
|
|
|
|
|
// lastMember: "memberId",
|
|
|
|
|
|
// descending: true
|
|
|
|
|
|
// );
|
2025-05-12 15:14:19 +08:00
|
|
|
|
|
|
|
|
|
|
await Task.CompletedTask;
|
|
|
|
|
|
}
|
2025-05-21 17:11:27 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// IoTDB空表查询情况
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
[HttpGet]
|
|
|
|
|
|
public async Task TestIoTDBEmptyTableQuery()
|
|
|
|
|
|
{
|
|
|
|
|
|
var meter = new MeterReadingTelemetryPacketInfo() { DevicePath = "MeterReadingTelemetryPacketInfo", DeviceId = "1111" };
|
|
|
|
|
|
QueryCondition conditions = new QueryCondition()
|
|
|
|
|
|
{
|
|
|
|
|
|
Field = "DeviceId",
|
|
|
|
|
|
Operator = "=",
|
|
|
|
|
|
Value = meter.DeviceId
|
|
|
|
|
|
};
|
|
|
|
|
|
var query = new IoTDBQueryOptions()
|
|
|
|
|
|
{
|
|
|
|
|
|
TableNameOrTreePath = meter.DevicePath,
|
|
|
|
|
|
PageIndex = 1,
|
|
|
|
|
|
PageSize = 1,
|
|
|
|
|
|
Conditions = new List<QueryCondition>() { conditions },
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
await _iotDBProvider.GetSessionPool(true).InitTableSessionModelAsync();
|
|
|
|
|
|
|
|
|
|
|
|
var pageResult = await _iotDBProvider.GetSessionPool(true).QueryAsync<MeterReadingTelemetryPacketInfo>(query);
|
|
|
|
|
|
|
|
|
|
|
|
await Task.CompletedTask;
|
|
|
|
|
|
}
|
2024-12-19 16:07:07 +08:00
|
|
|
|
}
|
2025-04-15 18:03:51 +08:00
|
|
|
|
|