package com.ruoyi.notification.service;

import java.util.List;
import com.ruoyi.notification.domain.ScheduledTask;

/**
 * 定时任务Service接口
 * 
 * @author ruoyi
 * @date 2025-12-19
 */
public interface IScheduledTaskService 
{
    /**
     * 查询定时任务
     * 
     * @param taskId 定时任务主键
     * @return 定时任务
     */
    public ScheduledTask selectScheduledTaskByTaskId(Long taskId);

    /**
     * 查询定时任务列表
     * 
     * @param scheduledTask 定时任务
     * @return 定时任务集合
     */
    public List<ScheduledTask> selectScheduledTaskList(ScheduledTask scheduledTask);

    /**
     * 新增定时任务
     * 
     * @param scheduledTask 定时任务
     * @return 结果
     */
    public int insertScheduledTask(ScheduledTask scheduledTask);

    /**
     * 修改定时任务
     * 
     * @param scheduledTask 定时任务
     * @return 结果
     */
    public int updateScheduledTask(ScheduledTask scheduledTask);

    /**
     * 批量删除定时任务
     * 
     * @param taskIds 需要删除的定时任务主键集合
     * @return 结果
     */
    public int deleteScheduledTaskByTaskIds(Long[] taskIds);

    /**
     * 删除定时任务信息
     * 
     * @param taskId 定时任务主键
     * @return 结果
     */
    public int deleteScheduledTaskByTaskId(Long taskId);

    /**
     * 启动定时任务
     * 
     * @param taskId 任务ID
     * @return 结果
     */
    public boolean startTask(Long taskId);

    /**
     * 停止定时任务
     * 
     * @param taskId 任务ID
     * @return 结果
     */
    public boolean stopTask(Long taskId);

    /**
     * 暂停定时任务
     * 
     * @param taskId 任务ID
     * @return 结果
     */
    public boolean pauseTask(Long taskId);

    /**
     * 恢复定时任务
     * 
     * @param taskId 任务ID
     * @return 结果
     */
    public boolean resumeTask(Long taskId);

    /**
     * 立即执行定时任务
     * 
     * @param taskId 任务ID
     * @return 结果
     */
    public boolean runTaskNow(Long taskId);

    /**
     * 初始化定时任务
     */
    public void initScheduledTasks();

    /**
     * 创建合同到期提醒任务
     * 
     * @param contractId 合同ID
     * @param reminderDays 提前提醒天数
     * @return 结果
     */
    public boolean createContractExpiryReminderTask(Long contractId, int reminderDays);

    /**
     * 创建合同状态检查任务
     * 
     * @return 结果
     */
    public boolean createContractStatusCheckTask();

    /**
     * 更新任务执行统计
     * 
     * @param taskId 任务ID
     * @param success 是否成功
     */
    public void updateTaskExecutionStats(Long taskId, boolean success);
}