YD_Event.Admin/YD_Event.Core/Extensions/YitIdHelperExtension.cs
2025-12-17 10:32:52 +08:00

80 lines
2.5 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using HashidsNet;
using Yitter.IdGenerator;
namespace Easy.Core;
public static class YitIdHelperExtension
{
/// <summary>
/// 盐值
/// </summary>
private const string Salt = "dkjsDLVK1S7y5be8XYzoq0C2nHaEmBfA";
/// <summary>
/// 注册雪花ID服务默认配置
/// </summary>
/// <param name="service"></param>
public static void AddIdGenerator(this IServiceCollection service)
{
service.AddIdGenerator(new IdGeneratorOptions(0));
}
/// <summary>
/// 注册雪花ID服务自定义配置
/// </summary>
/// <param name="service"></param>
/// <param name="sectionName"></param>
public static void AddIdGenerator(this IServiceCollection service, string sectionName)
{
var options = App.GetConfig<IdGeneratorOptions>(sectionName) ?? new IdGeneratorOptions(0);
options.BaseTime = options.BaseTime.ToUniversalTime();
YitIdHelper.SetIdGenerator(options);
service.AddSingleton<IIdGenerator>(new DefaultIdGenerator(options));
}
/// <summary>
/// 注册雪花ID服务自定义配置
/// </summary>
/// <param name="service"></param>
/// <param name="options">配置</param>
public static void AddIdGenerator(this IServiceCollection service, IdGeneratorOptions options)
{
options.BaseTime = options.BaseTime.ToUniversalTime();
YitIdHelper.SetIdGenerator(options);
service.AddSingleton<IIdGenerator>(new DefaultIdGenerator(options));
}
/// <summary>
/// 生成ID
/// </summary>
/// <param name="generator"></param>
/// <returns></returns>
public static long NextId(this IIdGenerator generator)
{
return generator.NewLong();
}
/// <summary>
/// 加密ID生成短ID
/// </summary>
/// <param name="generator"></param>
/// <param name="id">long类型ID</param>
/// <param name="salt">盐值</param>
/// <returns></returns>
public static string Encode(this IIdGenerator generator, long id, string salt = Salt)
{
return new Hashids(salt).EncodeLong(id);
}
/// <summary>
/// 解密加密ID解密短ID
/// </summary>
/// <param name="generator"></param>
/// <param name="text">密文</param>
/// <param name="salt">盐值</param>
/// <returns></returns>
public static long Decode(this IIdGenerator generator, string text, string salt = Salt)
{
return new Hashids(salt).DecodeSingleLong(text);
}
}