package cn.iocoder.yudao.module.system.service.rental;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.rental.vo.rentaldepositrecord.RentalDepositAmountReqVO;
import cn.iocoder.yudao.module.system.controller.admin.rental.vo.rentaldepositrecord.RentalDepositRecordPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.rental.vo.rentaldepositrecord.RentalDepositRecordSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.rental.RentalDepositRecordDO;

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

/**
 * 租赁订单押金记录 Service 接口
 *
 * @author 符溶馨
 */
public interface RentalDepositRecordService {

    /**
     * 创建租赁订单押金记录
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createRentalDepositRecord(@Valid RentalDepositRecordSaveReqVO createReqVO);

    /**
     * 批量创建租赁订单押金记录
     *
     * @param createReqVO 创建信息
     */
    void createRentalDepositRecordBatch(@Valid List<RentalDepositRecordSaveReqVO> createReqVO);

    /**
     * 更新租赁订单押金记录
     *
     * @param updateReqVO 更新信息
     */
    void updateRentalDepositRecord(@Valid RentalDepositRecordSaveReqVO updateReqVO);

    /**
     * 更新租赁订单押金记录类型
     *
     * @param updateReqVO 修改信息
|     */
    void updateRentalDepositRecordType(List<RentalDepositRecordDO> updateReqVO);

    /**
     * 获得租赁订单押金记录
     *
     * @param id 编号
     * @return 租赁订单押金记录
     */
    RentalDepositRecordDO getRentalDepositRecord(Long id);

    /**
     * 获得租赁订单押金记录分页
     *
     * @param pageReqVO 分页查询
     * @return 租赁订单押金记录分页
     */
    PageResult<RentalDepositRecordDO> getRentalDepositRecordPage(RentalDepositRecordPageReqVO pageReqVO);

    /**
     * 获得指定订单的已收取的押金金额
     * @param orderNo 订单编号
     * @return 数量
     */
    RentalDepositAmountReqVO getRentalDepositRecordAmount(String orderNo, Boolean isUpdate);
}