SysConstService.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // 大名科技(天津)有限公司版权所有 电话:18020030720 QQ:515096995
  2. //
  3. // 此源代码遵循位于源代码树根目录中的 LICENSE 文件的许可证
  4. namespace Admin.NET.Core.Service;
  5. /// <summary>
  6. /// 系统常量服务
  7. /// </summary>
  8. [ApiDescriptionSettings(Order = 280)]
  9. [AllowAnonymous]
  10. public class SysConstService : IDynamicApiController, ITransient
  11. {
  12. private readonly SysCacheService _sysCacheService;
  13. public SysConstService(SysCacheService sysCacheService)
  14. {
  15. _sysCacheService = sysCacheService;
  16. }
  17. /// <summary>
  18. /// 获取所有常量列表
  19. /// </summary>
  20. /// <returns></returns>
  21. [DisplayName("获取所有常量列表")]
  22. public async Task<List<ConstOutput>> GetList()
  23. {
  24. var key = $"{CacheConst.KeyConst}list";
  25. var constlist = _sysCacheService.Get<List<ConstOutput>>(key);
  26. if (constlist == null)
  27. {
  28. var typeList = GetConstAttributeList();
  29. constlist = typeList.Select(u => new ConstOutput
  30. {
  31. Name = u.CustomAttributes.ToList().FirstOrDefault()?.ConstructorArguments.ToList().FirstOrDefault().Value?.ToString() ?? u.Name,
  32. Code = u.Name,
  33. Data = GetData(Convert.ToString(u.Name))
  34. }).ToList();
  35. _sysCacheService.Set(key, constlist);
  36. }
  37. return await Task.FromResult(constlist);
  38. }
  39. /// <summary>
  40. /// 根据类名获取常量数据
  41. /// </summary>
  42. /// <param name="typeName"></param>
  43. /// <returns></returns>
  44. [DisplayName("根据类名获取常量数据")]
  45. public async Task<List<ConstOutput>> GetData([Required] string typeName)
  46. {
  47. var key = $"{CacheConst.KeyConst}{typeName.ToUpper()}";
  48. var constlist = _sysCacheService.Get<List<ConstOutput>>(key);
  49. if (constlist == null)
  50. {
  51. var typeList = GetConstAttributeList();
  52. var type = typeList.FirstOrDefault(u => u.Name == typeName);
  53. var isEnum = type.BaseType.Name == "Enum";
  54. constlist = type.GetFields()?
  55. .Where(isEnum, u => u.FieldType.Name == typeName)
  56. .Select(u => new ConstOutput
  57. {
  58. Name = u.Name,
  59. Code = isEnum ? (int)u.GetValue(BindingFlags.Instance) : u.GetValue(BindingFlags.Instance)
  60. }).ToList();
  61. _sysCacheService.Set(key, constlist);
  62. }
  63. return await Task.FromResult(constlist);
  64. }
  65. /// <summary>
  66. /// 获取常量特性类型列表
  67. /// </summary>
  68. /// <returns></returns>
  69. private List<Type> GetConstAttributeList()
  70. {
  71. return AppDomain.CurrentDomain.GetAssemblies().SelectMany(u => u.GetTypes())
  72. .Where(u => u.CustomAttributes.Any(c => c.AttributeType == typeof(ConstAttribute))).ToList();
  73. }
  74. }