Files
Yi.Framework/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/AssignmentProviders/TimerAbstractProvider.cs
2024-08-14 18:31:37 +08:00

42 lines
1.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using SqlSugar;
using Yi.Framework.Bbs.Domain.Entities.Assignment;
using Yi.Framework.Bbs.Domain.Shared.Enums;
namespace Yi.Framework.Bbs.Domain.Managers.AssignmentProviders;
/// <summary>
/// 循环任务提供者
/// </summary>
public abstract class TimerProvider : IAssignmentProvider
{
/// <summary>
/// 任务类型
/// </summary>
protected abstract AssignmentTypeEnum AssignmentType { get; }
public Task<List<AssignmentDefineAggregateRoot>> GetCanReceiveListAsync(AssignmentContext context)
{
//先获取到对应任务定义列表
var assignmentDefines = context.AllAssignmentDefine.Where(x => x.AssignmentType == AssignmentType).ToList();
//满足以下1个条件
//1没有正在运行的
//2: 存在已完成,但是完成时间是过期的
var assignmentFilterIds = context.CurrentUserAssignments
.Where(x =>
//正在进行的,已经完成,要去掉
x.AssignmentState == AssignmentStateEnum.Progress||
x.AssignmentState==AssignmentStateEnum.Completed||
//已结束,但是还没过期,要去掉
(x.AssignmentState == AssignmentStateEnum.End&&!AssignmentType.IsExpire(x.EndTime!.Value)))
.Select(x => x.AssignmentDefineId)
.ToList();
//出去不可接收的任务,就是可接收任务
var output = assignmentDefines.Where(x => !assignmentFilterIds.Contains(x.Id)).ToList();
return Task.FromResult(output);
}
}