
package com.tmerclub.cloud.payment.mapper;

import com.tmerclub.cloud.payment.model.PayInfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 订单支付记录
 *
 * @author tmerclub
 * @date 2020-12-25 09:50:59
 */
public interface PayInfoMapper {

    /**
     * 根据订单支付记录id获取订单支付记录
     *
     * @param payId 订单支付记录id
     * @return 订单支付记录
     */
    PayInfo getByPayId(@Param("payId") Long payId);

    /**
     * 保存订单支付记录
     *
     * @param payInfo 订单支付记录
     */
    void save(@Param("payInfo") PayInfo payInfo);

    /**
     * 更新订单支付记录
     *
     * @param payInfo 订单支付记录
     */
    void update(@Param("payInfo") PayInfo payInfo);

    /**
     * 更新支付成功
     * @param payInfo
     * @return
     */
    int updateToSuccess(@Param("payInfo") PayInfo payInfo);


    /**
     * 根据支付订单号获取订单支付状态
     *
     * @param orderIds 订单号ids
     * @return 支付状态
     */
    Integer getPayStatusByOrderIds(@Param("orderIds") String orderIds);

    /**
     * 查询订单是否已经支付
     *
     * @param orderIds 订单id
     * @param userId   用户id
     * @param payEntry 支付入口
     * @param sysType
     * @return 是否已经支付
     */
    Integer isPay(@Param("orderIds") String orderIds, @Param("userId") Long userId, @Param("sysType") Integer sysType, @Param("payEntry") Integer payEntry);

    /**
     * 根据订单id，获取订单支付的信息
     *
     * @param orderIds 订单ids
     * @return 支付信息
     */
    List<PayInfo> listByOrderIds(@Param("orderIds") List<Long> orderIds);

    /**
     * 根据支付状态获取订单支付信息
     *
     * @param orderIds
     * @param userId
     * @param payStatus 支付状态
     * @return
     */
    List<PayInfo> listPayedInfoByOrderIds(@Param("orderIds") List<Long> orderIds, @Param("userId") Long userId, @Param("payStatus") Integer payStatus);

    /**
     * 根据payIds获取支付信息集合
     * @param payIdList 支付单号
     * @return
     */
    List<PayInfo> listByPayIds(@Param("payIdList") List<Long> payIdList);

    /**
     * 根据订单号和支付入口获取支付信息
     * @param orderIds
     * @param payEntry
     * @return 支付信息
     */
    List<PayInfo> getByOrderIdsAndEntry(@Param("orderIds") String orderIds, @Param("payEntry") Integer payEntry);

    /**
     * 根据订单号和支付入口和收款人获取支付信息
     * @param toUserId
     * @param orderId
     * @param payEntry
     * @return 支付信息
     */
    PayInfo getByOrderIdAndEntryAndToUserId(@Param("toUserId") String toUserId, @Param("orderId") Long orderId, @Param("payEntry") Integer payEntry);

    /**
     * 根据订单号获取最新支付成功信息的系统类型
     * @param orderId
     * @param userId
     * @return 系统类型
     */
    List<PayInfo> getPayInfoByUserIdAndOrderId(@Param("userId") Long userId, @Param("orderId") Long orderId);


    /**
     * 根据支付单号获取支付信息
     * @param payId
     * @return
     */
    PayInfo getPayInfoByPayId(Long payId);

    /**
     * 团购订单拆单后,修改订单支付信息
     *
     * @param orderIds
     * @param oldOrderId
     * @return
     */
    void updatePayInfoBySplitGroup(@Param("orderIds") String orderIds, @Param("oldOrderId") Long oldOrderId);
}
