SysConstService.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. namespace Admin.NET.Core.Service;
  2. /// <summary>
  3. /// 系统常量服务
  4. /// </summary>
  5. [ApiDescriptionSettings(Order = 189)]
  6. [AllowAnonymous]
  7. public class SysConstService : IDynamicApiController, ITransient
  8. {
  9. private readonly SysCacheService _sysCacheService;
  10. public SysConstService(SysCacheService sysCacheService)
  11. {
  12. _sysCacheService = sysCacheService;
  13. }
  14. /// <summary>
  15. /// 获取所有常量下拉框列表
  16. /// </summary>
  17. /// <returns></returns>
  18. [HttpGet("/constSelector/allConstSelector")]
  19. public async Task<List<SelectorDto>> GetAllConstSelector()
  20. {
  21. var key = $"{CacheConst.KeyConstSelector}AllSelector";
  22. var json = _sysCacheService.Get<List<SelectorDto>>(key);
  23. var typeList = await GetAllTypesAsync();
  24. var selectData = typeList.Select(x => new SelectorDto
  25. {
  26. Name = x.CustomAttributes.ToList().FirstOrDefault()?.ConstructorArguments.ToList().FirstOrDefault().Value?.ToString() ?? x.Name,
  27. Code = x.Name
  28. }).ToList();
  29. _sysCacheService.Set(key, selectData);
  30. return selectData;
  31. }
  32. /// <summary>
  33. /// 根据类名获取下拉框数据
  34. /// </summary>
  35. /// <param name="typeName"></param>
  36. /// <returns></returns>
  37. [HttpGet("/constSelector/constSelector")]
  38. public async Task<List<SelectorDto>> GetConstSelector(string typeName)
  39. {
  40. var key = $"{CacheConst.KeyConstSelector}{typeName.ToUpper()}";
  41. var json = _sysCacheService.Get<List<SelectorDto>>(key);
  42. var typeList = await GetAllTypesAsync();
  43. var type = typeList.FirstOrDefault(x => x.Name == typeName);
  44. var isEnum = type.BaseType.Name == "Enum";
  45. var selectData = type.GetFields()?
  46. .Where(isEnum, x => x.FieldType.Name == typeName)
  47. .Select(x => new SelectorDto
  48. {
  49. Name = x.Name,
  50. Code = isEnum ? (int)x.GetValue(BindingFlags.Instance) : x.GetValue(BindingFlags.Instance)
  51. }).ToList();
  52. _sysCacheService.Set(key, selectData);
  53. return selectData;
  54. }
  55. /// <summary>
  56. /// 获取所有下拉框及选项 用于前端缓存
  57. /// </summary>
  58. /// <returns></returns>
  59. [HttpGet("/constSelector/allConstSelectorWithOptions")]
  60. public async Task<List<SelectorDto>> GetAllConstSelectorWithOptions()
  61. {
  62. var selectors = await GetAllConstSelector();
  63. foreach (var p in selectors)
  64. {
  65. p.Data = await GetConstSelector(Convert.ToString(p.Code));
  66. }
  67. return selectors;
  68. }
  69. /// <summary>
  70. /// 获取所有常量
  71. /// </summary>
  72. /// <returns></returns>
  73. private async Task<List<Type>> GetAllTypesAsync()
  74. {
  75. return await Task.Run(() =>
  76. {
  77. var typeList = AppDomain.CurrentDomain.GetAssemblies()
  78. .SelectMany(x => x.GetTypes())
  79. .Where(x => x.CustomAttributes.Any(y => y.AttributeType == typeof(ConstSelectorAttribute)))
  80. .ToList();
  81. return typeList;
  82. });
  83. }
  84. }