feat: 添加等级名称显示
This commit is contained in:
@@ -30,5 +30,10 @@ namespace Yi.Framework.Bbs.Application.Contracts.Dtos.BbsUser
|
|||||||
/// 经验
|
/// 经验
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public long Experience { get; set; }
|
public long Experience { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 用户等级名称
|
||||||
|
/// </summary>
|
||||||
|
public string LevelName { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ using System.Linq;
|
|||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using SqlSugar;
|
using SqlSugar;
|
||||||
|
using TencentCloud.Pds.V20210701.Models;
|
||||||
using Volo.Abp;
|
using Volo.Abp;
|
||||||
using Volo.Abp.Application.Dtos;
|
using Volo.Abp.Application.Dtos;
|
||||||
using Volo.Abp.EventBus.Local;
|
using Volo.Abp.EventBus.Local;
|
||||||
@@ -32,12 +33,14 @@ namespace Yi.Framework.Bbs.Application.Services.Forum
|
|||||||
IDiscussService
|
IDiscussService
|
||||||
{
|
{
|
||||||
private ISqlSugarRepository<DiscussTopEntity> _discussTopEntityRepository;
|
private ISqlSugarRepository<DiscussTopEntity> _discussTopEntityRepository;
|
||||||
public DiscussService(ForumManager forumManager, ISqlSugarRepository<DiscussTopEntity> discussTopEntityRepository, ISqlSugarRepository<PlateEntity> plateEntityRepository, ILocalEventBus localEventBus) : base(forumManager._discussRepository)
|
private BbsUserManager _bbsUserManager;
|
||||||
|
public DiscussService(BbsUserManager bbsUserManager, ForumManager forumManager, ISqlSugarRepository<DiscussTopEntity> discussTopEntityRepository, ISqlSugarRepository<PlateEntity> plateEntityRepository, ILocalEventBus localEventBus) : base(forumManager._discussRepository)
|
||||||
{
|
{
|
||||||
_forumManager = forumManager;
|
_forumManager = forumManager;
|
||||||
_plateEntityRepository = plateEntityRepository;
|
_plateEntityRepository = plateEntityRepository;
|
||||||
_localEventBus = localEventBus;
|
_localEventBus = localEventBus;
|
||||||
_discussTopEntityRepository = discussTopEntityRepository;
|
_discussTopEntityRepository = discussTopEntityRepository;
|
||||||
|
_bbsUserManager=bbsUserManager;
|
||||||
}
|
}
|
||||||
private readonly ILocalEventBus _localEventBus;
|
private readonly ILocalEventBus _localEventBus;
|
||||||
private ForumManager _forumManager { get; set; }
|
private ForumManager _forumManager { get; set; }
|
||||||
@@ -143,6 +146,8 @@ namespace Yi.Framework.Bbs.Application.Services.Forum
|
|||||||
|
|
||||||
//查询完主题之后,要过滤一下私有的主题信息
|
//查询完主题之后,要过滤一下私有的主题信息
|
||||||
items.ApplyPermissionTypeFilter(CurrentUser.Id ?? Guid.Empty);
|
items.ApplyPermissionTypeFilter(CurrentUser.Id ?? Guid.Empty);
|
||||||
|
|
||||||
|
items?.ForEach(x => x.User.LevelName = _bbsUserManager._levelCacheDic[x.User.Level].Name);
|
||||||
return new PagedResultDto<DiscussGetListOutputDto>(total, items);
|
return new PagedResultDto<DiscussGetListOutputDto>(total, items);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -178,11 +183,11 @@ namespace Yi.Framework.Bbs.Application.Services.Forum
|
|||||||
Remark = user.Remark,
|
Remark = user.Remark,
|
||||||
UserLimit = info.UserLimit,
|
UserLimit = info.UserLimit,
|
||||||
Money = info.Money,
|
Money = info.Money,
|
||||||
Experience = info.Experience
|
Experience = info.Experience,
|
||||||
|
|
||||||
}
|
}
|
||||||
}, true)
|
}, true)
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
|
output?.ForEach(x => x.User.LevelName = _bbsUserManager._levelCacheDic[x.User.Level].Name);
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 当前等级
|
||||||
|
/// </summary>
|
||||||
|
public int CurrentLevel { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 最小所需经验值
|
||||||
|
/// </summary>
|
||||||
|
public decimal MinExperience { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 等级名称
|
||||||
|
/// </summary>
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 等级称号
|
||||||
|
/// </summary>
|
||||||
|
public string? Nick { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 等候logo
|
||||||
|
/// </summary>
|
||||||
|
public string? Logo { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -48,4 +48,5 @@ namespace Yi.Framework.Bbs.Domain.Entities.Integral
|
|||||||
public string? Logo { get; set; }
|
public string? Logo { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
using System;
|
using Volo.Abp.Caching;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Volo.Abp.Domain.Services;
|
using Volo.Abp.Domain.Services;
|
||||||
using Yi.Framework.Bbs.Domain.Entities;
|
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.Bbs.Domain.Shared.Enums;
|
||||||
using Yi.Framework.Rbac.Domain.Entities;
|
using Yi.Framework.Rbac.Domain.Entities;
|
||||||
using Yi.Framework.Rbac.Domain.Shared.Enums;
|
using Yi.Framework.Rbac.Domain.Shared.Enums;
|
||||||
@@ -16,43 +14,60 @@ namespace Yi.Framework.Bbs.Domain.Managers
|
|||||||
{
|
{
|
||||||
public ISqlSugarRepository<UserEntity> _userRepository;
|
public ISqlSugarRepository<UserEntity> _userRepository;
|
||||||
public ISqlSugarRepository<BbsUserExtraInfoEntity> _bbsUserInfoRepository;
|
public ISqlSugarRepository<BbsUserExtraInfoEntity> _bbsUserInfoRepository;
|
||||||
public BbsUserManager(ISqlSugarRepository<UserEntity> userRepository, ISqlSugarRepository<BbsUserExtraInfoEntity> bbsUserInfoRepository)
|
public Dictionary<int,LevelCacheItem> _levelCacheDic;
|
||||||
|
public BbsUserManager(ISqlSugarRepository<UserEntity> userRepository,
|
||||||
|
ISqlSugarRepository<BbsUserExtraInfoEntity> bbsUserInfoRepository,
|
||||||
|
IDistributedCache<List<LevelCacheItem>> levelCache
|
||||||
|
)
|
||||||
{
|
{
|
||||||
_userRepository = userRepository;
|
_userRepository = userRepository;
|
||||||
_bbsUserInfoRepository = bbsUserInfoRepository;
|
_bbsUserInfoRepository = bbsUserInfoRepository;
|
||||||
|
_levelCacheDic = levelCache.Get(LevelConst.LevelCacheKey).ToDictionary(x => x.CurrentLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<BbsUserInfoDto?> GetBbsUserInfoAsync(Guid userId)
|
public async Task<BbsUserInfoDto?> GetBbsUserInfoAsync(Guid userId)
|
||||||
{
|
{
|
||||||
return await _userRepository._DbQueryable.LeftJoin<BbsUserExtraInfoEntity>((user, info) => user.Id == info.UserId)
|
var userInfo = await _userRepository._DbQueryable.LeftJoin<BbsUserExtraInfoEntity>((user, info) => user.Id == info.UserId)
|
||||||
.Select((user, info) => new BbsUserInfoDto {
|
.Select((user, info) => new BbsUserInfoDto
|
||||||
Id = user.Id ,
|
{
|
||||||
Icon=user.Icon,
|
Id = user.Id,
|
||||||
Level=info.Level,
|
Icon = user.Icon,
|
||||||
UserLimit=info.UserLimit,
|
Level = info.Level,
|
||||||
Money = info.Money,
|
UserLimit = info.UserLimit,
|
||||||
Experience = info.Experience,
|
|
||||||
AgreeNumber=info.AgreeNumber,
|
|
||||||
CommentNumber=info.CommentNumber,
|
|
||||||
DiscussNumber=info.DiscussNumber
|
|
||||||
}, true)
|
|
||||||
.FirstAsync(user => user.Id==userId);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<List<BbsUserInfoDto>> GetBbsUserInfoAsync(List<Guid> userIds)
|
|
||||||
{
|
|
||||||
return await _userRepository._DbQueryable
|
|
||||||
.Where(user => userIds.Contains(user.Id))
|
|
||||||
.LeftJoin<BbsUserExtraInfoEntity>((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,
|
Money = info.Money,
|
||||||
Experience = info.Experience,
|
Experience = info.Experience,
|
||||||
AgreeNumber = info.AgreeNumber,
|
AgreeNumber = info.AgreeNumber,
|
||||||
CommentNumber = info.CommentNumber,
|
CommentNumber = info.CommentNumber,
|
||||||
DiscussNumber = info.DiscussNumber
|
DiscussNumber = info.DiscussNumber
|
||||||
},true)
|
}, true)
|
||||||
|
.FirstAsync(user => user.Id == userId);
|
||||||
|
|
||||||
|
userInfo.LevelName = _levelCacheDic[userInfo.Level].Name;
|
||||||
|
return userInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<List<BbsUserInfoDto>> GetBbsUserInfoAsync(List<Guid> userIds)
|
||||||
|
{
|
||||||
|
var userInfos= await _userRepository._DbQueryable
|
||||||
|
.Where(user => userIds.Contains(user.Id))
|
||||||
|
.LeftJoin<BbsUserExtraInfoEntity>((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();
|
.ToListAsync();
|
||||||
|
userInfos?.ForEach(userInfo => userInfo.LevelName = _levelCacheDic[userInfo.Level].Name);
|
||||||
|
|
||||||
|
return userInfos??new List<BbsUserInfoDto>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,6 +94,11 @@ namespace Yi.Framework.Bbs.Domain.Managers
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public int Level { get; set; }
|
public int Level { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 用户等级名称
|
||||||
|
/// </summary>
|
||||||
|
public string LevelName { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 用户限制
|
/// 用户限制
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -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;
|
||||||
|
using Yi.Framework.Bbs.Domain.Shared.Caches;
|
||||||
|
using Yi.Framework.Bbs.Domain.Shared.Consts;
|
||||||
using Yi.Framework.Rbac.Domain;
|
using Yi.Framework.Rbac.Domain;
|
||||||
|
|
||||||
namespace Yi.Framework.Bbs.Domain
|
namespace Yi.Framework.Bbs.Domain
|
||||||
@@ -11,6 +20,14 @@ namespace Yi.Framework.Bbs.Domain
|
|||||||
)]
|
)]
|
||||||
public class YiFrameworkBbsDomainModule : AbpModule
|
public class YiFrameworkBbsDomainModule : AbpModule
|
||||||
{
|
{
|
||||||
|
public override async Task OnPostApplicationInitializationAsync(ApplicationInitializationContext context)
|
||||||
|
{
|
||||||
|
//加载等级缓存
|
||||||
|
var services = context.ServiceProvider;
|
||||||
|
var levelRepository = services.GetRequiredService<IRepository<LevelEntity>>();
|
||||||
|
var levelCache = services.GetRequiredService<IDistributedCache<List<LevelCacheItem>>>();
|
||||||
|
var cacheItem = (await levelRepository.GetListAsync()).Adapt<List<LevelCacheItem>>();
|
||||||
|
await levelCache.SetAsync(LevelConst.LevelCacheKey, cacheItem);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
<div class="text">{{ userInfo.nick }}</div>
|
<div class="text">{{ userInfo.nick }}</div>
|
||||||
<div class="level">
|
<div class="level">
|
||||||
<el-tag round effect="light" type="success" v-if="userInfo.level"
|
<el-tag round effect="light" type="success" v-if="userInfo.level"
|
||||||
>等级{{ userInfo.level }}</el-tag
|
>{{ userInfo.level }}-{{userInfo.levelName}} 等级</el-tag
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<div class="status" v-if="userInfo.userLimit">
|
<div class="status" v-if="userInfo.userLimit">
|
||||||
@@ -113,6 +113,7 @@ const Init = () => {
|
|||||||
userInfo.level = props.userInfo.level;
|
userInfo.level = props.userInfo.level;
|
||||||
userInfo.userLimit = props.userInfo.userLimit;
|
userInfo.userLimit = props.userInfo.userLimit;
|
||||||
userInfo.userName= props.userInfo.userName;
|
userInfo.userName= props.userInfo.userName;
|
||||||
|
userInfo.levelName= props.userInfo.levelName;
|
||||||
iconUrl.value = iconUrlHandler(userInfo.icon);
|
iconUrl.value = iconUrlHandler(userInfo.icon);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
<div class="name">{{ userInfo.nick }}</div>
|
<div class="name">{{ userInfo.nick }}</div>
|
||||||
<div class="level">
|
<div class="level">
|
||||||
<el-tag effect="light" type="success" v-if="userInfo.level"
|
<el-tag effect="light" type="success" v-if="userInfo.level"
|
||||||
>等级{{ userInfo.level }}</el-tag
|
>{{ userInfo.level }}-{{ userInfo.levelName }} 等级</el-tag
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
|
|
||||||
<el-tag effect="light" type="success"
|
<el-tag effect="light" type="success"
|
||||||
>等级{{ friendData.level }}</el-tag
|
>{{ friendData.level }}-{{friendData.levelName}} 等级</el-tag
|
||||||
>
|
>
|
||||||
|
|
||||||
<UserLimitTag :userLimit="friendData.userLimit" />
|
<UserLimitTag :userLimit="friendData.userLimit" />
|
||||||
|
|||||||
@@ -78,7 +78,7 @@
|
|||||||
<div class="user-nick-left">{{ state.user.nick }}
|
<div class="user-nick-left">{{ state.user.nick }}
|
||||||
|
|
||||||
<el-tag effect="light" type="success"
|
<el-tag effect="light" type="success"
|
||||||
>{{state.user.level }} 等级</el-tag
|
>{{state.user.level }}-{{state.user.levelName}} 等级</el-tag
|
||||||
>
|
>
|
||||||
<UserLimitTag :userLimit="state.user.userLimit"/>
|
<UserLimitTag :userLimit="state.user.userLimit"/>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user