🍒 refactor(sysSerial): 优化流水号类型检查

This commit is contained in:
喵你个汪呀 2025-08-25 22:01:08 +08:00
parent 334a9a327b
commit 4558b53891
8 changed files with 28 additions and 19 deletions

View File

@ -22,7 +22,7 @@ public class TestCodeGenDemo : EntityBase
/// <summary>
/// 流水号
/// </summary>
[BindSerial(nameof(SysSerialTypeProvider.Test))]
[BindSerial(nameof(SerialTypeProvider.Test))]
[SugarColumn(ColumnDescription = "流水号", Length = 128)]
public string? SeqNo { get; set; }

View File

@ -21,7 +21,7 @@ public class SysSerialSeedData : ISqlSugarEntitySeedData<SysSerial>
{
return
[
new(){ Id=1300000000101, Type=SysSerialTypeProvider.Test, ResetInterval=ResetIntervalEnum.Day, Formater="T{yyyy}{MM}{SEQ}", Seq=0, Min=1, Max=9999999, Expy=DateTime.Parse("2025-01-01 12:00:00"), TenantId=SqlSugarConst.DefaultTenantId, OrderNo=100 },
new(){ Id=1300000000101, Type=SerialTypeProvider.Test, ResetInterval=ResetIntervalEnum.Day, Formater="T{yyyy}{MM}{SEQ}", Seq=0, Min=1, Max=9999999, Expy=DateTime.Parse("2025-01-01 12:00:00"), TenantId=SqlSugarConst.DefaultTenantId, OrderNo=100 },
];
}
}

View File

@ -9,7 +9,7 @@ namespace Admin.NET.Application;
/// <summary>
/// 扩展流水号插槽
/// </summary>
public class SysSerialSlotProvider : ISysSerialSlotProvider
public class SerialSlotProvider : ISerialSlotProvider
{
private static Lazy<UserManager> UserManager => new(() => App.GetService<UserManager>());
public Dictionary<string, Func<long, long, DateTime, string>> GetSlotMap()

View File

@ -9,7 +9,7 @@ namespace Admin.NET.Application;
/// <summary>
/// 业务流水号类型常量
/// </summary>
public class SysSerialTypeProvider : ISysSerialTypeProvider
public class SerialTypeProvider : ISerialTypeProvider
{
/// <summary>
/// 测试流水号

View File

@ -912,4 +912,10 @@ public enum ErrorCodeEnum
/// </summary>
[ErrorCodeItemMetadata("无效的流水号类型:{0}")]
S0007,
/// <summary>
/// 存在相同流水号类型请检查所有实现了ISerialTypeProvider接口的类字段
/// </summary>
[ErrorCodeItemMetadata("存在相同流水号类型请检查所有实现了ISerialTypeProvider接口的类字段")]
S0008,
}

View File

@ -7,9 +7,9 @@
namespace Admin.NET.Core.Service;
/// <summary>
/// 系统流水号插槽接口
/// 流水号插槽提供者接口
/// </summary>
public interface ISysSerialSlotProvider
public interface ISerialSlotProvider
{
public Dictionary<string, Func<long, long, DateTime, string>> GetSlotMap();
}

View File

@ -7,8 +7,8 @@
namespace Admin.NET.Core;
/// <summary>
/// 系统流水号类型常量提供者接口
/// 流水号类型提供者接口
/// </summary>
public class ISysSerialTypeProvider
public interface ISerialTypeProvider
{
}

View File

@ -134,15 +134,18 @@ public class SysSerialService : IDynamicApiController, ITransient
[DisplayName("获取流水号类型"), HttpGet]
public List<SelectListItem> GetTypeList()
{
return _sysCacheService.GetOrAdd(CacheConst.KeySysSerialType, _ =>
{
return App.EffectiveTypes
.Where(u => !u.IsInterface && u.IsClass && u.HasImplementedRawGeneric(typeof(ISysSerialTypeProvider)))
.SelectMany(u => u.GetFields())
.DistinctBy(u => u.Name)
.Select(u => new SelectListItem(u.GetCustomAttribute<DescriptionAttribute>()?.Description ?? u.Name, u.Name))
.ToList();
});
var typeList = _sysCacheService.Get<List<SelectListItem>>(CacheConst.KeySysSerialType);
if (typeList != null) return typeList;
typeList = App.EffectiveTypes
.Where(u => !u.IsInterface && u.IsClass && u.HasImplementedRawGeneric(typeof(ISerialTypeProvider)))
.SelectMany(u => u.GetFields())
.Select(u => new SelectListItem(u.GetCustomAttribute<DescriptionAttribute>()?.Description ?? u.Name, u.Name))
.ToList();
if (typeList.GroupBy(u => u.Value).Any(u => u.Count() > 1)) throw Oops.Oh(ErrorCodeEnum.S0008);
_sysCacheService.Set(CacheConst.KeySysSerialType, typeList);
return typeList;
}
/// <summary>
@ -332,8 +335,8 @@ public class SysSerialService : IDynamicApiController, ITransient
// 扩展插槽提供者
var providers = App.EffectiveTypes
.Where(u => !u.IsInterface && u.IsClass && u.HasImplementedRawGeneric(typeof(ISysSerialSlotProvider)))
.Select(u => (ISysSerialSlotProvider)Activator.CreateInstance(u))
.Where(u => !u.IsInterface && u.IsClass && u.HasImplementedRawGeneric(typeof(ISerialSlotProvider)))
.Select(u => (ISerialSlotProvider)Activator.CreateInstance(u))
.ToList();
foreach (var provider in providers)
{