feat: 优化首页样式
This commit is contained in:
@@ -0,0 +1,22 @@
|
|||||||
|
using Yi.Framework.Bbs.Domain.Shared.Enums;
|
||||||
|
|
||||||
|
namespace Yi.Framework.Bbs.Application.Contracts.Dtos.BbsUser;
|
||||||
|
|
||||||
|
public class MoneyTopUserDto
|
||||||
|
{
|
||||||
|
public string UserName { get; set; }
|
||||||
|
public string? Nice { get; set; }
|
||||||
|
public decimal Money { get; set; }
|
||||||
|
public string Order { get; set; }
|
||||||
|
public string? Icon { get; set; }
|
||||||
|
public int Level { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 用户等级名称
|
||||||
|
/// </summary>
|
||||||
|
public string LevelName { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 用户限制
|
||||||
|
/// </summary>
|
||||||
|
public UserLimitEnum UserLimit { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
@@ -5,7 +5,9 @@ using Volo.Abp.Application.Dtos;
|
|||||||
using Volo.Abp.Application.Services;
|
using Volo.Abp.Application.Services;
|
||||||
using Yi.Framework.Bbs.Application.Contracts.Dtos.BbsUser;
|
using Yi.Framework.Bbs.Application.Contracts.Dtos.BbsUser;
|
||||||
using Yi.Framework.Bbs.Domain.Entities;
|
using Yi.Framework.Bbs.Domain.Entities;
|
||||||
|
using Yi.Framework.Bbs.Domain.Entities.Integral;
|
||||||
using Yi.Framework.Bbs.Domain.Managers;
|
using Yi.Framework.Bbs.Domain.Managers;
|
||||||
|
using Yi.Framework.Bbs.Domain.Shared.Enums;
|
||||||
using Yi.Framework.Rbac.Application.Contracts.IServices;
|
using Yi.Framework.Rbac.Application.Contracts.IServices;
|
||||||
using Yi.Framework.Rbac.Domain.Authorization;
|
using Yi.Framework.Rbac.Domain.Authorization;
|
||||||
using Yi.Framework.Rbac.Domain.Shared.Consts;
|
using Yi.Framework.Rbac.Domain.Shared.Consts;
|
||||||
@@ -23,6 +25,42 @@ namespace Yi.Framework.Bbs.Application.Services.Analyses
|
|||||||
_onlineService = onlineService;
|
_onlineService = onlineService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 财富排行榜
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet("analyse/bbs-user/money-top")]
|
||||||
|
public async Task<PagedResultDto<MoneyTopUserDto>> GetMoneyTopAsync([FromQuery] PagedResultRequestDto input)
|
||||||
|
{
|
||||||
|
using (DataFilter.DisablePermissionHandler())
|
||||||
|
{
|
||||||
|
RefAsync<int> total = 0;
|
||||||
|
var output = await _bbsUserManager._userRepository._DbQueryable
|
||||||
|
.LeftJoin<BbsUserExtraInfoEntity>((u,info)=>u.Id==info.UserId)
|
||||||
|
.Select((u, info) =>
|
||||||
|
new MoneyTopUserDto
|
||||||
|
{
|
||||||
|
UserName = u.UserName,
|
||||||
|
Nice = u.Nick,
|
||||||
|
Money = info.Money,
|
||||||
|
Icon = u.Icon,
|
||||||
|
Level = info.Level,
|
||||||
|
UserLimit = info.UserLimit
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.OrderBy(info=>info.Money)
|
||||||
|
.ToPageListAsync(input.SkipCount, input.MaxResultCount,total);
|
||||||
|
|
||||||
|
output.ForEach(x => { x.LevelName = _bbsUserManager._levelCacheDic[x.Level].Name;});
|
||||||
|
return new PagedResultDto<MoneyTopUserDto>
|
||||||
|
{
|
||||||
|
Items = output,
|
||||||
|
TotalCount = total
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 推荐好友,随机返回好友列表
|
/// 推荐好友,随机返回好友列表
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -61,6 +61,12 @@ namespace Yi.Framework.Bbs.Domain.Managers
|
|||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
output = _currentRateStore;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,33 +14,35 @@ namespace Yi.Framework.Bbs.Domain.Managers
|
|||||||
{
|
{
|
||||||
public ISqlSugarRepository<UserAggregateRoot> _userRepository;
|
public ISqlSugarRepository<UserAggregateRoot> _userRepository;
|
||||||
public ISqlSugarRepository<BbsUserExtraInfoEntity> _bbsUserInfoRepository;
|
public ISqlSugarRepository<BbsUserExtraInfoEntity> _bbsUserInfoRepository;
|
||||||
public Dictionary<int,LevelCacheItem> _levelCacheDic;
|
public Dictionary<int, LevelCacheItem> _levelCacheDic;
|
||||||
|
|
||||||
public BbsUserManager(ISqlSugarRepository<UserAggregateRoot> userRepository,
|
public BbsUserManager(ISqlSugarRepository<UserAggregateRoot> userRepository,
|
||||||
ISqlSugarRepository<BbsUserExtraInfoEntity> bbsUserInfoRepository,
|
ISqlSugarRepository<BbsUserExtraInfoEntity> bbsUserInfoRepository,
|
||||||
IDistributedCache<List<LevelCacheItem>> levelCache
|
LevelManager levelManager
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
_userRepository = userRepository;
|
_userRepository = userRepository;
|
||||||
_bbsUserInfoRepository = bbsUserInfoRepository;
|
_bbsUserInfoRepository = bbsUserInfoRepository;
|
||||||
_levelCacheDic = levelCache.Get(LevelConst.LevelCacheKey).ToDictionary(x => x.CurrentLevel);
|
_levelCacheDic = levelManager.GetCacheMapAsync().Result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<BbsUserInfoDto?> GetBbsUserInfoAsync(Guid userId)
|
public async Task<BbsUserInfoDto?> GetBbsUserInfoAsync(Guid userId)
|
||||||
{
|
{
|
||||||
var userInfo = await _userRepository._DbQueryable.LeftJoin<BbsUserExtraInfoEntity>((user, info) => user.Id == info.UserId)
|
var userInfo = await _userRepository._DbQueryable
|
||||||
.Select((user, info) => new BbsUserInfoDto
|
.LeftJoin<BbsUserExtraInfoEntity>((user, info) => user.Id == info.UserId)
|
||||||
{
|
.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,
|
Money = info.Money,
|
||||||
AgreeNumber = info.AgreeNumber,
|
Experience = info.Experience,
|
||||||
CommentNumber = info.CommentNumber,
|
AgreeNumber = info.AgreeNumber,
|
||||||
DiscussNumber = info.DiscussNumber
|
CommentNumber = info.CommentNumber,
|
||||||
}, true)
|
DiscussNumber = info.DiscussNumber
|
||||||
.FirstAsync(user => user.Id == userId);
|
}, true)
|
||||||
|
.FirstAsync(user => user.Id == userId);
|
||||||
|
|
||||||
userInfo.LevelName = _levelCacheDic[userInfo.Level].Name;
|
userInfo.LevelName = _levelCacheDic[userInfo.Level].Name;
|
||||||
return userInfo;
|
return userInfo;
|
||||||
@@ -48,26 +50,25 @@ namespace Yi.Framework.Bbs.Domain.Managers
|
|||||||
|
|
||||||
public async Task<List<BbsUserInfoDto>> GetBbsUserInfoAsync(List<Guid> userIds)
|
public async Task<List<BbsUserInfoDto>> GetBbsUserInfoAsync(List<Guid> userIds)
|
||||||
{
|
{
|
||||||
var userInfos= await _userRepository._DbQueryable
|
var userInfos = await _userRepository._DbQueryable
|
||||||
.Where(user => userIds.Contains(user.Id))
|
.Where(user => userIds.Contains(user.Id))
|
||||||
.LeftJoin<BbsUserExtraInfoEntity>((user, info) => user.Id == info.UserId)
|
.LeftJoin<BbsUserExtraInfoEntity>((user, info) => user.Id == info.UserId)
|
||||||
.Select((user, info) => new BbsUserInfoDto
|
.Select((user, info) => new BbsUserInfoDto
|
||||||
{
|
{
|
||||||
Id = user.Id,
|
Id = user.Id,
|
||||||
Icon = user.Icon,
|
Icon = user.Icon,
|
||||||
Level = info.Level,
|
Level = info.Level,
|
||||||
UserLimit = info.UserLimit,
|
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)
|
||||||
|
.ToListAsync();
|
||||||
.ToListAsync();
|
|
||||||
userInfos?.ForEach(userInfo => userInfo.LevelName = _levelCacheDic[userInfo.Level].Name);
|
userInfos?.ForEach(userInfo => userInfo.LevelName = _levelCacheDic[userInfo.Level].Name);
|
||||||
|
|
||||||
return userInfos??new List<BbsUserInfoDto>();
|
return userInfos ?? new List<BbsUserInfoDto>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,6 +129,5 @@ namespace Yi.Framework.Bbs.Domain.Managers
|
|||||||
/// 被点赞数
|
/// 被点赞数
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int AgreeNumber { get; set; }
|
public int AgreeNumber { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,8 +1,10 @@
|
|||||||
using Mapster;
|
using Mapster;
|
||||||
using Volo.Abp.Caching;
|
using Volo.Abp.Caching;
|
||||||
|
using Volo.Abp.Domain.Repositories;
|
||||||
using Volo.Abp.Domain.Services;
|
using Volo.Abp.Domain.Services;
|
||||||
using Volo.Abp.EventBus.Local;
|
using Volo.Abp.EventBus.Local;
|
||||||
using Yi.Framework.Bbs.Domain.Entities;
|
using Yi.Framework.Bbs.Domain.Entities;
|
||||||
|
using Yi.Framework.Bbs.Domain.Entities.Integral;
|
||||||
using Yi.Framework.Bbs.Domain.Shared.Caches;
|
using Yi.Framework.Bbs.Domain.Shared.Caches;
|
||||||
using Yi.Framework.Bbs.Domain.Shared.Consts;
|
using Yi.Framework.Bbs.Domain.Shared.Consts;
|
||||||
using Yi.Framework.Bbs.Domain.Shared.Etos;
|
using Yi.Framework.Bbs.Domain.Shared.Etos;
|
||||||
@@ -11,17 +13,36 @@ namespace Yi.Framework.Bbs.Domain.Managers
|
|||||||
{
|
{
|
||||||
public class LevelManager : DomainService
|
public class LevelManager : DomainService
|
||||||
{
|
{
|
||||||
private BbsUserManager _bbsUserManager;
|
|
||||||
private ILocalEventBus _localEventBus;
|
private ILocalEventBus _localEventBus;
|
||||||
private List<LevelCacheItem> _levelCacheItem;
|
private IDistributedCache<List<LevelCacheItem>> _levelCache;
|
||||||
public LevelManager(BbsUserManager bbsUserManager, ILocalEventBus localEventBus, IDistributedCache<List<LevelCacheItem>> levelCache)
|
private IRepository<LevelAggregateRoot> _repository;
|
||||||
|
private IRepository<BbsUserExtraInfoEntity> _bbsUserRepository;
|
||||||
|
public LevelManager( ILocalEventBus localEventBus,
|
||||||
|
IDistributedCache<List<LevelCacheItem>> levelCache, IRepository<LevelAggregateRoot> repository, IRepository<BbsUserExtraInfoEntity> bbsUserRepository)
|
||||||
{
|
{
|
||||||
_bbsUserManager = bbsUserManager;
|
|
||||||
_localEventBus = localEventBus;
|
_localEventBus = localEventBus;
|
||||||
_levelCacheItem = levelCache.Get(LevelConst.LevelCacheKey);
|
_repository = repository;
|
||||||
|
_bbsUserRepository = bbsUserRepository;
|
||||||
|
_levelCache = levelCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取等级映射,所有获取等级操作通过这里操作
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<Dictionary<int, LevelCacheItem>> GetCacheMapAsync()
|
||||||
|
{
|
||||||
|
var items =await _levelCache.GetOrAddAsync(LevelConst.LevelCacheKey, async () =>
|
||||||
|
{
|
||||||
|
var cacheItem = (await _repository.GetListAsync())
|
||||||
|
.OrderByDescending(x => x.CurrentLevel).ToList()
|
||||||
|
.Adapt<List<LevelCacheItem>>();
|
||||||
|
return cacheItem;
|
||||||
|
});
|
||||||
|
return items.ToDictionary(x=>x.CurrentLevel);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 使用钱钱投喂等级
|
/// 使用钱钱投喂等级
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -29,17 +50,18 @@ namespace Yi.Framework.Bbs.Domain.Managers
|
|||||||
public async Task ChangeLevelByMoneyAsync(Guid userId, int moneyNumber)
|
public async Task ChangeLevelByMoneyAsync(Guid userId, int moneyNumber)
|
||||||
{
|
{
|
||||||
//通过用户id获取用户信息的经验和等级
|
//通过用户id获取用户信息的经验和等级
|
||||||
var userInfo = await _bbsUserManager.GetBbsUserInfoAsync(userId);
|
var userInfo = await _bbsUserRepository.GetAsync(x=>x.UserId==userId);
|
||||||
|
|
||||||
//钱钱和经验的比例为1:1
|
//钱钱和经验的比例为1:1
|
||||||
//根据钱钱修改经验
|
//根据钱钱修改经验
|
||||||
var currentNewExperience = userInfo.Experience + moneyNumber * 1;
|
var currentNewExperience = userInfo.Experience + moneyNumber * 1;
|
||||||
|
|
||||||
//修改钱钱,如果钱钱不足,直接会丢出去
|
//修改钱钱,如果钱钱不足,直接会丢出去
|
||||||
await _localEventBus.PublishAsync(new MoneyChangeEventArgs { UserId = userId, Number = -moneyNumber },false);
|
await _localEventBus.PublishAsync(new MoneyChangeEventArgs { UserId = userId, Number = -moneyNumber },
|
||||||
|
false);
|
||||||
|
|
||||||
//更改最终的经验再变化等级
|
//更改最终的经验再变化等级
|
||||||
var levelList = _levelCacheItem.OrderByDescending(x => x.CurrentLevel).ToList();
|
var levelList = (await GetCacheMapAsync()).Values;
|
||||||
var currentNewLevel = 1;
|
var currentNewLevel = 1;
|
||||||
foreach (var level in levelList)
|
foreach (var level in levelList)
|
||||||
{
|
{
|
||||||
@@ -50,11 +72,9 @@ namespace Yi.Framework.Bbs.Domain.Managers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var exUserInfo = await _bbsUserManager._bbsUserInfoRepository.GetAsync(x => x.UserId == userInfo.Id);
|
userInfo.Level = currentNewLevel;
|
||||||
exUserInfo.Level = currentNewLevel;
|
userInfo.Experience = currentNewExperience;
|
||||||
exUserInfo.Experience = currentNewExperience;
|
await _bbsUserRepository.UpdateAsync(userInfo);
|
||||||
await _bbsUserManager._bbsUserInfoRepository.UpdateAsync(exUserInfo);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -23,16 +23,6 @@ namespace Yi.Framework.Bbs.Domain
|
|||||||
{
|
{
|
||||||
public override async Task OnPostApplicationInitializationAsync(ApplicationInitializationContext context)
|
public override async Task OnPostApplicationInitializationAsync(ApplicationInitializationContext context)
|
||||||
{
|
{
|
||||||
//加载等级缓存
|
|
||||||
var services = context.ServiceProvider;
|
|
||||||
|
|
||||||
var logger = services.GetRequiredService<ILogger<YiFrameworkBbsDomainModule>>();
|
|
||||||
logger.LogInformation("正在初始化【BBS-等级数据】......");
|
|
||||||
var levelRepository = services.GetRequiredService<IRepository<LevelAggregateRoot>>();
|
|
||||||
var levelCache = services.GetRequiredService<IDistributedCache<List<LevelCacheItem>>>();
|
|
||||||
var cacheItem = (await levelRepository.GetListAsync()).Adapt<List<LevelCacheItem>>();
|
|
||||||
await levelCache.SetAsync(LevelConst.LevelCacheKey, cacheItem);
|
|
||||||
logger.LogInformation("已完成初始化【BBS-等级数据】");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user