using Furion.DependencyInjection; using Furion.DynamicApiController; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace Magic.Core.Service; /// /// 系统缓存服务 /// [ApiDescriptionSettings(Name = "Cache", Order = 100)] public class SysCacheService : ISysCacheService, IDynamicApiController, ISingleton { private readonly ICache _cache; private readonly CacheOptions _cacheOptions; public SysCacheService(IOptions cacheOptions, Func resolveNamed) { _cacheOptions = cacheOptions.Value; _cache = resolveNamed(_cacheOptions.CacheType.ToString(), default) as ICache; } /// /// 获取数据范围缓存(机构Id集合) /// /// /// public async Task> GetDataScope(long userId) { var cacheKey = CommonConst.CACHE_KEY_DATASCOPE + $"{userId}"; return await _cache.GetAsync>(cacheKey); } /// /// 获取数据范围缓存(用户Id集合) /// /// /// public async Task> GetUsersDataScope(long userId) { var cacheKey = CommonConst.CACHE_KEY_USERSDATASCOPE + $"{userId}"; return await _cache.GetAsync>(cacheKey); } /// /// 缓存数据范围(机构Id集合) /// /// /// /// [NonAction] public async Task SetDataScope(long userId, List dataScopes) { var cacheKey = CommonConst.CACHE_KEY_DATASCOPE + $"{userId}"; await _cache.SetAsync(cacheKey, dataScopes); } /// /// 缓存数据范围(用户Id集合) /// /// /// /// [NonAction] public async Task SetUsersDataScope(long userId, List dataScopes) { var cacheKey = CommonConst.CACHE_KEY_USERSDATASCOPE + $"{userId}"; await _cache.SetAsync(cacheKey, dataScopes); } /// /// 获取菜单缓存 /// /// /// /// public async Task> GetMenu(long userId, string appCode) { var cacheKey = CommonConst.CACHE_KEY_MENU + $"{userId}-{appCode}"; return await _cache.GetAsync>(cacheKey); } /// /// 缓存菜单 /// /// /// /// /// [NonAction] public async Task SetMenu(long userId, string appCode, List menus) { var cacheKey = CommonConst.CACHE_KEY_MENU + $"{userId}-{appCode}"; await _cache.SetAsync(cacheKey, menus); } /// /// 获取权限缓存(按钮) /// /// /// public async Task> GetPermission(long userId) { var cacheKey = CommonConst.CACHE_KEY_PERMISSION + $"{userId}"; return await _cache.GetAsync>(cacheKey); } /// /// 缓存权限 /// /// /// /// [NonAction] public async Task SetPermission(long userId, List permissions) { var cacheKey = CommonConst.CACHE_KEY_PERMISSION + $"{userId}"; await _cache.SetAsync(cacheKey, permissions); } /// /// 获取所有缓存关键字 /// /// public List GetAllCacheKeys() { var cacheItems = _cache.GetAllKeys(); if (cacheItems == null) return new List(); return cacheItems.Where(u => !u.ToString().StartsWith("mini-profiler")).Select(u => u).ToList(); } /// /// 获取所有按钮权限 /// /// public async Task> GetAllPermission() { var cacheKey = CommonConst.CACHE_KEY_ALLPERMISSION; return await _cache.GetAsync>(cacheKey); } /// /// 设置所有按钮权限 /// /// /// public async Task SetAllPermission(List permissions) { var cacheKey = CommonConst.CACHE_KEY_ALLPERMISSION; await _cache.SetAsync(cacheKey, permissions); } /// /// 删除指定关键字缓存 /// /// /// [NonAction] public bool Del(string key) { _cache.Del(key); return true; } /// /// 删除指定关键字缓存 /// /// /// public Task DelAsync(string key) { _cache.DelAsync(key); return Task.FromResult(true); } /// /// 删除某特征关键字缓存 /// /// /// public Task DelByPatternAsync(string key) { _cache.DelByPatternAsync(key); return Task.FromResult(true); } /// /// 设置缓存 /// /// /// /// [NonAction] public bool Set(string key, object value) { return _cache.Set(key, value); } /// /// 设置缓存 /// /// /// /// public async Task SetAsync(string key, object value) { return await _cache.SetAsync(key, value); } /// /// 获取缓存 /// /// /// [NonAction] public string Get(string key) { return _cache.Get(key); } /// /// 获取缓存 /// /// /// public async Task GetAsync(string key) { return await _cache.GetAsync(key); } /// /// 获取缓存 /// /// /// /// [NonAction] public T Get(string key) { return _cache.Get(key); } /// /// 获取缓存 /// /// /// /// public Task GetAsync(string key) { return _cache.GetAsync(key); } /// /// 检查给定 key 是否存在 /// /// 键 /// [NonAction] public bool Exists(string key) { return _cache.Exists(key); } /// /// 检查给定 key 是否存在 /// /// 键 /// public Task ExistsAsync(string key) { return _cache.ExistsAsync(key); } }