🍒 refactor(sysSerial): 优化流水号类型检查
This commit is contained in:
parent
334a9a327b
commit
4558b53891
@ -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; }
|
||||
|
||||
|
||||
@ -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 },
|
||||
];
|
||||
}
|
||||
}
|
||||
@ -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()
|
||||
@ -9,7 +9,7 @@ namespace Admin.NET.Application;
|
||||
/// <summary>
|
||||
/// 业务流水号类型常量
|
||||
/// </summary>
|
||||
public class SysSerialTypeProvider : ISysSerialTypeProvider
|
||||
public class SerialTypeProvider : ISerialTypeProvider
|
||||
{
|
||||
/// <summary>
|
||||
/// 测试流水号
|
||||
@ -912,4 +912,10 @@ public enum ErrorCodeEnum
|
||||
/// </summary>
|
||||
[ErrorCodeItemMetadata("无效的流水号类型:{0}")]
|
||||
S0007,
|
||||
|
||||
/// <summary>
|
||||
/// 存在相同流水号类型,请检查所有实现了ISerialTypeProvider接口的类字段
|
||||
/// </summary>
|
||||
[ErrorCodeItemMetadata("存在相同流水号类型,请检查所有实现了ISerialTypeProvider接口的类字段")]
|
||||
S0008,
|
||||
}
|
||||
@ -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();
|
||||
}
|
||||
@ -7,8 +7,8 @@
|
||||
namespace Admin.NET.Core;
|
||||
|
||||
/// <summary>
|
||||
/// 系统流水号类型常量提供者接口
|
||||
/// 流水号类型提供者接口
|
||||
/// </summary>
|
||||
public class ISysSerialTypeProvider
|
||||
public interface ISerialTypeProvider
|
||||
{
|
||||
}
|
||||
@ -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)
|
||||
{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user