package cn.iocoder.yudao.module.bpm.service.oa.leave;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.leave.vo.OaLeavePageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.leave.vo.OaLeaveRespVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.leave.vo.OaLeaveSaveReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskApproveReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskReturnReqVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.leave.OaLeaveDO;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * 请假流程信息 Service 接口
 *
 * @author dp
 */
public interface OaLeaveService {

    Long stagingOaLeave(OaLeaveSaveReqVO stagingReqVO);

    Long commitOaLeave(OaLeaveSaveReqVO commitReqVO);

    Long agreeOaLeave(BpmTaskApproveReqVO agreeReqVO);

    Long disagreeOaLeave(BpmTaskReturnReqVO disagreeReqVO);

    Long revocationOaLeave(BpmTaskApproveReqVO revocationReqVO);

    Long reCommitOaLeave(OaLeaveSaveReqVO reCommitReqVO);

    Long closeOaLeave(Long id);

    void deleteOaLeave(Long id);

    OaLeaveRespVO getOaLeave(Long id);

    OaLeaveRespVO getOaLeaveByProcInstId(String procInstId);

    PageResult<OaLeaveRespVO> getOaLeavePage(OaLeavePageReqVO pageReqVO);

    PageResult<OaLeaveRespVO> exportOaLeaveExcel(OaLeavePageReqVO pageReqVO);


}