HuanMengProject/src/0-core/HuanMeng.MiaoYu.Code/Character/CharacterBLL.cs
2024-08-04 23:21:56 +08:00

108 lines
4.1 KiB
C#

using AutoMapper;
using HuanMeng.DotNetCore.Base;
using HuanMeng.MiaoYu.Code.Users;
using HuanMeng.MiaoYu.Model.Dto.Character;
using HuanMeng.MiaoYu.Model.Dto.Chat;
using HuanMeng.MiaoYu.Model.EnumModel.User;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HuanMeng.MiaoYu.Code.Character
{
/// <summary>
/// 角色信息类
/// </summary>
public class CharacterBLL : MiaoYuBase
{
public CharacterBLL(IServiceProvider serviceProvider) : base(serviceProvider)
{
}
/// <summary>
/// 首页-获取角色列表
/// </summary>
/// <returns></returns>
public async Task<BaseResponse<List<CharacterInfoDto>>> GetHomeCharacter(RequestCharacterInfoPage requestCharacterInfo)
{
var index = requestCharacterInfo.Index ?? 0;
var size = requestCharacterInfo.Size ?? 10;
var charactersList = MiaoYuCache.CharacterList.OrderByDescending(it => it.LookCount)
.Skip((index - 1) * size).Take(size).ToList();
if (charactersList.Count == 0)
{
return new BaseResponse<List<CharacterInfoDto>>();
}
var list = Mapper.Map<List<CharacterInfoDto>>(charactersList);
//不是游客
if (_UserId != 0)
{
List<int> characterIds = list.Select(it => it.CharacterId).ToList();
//获取亲密值
var intimacys = await Dao.daoDbMiaoYu.context.T_Character_User_Intimacy.Where(it => it.UserId == _UserId
&& characterIds.Contains(it.CharacterId)).ToListAsync();
list.ForEach(it =>
{
it.Intimacy = intimacys.FirstOrDefault(item => item.CharacterId == it.CharacterId)?.IntimacyValue ?? 0;
});
}
return new BaseResponse<List<CharacterInfoDto>>(ResonseCode.Success, "", list);
}
/// <summary>
/// 首页-获取角色详情
/// </summary>
/// <param name="requestCharacterInfo"></param>
/// <returns></returns>
public async Task<BaseResponse<CharacterInfoDto>> GetCharacterInfo(RequestCharacterInfo requestCharacterInfo)
{
_Logger.LogInformation("测试");
var charactersinfo = MiaoYuCache.CharacterList.FirstOrDefault(it => it.Id == requestCharacterInfo.CharacterId);
if (charactersinfo == null)
{
return new BaseResponse<CharacterInfoDto>();
}
var info = Mapper.Map<CharacterInfoDto>(charactersinfo);
info.MemoryCardState = false;
//不是游客
if (_UserId != 0)
{
//获取亲密值
var intimacys = await Dao.daoDbMiaoYu.context.T_Character_User_Intimacy.Where(it => it.UserId == _UserId
&& it.CharacterId == info.CharacterId).FirstOrDefaultAsync();
info.Intimacy = intimacys?.IntimacyValue ?? 0;
UserInfoBLL userInfoBLL = new UserInfoBLL(Dao, _UserId);
(var maxtoken, var memoryCardState) = userInfoBLL.GetMemoryCardMaxToken(requestCharacterInfo.CharacterId);
info.MemoryCardState = memoryCardState;
}
return new BaseResponse<CharacterInfoDto>(ResonseCode.Success, "", info);
}
/// <summary>
/// 首页-获取全部角色的Id
/// </summary>
/// <returns></returns>
public BaseResponse<List<CharacterIdModel>> GetCharacters()
{
Random rng = new Random();
var charactersIds = MiaoYuCache.CharacterList.Select(it => new CharacterIdModel { CharacterId = it.Id }).OrderBy(x => rng.Next()).ToList();
if (charactersIds == null)
{
charactersIds = new List<CharacterIdModel>();
}
return new BaseResponse<List<CharacterIdModel>>(ResonseCode.Success, "", charactersIds);
}
}
}