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 @@
-