SysConstService.cs 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. // 大名科技(天津)有限公司 版权所有
  2. //
  3. // 此源代码遵循位于源代码树根目录中的 LICENSE 文件的许可证
  4. //
  5. // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动
  6. //
  7. // 任何基于本项目二次开发而产生的一切法律纠纷和责任,均与作者无关
  8. namespace Admin.NET.Core.Service;
  9. /// <summary>
  10. /// 系统常量服务 💥
  11. /// </summary>
  12. [ApiDescriptionSettings(Order = 280)]
  13. [AllowAnonymous]
  14. public class SysConstService : IDynamicApiController, ITransient
  15. {
  16. private readonly SysCacheService _sysCacheService;
  17. public SysConstService(SysCacheService sysCacheService)
  18. {
  19. _sysCacheService = sysCacheService;
  20. }
  21. /// <summary>
  22. /// 获取所有常量列表 🔖
  23. /// </summary>
  24. /// <returns></returns>
  25. [DisplayName("获取所有常量列表")]
  26. public async Task<List<ConstOutput>> GetList()
  27. {
  28. var key = $"{CacheConst.KeyConst}list";
  29. var constlist = _sysCacheService.Get<List<ConstOutput>>(key);
  30. if (constlist == null)
  31. {
  32. var typeList = GetConstAttributeList();
  33. constlist = typeList.Select(u => new ConstOutput
  34. {
  35. Name = u.CustomAttributes.ToList().FirstOrDefault()?.ConstructorArguments.ToList().FirstOrDefault().Value?.ToString() ?? u.Name,
  36. Code = u.Name,
  37. Data = GetData(Convert.ToString(u.Name))
  38. }).ToList();
  39. _sysCacheService.Set(key, constlist);
  40. }
  41. return await Task.FromResult(constlist);
  42. }
  43. /// <summary>
  44. /// 根据类名获取常量数据 🔖
  45. /// </summary>
  46. /// <param name="typeName"></param>
  47. /// <returns></returns>
  48. [DisplayName("根据类名获取常量数据")]
  49. public async Task<List<ConstOutput>> GetData([Required] string typeName)
  50. {
  51. var key = $"{CacheConst.KeyConst}{typeName.ToUpper()}";
  52. var constlist = _sysCacheService.Get<List<ConstOutput>>(key);
  53. if (constlist == null)
  54. {
  55. var typeList = GetConstAttributeList();
  56. var type = typeList.FirstOrDefault(u => u.Name == typeName);
  57. var isEnum = type.BaseType.Name == "Enum";
  58. constlist = type.GetFields()?
  59. .Where(isEnum, u => u.FieldType.Name == typeName)
  60. .Select(u => new ConstOutput
  61. {
  62. Name = u.Name,
  63. Code = isEnum ? (int)u.GetValue(BindingFlags.Instance) : u.GetValue(BindingFlags.Instance)
  64. }).ToList();
  65. _sysCacheService.Set(key, constlist);
  66. }
  67. return await Task.FromResult(constlist);
  68. }
  69. /// <summary>
  70. /// 获取常量特性类型列表
  71. /// </summary>
  72. /// <returns></returns>
  73. private List<Type> GetConstAttributeList()
  74. {
  75. return AppDomain.CurrentDomain.GetAssemblies().SelectMany(u => u.GetTypes())
  76. .Where(u => u.CustomAttributes.Any(c => c.AttributeType == typeof(ConstAttribute))).ToList();
  77. }
  78. }