package com.hzs.member.account;

import com.hzs.common.core.domain.R;
import com.hzs.common.domain.member.account.CuMemberAccount;
import com.hzs.common.domain.member.ext.CuMemberAccountExt;
import com.hzs.common.domain.sale.order.SaOrder;

import java.math.BigDecimal;
import java.util.List;

/**
 * @Description: 会员账户提供api操作实体
 * @Author: sui q
 * @Time: 2022/9/5 14:27
 * @Classname: IMemberAccountServiceApi
 * @PackageName: com.hzs.member.account
 */
public interface IMemberAccountServiceApi {

    /**
     * 查询会员账户状态，账户信息
     *
     * @param cuMemberAccount 会员账户条件信息
     * @return: List<CuMemberAccountExt>
     * @Author: sui q
     * @Date: 2022/9/5 11:57
     */
    R<List<CuMemberAccountExt>> queryMemberAccountByCondition(CuMemberAccount cuMemberAccount);

    /**
     * 根据会员id 列表查询账户信息
     *
     * @param pkMemberList 列表
     * @return: List<CuMemberAccount>
     * @Author: sui q
     * @Date: 2023/3/25 16:28
     */
    R<List<CuMemberAccount>> queryCuMemberAccountByPkMembers(List<Long> pkMemberList);

    /**
     * 校验订单调换货物余额是否足够
     *
     * @param saOrder     订单
     * @param updateOrder 新订单
     * @return
     */
    R orderChangeProductPre(SaOrder saOrder, SaOrder updateOrder);

    /**
     * 订单调换货物扣费处理
     *
     * @param saOrder     订单
     * @param updateOrder 新订单
     * @param userId      操作人ID
     * @param obj         追加后续业务实体
     * @return
     */
    R orderChangeProduct(SaOrder saOrder, SaOrder updateOrder, Long userId, Object obj);

    /**
     * 订单退单
     *
     * @param saOrder      退单订单
     * @param userId       操作用户ID
     * @param changeAmount 变动金额（除订单退回外，又追加的补偿或者扣款） -- 非必传
     * @param changeRemark 变动备注 -- 非必传
     * @return
     */
    R orderReturn(SaOrder saOrder, Long userId, BigDecimal changeAmount, String changeRemark);

    /**
     * 订单退单注册会员
     *
     * @param pkMemberList 会员ID列表
     * @param userId       操作用户ID
     */
    R orderReturnMember(List<Long> pkMemberList, Long userId);

    /**
     * 订单自提退邮费
     *
     * @param pkMember  会员ID
     * @param pkCountry 所属国家
     * @param pkRate    汇率
     * @param postage   邮费
     * @param userId    操作人ID
     * @return
     */
    R orderSelfDeliver(Long pkMember, Integer pkRate, Integer pkCountry, BigDecimal postage, Long userId);

    /**
     * 扣款并插入明细
     *
     * @param saOrder         订单
     * @param cuMemberAccount 会员账户
     */
    R insertMemberTrade(SaOrder saOrder, CuMemberAccountExt cuMemberAccount);

}
