package com.ghy.payment.service;

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

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

/**
 * @author clunt
 */
public interface FinancialChangeRecordService {

    FinancialChangeRecord selectNotPayRecordByDetailId(Long orderDetailId);

    /**
     * 查询改价记录
     *
     * @param id 改价记录主键
     * @return 改价记录
     */
    FinancialChangeRecord selectFinancialChangeRecordById(Long id);

    /**
     * 查询改价记录列表
     *
     * @param financialChangeRecord 改价记录
     * @return 改价记录集合
     */
    List<FinancialChangeRecord> selectFinancialChangeRecordList(FinancialChangeRecord financialChangeRecord);

    List<FinancialChangeRecord> selectByDetailIds(String ids);

    List<FinancialChangeRecord> selectByOrderDetailIds(Set<Long> orderDetailIds);

    /**
     * 新增改价记录
     *
     * @param financialChangeRecord 改价记录
     * @return 结果
     */
    int insert(FinancialChangeRecord financialChangeRecord);

    /**
     * 修改改价记录
     *
     * @param financialChangeRecord 改价记录
     * @return 结果
     */
    int update(FinancialChangeRecord financialChangeRecord);

    /**
     * 批量删除改价记录
     *
     * @param ids 需要删除的改价记录主键集合
     * @return 结果
     */
    int deleteFinancialChangeRecordByIds(String ids);

    /**
     * 删除改价记录信息
     *
     * @param id 改价记录主键
     * @return 结果
     */
    int deleteFinancialChangeRecordById(Long id);

    List<FinancialChangeRecord> selectByMasterId(@Param("orderMasterId") Long orderMasterId);

    /**
     * 根据主订单ID集合批量查询改价记录
     *
     * @param orderMasterIds 主订单ID集合
     * @return 改价记录集合
     */
    List<FinancialChangeRecord> selectByMasterIds(Set<Long> orderMasterIds);

    int updatePayStatus(Long id, Integer payStatus);

    /**
     * 加价单发起全额退款<br>
     * 修改支付状态为 PayStatus.REFUNDING<br>
     * 但不修改财务单的金额<br>
     *
     * @param deptId 公司ID
     * @param id     加价单ID
     */
    boolean refund(Long deptId, Long id);

    /**
     * 退款成功时 退款回调接口里会调用这个方法
     *
     * @param reverseId 退款ID
     */
    void refundSucceeded(String reverseId);

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