using Volo.Abp.DependencyInjection;
using Volo.Abp.EventBus;
using Yi.Framework.Bbs.Domain.Entities.Assignment;
using Yi.Framework.Bbs.Domain.Shared.Enums;
using Yi.Framework.Bbs.Domain.Shared.Etos;
using Yi.Framework.SqlSugarCore.Abstractions;
namespace Yi.Framework.Bbs.Domain.EventHandlers;
///
/// 任务系统的领域事件,处理不同任务触发变化
///
public class AssignmentEventHandler : ILocalEventHandler, ITransientDependency
{
private readonly ISqlSugarRepository _repository;
public AssignmentEventHandler(ISqlSugarRepository repository)
{
_repository = repository;
}
public async Task HandleEventAsync(AssignmentEventArgs eventData)
{
var currentAssignmentList = await _repository.GetListAsync(x =>
x.AssignmentState == AssignmentStateEnum.Progress && x.UserId == eventData.CurrentUserId);
//如果有接收的任务
if (currentAssignmentList.Count > 0)
{
switch (eventData.RequirementType)
{
//发表主题
case AssignmentRequirementTypeEnum.Discuss:
SetCurrentStepNumber(AssignmentRequirementTypeEnum.Discuss, currentAssignmentList);
break;
//发表评论
case AssignmentRequirementTypeEnum.Comment:
SetCurrentStepNumber(AssignmentRequirementTypeEnum.Comment, currentAssignmentList);
break;
//点赞
case AssignmentRequirementTypeEnum.Agree:
SetCurrentStepNumber(AssignmentRequirementTypeEnum.Agree, currentAssignmentList);
break;
//更新昵称
case AssignmentRequirementTypeEnum.UpdateNick:
SetCurrentStepNumber(AssignmentRequirementTypeEnum.UpdateNick, currentAssignmentList);
break;
//更新头像
case AssignmentRequirementTypeEnum.UpdateIcon:
SetCurrentStepNumber(AssignmentRequirementTypeEnum.UpdateIcon, currentAssignmentList);
break;
default:
throw new ArgumentOutOfRangeException();
}
//更新
await _repository.UpdateRangeAsync(currentAssignmentList);
}
}
///
/// 设置当前进度
///
///
///
private void SetCurrentStepNumber(AssignmentRequirementTypeEnum requirementType,
List currentAssignmentList)
{
currentAssignmentList.ForEach(x =>
{
if (x.AssignmentRequirementType == requirementType &&
x.CurrentStepNumber < x.TotalStepNumber)
{
x.CurrentStepNumber += 1;
if (x.CurrentStepNumber == x.TotalStepNumber)
{
x.AssignmentState = AssignmentStateEnum.Completed;
}
}
});
}
}