using AutoMapper; using HuanMeng.MiaoYu.Code.Cache.Contract; using HuanMeng.MiaoYu.Model.Dto; using HuanMeng.MiaoYu.Model.Dto.Character; using HuanMeng.MiaoYu.Model.Dto.Label; using HuanMeng.MiaoYu.Model.Dto.Personality; namespace HuanMeng.MiaoYu.Code.Cache.Special { /// /// /// /// public class CharacterEntityCache(CacheBase cacheBase, object CharacterCacheLock) : MiaoYuDataEntityCache(cacheBase, CharacterCacheLock) { /// /// 锁 /// private IMapper mapper = cacheBase.Mapper; /// /// 获取缓存数据 /// /// public override List GetDataList() { List characterCaches = new List(); //读取角色表 var characters = _dao.daoDbMiaoYu.context.T_Character.Where(it => it.Visibility).ToList(); if (characters == null) { return characterCaches; } characterCaches = mapper.Map>(characters); string sqlString = $"select TOP 100 CharacterId,count(DISTINCT UserId ) UserCount from T_User_Chat where isdelete=0 and TenantId='{_dao.daoDbMiaoYu.context.TenantInfo?.TenantId}' GROUP BY CharacterId"; //获取查看次数 var characteChatCounts = _dao.daoDbMiaoYu.SqlQueryList(sqlString); //查询配置表 var modelConfigs = _dao.daoDbMiaoYu.context.T_Model_Config.ToList(); //图片 var images = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList(cacheBase); //标签 var labels = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList(cacheBase); //标签关联表 var labelRelations = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList(cacheBase); //性格 var personalitys = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList(cacheBase); //性格关联表 var personalityRelations = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList(cacheBase); //分类 var types = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList(cacheBase); ; //分类关联表 var typesRelations = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList(cacheBase); ; foreach (var characterCache in characterCaches) { var modelConfig = modelConfigs.FirstOrDefault(it => it.Id == characterCache.ModelConfigId); if (modelConfig==null) { modelConfig= modelConfigs.FirstOrDefault(); } if (modelConfig != null) { characterCache.ModelConfig = modelConfig; //查询图片 characterCache.IconImage = images.GetImageUrl(characterCache.IconImg ?? 0); characterCache.BgImage = images.GetImageUrl(characterCache.BgImg ?? 0); var c = characteChatCounts.FirstOrDefault(it => it.CharacterId == characterCache.Id); if (c != null) { characterCache.LookCount = c.UserCount; } #region 查询标签 var characterLabelIds = labelRelations.Where(it => it.CharacterId == characterCache.Id).Select(it => it.CharacterLabelId).ToList(); if (characterLabelIds.Count > 0) { var lab = labels.Where(it => characterLabelIds.Contains(it.Id)).ToList(); var labs = mapper.Map>(lab); characterCache.Label = labs; } else { characterCache.Label = new List(); } #endregion #region 查询性格 var personalityIds = personalityRelations.Where(it => it.CharacterId == characterCache.Id).Select(it => it.PersonalityId).ToList(); if (personalityIds.Count > 0) { var persona = personalitys.Where(it => personalityIds.Contains(it.Id)).ToList(); var per = mapper.Map>(persona); characterCache.Personality = per; } else { characterCache.Personality = new List(); } #endregion #region 查询类型 var typesIds = typesRelations.Where(it => it.CharacterId == characterCache.Id).Select(it => it.TypeId).ToList(); if (typesIds.Count > 0) { var _t = types.Where(it => typesIds.Contains(it.Id)).ToList(); var _types = mapper.Map>(_t); characterCache.Types = _types; } else { characterCache.Types = new List(); } #endregion } } //移除没有配置模型的类 characterCaches.Where(it => it.ModelConfig == null).ToList().ForEach(characterCache => { characterCaches.Remove(characterCache); }); return characterCaches; } } }