diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/BbsUser/BbsUserGetListOutputDto.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/BbsUser/BbsUserGetListOutputDto.cs index 4abd784f..52018463 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/BbsUser/BbsUserGetListOutputDto.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/BbsUser/BbsUserGetListOutputDto.cs @@ -30,5 +30,10 @@ namespace Yi.Framework.Bbs.Application.Contracts.Dtos.BbsUser /// 经验 /// public long Experience { get; set; } + + /// + /// 用户等级名称 + /// + public string LevelName { get; set; } } } diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/Forum/DiscussService.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/Forum/DiscussService.cs index 04f7325f..3dfac9d8 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/Forum/DiscussService.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/Forum/DiscussService.cs @@ -2,6 +2,7 @@ using System.Linq; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using SqlSugar; +using TencentCloud.Pds.V20210701.Models; using Volo.Abp; using Volo.Abp.Application.Dtos; using Volo.Abp.EventBus.Local; @@ -32,12 +33,14 @@ namespace Yi.Framework.Bbs.Application.Services.Forum IDiscussService { private ISqlSugarRepository _discussTopEntityRepository; - public DiscussService(ForumManager forumManager, ISqlSugarRepository discussTopEntityRepository, ISqlSugarRepository plateEntityRepository, ILocalEventBus localEventBus) : base(forumManager._discussRepository) + private BbsUserManager _bbsUserManager; + public DiscussService(BbsUserManager bbsUserManager, ForumManager forumManager, ISqlSugarRepository discussTopEntityRepository, ISqlSugarRepository plateEntityRepository, ILocalEventBus localEventBus) : base(forumManager._discussRepository) { _forumManager = forumManager; _plateEntityRepository = plateEntityRepository; _localEventBus = localEventBus; _discussTopEntityRepository = discussTopEntityRepository; + _bbsUserManager=bbsUserManager; } private readonly ILocalEventBus _localEventBus; private ForumManager _forumManager { get; set; } @@ -143,6 +146,8 @@ namespace Yi.Framework.Bbs.Application.Services.Forum //查询完主题之后,要过滤一下私有的主题信息 items.ApplyPermissionTypeFilter(CurrentUser.Id ?? Guid.Empty); + + items?.ForEach(x => x.User.LevelName = _bbsUserManager._levelCacheDic[x.User.Level].Name); return new PagedResultDto(total, items); } @@ -178,11 +183,11 @@ namespace Yi.Framework.Bbs.Application.Services.Forum Remark = user.Remark, UserLimit = info.UserLimit, Money = info.Money, - Experience = info.Experience - + Experience = info.Experience, } }, true) .ToListAsync(); + output?.ForEach(x => x.User.LevelName = _bbsUserManager._levelCacheDic[x.User.Level].Name); return output; } diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain.Shared/Caches/LevelCacheItem.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain.Shared/Caches/LevelCacheItem.cs new file mode 100644 index 00000000..fe75653b --- /dev/null +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain.Shared/Caches/LevelCacheItem.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Yi.Framework.Bbs.Domain.Shared.Caches +{ + public class LevelCacheItem + { + public Guid Id { get; set; } + + /// + /// 当前等级 + /// + public int CurrentLevel { get; set; } + + /// + /// 最小所需经验值 + /// + public decimal MinExperience { get; set; } + + /// + /// 等级名称 + /// + public string Name { get; set; } + + /// + /// 等级称号 + /// + public string? Nick { get; set; } + + /// + /// 等候logo + /// + public string? Logo { get; set; } + } +} diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain.Shared/Consts/LevelConst.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain.Shared/Consts/LevelConst.cs new file mode 100644 index 00000000..dd832991 --- /dev/null +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain.Shared/Consts/LevelConst.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Yi.Framework.Bbs.Domain.Shared.Consts +{ + public class LevelConst + { + public const string LevelCacheKey=nameof(LevelCacheKey); + } +} diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Entities/Integral/LevelEntity.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Entities/Integral/LevelEntity.cs index a52f9f8d..329f69bd 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Entities/Integral/LevelEntity.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Entities/Integral/LevelEntity.cs @@ -48,4 +48,5 @@ namespace Yi.Framework.Bbs.Domain.Entities.Integral public string? Logo { get; set; } } + } diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/BbsUserManager.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/BbsUserManager.cs index 6d0bd937..094b9702 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/BbsUserManager.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/BbsUserManager.cs @@ -1,10 +1,8 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +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; @@ -16,43 +14,60 @@ namespace Yi.Framework.Bbs.Domain.Managers { public ISqlSugarRepository _userRepository; public ISqlSugarRepository _bbsUserInfoRepository; - public BbsUserManager(ISqlSugarRepository userRepository, 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) { - return 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); - } - - public async Task> GetBbsUserInfoAsync(List userIds) - { - return 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, + 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) - + }, 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(); } } @@ -79,6 +94,11 @@ namespace Yi.Framework.Bbs.Domain.Managers /// public int Level { get; set; } + /// + /// 用户等级名称 + /// + public string LevelName { get; set; } + /// /// 用户限制 /// diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/YiFrameworkBbsDomainModule.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/YiFrameworkBbsDomainModule.cs index 8696c1e4..e8bf78f3 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/YiFrameworkBbsDomainModule.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/YiFrameworkBbsDomainModule.cs @@ -1,5 +1,14 @@ -using Volo.Abp.Modularity; +using System.Collections.Generic; +using Mapster; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp; +using Volo.Abp.Caching; +using Volo.Abp.Domain.Repositories; +using Volo.Abp.Modularity; +using Yi.Framework.Bbs.Domain.Entities.Integral; using Yi.Framework.Bbs.Domain.Shared; +using Yi.Framework.Bbs.Domain.Shared.Caches; +using Yi.Framework.Bbs.Domain.Shared.Consts; using Yi.Framework.Rbac.Domain; namespace Yi.Framework.Bbs.Domain @@ -11,6 +20,14 @@ namespace Yi.Framework.Bbs.Domain )] public class YiFrameworkBbsDomainModule : AbpModule { - + public override async Task OnPostApplicationInitializationAsync(ApplicationInitializationContext context) + { + //加载等级缓存 + var services = context.ServiceProvider; + var levelRepository = services.GetRequiredService>(); + var levelCache = services.GetRequiredService>>(); + var cacheItem = (await levelRepository.GetListAsync()).Adapt>(); + await levelCache.SetAsync(LevelConst.LevelCacheKey, cacheItem); + } } } \ No newline at end of file diff --git a/Yi.Bbs.Vue3/src/components/AvatarInfo.vue b/Yi.Bbs.Vue3/src/components/AvatarInfo.vue index de44fa09..8c2db951 100644 --- a/Yi.Bbs.Vue3/src/components/AvatarInfo.vue +++ b/Yi.Bbs.Vue3/src/components/AvatarInfo.vue @@ -13,7 +13,7 @@
{{ userInfo.nick }}
等级{{ userInfo.level }}{{ userInfo.level }}-{{userInfo.levelName}} 等级
@@ -113,6 +113,7 @@ const Init = () => { userInfo.level = props.userInfo.level; userInfo.userLimit = props.userInfo.userLimit; userInfo.userName= props.userInfo.userName; + userInfo.levelName= props.userInfo.levelName; iconUrl.value = iconUrlHandler(userInfo.icon); } diff --git a/Yi.Bbs.Vue3/src/components/UserInfoCard/index.vue b/Yi.Bbs.Vue3/src/components/UserInfoCard/index.vue index f7151033..9561575b 100644 --- a/Yi.Bbs.Vue3/src/components/UserInfoCard/index.vue +++ b/Yi.Bbs.Vue3/src/components/UserInfoCard/index.vue @@ -22,7 +22,7 @@
{{ userInfo.nick }}
等级{{ userInfo.level }}{{ userInfo.level }}-{{ userInfo.levelName }} 等级
diff --git a/Yi.Bbs.Vue3/src/views/home/components/RecommendFriend/index.vue b/Yi.Bbs.Vue3/src/views/home/components/RecommendFriend/index.vue index 5d65bdc4..01ef4092 100644 --- a/Yi.Bbs.Vue3/src/views/home/components/RecommendFriend/index.vue +++ b/Yi.Bbs.Vue3/src/views/home/components/RecommendFriend/index.vue @@ -20,7 +20,7 @@ 等级{{ friendData.level }}{{ friendData.level }}-{{friendData.levelName}} 等级 diff --git a/Yi.Bbs.Vue3/src/views/profile/Index.vue b/Yi.Bbs.Vue3/src/views/profile/Index.vue index 607164b0..ab8ff981 100644 --- a/Yi.Bbs.Vue3/src/views/profile/Index.vue +++ b/Yi.Bbs.Vue3/src/views/profile/Index.vue @@ -78,7 +78,7 @@
{{ state.user.nick }} {{state.user.level }} 等级{{state.user.level }}-{{state.user.levelName}} 等级