package com.ruoyi.cs.mapper;

import java.util.List;
import com.ruoyi.cs.domain.CsApprovalConfig;
import com.ruoyi.cs.domain.vo.CsApprovalConfigNodeInfoVO;
import com.ruoyi.cs.domain.vo.CsApprovalRecordVO;
import org.apache.ibatis.annotations.Param;

/**
 * 审核流程节点规则配置Mapper接口
 *
 * @author cc
 * @date 2024-04-30
 */
public interface CsApprovalConfigMapper
{
    /**
     * 查询审核流程节点规则配置
     *
     * @param approvalConfigId 审核流程节点规则配置主键
     * @return 审核流程节点规则配置
     */
    public CsApprovalConfig selectCsApprovalConfigByApprovalConfigId(String approvalConfigId);

    /**
     * 查询审核流程节点规则配置列表
     *
     * @param csApprovalConfig 审核流程节点规则配置
     * @return 审核流程节点规则配置集合
     */
    public List<CsApprovalConfig> selectCsApprovalConfigList(CsApprovalConfig csApprovalConfig);

    /**
     * 新增审核流程节点规则配置
     *
     * @param csApprovalConfig 审核流程节点规则配置
     * @return 结果
     */
    public int insertCsApprovalConfig(CsApprovalConfig csApprovalConfig);

    /**
     * 修改审核流程节点规则配置
     *
     * @param csApprovalConfig 审核流程节点规则配置
     * @return 结果
     */
    public int updateCsApprovalConfig(CsApprovalConfig csApprovalConfig);

    /**
     * 删除审核流程节点规则配置
     *
     * @param approvalConfigId 审核流程节点规则配置主键
     * @return 结果
     */
    public int deleteCsApprovalConfigByApprovalConfigId(String approvalConfigId);

    /**
     * 批量删除审核流程节点规则配置
     *
     * @param approvalConfigIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteCsApprovalConfigByApprovalConfigIds(String[] approvalConfigIds);

    /**
     * 批量新增审核流程节点规则配置
     *
     * @param configs 审核流程节点列表
     * @return 结果
     */
    public int batchInsertConfigs(@Param("configs") List<CsApprovalConfig> configs);

    /**
     * 获取工单审核信息流程
     * @param formId 工单ID
     * @param formType 工单类型(0-资源，1-工单)
     * @return
     */
    public List<CsApprovalConfigNodeInfoVO> getFlowList(@Param("formId") String formId, @Param("formType") String formType, @Param("nodeType")String nodeType);

    /**
     * 获取未操作工单审核信息流程数量
     * @param formId 工单ID
     * @param formType 工单类型(0-资源，1-工单)
     * @return
     */
    public int getUnFlowListNum(@Param("formId") String formId, @Param("formType") String formType);

    /**
     * 获取工单审核抄送人员ID数组
     * @param formId
     * @param formType (0-资源，1-工单)
     * @return
     */
    public String getCpoyUserIds(@Param("formId") String formId, @Param("formType") String formType);

    /**
     * 获取审核抄送人员节点信息
     * @param copyUserIds
     * @return
     */
    public List<CsApprovalConfigNodeInfoVO> getCopyFlowNodeListInfo(@Param("copyUserIds") List<String> copyUserIds);

    /**
     * 获取审核流程的表单列表
     * @param formId 工单ID
     * @param formType 工单类型(0-资源，1-工单)
     * @return
     */
    public List<CsApprovalRecordVO> getCheckFormList(@Param("formId") String formId, @Param("formType") String formType, @Param("userId") Long userId);

    /**
     * 获取审核流程的表单列表（NodeType）
     * @param formId 工单ID
     * @param formType 工单类型(0-资源，1-工单)
     * @return
     */
    public List<CsApprovalRecordVO> getCheckFormListByNodeType(@Param("formId") String formId, @Param("formType") String formType, @Param("userId") Long userId, @Param("nodeType") String nodeType);

    /**
     * 覆盖删除 申请单的审核流程节点规则配置
     * @param formId 资源/工单 ID
     * @param formType 申请单类型(0-资源, 1-工单)
     * @return 结果
     */
    public int deleteCoverApprovalConfigsByApplyIdType(@Param("formId") String formId, @Param("formType") String formType);

    /**
     * 查询指定node编号、formId、formType的节点配置
     * @param approvalNode node编号
     * @param formId
     * @param formType 类型（0-资源，1-工单）
     * @return
     */
    public CsApprovalConfig selectConfigByNodeFormIdType(@Param("approvalNode") Long approvalNode, @Param("formId") String formId, @Param("formType") String formType);

    /**
     * xcx获取用户当前申请的未审核节点信息
     * @param formId 资源/工单Id
     * @param formType 类型（0-资源，1-工单）
     * @param userId 用户id
     * @return
     */
    public CsApprovalRecordVO getUserNodeInfoForXcx(@Param("formId")String formId, @Param("formType")String formType, @Param("userId")Long userId);

    /**
     * 获取用户节点信息
     * @param formId 资源/工单Id
     * @param formType 类型（0-资源，1-工单）
     * @return
     */
    public CsApprovalRecordVO getNewNodeInfoForXcx(@Param("formId")String formId, @Param("formType")String formType);

    /**
     * 查询主管下的受理人规则配置
     *
     * @param csApprovalConfig 审核流程节点规则配置
     * @return 审核流程节点规则配置集合
     */
    public CsApprovalConfig selectCsApprovalConfigAccept(CsApprovalConfig csApprovalConfig);

    /**
     * 查询最大审批节点
     *
     * @param formId 工单ID
     * @return 审核流程节点规则配置集合
     */
    public Long selectMaxApprovalNodeCsApprovalConfigAccept(String formId);

    /**
     * 查询最后一个审批节点
     *
     * @param formId 工单ID
     * @return 审核流程节点规则配置集合
     */
    public CsApprovalConfig selectIsLastNodeCsApprovalConfigAccept(String formId);

    /**
     * 删除审核流程节点规则配置（转交审核配置ID）
     *
     * @param transfereeConfigId 转交审核配置ID
     * @return 结果
     */
    public int deleteCsApprovalConfigByTransfereeConfigId(String transfereeConfigId);

    /**
     * 查询审核流程节点详情规则配置
     *
     * @param approvalConfigId 审核流程节点规则配置主键
     * @return 审核流程节点规则配置
     */
    public CsApprovalConfig selectAllCsApprovalConfigByApprovalConfigId(String approvalConfigId);

    /**
     * 查询大于审批节点取值审核流程节点规则配置列表
     *
     * @param csApprovalConfig 审核流程节点规则配置
     * @return 审核流程节点规则配置集合
     */
    public List<CsApprovalConfig> selectCsApprovalConfigListApprovalNode(CsApprovalConfig csApprovalConfig);

    /**
     * 批量删除审批节点信息
     *
     * @param list 审批节点
     * @return 结果
     */
    public int bachDeleteCsApprovalConfigByList(List<CsApprovalConfig> list);
}
