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

import java.util.Date;
import java.util.List;
import java.util.Map;

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

/**
 * 审批实例Mapper接口
 *
 * @author simon lin
 * @date 2025-09-06
 */
@Mapper
public interface ApprovalInstanceMapper extends BaseMapper<ApprovalInstance> {
    /**
     * 查询审批实例
     *
     * @param id 审批实例主键
     * @return 审批实例
     */
    ApprovalInstance selectApprovalInstanceById(Long id);

    /**
     * 根据实例编号查询审批实例
     *
     * @param instanceNo 实例编号
     * @return 审批实例
     */
    ApprovalInstance selectApprovalInstanceByNo(@Param("instanceNo") String instanceNo);

    /**
     * 根据业务类型和业务ID查询审批实例
     *
     * @param businessType 业务类型
     * @param businessId   业务ID
     * @return 审批实例列表
     */
    List<ApprovalInstance> selectApprovalInstanceByBusiness(@Param("businessType") String businessType, @Param("businessId") Long businessId);

    /**
     * 根据提交人ID查询审批实例列表
     *
     * @param submitterId 提交人ID
     * @param status      实例状态
     * @return 审批实例列表
     */
    List<ApprovalInstance> selectApprovalInstanceBySubmitter(@Param("submitterId") Long submitterId, @Param("status") String status);

    /**
     * 查询审批实例列表
     *
     * @param approvalInstance 审批实例
     * @return 审批实例集合
     */
    List<ApprovalInstance> selectApprovalInstanceList(ApprovalInstance approvalInstance);

    /**
     * 根据工作流ID列表、时间范围和用户ID列表查询审批实例列表
     *
     * @param workflowIds 工作流ID列表
     * @param beginTime   开始时间
     * @param endTime     结束时间
     * @param userIds     用户ID列表
     * @return 审批实例集合
     */
    List<ApprovalInstance> selectApprovalInstancesByWorkflowIdsAndTimeRangeAndUsers(
            @Param("workflowIds") List<Long> workflowIds,
            @Param("beginTime") Date beginTime,
            @Param("endTime") Date endTime,
            @Param("userIds") List<Long> userIds);

    /**
     * 查询审批实例详情（包含关联数据）
     *
     * @param id 审批实例主键
     * @return 审批实例
     */
    ApprovalInstance selectApprovalInstanceDetail(Long id);

    /**
     * 新增审批实例
     *
     * @param approvalInstance 审批实例
     * @return 结果
     */
    int insertApprovalInstance(ApprovalInstance approvalInstance);

    /**
     * 修改审批实例
     *
     * @param approvalInstance 审批实例
     * @return 结果
     */
    int updateApprovalInstance(ApprovalInstance approvalInstance);

    /**
     * 删除审批实例
     *
     * @param id 审批实例主键
     * @return 结果
     */
    int deleteApprovalInstanceById(Long id);

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

    /**
     * 生成实例编号
     *
     * @return 实例编号
     */
    String generateInstanceNo();
}