package com.kmall.admin.service;

import com.kmall.admin.entity.OrderEntity;
import com.kmall.admin.entity.OrderWXPayRecordEntity;
import com.kmall.api.entity.OrderVo;
import com.kmall.common.utils.wechat.WechatMicropayApiResult;
import com.kmall.common.utils.wechat.WechatRefundApiResult;

import java.util.List;

/**
 * 微信付款码付款service
 */
public interface OrderWXPayRecordService {

    /**
     * 根据发送给微信的订单编号获取唯一的记录
     *
     * @param outTradeNoWX 发送给微信的订单编号(商户订单编号+"_"+(发送次数-1))
     * @return 唯一的记录
     */
    OrderWXPayRecordEntity findByOutTradeNoWX(String outTradeNoWX);

    /**
     * 获取商户订单发起付款记录次数
     *
     * @param outTradeNo 商户订单
     * @return 发起付款记录次数
     */
    int countByOutTradeNo(String outTradeNo);

    /**
     * 获取商户订单所有的付款记录
     *
     * @param outTradeNo 商户订单
     * @return 所有的付款记录
     */
    List<OrderWXPayRecordEntity> getRecordsByOutTradeNo(String outTradeNo);

    /**
     * 保存记录
     *
     * @param order 订单信息
     * @return 付款记录信息
     */
    OrderWXPayRecordEntity saveRecord(OrderEntity order);

    /**
     * 根据微信返回的信息修改支付记录
     *
     * @param id                      支付记录id
     * @param wechatMicropayApiResult 微信返回的信息
     * @return 0为成功
     */
    int updateRecord(Integer id, WechatMicropayApiResult wechatMicropayApiResult);


    /**
     * 修改支付记录的交易状态
     *
     * @param id                    支付记录id
     * @param wechatRefundApiResult 查询订单返回信息
     * @return 0为成功
     */
    int updateWXPayRecordTradeState(Integer id, WechatRefundApiResult wechatRefundApiResult);

    OrderWXPayRecordEntity saveRecordVo(OrderVo order);
}
