diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/Integral/LuckyService.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/Integral/LuckyService.cs new file mode 100644 index 00000000..832e582f --- /dev/null +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/Integral/LuckyService.cs @@ -0,0 +1,56 @@ +using System; +using Microsoft.AspNetCore.Authorization; +using Volo.Abp.Application.Services; +using Volo.Abp.EventBus.Local; +using Yi.Framework.Bbs.Domain.Shared.Etos; + +namespace Yi.Framework.Bbs.Application.Services.Integral +{ + public class LuckyService : ApplicationService + { + private ILocalEventBus _localEventBus; + public LuckyService(ILocalEventBus localEventBus) { _localEventBus = localEventBus; } + + /// + /// 大转盘 + /// + /// + [Authorize] + public async Task PostWheel() + { + int[] values=new int[10] { 0,10,30,50,80,100,150,200,300,666}; + var index = GetWheelIndex(); + var value = values[index]-50; + + //修改钱钱,如果钱钱不足,直接会丢出去,那本次抽奖将无效 + await _localEventBus.PublishAsync(new MoneyChangeEventArgs { UserId = CurrentUser.Id!.Value, Number = value }, false); + + return index; + } + + private int GetWheelIndex() + { + int[] probabilities = { 10, 20, 30, 20, 5, 5, 4, 3, 2, 1 }; + + int total = 0; + foreach (var prob in probabilities) + { + total += prob; + } + + int randomNum = new Random().Next(1, total + 1); + + int cumulativeProb = 0; + for (int i = 0; i < probabilities.Length; i++) + { + cumulativeProb += probabilities[i]; + if (randomNum <= cumulativeProb) + { + return i; + } + } + var value = probabilities.Length - 1; + return value; + } + } +}