package com.sundot.airport.system.mapper.approval;

import java.util.List;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sundot.airport.system.domain.approval.ApprovalTask;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
 * 审批任务Mapper接口
 *
 * @author simon lin
 * @date 2025-09-06
 */
@Mapper
public interface ApprovalTaskMapper extends BaseMapper<ApprovalTask> {
    /**
     * 查询审批任务
     *
     * @param id 审批任务主键
     * @return 审批任务
     */
    ApprovalTask selectApprovalTaskById(Long id);

    /**
     * 根据任务编号查询审批任务
     *
     * @param taskNo 任务编号
     * @return 审批任务
     */
    ApprovalTask selectApprovalTaskByNo(@Param("taskNo") String taskNo);

    /**
     * 根据实例ID查询审批任务列表
     *
     * @param instanceId 实例ID
     * @return 审批任务列表
     */
    List<ApprovalTask> selectApprovalTaskByInstanceId(@Param("instanceId") Long instanceId);

    /**
     * 根据处理人ID查询待办任务列表
     *
     * @param assigneeId 处理人ID
     * @param status     任务状态
     * @return 审批任务列表
     */
    List<ApprovalTask> selectApprovalTaskByAssignee(@Param("assigneeId") Long assigneeId, @Param("status") String status);

    /**
     * 根据实例ID和节点ID查询审批任务
     *
     * @param instanceId 实例ID
     * @param nodeId     节点ID
     * @return 审批任务
     */
    ApprovalTask selectApprovalTaskByInstanceAndNode(@Param("instanceId") Long instanceId, @Param("nodeId") Long nodeId);

    /**
     * 查询审批任务列表
     *
     * @param approvalTask 审批任务
     * @return 审批任务集合
     */
    List<ApprovalTask> selectApprovalTaskList(ApprovalTask approvalTask);

    /**
     * 查询审批任务详情（包含关联数据）
     *
     * @param id 审批任务主键
     * @return 审批任务
     */
    ApprovalTask selectApprovalTaskDetail(Long id);

    /**
     * 新增审批任务
     *
     * @param approvalTask 审批任务
     * @return 结果
     */
    int insertApprovalTask(ApprovalTask approvalTask);

    /**
     * 修改审批任务
     *
     * @param approvalTask 审批任务
     * @return 结果
     */
    int updateApprovalTask(ApprovalTask approvalTask);

    /**
     * 删除审批任务
     *
     * @param id 审批任务主键
     * @return 结果
     */
    int deleteApprovalTaskById(Long id);

    /**
     * 批量删除审批任务
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteApprovalTaskByIds(Long[] ids);

    /**
     * 根据实例ID删除审批任务
     *
     * @param instanceId 实例ID
     * @return 结果
     */
    int deleteApprovalTaskByInstanceId(@Param("instanceId") Long instanceId);

    /**
     * 生成任务编号
     *
     * @return 任务编号
     */
    String generateTaskNo();

    /**
     * 统计用户待办任务数量
     *
     * @param assigneeId 处理人ID
     * @return 待办任务数量
     */
    int countPendingTasksByAssignee(@Param("assigneeId") Long assigneeId);
}