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.ApprovalNodeDefinition;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
 * 审批节点定义Mapper接口
 *
 * @author simon lin
 * @date 2025-09-06
 */
@Mapper
public interface ApprovalNodeDefinitionMapper extends BaseMapper<ApprovalNodeDefinition> {
    /**
     * 查询审批节点定义
     *
     * @param id 审批节点定义主键
     * @return 审批节点定义
     */
    ApprovalNodeDefinition selectApprovalNodeDefinitionById(Long id);

    /**
     * 根据流程ID查询审批节点定义列表
     *
     * @param workflowId 流程定义ID
     * @return 审批节点定义列表
     */
    List<ApprovalNodeDefinition> selectApprovalNodeDefinitionByWorkflowId(@Param("workflowId") Long workflowId);

    /**
     * 根据流程ID和节点代码查询审批节点定义
     *
     * @param workflowId 流程定义ID
     * @param nodeCode   节点代码
     * @return 审批节点定义
     */
    ApprovalNodeDefinition selectApprovalNodeDefinitionByWorkflowAndCode(@Param("workflowId") Long workflowId, @Param("nodeCode") String nodeCode);

    /**
     * 根据流程ID查询第一个节点
     *
     * @param workflowId 流程定义ID
     * @return 审批节点定义
     */
    ApprovalNodeDefinition selectFirstNodeByWorkflowId(@Param("workflowId") Long workflowId);

    /**
     * 根据流程ID和当前节点顺序查询下一个节点
     *
     * @param workflowId   流程定义ID
     * @param currentOrder 当前节点顺序
     * @return 审批节点定义
     */
    ApprovalNodeDefinition selectNextNodeByOrder(@Param("workflowId") Long workflowId, @Param("currentOrder") Integer currentOrder);

    /**
     * 根据流程ID和当前节点顺序查询上一个节点
     *
     * @param workflowId   流程定义ID
     * @param currentOrder 当前节点顺序
     * @return 审批节点定义
     */
    ApprovalNodeDefinition selectPreviousNodeByOrder(@Param("workflowId") Long workflowId, @Param("currentOrder") Integer currentOrder);

    /**
     * 查询审批节点定义列表
     *
     * @param approvalNodeDefinition 审批节点定义
     * @return 审批节点定义集合
     */
    List<ApprovalNodeDefinition> selectApprovalNodeDefinitionList(ApprovalNodeDefinition approvalNodeDefinition);

    /**
     * 新增审批节点定义
     *
     * @param approvalNodeDefinition 审批节点定义
     * @return 结果
     */
    int insertApprovalNodeDefinition(ApprovalNodeDefinition approvalNodeDefinition);

    /**
     * 修改审批节点定义
     *
     * @param approvalNodeDefinition 审批节点定义
     * @return 结果
     */
    int updateApprovalNodeDefinition(ApprovalNodeDefinition approvalNodeDefinition);

    /**
     * 删除审批节点定义
     *
     * @param id 审批节点定义主键
     * @return 结果
     */
    int deleteApprovalNodeDefinitionById(Long id);

    /**
     * 批量删除审批节点定义
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteApprovalNodeDefinitionByIds(Long[] ids);

    /**
     * 根据流程ID删除审批节点定义
     *
     * @param workflowId 流程定义ID
     * @return 结果
     */
    int deleteApprovalNodeDefinitionByWorkflowId(@Param("workflowId") Long workflowId);
}