using AutoMapper; using HuanMeng.MiaoYu.Code.Cache.Contract; using HuanMeng.MiaoYu.Code.Cache.Special; using HuanMeng.MiaoYu.Code.DataAccess; using HuanMeng.MiaoYu.Model.Dto.Character; using System.Linq.Expressions; namespace HuanMeng.MiaoYu.Code.Cache { /// /// 缓存类 /// /// public partial class MiaoYuCache(DAO dao, IMapper mapper) { #region 角色缓存表 /// /// 对话角色缓存表 /// public CommonDataEntityCache? Character { get; set; } /// /// 角色数据表 /// public List CharacterInfoList { get { if (Character == null) { //Character = new MiaoYuDataEntityCache(dao, MiaoYuCacheExtend.CharacterLock); Character = MiaoYuCacheExtend.GetMiaoYuDataEntityCache(dao); } return Character.DataList ?? new List(); } } #endregion #region 模型缓存表 /// /// 模型缓存表 /// public CommonDataEntityCache? ModelConfig { get; set; } /// /// 模型 /// public List ModelConfigList { get { if (ModelConfig == null) { //ModelConfig = new MiaoYuDataEntityCache(dao, MiaoYuCacheExtend.ModelConfigLock); ModelConfig = MiaoYuCacheExtend.GetMiaoYuDataEntityCache(dao); } return ModelConfig.DataList ?? new List(); } } #endregion #region 角色信息 /// /// 角色缓存表 /// public CharacterEntityCache? CharacterCache { get; set; } /// /// 角色 /// public List CharacterList { get { if (CharacterCache == null) { CharacterCache = new CharacterEntityCache(dao, mapper); } return CharacterCache.DataList ?? new List(); } } #endregion #region 图片缓存表 /// /// 图片缓存表 /// public CommonDataEntityCache? ImageConfigCache { get; set; } /// /// 图片 /// public List ImageConfigList { get { if (ImageConfigCache == null) { //ImageConfigCache = new MiaoYuDataEntityCache(dao, MiaoYuCacheExtend.ImageConfigLock); ImageConfigCache = MiaoYuCacheExtend.GetMiaoYuDataEntityCache(dao); } return ImageConfigCache.DataList ?? new List(); } } #endregion #region 角色类型缓存表 /// /// 角色类型缓存表 /// public CommonDataEntityCache? CharacterTypeCache { get; set; } /// /// 角色类型 /// public List CharacterTypeList { get { if (CharacterTypeCache == null) { //CharacterTypeCache = new MiaoYuDataEntityCache(dao, MiaoYuCacheExtend.CharacterTypeLock); CharacterTypeCache = MiaoYuCacheExtend.GetMiaoYuDataEntityCache(dao); } return CharacterTypeCache.DataList ?? new List(); } } #endregion #region 角色类型缓存表 /// /// 类型中的角色缓存表 /// public CommonDataEntityCache? CharacterTypeIntimacyCache { get; set; } /// /// 类型中的角色 /// public List CharacterTypeIntimacyList { get { if (CharacterTypeIntimacyCache == null) { //CharacterTypeIntimacyCache = new MiaoYuDataEntityCache(dao, MiaoYuCacheExtend.CharacterTypeIntimacyLock); CharacterTypeIntimacyCache = MiaoYuCacheExtend.GetMiaoYuDataEntityCache(dao); } return CharacterTypeIntimacyCache.DataList ?? new List(); } } #endregion } /// /// 缓存扩展类 /// public static class MiaoYuCacheExtend { #region 缓存锁 /// /// 对话角色缓存表 /// public static object CharacterLock = new object(); /// /// 模型缓存表 /// public static object ModelConfigLock = new object(); /// /// 图片缓存表 /// public static object ImageConfigLock = new object(); /// ///角色类型缓存表 /// public static object CharacterTypeLock = new object(); /// /// 类型中的角色缓存表 /// public static object CharacterTypeIntimacyLock = new object(); /// /// 缓存锁对象 /// public static Dictionary CacheLockList { get; set; } = new Dictionary { { typeof(T_Character), CharacterLock }, { typeof(T_Model_Config), ModelConfigLock }, { typeof(T_Image_Config), ImageConfigLock }, { typeof(T_Character_Type), CharacterTypeLock }, { typeof(T_Character_Type_Intimacy), CharacterTypeIntimacyLock }, }; #endregion #region 缓存扩展 /// /// 获取对应的缓存 /// /// /// /// public static CommonDataEntityCache GetMiaoYuDataEntityCache(DAO dao) where T : class { object cacheLock; if (!CacheLockList.TryGetValue(typeof(T), out cacheLock)) { Console.WriteLine("没有找到锁对象==>" + typeof(T).Name); // 创建一个新的锁对象,并添加到 CacheLockList 中 cacheLock = new object(); CacheLockList[typeof(T)] = cacheLock; } return new MiaoYuDataEntityCache(dao, cacheLock); } /// /// 获取缓存数据 /// /// /// /// public static List GetMiaoYuDataEntityCacheList(DAO dao) where T : class { var cache = GetMiaoYuDataEntityCache(dao); return cache?.DataList ?? new List(); } /// /// 清除全部缓存 /// /// public static void ClareMiaoYuDataEntityCache(DAO dao) { foreach (var item in CacheLockList) { var t = item.Key; Type cacheType = typeof(MiaoYuDataEntityCache<>).MakeGenericType(t); var shujuduixiang = Activator.CreateInstance(cacheType, dao, item.Value,36000); var x = shujuduixiang as ICacheClearData; if (x != null) { x.ClearData(); } //new MiaoYuDataEntityCache(dao, cacheLock); //Activator.CreateInstance(t); } } #endregion #region 图片扩展 /// /// 获取图片 /// /// /// /// public static string GetImageUrl(this int imageId, MiaoYuCache miaoYuCache) { if (imageId == 0 || miaoYuCache == null) { return ""; } var _m = miaoYuCache.ImageConfigList.FirstOrDefault(it => it.ImageId == imageId); if (_m != null) { return _m.Url; } return ""; } /// /// 获取图片 /// /// /// /// public static string GetImageUrl(this int imageId, DAO dao) { if (imageId == 0 || dao == null) { return ""; } MiaoYuCache miaoYuCache = new MiaoYuCache(dao, null); return GetImageUrl(imageId, miaoYuCache); } #endregion } }