package com.ruoyi.ss.payBill.mapper;

import com.ruoyi.common.domain.vo.LocalDateDecimalVO;
import com.ruoyi.ss.payBill.domain.PayBill;
import com.ruoyi.ss.payBill.domain.PayBillQuery;
import com.ruoyi.ss.payBill.domain.PayBillVO;
import com.ruoyi.ss.payBill.domain.vo.PayDailyAmountVO;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * 支付订单Mapper接口
 *
 * @author ruoyi
 * @date 2024-07-24
 */
public interface PayBillMapper
{
    /**
     * 查询支付订单
     *
     * @param payId 支付订单主键
     * @return 支付订单
     */
    public PayBillVO selectPayBillByPayId(Long payId);

    /**
     * 查询支付订单列表
     *
     * @param payBill 支付订单
     * @return 支付订单集合
     */
    public List<PayBillVO> selectPayBillList(@Param("query")PayBillQuery payBill);

    /**
     * 新增支付订单
     *
     * @param payBill 支付订单
     * @return 结果
     */
    public int insertPayBill(PayBill payBill);

    /**
     * 修改支付订单
     *
     * @param payBill 支付订单
     * @return 结果
     */
    public int updatePayBill(@Param("data") PayBill payBill);

    /**
     * 删除支付订单
     *
     * @param payId 支付订单主键
     * @return 结果
     */
    public int deletePayBillByPayId(Long payId);

    /**
     * 批量删除支付订单
     *
     * @param payIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deletePayBillByPayIds(Long[] payIds);

    /**
     * 根据业务查询
     */
    List<PayBillVO> selectByBstId(@Param("bstId") Long bstId, @Param("bstType") String bstType);

    /**
     * 根据支付单号查询
     */
    PayBillVO selectByPayNo(String payNo);

    /**
     * 条件更新
     */
    int updatePayQuery(@Param("data") PayBill data, @Param("query") PayBillQuery query);

    /**
     * 增加退款金额
     *
     * @param payId  支付订单ID
     * @param amount 增加的退款金额
     */
    int addRefundingAmount(@Param("payId") Long payId, @Param("amount") BigDecimal amount);

    /**
     * 记录（转移）已退款金额
     */
    int recordRefundAmount(@Param("payId") Long payId, @Param("amount") BigDecimal amount);

    /**
     * 按日查询支付单金额
     */
    List<LocalDateDecimalVO> selectDailyAmount(@Param("query") PayBillQuery query);
}
