From 07d82e508e7274071576b724dd8e0c0a91c4b789 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=A9=99=E5=AD=90?= <454313500@qq.com>
Date: Fri, 9 Aug 2024 00:39:39 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E9=A6=96=E9=A1=B5?=
=?UTF-8?q?=E6=A0=B7=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Dtos/BbsUser/MoneyTopUserDto.cs | 22 ++++++
.../Analyses/BbsUserAnalyseService.cs | 38 ++++++++++
.../Managers/BankManager.cs | 6 ++
.../Managers/BbsUserManager.cs | 76 +++++++++----------
.../Managers/LevelManager.cs | 48 ++++++++----
.../YiFrameworkBbsDomainModule.cs | 10 ---
6 files changed, 138 insertions(+), 62 deletions(-)
create mode 100644 Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/BbsUser/MoneyTopUserDto.cs
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