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

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.purchase.vo.OaPurchasePageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.purchase.vo.OaPurchaseRespVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.purchase.vo.OaPurchaseSaveReqVO;
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.purchase.OaPurchaseObjDO;

import java.util.List;

/**
 * 采购流程信息 Service 接口
 *
 * @author dp
 */
public interface OaPurchaseService {

    Long stagingOaPurchase(OaPurchaseSaveReqVO stagingReqVO);

    Long commitOaPurchase(OaPurchaseSaveReqVO commitReqVO);

    Long agreeOaPurchase(BpmTaskApproveReqVO agreeReqVO);

    Long disagreeOaPurchase(BpmTaskReturnReqVO disagreeReqVO);

    Long revocationOaPurchase(BpmTaskApproveReqVO revocationReqVO);

    Long reCommitOaPurchase(OaPurchaseSaveReqVO reCommitReqVO);

    Long closeOaPurchase(Long id);

    void deleteOaPurchase(Long id);

    OaPurchaseRespVO getOaPurchase(Long id);

    OaPurchaseRespVO getOaPurchaseByProcInstId(String procInstId);

    PageResult<OaPurchaseRespVO> getOaPurchasePage(OaPurchasePageReqVO pageReqVO);

    PageResult<OaPurchaseRespVO> exportOaPurchaseExcel(OaPurchasePageReqVO pageReqVO);

    // /**
    //  * 创建采购流程信息
    //  *
    //  * @param createReqVO 创建信息
    //  * @return 编号
    //  */
    // Long createOaPurchase(@Valid OaPurchaseSaveReqVO createReqVO);
    //
    // /**
    //  * 更新采购流程信息
    //  *
    //  * @param updateReqVO 更新信息
    //  */
    // void updateOaPurchase(@Valid OaPurchaseSaveReqVO updateReqVO);
    //
    // /**
    //  * 删除采购流程信息
    //  *
    //  * @param id 编号
    //  */
    // void deleteOaPurchase(Long id);
    //
    // /**
    //  * 获得采购流程信息
    //  *
    //  * @param id 编号
    //  * @return 采购流程信息
    //  */
    // OaPurchaseDO getOaPurchase(Long id);
    //
    // /**
    //  * 获得采购流程信息分页
    //  *
    //  * @param pageReqVO 分页查询
    //  * @return 采购流程信息分页
    //  */
    // PageResult<OaPurchaseDO> getOaPurchasePage(OaPurchasePageReqVO pageReqVO);

    // ==================== 子表（采购流程信息子表） ====================

    /**
     * 获得采购流程信息子表列表
     *
     * @param purchaseId 采购主表id
     * @return 采购流程信息子表列表
     */
    List<OaPurchaseObjDO> getOaPurchaseObjListByPurchaseId(Long purchaseId);

}