using SqlSugar;
using Yi.Framework.Bbs.Domain.Entities.Assignment;
using Yi.Framework.Bbs.Domain.Shared.Enums;
namespace Yi.Framework.Bbs.Domain.Managers.AssignmentProviders;
///
/// 循环任务提供者
///
public abstract class TimerProvider : IAssignmentProvider
{
///
/// 任务类型
///
protected abstract AssignmentTypeEnum AssignmentType { get; }
public Task> 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);
}
}