Files
Yi.Admin/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/LevelManager.cs

80 lines
3.0 KiB
C#
Raw Normal View History

using Mapster;
using Volo.Abp.Caching;
2024-08-09 00:39:39 +08:00
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Domain.Services;
using Volo.Abp.EventBus.Local;
using Yi.Framework.Bbs.Domain.Entities;
2024-08-09 00:39:39 +08:00
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;
namespace Yi.Framework.Bbs.Domain.Managers
{
public class LevelManager : DomainService
{
private ILocalEventBus _localEventBus;
2024-08-09 00:39:39 +08:00
private 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)
{
_localEventBus = localEventBus;
2024-08-09 00:39:39 +08:00
_repository = repository;
_bbsUserRepository = bbsUserRepository;
_levelCache = levelCache;
}
2024-08-09 00:39:39 +08:00
/// <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>
/// <returns></returns>
public async Task ChangeLevelByMoneyAsync(Guid userId, int moneyNumber)
{
//通过用户id获取用户信息的经验和等级
2024-08-09 00:39:39 +08:00
var userInfo = await _bbsUserRepository.GetAsync(x=>x.UserId==userId);
//钱钱和经验的比例为11
//根据钱钱修改经验
var currentNewExperience = userInfo.Experience + moneyNumber * 1;
//修改钱钱,如果钱钱不足,直接会丢出去
2024-08-09 00:39:39 +08:00
await _localEventBus.PublishAsync(new MoneyChangeEventArgs { UserId = userId, Number = -moneyNumber },
false);
//更改最终的经验再变化等级
2024-08-09 00:39:39 +08:00
var levelList = (await GetCacheMapAsync()).Values;
2024-02-01 15:16:38 +08:00
var currentNewLevel = 1;
foreach (var level in levelList)
{
if (currentNewExperience >= level.MinExperience)
{
currentNewLevel = level.CurrentLevel;
break;
}
}
2024-02-01 15:16:38 +08:00
2024-08-09 00:39:39 +08:00
userInfo.Level = currentNewLevel;
userInfo.Experience = currentNewExperience;
await _bbsUserRepository.UpdateAsync(userInfo);
}
}
2024-08-09 00:39:39 +08:00
}