HuanMengProject/src/0-core/HuanMeng.MiaoYu.Code/Cache/Special/CharacterEntityCache.cs
2024-08-06 03:31:37 +08:00

130 lines
5.8 KiB
C#

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
{
/// <summary>
///
/// </summary>
/// <param name="_dao"></param>
public class CharacterEntityCache(CacheBase cacheBase, object CharacterCacheLock) : MiaoYuDataEntityCache<CharacterCache>(cacheBase, CharacterCacheLock)
{
/// <summary>
/// 锁
/// </summary>
private IMapper mapper = cacheBase.Mapper;
/// <summary>
/// 获取缓存数据
/// </summary>
/// <returns></returns>
public override List<CharacterCache> GetDataList()
{
List<CharacterCache> characterCaches = new List<CharacterCache>();
//读取角色表
var characters = _dao.daoDbMiaoYu.context.T_Character.Where(it => it.Visibility).ToList();
if (characters == null)
{
return characterCaches;
}
characterCaches = mapper.Map<List<CharacterCache>>(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<CharacteChatCountModel>(sqlString);
//查询配置表
var modelConfigs = _dao.daoDbMiaoYu.context.T_Model_Config.ToList();
//图片
var images = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList<T_Image_Config>(cacheBase);
//标签
var labels = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList<T_Character_Label>(cacheBase);
//标签关联表
var labelRelations = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList<T_Character_Label_Relation>(cacheBase);
//性格
var personalitys = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList<T_Character_Personality>(cacheBase);
//性格关联表
var personalityRelations = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList<T_Character_Personality_Relation>(cacheBase);
//分类
var types = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList<T_Character_Type>(cacheBase); ;
//分类关联表
var typesRelations = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList<T_Character_Type_Intimacy>(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<List<LabelDto>>(lab);
characterCache.Label = labs;
}
else
{
characterCache.Label = new List<LabelDto>();
}
#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<List<PersonalityDto>>(persona);
characterCache.Personality = per;
}
else
{
characterCache.Personality = new List<PersonalityDto>();
}
#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<List<TypeDto>>(_t);
characterCache.Types = _types;
}
else
{
characterCache.Types = new List<TypeDto>();
}
#endregion
}
}
//移除没有配置模型的类
characterCaches.Where(it => it.ModelConfig == null).ToList().ForEach(characterCache =>
{
characterCaches.Remove(characterCache);
});
return characterCaches;
}
}
}