From b8e6dfcd99b5a7874da0e0e7361a6d3a3bd61734 Mon Sep 17 00:00:00 2001 From: chenchun Date: Mon, 28 Oct 2024 16:29:38 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=96=B0=E5=A2=9E=E6=88=90=E5=8A=9F?= =?UTF-8?q?=E6=8C=96=E5=88=B0=E7=9F=BF=E7=89=A9=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{Consts => Enums}/RarityEnum.cs | 0 .../Etos/SuccessMiningEto.cs | 8 ++ ...k.DigitalCollectibles.Domain.Shared.csproj | 4 - .../SuccessMiningEventHandler.cs | 35 +++++++ .../Managers/MiningPoolManager.cs | 94 ++++++++++++++++++- ...ramework.DigitalCollectibles.Domain.csproj | 1 - 6 files changed, 132 insertions(+), 10 deletions(-) rename Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain.Shared/{Consts => Enums}/RarityEnum.cs (100%) create mode 100644 Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain.Shared/Etos/SuccessMiningEto.cs create mode 100644 Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain/EventHandlers/SuccessMiningEventHandler.cs 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 @@ -