59 lines
1.9 KiB
C#
59 lines
1.9 KiB
C#
using JiShe.CollectBus.Common.Enums;
|
|
using JiShe.CollectBus.Common.Extensions;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace JiShe.CollectBus.ShardingStrategy
|
|
{
|
|
/// <summary>
|
|
/// 按小时分表
|
|
/// </summary>
|
|
/// <typeparam name="TEntity"></typeparam>
|
|
public class HourShardingStrategy<TEntity>
|
|
{
|
|
/// <summary>
|
|
/// 获取指定时间对应的集合名
|
|
/// </summary>
|
|
/// <param name="dateTime"></param>
|
|
/// <returns></returns>
|
|
public string GetCollectionName(DateTime dateTime)
|
|
{
|
|
var baseName = typeof(TEntity).Name;
|
|
return $"{baseName}_{dateTime.GetDataTableShardingStrategy(TableTimeStrategyEnum.HourShardingStrategy)}";
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取当前时间对应的集合名
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public string GetCurrentCollectionName()
|
|
{
|
|
var baseName = typeof(TEntity).Name;
|
|
return $"{baseName}_{DateTime.Now.GetDataTableShardingStrategy(TableTimeStrategyEnum.HourShardingStrategy)}";
|
|
}
|
|
|
|
/// <summary>
|
|
/// 用于查询时确定目标集合
|
|
/// </summary>
|
|
/// <param name="startTime"></param>
|
|
/// <param name="endTime"></param>
|
|
/// <returns></returns>
|
|
public IEnumerable<string> GetQueryCollectionNames(DateTime? startTime, DateTime? endTime)
|
|
{
|
|
var list = new List<string>();
|
|
var current = startTime ?? DateTime.MinValue;
|
|
var end = endTime ?? DateTime.MaxValue;
|
|
var baseName = typeof(TEntity).Name;
|
|
|
|
while (current <= end)
|
|
{
|
|
list.Add($"{baseName}_{current.GetDataTableShardingStrategy(TableTimeStrategyEnum.HourShardingStrategy)}");
|
|
current = current.AddHours(1);
|
|
}
|
|
|
|
return list.Distinct();
|
|
}
|
|
}
|
|
}
|