namespace Admin.NET.Core.Service;
///
/// 常量下拉框服务
///
[ApiDescriptionSettings(Name = "常量下拉框服务", Order = 193)]
public class ConstSelectorService : IDynamicApiController, ITransient
{
private readonly IDistributedCache _cache;
public ConstSelectorService(IDistributedCache cache)
{
_cache = cache;
}
///
/// 获取所有常量下拉框列表
///
///
[HttpGet("/constSelector/allConstSelector")]
public async Task GetAllConstSelector()
{
var key = $"{CacheConst.KeyConstSelector}AllSelector";
var json = await _cache.GetStringAsync(key);
if (!string.IsNullOrWhiteSpace(json))
{
return json.ToObject>();
}
var typeList = await GetAllTypesAsync();
var selectData = typeList.Select(x => new SelectorDto
{
Name = x.CustomAttributes.ToList().FirstOrDefault()?.ConstructorArguments.ToList().FirstOrDefault().Value?.ToString() ?? x.Name,
Code = x.Name
}).ToList();
await _cache.SetStringAsync(key, selectData.ToJson());
return selectData;
}
///
/// 根据类名获取下拉框数据
///
///
///
[HttpGet("/constSelector/constSelector")]
public async Task GetConstSelector(string typeName)
{
var key = $"{CacheConst.KeyConstSelector}{typeName.ToUpper()}";
var json = await _cache.GetStringAsync(key);
if (!string.IsNullOrWhiteSpace(json))
{
return json.ToObject>();
}
var typeList = await GetAllTypesAsync();
var type = typeList.FirstOrDefault(x => x.Name == typeName);
var isEnum = type.BaseType.Name == "Enum";
var selectData = type.GetFields()?
.Where(isEnum, x => x.FieldType.Name == typeName)
.Select(x => new SelectorDto
{
Name = x.Name,
Code = isEnum ? (int)x.GetValue(BindingFlags.Instance) : x.GetValue(BindingFlags.Instance)
}).ToList();
await _cache.SetStringAsync(key, selectData.ToJson());
return selectData;
}
///
/// 获取所有常量
///
///
private async Task> GetAllTypesAsync()
{
return await Task.Run(() =>
{
var typeList = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(x => x.GetTypes())
.Where(x => x.CustomAttributes.Any(y => y.AttributeType == typeof(EnumSelectorAttribute)))
.ToList();
return typeList;
});
}
}