SysEnumService.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. // 大名科技(天津)有限公司版权所有 电话:18020030720 QQ:515096995
  2. //
  3. // 此源代码遵循位于源代码树根目录中的 LICENSE 文件的许可证
  4. namespace Admin.NET.Core.Service;
  5. /// <summary>
  6. /// 系统枚举服务
  7. /// </summary>
  8. [ApiDescriptionSettings(Order = 275)]
  9. [AllowAnonymous]
  10. public class SysEnumService : IDynamicApiController, ITransient
  11. {
  12. private readonly EnumOptions _enumOptions;
  13. public SysEnumService(IOptions<EnumOptions> enumOptions)
  14. {
  15. _enumOptions = enumOptions.Value;
  16. }
  17. /// <summary>
  18. /// 获取所有枚举类型
  19. /// </summary>
  20. /// <returns></returns>
  21. [DisplayName("获取所有枚举类型")]
  22. public List<EnumTypeOutput> GetEnumTypeList()
  23. {
  24. var enumTypeList = App.EffectiveTypes.Where(u => u.IsEnum && _enumOptions.EntityAssemblyNames.Contains(u.Assembly.GetName().Name)).OrderBy(u => u.Name).OrderBy(u => u.FullName).ToList();
  25. var result = new List<EnumTypeOutput>();
  26. foreach (var item in enumTypeList)
  27. {
  28. result.Add(GetEnumDescription(item));
  29. }
  30. return result;
  31. }
  32. private EnumTypeOutput GetEnumDescription(Type type)
  33. {
  34. string description = type.Name;
  35. var attrs = type.GetCustomAttributes(typeof(DescriptionAttribute), false);
  36. if (attrs.Any())
  37. {
  38. var att = ((DescriptionAttribute[])attrs)[0];
  39. description = att.Description;
  40. }
  41. return new EnumTypeOutput
  42. {
  43. TypeDescribe = description,
  44. TypeName = type.Name,
  45. TypeRemark = description
  46. };
  47. }
  48. /// <summary>
  49. /// 通过枚举类型获取枚举值集合
  50. /// </summary>
  51. /// <param name="input"></param>
  52. /// <returns></returns>
  53. [DisplayName("通过枚举类型获取枚举值集合")]
  54. public List<EnumEntity> GetEnumDataList([FromQuery] EnumInput input)
  55. {
  56. var enumType = App.EffectiveTypes.FirstOrDefault(u => u.IsEnum && u.Name == input.EnumName);
  57. if (enumType is not { IsEnum: true })
  58. throw Oops.Oh(ErrorCodeEnum.D1503);
  59. return enumType.EnumToList();
  60. }
  61. /// <summary>
  62. /// 通过实体的字段名获取相关枚举值集合(目前仅支持枚举类型)
  63. /// </summary>
  64. /// <param name="input"></param>
  65. /// <returns></returns>
  66. [DisplayName("通过实体的字段名获取相关枚举值集合")]
  67. public List<EnumEntity> GetEnumDataListByField([FromQuery] QueryEnumDataInput input)
  68. {
  69. // 获取实体类型属性
  70. Type entityType = App.EffectiveTypes.FirstOrDefault(u => u.Name == input.EntityName) ?? throw Oops.Oh(ErrorCodeEnum.D1504);
  71. // 获取字段类型
  72. var fieldType = entityType.GetProperties().FirstOrDefault(u => u.Name == input.FieldName)?.PropertyType;
  73. if (fieldType is not { IsEnum: true })
  74. throw Oops.Oh(ErrorCodeEnum.D1503);
  75. return fieldType.EnumToList();
  76. }
  77. }