using Volo.Abp.Caching; using Volo.Abp.Domain.Services; using Yi.Framework.Bbs.Domain.Entities; using Yi.Framework.Bbs.Domain.Shared.Caches; using Yi.Framework.Bbs.Domain.Shared.Consts; using Yi.Framework.Bbs.Domain.Shared.Enums; using Yi.Framework.Rbac.Domain.Entities; using Yi.Framework.Rbac.Domain.Shared.Enums; using Yi.Framework.SqlSugarCore.Abstractions; namespace Yi.Framework.Bbs.Domain.Managers { public class BbsUserManager : DomainService { public ISqlSugarRepository _userRepository; public ISqlSugarRepository _bbsUserInfoRepository; public Dictionary _levelCacheDic; public BbsUserManager(ISqlSugarRepository userRepository, ISqlSugarRepository bbsUserInfoRepository, IDistributedCache> levelCache ) { _userRepository = userRepository; _bbsUserInfoRepository = bbsUserInfoRepository; _levelCacheDic = levelCache.Get(LevelConst.LevelCacheKey).ToDictionary(x => x.CurrentLevel); } public async Task GetBbsUserInfoAsync(Guid userId) { var userInfo = await _userRepository._DbQueryable.LeftJoin((user, info) => user.Id == info.UserId) .Select((user, info) => new BbsUserInfoDto { Id = user.Id, Icon = user.Icon, Level = info.Level, UserLimit = info.UserLimit, Money = info.Money, Experience = info.Experience, AgreeNumber = info.AgreeNumber, CommentNumber = info.CommentNumber, DiscussNumber = info.DiscussNumber }, true) .FirstAsync(user => user.Id == userId); userInfo.LevelName = _levelCacheDic[userInfo.Level].Name; return userInfo; } public async Task> GetBbsUserInfoAsync(List userIds) { var userInfos= await _userRepository._DbQueryable .Where(user => userIds.Contains(user.Id)) .LeftJoin((user, info) => user.Id == info.UserId) .Select((user, info) => new BbsUserInfoDto { Id = user.Id, Icon = user.Icon, Level = info.Level, UserLimit = info.UserLimit, Money = info.Money, Experience = info.Experience, AgreeNumber = info.AgreeNumber, CommentNumber = info.CommentNumber, DiscussNumber = info.DiscussNumber }, true) .ToListAsync(); userInfos?.ForEach(userInfo => userInfo.LevelName = _levelCacheDic[userInfo.Level].Name); return userInfos??new List(); } } public class BbsUserInfoDto { public Guid Id { get; set; } public string? Name { get; set; } public int? Age { get; set; } public string UserName { get; set; } = string.Empty; public string? Icon { get; set; } public string? Nick { get; set; } public string? Email { get; set; } public string? Ip { get; set; } public string? Address { get; set; } public long? Phone { get; set; } public string? Introduction { get; set; } public string? Remark { get; set; } public SexEnum Sex { get; set; } = SexEnum.Unknown; public bool State { get; set; } public DateTime CreationTime { get; set; } /// /// 用户等级 /// public int Level { get; set; } /// /// 用户等级名称 /// public string LevelName { get; set; } /// /// 用户限制 /// public UserLimitEnum UserLimit { get; set; } /// /// 钱钱 /// public decimal Money { get; set; } /// /// 经验 /// public long Experience { get; set; } public int DiscussNumber { get; set; } /// /// 发表主题数 /// public int CommentNumber { get; set; } /// /// 被点赞数 /// public int AgreeNumber { get; set; } } }