package com.hzs.member.account;

import com.hzs.common.core.domain.R;
import com.hzs.common.core.enums.EApproveOperation;
import com.hzs.common.domain.member.account.CuMemberRecharge;
import com.hzs.common.domain.member.account.CuMemberTrade;
import com.hzs.common.domain.member.account.CuMemberTradeExt;
import com.hzs.member.account.dto.BusinessCommissionDTO;
import com.hzs.member.account.dto.MemberBalanceDTO;

import java.util.List;

/**
 * 会员端在线支付 回调插入交易流水、更新余额
 *
 * @Description:
 * @Author: ljc
 * @Time: 2023/3/8 18:23
 * @Classname: IMemberTradeServiceApi
 * @Package_name: com.hzs.member.account
 */
public interface IMemberTradeServiceApi {
    /**
     * 会员端在线支付 回调插入交易流水、更新余额
     *
     * @param rechargeCode 充值单号
     * @return R
     */
    R saveMemberOnlineTradeAndAccount(String rechargeCode);


    /**
     * 会员端在线支付更新审批状态
     *
     * @param rechargeCode      充值单号
     * @param eApproveOperation 审批状态 （充值成功：审核通过 充值失败 ：审核驳回）
     * @param pkMember          会员ID
     * @return Integer
     */
    R<?> updateOnlineRechargeByRechargeCode(String rechargeCode, EApproveOperation eApproveOperation, Long pkMember);

    /**
     * 根据单号与用户ID 查询预充值金额
     *
     * @param rechargeCode 充值单号
     * @param pkMember     用户ID
     * @return R
     */
    R<CuMemberRecharge> selectMemberRechargeByCodeAndPkMember(String rechargeCode, Long pkMember);
    /**
     * 查询余额不足的用户信息
     *
     * @param businessCommissionDTO 业务参数
     * @return List<MemberBalanceDTO>
     */
    List<MemberBalanceDTO> selectBalanceNotEnoughMember(BusinessCommissionDTO businessCommissionDTO);

    /**
     * 业务办理扣费提交
     *
     * @param businessCommissionDTO 业务办理入参
     * @return Integer
     */
    R<Boolean> businessCommissionSubmit(BusinessCommissionDTO businessCommissionDTO);

    /**
     * 查询会员订单产生的最新交易明细
     *
     * @param pkMember      会员
     * @param sourceCode    来源单号
     * @param tradeClassify 交易分类
     * @return
     */
    R<List<CuMemberTrade>> querySourceCodeLastTrade(Long pkMember, String sourceCode, Integer tradeClassify);

}
