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;
}
}
}