130 lines
5.8 KiB
C#
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;
|
|
}
|
|
}
|
|
|
|
}
|