SysEnumService.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. // 麻省理工学院许可证
  2. //
  3. // 版权所有 (c) 2021-2023 zuohuaijun,大名科技(天津)有限公司 联系电话/微信:18020030720 QQ:515096995
  4. //
  5. // 特此免费授予获得本软件的任何人以处理本软件的权利,但须遵守以下条件:在所有副本或重要部分的软件中必须包括上述版权声明和本许可声明。
  6. //
  7. // 软件按“原样”提供,不提供任何形式的明示或暗示的保证,包括但不限于对适销性、适用性和非侵权的保证。
  8. // 在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是因合同、侵权或其他方式引起的,与软件或其使用或其他交易有关。
  9. namespace Admin.NET.Core.Service;
  10. /// <summary>
  11. /// 系统枚举服务
  12. /// </summary>
  13. [ApiDescriptionSettings(Order = 275)]
  14. [AllowAnonymous]
  15. public class SysEnumService : IDynamicApiController, ITransient
  16. {
  17. private readonly EnumOptions _enumOptions;
  18. public SysEnumService(IOptions<EnumOptions> enumOptions)
  19. {
  20. _enumOptions = enumOptions.Value;
  21. }
  22. /// <summary>
  23. /// 获取所有枚举类型
  24. /// </summary>
  25. /// <returns></returns>
  26. [DisplayName("获取所有枚举类型")]
  27. public List<EnumTypeOutput> GetEnumTypeList()
  28. {
  29. var enumTypeList = App.EffectiveTypes.Where(u => u.IsEnum && _enumOptions.EntityAssemblyNames.Contains(u.Assembly.GetName().Name)).OrderBy(u => u.Name).ToList();
  30. var result = new List<EnumTypeOutput>();
  31. foreach (var item in enumTypeList)
  32. {
  33. result.Add(GetEnumDescription(item));
  34. }
  35. return result;
  36. }
  37. private EnumTypeOutput GetEnumDescription(Type type)
  38. {
  39. string description = type.Name;
  40. var attrs = type.GetCustomAttributes(typeof(DescriptionAttribute), false);
  41. if (attrs.Any())
  42. {
  43. var att = ((DescriptionAttribute[])attrs)[0];
  44. description = att.Description;
  45. }
  46. return new EnumTypeOutput
  47. {
  48. TypeDescribe = description,
  49. TypeName = type.Name,
  50. TypeRemark = description
  51. };
  52. }
  53. /// <summary>
  54. /// 通过枚举类型获取枚举值集合
  55. /// </summary>
  56. /// <param name="input"></param>
  57. /// <returns></returns>
  58. [DisplayName("通过枚举类型获取枚举值集合")]
  59. public List<EnumEntity> GetEnumDataList([FromQuery] EnumInput input)
  60. {
  61. var enumType = App.EffectiveTypes.FirstOrDefault(u => u.IsEnum && u.Name == input.EnumName);
  62. if (enumType is not { IsEnum: true })
  63. throw Oops.Oh(ErrorCodeEnum.D1503);
  64. return enumType.EnumToList();
  65. }
  66. /// <summary>
  67. /// 通过实体的字段名获取相关枚举值集合(目前仅支持枚举类型)
  68. /// </summary>
  69. /// <param name="input"></param>
  70. /// <returns></returns>
  71. [DisplayName("通过实体的字段名获取相关枚举值集合")]
  72. public List<EnumEntity> GetEnumDataListByField([FromQuery] QueryEnumDataInput input)
  73. {
  74. // 获取实体类型属性
  75. Type entityType = App.EffectiveTypes.FirstOrDefault(u => u.Name == input.EntityName) ?? throw Oops.Oh(ErrorCodeEnum.D1504);
  76. // 获取字段类型
  77. var fieldType = entityType.GetProperties().FirstOrDefault(u => u.Name == input.FieldName)?.PropertyType;
  78. if (fieldType is not { IsEnum: true })
  79. throw Oops.Oh(ErrorCodeEnum.D1503);
  80. return fieldType.EnumToList();
  81. }
  82. }