feat:新增成功挖到矿物事件
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
using Yi.Framework.DigitalCollectibles.Domain.Shared.Consts;
|
||||
|
||||
namespace Yi.Framework.DigitalCollectibles.Domain.Shared.Etos;
|
||||
|
||||
public class SuccessMiningEto
|
||||
{
|
||||
public Guid CollectiblesId { get; set; }
|
||||
}
|
||||
@@ -9,8 +9,4 @@
|
||||
<ProjectReference Include="..\..\bbs\Yi.Framework.Bbs.Domain.Shared\Yi.Framework.Bbs.Domain.Shared.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="Etos\" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
using Volo.Abp.DependencyInjection;
|
||||
using Volo.Abp.EventBus;
|
||||
using Yi.Framework.DigitalCollectibles.Domain.Entities;
|
||||
using Yi.Framework.DigitalCollectibles.Domain.Managers;
|
||||
using Yi.Framework.DigitalCollectibles.Domain.Shared.Etos;
|
||||
using Yi.Framework.SqlSugarCore.Abstractions;
|
||||
|
||||
namespace Yi.Framework.DigitalCollectibles.Domain.EventHandlers;
|
||||
|
||||
/// <summary>
|
||||
/// 成功挖到矿物
|
||||
/// </summary>
|
||||
public class SuccessMiningEventHandler : ILocalEventHandler<SuccessMiningEto>, ITransientDependency
|
||||
{
|
||||
private MiningPoolManager _miningPoolManager;
|
||||
private ISqlSugarRepository<CollectiblesAggregateRoot> _repository;
|
||||
|
||||
public SuccessMiningEventHandler(MiningPoolManager miningPoolManager,
|
||||
ISqlSugarRepository<CollectiblesAggregateRoot> repository)
|
||||
{
|
||||
_miningPoolManager = miningPoolManager;
|
||||
_repository = repository;
|
||||
}
|
||||
|
||||
public async Task HandleEventAsync(SuccessMiningEto eventData)
|
||||
{
|
||||
//当前藏品
|
||||
var currentCollectibles = await _repository.GetFirstAsync(x => x.Id == eventData.CollectiblesId);
|
||||
//扣减矿池
|
||||
await _miningPoolManager.DeductionPoolAsync(currentCollectibles.Rarity);
|
||||
//新增全世界发现
|
||||
currentCollectibles.FindTotal += 1;
|
||||
await _repository.UpdateAsync(currentCollectibles);
|
||||
}
|
||||
}
|
||||
@@ -41,6 +41,36 @@ public class MiningPoolManager : DomainService
|
||||
_userMiningLimitCache = userMiningLimitCache;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 扣减矿池
|
||||
/// </summary>
|
||||
/// <param name="rarity">矿物等级</param>
|
||||
public async Task DeductionPoolAsync(RarityEnum rarity)
|
||||
{
|
||||
var pool = await GetMiningPoolContentAsync();
|
||||
switch (rarity)
|
||||
{
|
||||
case RarityEnum.Ordinary:
|
||||
pool.I0_OrdinaryNumber -= 1;
|
||||
break;
|
||||
case RarityEnum.Senior:
|
||||
pool.I1_SeniorNumber -= 1;
|
||||
break;
|
||||
case RarityEnum.Rare:
|
||||
pool.I2_RareNumber -= 1;
|
||||
break;
|
||||
case RarityEnum.Gem:
|
||||
pool.I3_GemNumber -= 1;
|
||||
break;
|
||||
case RarityEnum.Legend:
|
||||
pool.I4_LegendNumber -= 1;
|
||||
break;
|
||||
}
|
||||
//重新设置
|
||||
await SetMiningPoolAsync(pool);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 每次挖矿概率,每天根据特定算法计算
|
||||
/// </summary>
|
||||
@@ -154,6 +184,53 @@ public class MiningPoolManager : DomainService
|
||||
var rarityType = (RarityEnum)Enum.GetValues(typeof(RarityEnum)).GetValue(index)!;
|
||||
var collectiblesList =
|
||||
await _collectiblesRepository._DbQueryable.Where(x => x.Rarity == rarityType).ToListAsync();
|
||||
//当前等级的矿物没有设置
|
||||
if (collectiblesList.Count == 0)
|
||||
{
|
||||
throw new UserFriendlyException($"可惜!差一点就挖到了");
|
||||
}
|
||||
|
||||
bool poolState = true;
|
||||
switch (rarityType)
|
||||
{
|
||||
case RarityEnum.Ordinary:
|
||||
if (pool.I0_OrdinaryNumber <= 0)
|
||||
{
|
||||
poolState = false;
|
||||
}
|
||||
break;
|
||||
case RarityEnum.Senior:
|
||||
if (pool.I1_SeniorNumber <= 0)
|
||||
{
|
||||
poolState = false;
|
||||
}
|
||||
break;
|
||||
case RarityEnum.Rare:
|
||||
if (pool.I2_RareNumber <= 0)
|
||||
{
|
||||
poolState = false;
|
||||
}
|
||||
break;
|
||||
case RarityEnum.Gem:
|
||||
if (pool.I3_GemNumber <= 0)
|
||||
{
|
||||
poolState = false;
|
||||
}
|
||||
break;
|
||||
case RarityEnum.Legend:
|
||||
if (pool.I4_LegendNumber <= 0)
|
||||
{
|
||||
poolState = false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (poolState==false)
|
||||
{
|
||||
throw new UserFriendlyException($"超级可惜!真的真的只差最后一点就挖到了");
|
||||
}
|
||||
|
||||
|
||||
int randomIndex = new Random().Next(collectiblesList.Count);
|
||||
var currentCollectibles = collectiblesList[randomIndex];
|
||||
|
||||
@@ -247,16 +324,23 @@ public class MiningPoolManager : DomainService
|
||||
|
||||
//根据配置,将不同比例的矿,塞入矿池,
|
||||
//矿池,交给redis
|
||||
await _miningPoolCache.SetAsync(MiningCacheConst.MiningPoolContent, new MiningPoolContent(startTime, endTime)
|
||||
|
||||
await SetMiningPoolAsync(new MiningPoolContent(startTime, endTime)
|
||||
{
|
||||
I0_OrdinaryNumber = result[0],
|
||||
I1_SeniorNumber = result[1],
|
||||
I2_RareNumber = result[2],
|
||||
I3_GemNumber = result[3],
|
||||
I4_LegendNumber = result[4]
|
||||
}, new DistributedCacheEntryOptions
|
||||
});
|
||||
}
|
||||
|
||||
private async Task SetMiningPoolAsync(MiningPoolContent content)
|
||||
{
|
||||
AbsoluteExpiration = endTime
|
||||
await _miningPoolCache.SetAsync(MiningCacheConst.MiningPoolContent, content
|
||||
, new DistributedCacheEntryOptions
|
||||
{
|
||||
AbsoluteExpiration = content.EndTime
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="EventHandlers\" />
|
||||
<Folder Include="Repositories\" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user