2024-01-11 22:06:15 +08:00
|
|
|
|
using Volo.Abp;
|
|
|
|
|
|
using Volo.Abp.Domain.Services;
|
2024-01-11 18:51:53 +08:00
|
|
|
|
using Volo.Abp.EventBus.Local;
|
2024-01-11 22:06:15 +08:00
|
|
|
|
using Volo.Abp.Uow;
|
2024-01-11 18:51:53 +08:00
|
|
|
|
using Yi.Framework.Bbs.Domain.Entities.Integral;
|
|
|
|
|
|
using Yi.Framework.Bbs.Domain.Shared.Etos;
|
|
|
|
|
|
using Yi.Framework.SqlSugarCore.Abstractions;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Yi.Framework.Bbs.Domain.Managers
|
|
|
|
|
|
{
|
|
|
|
|
|
public class IntegralManager : DomainService
|
|
|
|
|
|
{
|
2024-05-22 14:35:08 +08:00
|
|
|
|
public ISqlSugarRepository<LevelAggregateRoot> _levelRepository;
|
|
|
|
|
|
public ISqlSugarRepository<SignInAggregateRoot> _signInRepository;
|
2024-01-11 18:51:53 +08:00
|
|
|
|
private readonly ILocalEventBus _localEventBus;
|
2024-05-22 14:35:08 +08:00
|
|
|
|
public IntegralManager(ISqlSugarRepository<LevelAggregateRoot> levelRepository, ISqlSugarRepository<SignInAggregateRoot> signInRepository, ILocalEventBus localEventBus)
|
2024-01-11 18:51:53 +08:00
|
|
|
|
{
|
|
|
|
|
|
_levelRepository = levelRepository;
|
|
|
|
|
|
_localEventBus = localEventBus;
|
|
|
|
|
|
_signInRepository = signInRepository;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 签到
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
2024-01-11 22:06:15 +08:00
|
|
|
|
[UnitOfWork]
|
|
|
|
|
|
public async Task<decimal> SignInAsync(Guid userId)
|
2024-01-11 18:51:53 +08:00
|
|
|
|
{
|
|
|
|
|
|
//签到,添加用户钱钱
|
|
|
|
|
|
//发送一个充值的领域事件即可
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//签到添加的钱钱,跟连续签到有关系
|
|
|
|
|
|
//每天随机(3-10),连续签到每次累加多1点,最多一天30
|
|
|
|
|
|
|
|
|
|
|
|
//额外
|
2024-01-11 22:06:15 +08:00
|
|
|
|
//如果随机数数字以9结尾,额外再获取乘1倍
|
2024-01-11 18:51:53 +08:00
|
|
|
|
|
|
|
|
|
|
//这种逻辑,就是属于核心领域业务了
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-01-11 22:06:15 +08:00
|
|
|
|
var sigInLast = await _signInRepository._DbQueryable.Where(x => x.CreatorId == userId).OrderByDescending(x => x.CreationTime).FirstAsync();
|
|
|
|
|
|
|
2024-03-07 11:32:49 +08:00
|
|
|
|
//verify 校验是否允许签到了
|
2024-01-11 22:06:15 +08:00
|
|
|
|
if (sigInLast is not null)
|
|
|
|
|
|
{
|
|
|
|
|
|
VerifySignInTime(sigInLast.CreationTime);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//连续签到次数
|
|
|
|
|
|
var continuousNumber = GetContinuousNumber(sigInLast);
|
|
|
|
|
|
//签到奖励值
|
|
|
|
|
|
var value = GetSignInValue(continuousNumber);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//插入记录
|
2024-05-22 14:35:08 +08:00
|
|
|
|
var entity = new SignInAggregateRoot() { ContinuousNumber = continuousNumber };
|
2024-01-11 22:06:15 +08:00
|
|
|
|
await _signInRepository.InsertAsync(entity);
|
|
|
|
|
|
|
2024-01-11 18:51:53 +08:00
|
|
|
|
//发布一个其他领域的事件
|
2024-07-25 22:34:40 +08:00
|
|
|
|
await _localEventBus.PublishAsync(new MoneyChangeEventArgs() { UserId = userId, Number = value },false);
|
2024-01-11 22:06:15 +08:00
|
|
|
|
return value;
|
2024-01-11 18:51:53 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-01-11 22:06:15 +08:00
|
|
|
|
/// <summary>
|
2024-03-07 11:32:49 +08:00
|
|
|
|
/// 校验签到时间
|
2024-01-11 22:06:15 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="dataTime"></param>
|
|
|
|
|
|
/// <exception cref="UserFriendlyException"></exception>
|
|
|
|
|
|
private void VerifySignInTime(DateTime dataTime)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (dataTime.Date == DateTime.Now.Date)
|
|
|
|
|
|
{
|
|
|
|
|
|
throw new UserFriendlyException("今日你已经签到过了~");
|
|
|
|
|
|
}
|
2024-01-11 18:51:53 +08:00
|
|
|
|
|
2024-01-11 22:06:15 +08:00
|
|
|
|
}
|
2024-01-11 18:51:53 +08:00
|
|
|
|
|
2024-01-11 22:06:15 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 获取签到值
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="continuousNumber"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
private decimal GetSignInValue(int continuousNumber)
|
|
|
|
|
|
{
|
|
|
|
|
|
//基础数值
|
|
|
|
|
|
var baseValue = new Random().Next(300, 1100) / 100m;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//累加额外的奖励
|
|
|
|
|
|
var extraValue = 0m;
|
|
|
|
|
|
if (baseValue.ToString().EndsWith("9"))
|
|
|
|
|
|
{
|
|
|
|
|
|
extraValue = 1 * baseValue;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//累加连续签到的奖励
|
|
|
|
|
|
var signInValue = continuousNumber * 1m;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//获取添加的值
|
|
|
|
|
|
var value = baseValue + extraValue + signInValue;
|
|
|
|
|
|
if (value >= 30)
|
|
|
|
|
|
{
|
|
|
|
|
|
value = 30;
|
|
|
|
|
|
}
|
|
|
|
|
|
return value;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 获取连续次数
|
|
|
|
|
|
/// </summary>
|
2024-05-22 14:35:08 +08:00
|
|
|
|
private int GetContinuousNumber(SignInAggregateRoot sigInLast)
|
2024-01-11 22:06:15 +08:00
|
|
|
|
{
|
|
|
|
|
|
var continuousNumber = 1;
|
|
|
|
|
|
|
|
|
|
|
|
//已签到过
|
|
|
|
|
|
if (sigInLast is not null)
|
|
|
|
|
|
{
|
|
|
|
|
|
//签到过,且昨天已签到过,直接使用昨天的连续次数+1
|
2024-01-16 09:13:14 +08:00
|
|
|
|
if (sigInLast.CreationTime.Day == DateTime.Now.AddDays(-1).Day)
|
2024-01-11 22:06:15 +08:00
|
|
|
|
{
|
|
|
|
|
|
continuousNumber = sigInLast.ContinuousNumber + 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return continuousNumber;
|
|
|
|
|
|
}
|
2024-01-11 18:51:53 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|