package com.yonge.cooleshow.portal.service;

import com.yonge.cooleshow.mbg.model.UserOrderPayment;
import com.yonge.toolset.payment.base.enums.PayChannelEnum;
import com.yonge.toolset.payment.base.enums.TradeStatusEnum;
import com.yonge.toolset.payment.base.model.callback.PaymentCallBack;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * Description
 *
 * @author liujunchi
 * @date 2022-04-24
 */
public interface UserOrderPaymentService {

    /**
     *  根据订单查询
     *
     * @param paymentId 交易流水号
     * @return
     */
    UserOrderPayment getByTranNo(String paymentId);

    /**
     * 保存订单记录
     *
     * @param userOrderPayment
     */
    @Transactional
    void save(UserOrderPayment userOrderPayment);

    @Transactional
    void saveOrUpdate(UserOrderPayment userOrderPayment);

    UserOrderPayment getByOrderNo(String orderSn, PayChannelEnum payChannel, TradeStatusEnum pending);

    /**
     * 根据订单查询 订单支付信息
     *
     * @param orderSn 订单号
     * @return
     */
    List<UserOrderPayment> getByOrderNo(String orderSn);

    /**
     * 关单
     *  @param orderSn 订单号
     * @param message 信息
     * @param data
     */
    @Transactional
    void closePayment(String orderSn, String message, PaymentCallBack data);

    /**
     * 查询支付中的订单， 最多只有一个
     *
     * @param orderSn
     * @return
     */
    UserOrderPayment getByOrderNoAndStatusPaying(String orderSn);


    /**
     * 查询支付成功的订单， 最多只有一个
     *
     * @param orderSn
     * @return
     */
    UserOrderPayment getByOrderNoAndStatusSucceeded(String orderSn);

    /**
     * 查询回调支付信息
     */
    UserOrderPayment getByAdapayNo(String paymentNo);
}
