package com.ghy.payment.service;

import com.ghy.common.adapay.model.PaymentDTO;
import com.ghy.payment.domain.FinancialMaster;

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

/**
 * 主财务单接口
 *
 * @author clunt
 */
public interface FinancialMasterService {

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

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

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

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

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

    /**
     * @param ids 主财务单ids
     * @return 删除结果
     */
    int deleteFinancialMasterByIds(String ids);

    /**
     * 支付成功
     *
     * @param paymentId  支付ID
     * @param payChannel 支付渠道
     */
    void paySucceeded(String paymentId, String payChannel);

    /**
     * 创建主财务单CODE
     */
    String createCode();

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

    List<FinancialMaster> selectByOrderMasterIds(Set<Long> orderMasterIds);

    /**
     * 保存一条支付记录
     *
     * @param payment 支付对象
     */
    int insertPayment(PaymentDTO payment);

    /**
     * 更新一条支付记录
     *
     * @param payment 支付对象
     */
    int updatePayment(PaymentDTO payment);

    /**
     * 用交易ID查询交易记录
     *
     * @param id 交易ID
     */
    PaymentDTO selectPaymentById(String id);

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

    void refundSucceeded(String reverseId);

    int updatePayStatus(Long id, int payStatus);

    /**
     * 更新支付信息
     *
     * @param id        主财务单ID
     * @param paymentId 支付ID
     * @param payStatus 支付状态
     * @return 1
     */
    int updatePay(Long id, String paymentId, Integer payStatus);
}
