// 大名科技(天津)有限公司 版权所有 // // 此源代码遵循位于源代码树根目录中的 LICENSE 文件的许可证 // // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动 // // 任何基于本项目二次开发而产生的一切法律纠纷和责任,均与作者无关 namespace Admin.NET.Core.Service; /// /// 系统枚举服务 💥 /// [ApiDescriptionSettings(Order = 275)] [AllowAnonymous] public class SysEnumService : IDynamicApiController, ITransient { private readonly EnumOptions _enumOptions; public SysEnumService(IOptions enumOptions) { _enumOptions = enumOptions.Value; } /// /// 获取所有枚举类型 🔖 /// /// [DisplayName("获取所有枚举类型")] public List GetEnumTypeList() { var enumTypeList = App.EffectiveTypes.Where(u => u.IsEnum && _enumOptions.EntityAssemblyNames.Contains(u.Assembly.GetName().Name)).OrderBy(u => u.Name).OrderBy(u => u.FullName).ToList(); var result = new List(); foreach (var item in enumTypeList) { result.Add(GetEnumDescription(item)); } return result; } /// /// 获取字典描述 /// /// /// private static EnumTypeOutput GetEnumDescription(Type type) { string description = type.Name; var attrs = type.GetCustomAttributes(typeof(DescriptionAttribute), false); if (attrs.Any()) { var att = ((DescriptionAttribute[])attrs)[0]; description = att.Description; } var enumType = App.EffectiveTypes.FirstOrDefault(t => t.IsEnum && t.Name == type.Name); return new EnumTypeOutput { TypeDescribe = description, TypeName = type.Name, TypeRemark = description, EnumEntities = enumType.EnumToList() }; } /// /// 通过枚举类型获取枚举值集合 🔖 /// /// /// [DisplayName("通过枚举类型获取枚举值集合")] public List GetEnumDataList([FromQuery] EnumInput input) { var enumType = App.EffectiveTypes.FirstOrDefault(u => u.IsEnum && u.Name == input.EnumName); if (enumType is not { IsEnum: true }) throw Oops.Oh(ErrorCodeEnum.D1503); return enumType.EnumToList(); } /// /// 通过实体的字段名获取相关枚举值集合(目前仅支持枚举类型) 🔖 /// /// /// [DisplayName("通过实体的字段名获取相关枚举值集合")] public static List GetEnumDataListByField([FromQuery] QueryEnumDataInput input) { // 获取实体类型属性 Type entityType = App.EffectiveTypes.FirstOrDefault(u => u.Name == input.EntityName) ?? throw Oops.Oh(ErrorCodeEnum.D1504); // 获取字段类型 var fieldType = entityType.GetProperties().FirstOrDefault(u => u.Name == input.FieldName)?.PropertyType; if (fieldType is not { IsEnum: true }) throw Oops.Oh(ErrorCodeEnum.D1503); return fieldType.EnumToList(); } }