2025-05-12 14:02:22 +08:00
|
|
|
|
using JiShe.CollectBus.Common.Enums;
|
|
|
|
|
|
using JiShe.CollectBus.Common.Extensions;
|
2025-03-24 21:55:22 +08:00
|
|
|
|
using System;
|
2025-03-20 16:40:27 +08:00
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
using Volo.Abp.DependencyInjection;
|
|
|
|
|
|
|
|
|
|
|
|
namespace JiShe.CollectBus.ShardingStrategy
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 按天分表策略
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <typeparam name="TEntity"></typeparam>
|
|
|
|
|
|
public class DayShardingStrategy<TEntity> : IShardingStrategy<TEntity>
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 获取指定时间对应的集合名
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="dateTime"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public string GetCollectionName(DateTime dateTime)
|
|
|
|
|
|
{
|
|
|
|
|
|
var baseName = typeof(TEntity).Name;
|
2025-05-12 14:02:22 +08:00
|
|
|
|
return $"{baseName}_{dateTime.GetDataTableShardingStrategy(TableTimeStrategyEnum.DayShardingStrategy)}";
|
2025-03-20 16:40:27 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 获取当前时间对应的集合名
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public string GetCurrentCollectionName()
|
|
|
|
|
|
{
|
|
|
|
|
|
var baseName = typeof(TEntity).Name;
|
2025-05-12 14:02:22 +08:00
|
|
|
|
return $"{baseName}_{DateTime.Now.GetDataTableShardingStrategy(TableTimeStrategyEnum.DayShardingStrategy)}";
|
2025-03-20 16:40:27 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 用于查询时确定目标集合
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="startTime"></param>
|
|
|
|
|
|
/// <param name="endTime"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public IEnumerable<string> GetQueryCollectionNames(DateTime? startTime, DateTime? endTime)
|
|
|
|
|
|
{
|
|
|
|
|
|
var months = new List<string>();
|
|
|
|
|
|
var current = startTime ?? DateTime.MinValue;
|
|
|
|
|
|
var end = endTime ?? DateTime.MaxValue;
|
|
|
|
|
|
var baseName = typeof(TEntity).Name;
|
|
|
|
|
|
|
|
|
|
|
|
while (current <= end)
|
|
|
|
|
|
{
|
2025-05-12 14:02:22 +08:00
|
|
|
|
months.Add($"{baseName}_{current.GetDataTableShardingStrategy(TableTimeStrategyEnum.DayShardingStrategy)}");
|
2025-03-20 16:40:27 +08:00
|
|
|
|
current = current.AddMonths(1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return months.Distinct();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|