diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/BbsUser/MoneyTopUserDto.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/BbsUser/MoneyTopUserDto.cs new file mode 100644 index 00000000..19fc69dc --- /dev/null +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/BbsUser/MoneyTopUserDto.cs @@ -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; } + /// + /// 用户等级名称 + /// + public string LevelName { get; set; } + /// + /// 用户限制 + /// + public UserLimitEnum UserLimit { get; set; } + +} \ No newline at end of file diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/Analyses/BbsUserAnalyseService.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/Analyses/BbsUserAnalyseService.cs index 0e23cc1f..f71d2d26 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/Analyses/BbsUserAnalyseService.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/Analyses/BbsUserAnalyseService.cs @@ -5,7 +5,9 @@ using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; using Yi.Framework.Bbs.Application.Contracts.Dtos.BbsUser; using Yi.Framework.Bbs.Domain.Entities; +using Yi.Framework.Bbs.Domain.Entities.Integral; using Yi.Framework.Bbs.Domain.Managers; +using Yi.Framework.Bbs.Domain.Shared.Enums; using Yi.Framework.Rbac.Application.Contracts.IServices; using Yi.Framework.Rbac.Domain.Authorization; using Yi.Framework.Rbac.Domain.Shared.Consts; @@ -23,6 +25,42 @@ namespace Yi.Framework.Bbs.Application.Services.Analyses _onlineService = onlineService; } + /// + /// 财富排行榜 + /// + /// + [HttpGet("analyse/bbs-user/money-top")] + public async Task> GetMoneyTopAsync([FromQuery] PagedResultRequestDto input) + { + using (DataFilter.DisablePermissionHandler()) + { + RefAsync total = 0; + var output = await _bbsUserManager._userRepository._DbQueryable + .LeftJoin((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 + { + Items = output, + TotalCount = total + }; + } + } + + /// /// 推荐好友,随机返回好友列表 /// diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/BankManager.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/BankManager.cs index fc305f00..142eed73 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/BankManager.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/BankManager.cs @@ -61,6 +61,12 @@ namespace Yi.Framework.Bbs.Domain.Managers }; } + else + { + output = _currentRateStore; + + } + return output; } 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 31c23246..3492cab3 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 @@ -14,33 +14,35 @@ namespace Yi.Framework.Bbs.Domain.Managers { public ISqlSugarRepository _userRepository; public ISqlSugarRepository _bbsUserInfoRepository; - public Dictionary _levelCacheDic; + public Dictionary _levelCacheDic; + public BbsUserManager(ISqlSugarRepository userRepository, ISqlSugarRepository bbsUserInfoRepository, - IDistributedCache> levelCache - ) + LevelManager levelManager + ) { _userRepository = userRepository; _bbsUserInfoRepository = bbsUserInfoRepository; - _levelCacheDic = levelCache.Get(LevelConst.LevelCacheKey).ToDictionary(x => x.CurrentLevel); + _levelCacheDic = levelManager.GetCacheMapAsync().Result; } 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); + 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; @@ -48,26 +50,25 @@ namespace Yi.Framework.Bbs.Domain.Managers public async Task> GetBbsUserInfoAsync(List userIds) { - var userInfos= await _userRepository._DbQueryable - .Where(user => userIds.Contains(user.Id)) + 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(); + .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(); + + return userInfos ?? new List(); } } @@ -128,6 +129,5 @@ namespace Yi.Framework.Bbs.Domain.Managers /// 被点赞数 /// public int AgreeNumber { get; set; } - } -} +} \ No newline at end of file diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/LevelManager.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/LevelManager.cs index ba413bec..99dff626 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/LevelManager.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/LevelManager.cs @@ -1,8 +1,10 @@ using Mapster; using Volo.Abp.Caching; +using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Services; using Volo.Abp.EventBus.Local; 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.Consts; using Yi.Framework.Bbs.Domain.Shared.Etos; @@ -11,17 +13,36 @@ namespace Yi.Framework.Bbs.Domain.Managers { public class LevelManager : DomainService { - private BbsUserManager _bbsUserManager; private ILocalEventBus _localEventBus; - private List _levelCacheItem; - public LevelManager(BbsUserManager bbsUserManager, ILocalEventBus localEventBus, IDistributedCache> levelCache) + private IDistributedCache> _levelCache; + private IRepository _repository; + private IRepository _bbsUserRepository; + public LevelManager( ILocalEventBus localEventBus, + IDistributedCache> levelCache, IRepository repository, IRepository bbsUserRepository) { - _bbsUserManager = bbsUserManager; _localEventBus = localEventBus; - _levelCacheItem = levelCache.Get(LevelConst.LevelCacheKey); + _repository = repository; + _bbsUserRepository = bbsUserRepository; + _levelCache = levelCache; } + /// + /// 获取等级映射,所有获取等级操作通过这里操作 + /// + /// + public async Task> GetCacheMapAsync() + { + var items =await _levelCache.GetOrAddAsync(LevelConst.LevelCacheKey, async () => + { + var cacheItem = (await _repository.GetListAsync()) + .OrderByDescending(x => x.CurrentLevel).ToList() + .Adapt>(); + return cacheItem; + }); + return items.ToDictionary(x=>x.CurrentLevel); + } + /// /// 使用钱钱投喂等级 /// @@ -29,17 +50,18 @@ namespace Yi.Framework.Bbs.Domain.Managers public async Task ChangeLevelByMoneyAsync(Guid userId, int moneyNumber) { //通过用户id获取用户信息的经验和等级 - var userInfo = await _bbsUserManager.GetBbsUserInfoAsync(userId); + var userInfo = await _bbsUserRepository.GetAsync(x=>x.UserId==userId); //钱钱和经验的比例为1: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; 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); - exUserInfo.Level = currentNewLevel; - exUserInfo.Experience = currentNewExperience; - await _bbsUserManager._bbsUserInfoRepository.UpdateAsync(exUserInfo); - + userInfo.Level = currentNewLevel; + userInfo.Experience = currentNewExperience; + await _bbsUserRepository.UpdateAsync(userInfo); } } -} +} \ No newline at end of file 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 9cf930e3..f3628a43 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 @@ -23,16 +23,6 @@ namespace Yi.Framework.Bbs.Domain { public override async Task OnPostApplicationInitializationAsync(ApplicationInitializationContext context) { - //加载等级缓存 - var services = context.ServiceProvider; - - var logger = services.GetRequiredService>(); - logger.LogInformation("正在初始化【BBS-等级数据】......"); - var levelRepository = services.GetRequiredService>(); - var levelCache = services.GetRequiredService>>(); - var cacheItem = (await levelRepository.GetListAsync()).Adapt>(); - await levelCache.SetAsync(LevelConst.LevelCacheKey, cacheItem); - logger.LogInformation("已完成初始化【BBS-等级数据】"); } } } \ No newline at end of file