using JiShe.CollectBus.Common.Enums;
using JiShe.CollectBus.Common.Extensions;
using System;
using System.Collections.Generic;
using System.Linq;
namespace JiShe.CollectBus.ShardingStrategy
{
///
/// 按小时分表
///
///
public class HourShardingStrategy
{
///
/// 获取指定时间对应的集合名
///
///
///
public string GetCollectionName(DateTime dateTime)
{
var baseName = typeof(TEntity).Name;
return $"{baseName}_{dateTime.GetDataTableShardingStrategy(TableTimeStrategyEnum.HourShardingStrategy)}";
}
///
/// 获取当前时间对应的集合名
///
///
public string GetCurrentCollectionName()
{
var baseName = typeof(TEntity).Name;
return $"{baseName}_{DateTime.Now.GetDataTableShardingStrategy(TableTimeStrategyEnum.HourShardingStrategy)}";
}
///
/// 用于查询时确定目标集合
///
///
///
///
public IEnumerable GetQueryCollectionNames(DateTime? startTime, DateTime? endTime)
{
var list = new List();
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();
}
}
}