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

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.supplierprocurementplan.BpmOASupplierProcurementPlanPageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.supplierprocurementplan.BpmOASupplierProcurementPlanReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.supplierprocurementplan.BpmOASupplierProcurementPlanSaveReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.supplierprocurementplan.TheArrivalFileItemsVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOASupplierProcurementPlanDO;

import javax.validation.Valid;
import java.util.List;

/**
 * 供应商采购计划 Service 接口
 *
 * @author 艾楷
 */
public interface BpmOASupplierProcurementPlanService {

    /**
     * 创建供应商采购计划
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createOaSupplierProcurementPlan(@Valid BpmOASupplierProcurementPlanSaveReqVO createReqVO);

    /**
     * 更新供应商采购计划
     *
     * @param updateReqVO 更新信息
     */
    void updateOaSupplierProcurementPlan(@Valid BpmOASupplierProcurementPlanSaveReqVO updateReqVO);

    /**
     * 删除供应商采购计划
     *
     * @param id 编号
     */
    void deleteOaSupplierProcurementPlan(Long id);

    /**
     * 获得供应商采购计划
     *
     * @param id 编号
     * @return 供应商采购计划
     */
    BpmOASupplierProcurementPlanDO getOaSupplierProcurementPlan(Long id);

    /**
     * 获得供应商采购计划分页
     *
     * @param pageReqVO 分页查询
     * @return 供应商采购计划分页
     */
    PageResult<BpmOASupplierProcurementPlanDO> getOaSupplierProcurementPlanPage(BpmOASupplierProcurementPlanPageReqVO pageReqVO);

    /**
     * 更新工作任务的状态
     *
     * @param processInstanceId 流程实例id
     * @param id                编号
     * @param result            结果
     */
    void updateSupplierProcurementPlanResult(String processInstanceId, Long id, Integer result);

    /**
     * 批量更新结算方式
     *
     * @param ids
     * @param settlementFlag
     */
    void batchEditSettlementFlag(List<Long> ids, Integer settlementFlag);

    /**
     * 获取供应商采购列表
     *
     * @param vo
     * @return
     */
    List<BpmOASupplierProcurementPlanDO> getListBySupplierId(BpmOASupplierProcurementPlanReqVO vo);

    /**
     * 上传到货凭证
     *
     * @param vo
     */
    void uploadDeliveryReceipt(TheArrivalFileItemsVO vo);
}
