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