package com.ruoyi.cs.service;

import com.ruoyi.cs.domain.CsApprovalConfig;
import com.ruoyi.cs.domain.dto.CsApprovalConfigAddDTO;
import com.ruoyi.cs.domain.dto.CsApprovalRecordCheckDTO;
import com.ruoyi.cs.domain.dto.CsApprovalRecordCloseApplyDTO;
import com.ruoyi.cs.domain.vo.CsApprovalConfigFlowVO;
import com.ruoyi.cs.domain.vo.CsApprovalRecordVO;

import java.util.List;

/**
 * 审核流程节点规则配置Service接口
 *
 * @author cc
 * @date 2024-04-30
 */
public interface ICsApprovalConfigService
{
    /**
     * 查询审核流程节点规则配置
     *
     * @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 approvalConfigIds 需要删除的审核流程节点规则配置主键集合
     * @return 结果
     */
    public int deleteCsApprovalConfigByApprovalConfigIds(String[] approvalConfigIds);

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

    /**
     * 新增审核流程节点规则配置信息
     * @param dto 节点规则配置信息
     * @return
     */
    public int insertCsApprovalConfigByAddDTO(CsApprovalConfigAddDTO dto);


    /**
     * 获取工单流程、 审核信息列表
     * @param csApprovalConfig
     */
    public CsApprovalConfigFlowVO getOrderApprovalInfoList(CsApprovalConfig csApprovalConfig);

    /**
     * 提交审核__审核流程
     * @param dto 审核信息
     * @return
     */
    public int checkFlowNode(CsApprovalRecordCheckDTO dto);

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


    /**
     * 关闭审核流程及工单
     * @param dto 相关审核记录信息
     * @return
     */
    public int editRecordAndCloseApply(CsApprovalRecordCloseApplyDTO dto);

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

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

    /**
     * 主管更改受理人员
     * @param dto 审核信息
     * @return
     */
    public int leaderUpdateAccept(CsApprovalRecordVO dto);

    /**
     * 主管转交其他部门人员
     * @param dto 审核信息
     * @return
     */
    public int leaderTransferOther(CsApprovalRecordVO dto);

    /**
     * 转交其他部门人员
     * @param dto 审核信息
     * @return
     */
    public int transferOther(CsApprovalRecordVO dto);

    /**
     * 撤回转交
     * @param dto 审核信息
     * @return
     */
    public int withdrawTransfer(CsApprovalRecordVO dto);
    public int withdrawDelegation(CsApprovalRecordVO dto);

    /**
     * 拒绝转交
     * @param dto 审核信息
     * @return
     */
    public int refuseTransfer(CsApprovalRecordVO dto);

    /**
     * 审批回退
     * @param dto 审核信息
     * @return
     */
    public int approvalRollback(CsApprovalRecordVO dto);

    /**
     * (已过节点)修改审批意见
     * @param dto 修改意见信息
     * @return
     */
    public int editApproverOpinions(CsApprovalRecordVO dto);

}
