package com.ghy.payment.mapper;

import com.ghy.payment.domain.FinancialMaster;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * 主财务单的mapper层
 *
 * @author HH 2022/4/24
 */
public interface FinancialMasterMapper {

    /**
     * @param financialMaster 主财务单属性
     * @return 成功条数
     */
    int insertFinancialMaster(FinancialMaster financialMaster);

    /**
     * @param financialMaster 主财务单属性
     * @return 成功条数
     */
    int updateFinancialMaster(FinancialMaster financialMaster);

    /**
     * @param financialMaster 主财务单入参
     * @return 主财务单集合
     */
    List<FinancialMaster> selectFinancialMasterList(FinancialMaster financialMaster);

    /**
     * @param financialMasterId 主财务单id
     * @return 主财务单
     */
    FinancialMaster selectById(Long financialMasterId);

    /**
     * 批量删除主财务单信息
     *
     * @param financialMasterIds 需要删除的数据ID
     * @return 结果
     */
    int deleteFinancialMasterByIds(Long[] financialMasterIds);

    /**
     * 支付成功
     *
     * @param id      ID
     * @param payType 支付渠道
     */
    void paySucceeded(@Param(value = "paymentId") String paymentId, @Param(value = "id") Long id, @Param(value = "payType") int payType);

    /**
     * 支付成功
     *
     * @param orderMasterCode 主订单号
     * @param payStatus       支付渠道
     */
    void updateOrderStatus(@Param(value = "orderMasterCode") String orderMasterCode, @Param(value = "payStatus") int payStatus);


    /**
     * 用主订单ID查询主财务单
     *
     * @param orderMasterId 主订单ID
     */
    FinancialMaster selectByOrderMasterId(Long orderMasterId);

    /**
     * 用支付ID查询主财务单
     *
     * @param paymentId 支付ID
     */
    FinancialMaster selectByPaymentId(String paymentId);

    List<FinancialMaster> selectByOrderMasterIds(@Param(value = "orderMasterIds") Set<Long> orderMasterIds);

    /**
     * 撤销支付成功
     *
     * @param reverseId 撤销支付ID
     */
    void refundSucceeded(@Param("reverseId") String reverseId);

    int updatePayStatus(@Param(value = "id") Long id, @Param(value = "payStatus") int payStatus);

    int updatePay(@Param(value = "id") Long id, @Param(value = "paymentId") String paymentId, @Param(value = "payStatus") Integer payStatus);
}
