package org.xyzh.crontab.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.xyzh.common.core.page.PageParam;
import org.xyzh.common.dto.crontab.TbCrontabTask;
import org.xyzh.common.vo.UserDeptRoleVO;

import java.util.List;

/**
 * @description 定时任务数据访问层
 * @filename CrontabTaskMapper.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-25
 */
@Mapper
public interface CrontabTaskMapper extends BaseMapper<TbCrontabTask> {

    /**
     * @description 插入任务
     * @param task 任务信息
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-25
     */
    int insertTask(@Param("task") TbCrontabTask task);

    /**
     * @description 更新任务
     * @param task 任务信息
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-25
     */
    int updateTask(@Param("task") TbCrontabTask task);

    /**
     * @description 删除任务（逻辑删除）
     * @param taskId 任务ID
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-25
     */
    int deleteTask(@Param("taskId") String taskId);

    /**
     * @description 根据ID查询任务
     * @param taskId 任务ID
     * @return TbCrontabTask 任务信息
     * @author yslg
     * @since 2025-10-25
     */
    TbCrontabTask selectTaskById(@Param("taskId") String taskId);

    /**
     * @description 根据过滤条件查询任务列表（包含权限过滤）
     * @param filter 过滤条件
     * @param userDeptRoles 用户部门角色列表
     * @return List<TbCrontabTask> 任务列表
     * @author yslg
     * @since 2025-10-25
     */
    List<TbCrontabTask> selectTaskList(@Param("filter") TbCrontabTask filter, @Param("userDeptRoles") List<UserDeptRoleVO> userDeptRoles);

    /**
     * @description 分页查询任务列表（包含权限过滤）
     * @param filter 过滤条件
     * @param pageParam 分页参数
     * @param userDeptRoles 用户部门角色列表
     * @return List<TbCrontabTask> 任务列表
     * @author yslg
     * @since 2025-10-25
     */
    List<TbCrontabTask> selectTaskPage(@Param("filter") TbCrontabTask filter, @Param("pageParam") PageParam pageParam, @Param("userDeptRoles") List<UserDeptRoleVO> userDeptRoles);

    /**
     * @description 查询所有运行中的任务（包含权限过滤）
     * @param userDeptRoles 用户部门角色列表
     * @return List<TbCrontabTask> 任务列表
     * @author yslg
     * @since 2025-10-25
     */
    List<TbCrontabTask> selectRunningTasks(@Param("userDeptRoles") List<UserDeptRoleVO> userDeptRoles);

    /**
     * @description 查询所有运行中的任务（系统级，不含权限过滤，用于系统初始化）
     * @return List<TbCrontabTask> 任务列表
     * @author yslg
     * @since 2025-10-25
     */
    List<TbCrontabTask> selectAllRunningTasks();

    /**
     * @description 更新任务状态
     * @param taskId 任务ID
     * @param status 状态
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-25
     */
    int updateTaskStatus(@Param("taskId") String taskId, @Param("status") Integer status);

    /**
     * @description 根据Bean名称和方法名称查询任务
     * @param beanName Bean名称
     * @param methodName 方法名称
     * @return TbCrontabTask 任务信息
     * @author yslg
     * @since 2025-10-25
     */
    TbCrontabTask selectTaskByBeanAndMethod(@Param("beanName") String beanName, @Param("methodName") String methodName);

    /**
     * @description 查询任务总数（包含权限过滤）
     * @param filter 过滤条件
     * @param userDeptRoles 用户部门角色列表
     * @return int 任务总数
     * @author yslg
     * @since 2025-10-25
     */
    int countSelectTask(@Param("filter") TbCrontabTask filter, @Param("userDeptRoles") List<UserDeptRoleVO> userDeptRoles);
}

