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); } }