diff --git a/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain.Shared/Consts/RarityEnum.cs b/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain.Shared/Enums/RarityEnum.cs similarity index 100% rename from Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain.Shared/Consts/RarityEnum.cs rename to Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain.Shared/Enums/RarityEnum.cs diff --git a/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain.Shared/Etos/SuccessMiningEto.cs b/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain.Shared/Etos/SuccessMiningEto.cs new file mode 100644 index 00000000..3ccba77c --- /dev/null +++ b/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain.Shared/Etos/SuccessMiningEto.cs @@ -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; } +} \ No newline at end of file diff --git a/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain.Shared/Yi.Framework.DigitalCollectibles.Domain.Shared.csproj b/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain.Shared/Yi.Framework.DigitalCollectibles.Domain.Shared.csproj index 1bc26ce1..4e77b87c 100644 --- a/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain.Shared/Yi.Framework.DigitalCollectibles.Domain.Shared.csproj +++ b/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain.Shared/Yi.Framework.DigitalCollectibles.Domain.Shared.csproj @@ -9,8 +9,4 @@ - - - - diff --git a/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain/EventHandlers/SuccessMiningEventHandler.cs b/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain/EventHandlers/SuccessMiningEventHandler.cs new file mode 100644 index 00000000..2a2dbe93 --- /dev/null +++ b/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain/EventHandlers/SuccessMiningEventHandler.cs @@ -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; + +/// +/// 成功挖到矿物 +/// +public class SuccessMiningEventHandler : ILocalEventHandler, ITransientDependency +{ + private MiningPoolManager _miningPoolManager; + private ISqlSugarRepository _repository; + + public SuccessMiningEventHandler(MiningPoolManager miningPoolManager, + ISqlSugarRepository 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); + } +} \ No newline at end of file diff --git a/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain/Managers/MiningPoolManager.cs b/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain/Managers/MiningPoolManager.cs index 6c5e6435..18cb659a 100644 --- a/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain/Managers/MiningPoolManager.cs +++ b/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain/Managers/MiningPoolManager.cs @@ -41,6 +41,36 @@ public class MiningPoolManager : DomainService _userMiningLimitCache = userMiningLimitCache; } + /// + /// 扣减矿池 + /// + /// 矿物等级 + 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); + } + + /// /// 每次挖矿概率,每天根据特定算法计算 /// @@ -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]; @@ -166,7 +243,7 @@ public class MiningPoolManager : DomainService CollectiblesId = result.Collectibles.Id, IsRead = false }); - + return result; } @@ -247,19 +324,26 @@ 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 - { - AbsoluteExpiration = endTime }); } + private async Task SetMiningPoolAsync(MiningPoolContent content) + { + await _miningPoolCache.SetAsync(MiningCacheConst.MiningPoolContent, content + , new DistributedCacheEntryOptions + { + AbsoluteExpiration = content.EndTime + }); + } + /// /// 刷新用户挖矿限制 /// diff --git a/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain/Yi.Framework.DigitalCollectibles.Domain.csproj b/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain/Yi.Framework.DigitalCollectibles.Domain.csproj index de97e8c8..2d47931a 100644 --- a/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain/Yi.Framework.DigitalCollectibles.Domain.csproj +++ b/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain/Yi.Framework.DigitalCollectibles.Domain.csproj @@ -17,7 +17,6 @@ -