using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using NPP.SmartSchedue.Api.Contracts.Domain.Notification;
using NPP.SmartSchedue.Api.Contracts.Core.Enums;
using ZhonTai.Admin.Core.Repositories;
namespace NPP.SmartSchedue.Api.Contracts.Core.Repositories;
///
/// 通知任务仓储接口
///
public interface INotificationTaskRepository : IRepositoryBase
{
///
/// 根据通知设置ID获取任务列表
///
/// 通知设置ID
///
Task> GetByNotificationSettingIdAsync(long notificationSettingId);
///
/// 根据任务状态获取任务列表
///
/// 任务状态
///
Task> GetByTaskStatusAsync(NotificationStatusEnum taskStatus);
///
/// 根据启用状态获取任务列表
///
/// 是否启用
///
Task> GetByEnabledAsync(bool enabled);
///
/// 根据业务类型和业务ID获取任务列表
///
/// 业务类型
/// 业务ID
///
Task> GetByBusinessAsync(string businessType, long? businessId = null);
///
/// 获取待执行的任务列表
///
/// 当前时间
///
Task> GetPendingTasksAsync(DateTime currentTime);
///
/// 获取需要执行的定时任务列表(基于Cron表达式)
///
/// 当前时间
///
Task> GetCronTasksForExecutionAsync(DateTime currentTime);
///
/// 更新任务执行状态
///
/// 任务ID
/// 任务状态
/// 执行结果
/// 错误信息
///
Task UpdateExecutionStatusAsync(long taskId, NotificationStatusEnum taskStatus, string executionResult = "", string errorMessage = "");
///
/// 更新任务下次执行时间
///
/// 任务ID
/// 下次执行时间
///
Task UpdateNextExecutionTimeAsync(long taskId, DateTime? nextExecutionTime);
///
/// 增加任务执行次数
///
/// 任务ID
/// 是否执行成功
///
Task IncrementExecutionCountAsync(long taskId, bool isSuccess);
///
/// 检查任务是否应该停止执行
///
/// 任务ID
///
Task ShouldStopExecutionAsync(long taskId);
///
/// 获取过期的任务列表
///
/// 过期时间
///
Task> GetExpiredTasksAsync(DateTime expiredBefore);
///
/// 清理过期的任务
///
/// 过期时间
///
Task CleanupExpiredTasksAsync(DateTime expiredBefore);
}