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.payment.BpmOAPaymentCreateReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.payment.BpmOAPaymentPageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.payment.BpmOAPaymentRespVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.payment.BpmOAPaymentUpdateReqVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAPaymentDO;

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

public interface BpmOAPaymentService {

    /**
     * 创建付款申请
     *
     * @param userId 用户编号
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createPayment(Long userId, @Valid BpmOAPaymentCreateReqVO createReqVO);

    /**
     * 更新付款申请的状态
     *
     * @param id 编号
     * @param result 结果
     */
    void updatePaymentResult(String processInstanceId, Long id, Integer result);

    /**
     * 获得付款申请
     *
     * @param id 编号
     * @return 退款申请
     */
    BpmOAPaymentDO getPayment(Long id);

    /**
     * 获得指定的付款申请
     * @param processInstanceId 流程实例编号
     * @return 退款申请
     */
    BpmOAPaymentDO getByProcessInstanceId(String processInstanceId);

    /**
     * 获得付款申请列表
     * @return 付款申请列表
     */
    List<BpmOAPaymentRespVO> getPaymentList(Integer type);

    /**
     * 获得 后补票的付款申请分页列表
     *
     * @param pageReqVO   分页条件
     * @param userId      用户编号
     * @return 付款申请分页列表
     */
    PageResult<BpmOAPaymentDO> getPaymentPage(BpmOAPaymentPageReqVO pageReqVO, Long userId);

    /**
     * 更新付款申请附件
     * @param updateReqVO 更新信息
     */
    void updateFiles(BpmOAPaymentUpdateReqVO updateReqVO);

    /**
     * 更新付款申请补票状态
     * @param updateReqVO 更新信息
     */
    void updateStatus(BpmOAPaymentUpdateReqVO updateReqVO);

    /**
     * 删除后补附件信息
     * @param id 编号
     * @param url utl
     */
    void deleteFiles(Long id, String url);

    BpmOAPaymentRespVO convertPayment(BpmOAPaymentDO payment);
}
