Zxd.Core/code/Zxd.Core.Domain/CacheDomain.cs

77 lines
2.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Zxd.Domain
{
internal class CacheDomain : ICacheDomain
{
private readonly IRedisManager _redisManager;
private readonly IBaseRepository<ZxdDbContext> _repository;
public CacheDomain(IRedisManager redisManager,
IBaseRepository<ZxdDbContext> repository)
{
_redisManager = redisManager;
_repository = repository;
}
private async Task<List<BAS_PARAMETER>> GetParameterList()
{
if (!await _redisManager.ExistsAsync(CacheKeys.ParameterList))
{
var list = await _repository.GetRepository<BAS_PARAMETER>().QueryListAsync();
await _redisManager.SetAsync(CacheKeys.ParameterList, list, new TimeSpan(0, 5, 0));//15分钟过期
return list;
}
else
{
return await _redisManager.GetListAsync<BAS_PARAMETER>(CacheKeys.ParameterList);
}
}
public async Task<string> GetValueParameter(string key)
{
var list = await GetParameterList();
return list.FirstOrDefault(x => x.PARAKEY == key)?.PARAVALUE ?? "";
}
public async Task<int> GetEarlyWarningValue()
{
var data = await GetValueParameter("EarlyWarningValue");
if (string.IsNullOrEmpty(data) || int.TryParse(data, out int value))
{
return 5;
}
return value;
}
public async Task<List<SsoUserTokenInfo>> GetTokens()
{
var key = CacheKeys.TokenList;
if (await _redisManager.ExistsAsync(key))
{
return await _redisManager.GetListAsync<SsoUserTokenInfo>(key);
}
return new List<SsoUserTokenInfo>();
}
public async Task AddToken(SsoUserTokenInfo token)
{
var key = CacheKeys.TokenList;
if (!await _redisManager.ExistsAsync(key))
{
await _redisManager.SetAsync(key, new List<SsoUserTokenInfo>() { token });
}
else
{
var list = await _redisManager.GetListAsync<SsoUserTokenInfo>(key);
list.Add(token);
await _redisManager.SetAsync(key, list, TimeSpan.FromDays(1));
}
}
}
}