package com.jsowell.pile.mapper;

import com.jsowell.pile.domain.MemberBasicInfo;
import com.jsowell.pile.domain.PileBasicInfo;
import com.jsowell.pile.vo.uniapp.MemberVO;
import com.jsowell.pile.vo.uniapp.MemberWalletLogVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

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

/**
 * 会员基础信息Mapper接口
 *
 * @author jsowell
 * @date 2022-10-12
 */
@Repository
public interface MemberBasicInfoMapper {
	/**
	 * 查询会员基础信息
	 *
	 * @param id 会员基础信息主键
	 * @return 会员基础信息
	 */
	public MemberBasicInfo selectMemberBasicInfoById(Integer id);

	/**
	 * 查询会员基础信息列表
	 *
	 * @param memberBasicInfo 会员基础信息
	 * @return 会员基础信息集合
	 */
	public List<MemberBasicInfo> selectMemberBasicInfoList(MemberBasicInfo memberBasicInfo);

	/**
	 * 新增会员基础信息
	 *
	 * @param memberBasicInfo 会员基础信息
	 * @return 结果
	 */
	public int insertMemberBasicInfo(MemberBasicInfo memberBasicInfo);

	/**
	 * 修改会员基础信息
	 *
	 * @param memberBasicInfo 会员基础信息
	 * @return 结果
	 */
	public int updateMemberBasicInfo(MemberBasicInfo memberBasicInfo);

	/**
	 * 批量删除会员基础信息
	 *
	 * @param ids 需要删除的数据主键集合
	 * @return 结果
	 */
	public int deleteMemberBasicInfoByIds(List<Integer> ids);

	/**
	 * 通过物理卡号查询基本信息
	 *
	 * @param physicsCard 物理卡号
	 * @return 会员基础信息
	 */
	MemberVO selectInfoByPhysicsCard(@Param("physicsCard") String physicsCard);

	/**
	 * 通过手机号和商户id查询会员信息
	 * 不同手机号可以在多个运营商下注册账号
	 *
	 * @param mobileNumber 手机号
	 * @param merchantId   运营商id
	 * @return 会员信息
	 */
	MemberBasicInfo selectInfoByMobileNumberAndMerchantId(@Param("mobileNumber") String mobileNumber, @Param("merchantId") String merchantId);

	/**
	 * 通过手机号码查询会员信息
	 *
	 * @param mobileNumber 电话号码
	 * @return 会员信息
	 */
	// MemberBasicInfo selectInfoByMobileNumber(@Param("mobileNumber") String mobileNumber);

    /**
     * 通过会员id查询会员详情
     * @param memberId
     * @return
     */
    MemberBasicInfo selectInfoByMemberId(String memberId);

	/**
	 * 更新会员余额
	 * @param memberId 会员id
	 * @param newPrincipalBalance new本金余额
	 * @param newGiftBalance new赠送余额
	 * @param version 上次查询的版本号
	 * @return 更新行数 0-更新失败，1-更新成功
	 */
    int updateMemberBalance(@Param("memberId") String memberId, @Param("newPrincipalBalance") BigDecimal newPrincipalBalance,
				   @Param("newGiftBalance") BigDecimal newGiftBalance, @Param("version") Integer version);

	MemberVO queryMemberInfoByMemberId(String memberId);


	List<MemberVO> selectMemberList(@Param("mobileNumber") String mobileNumber, @Param("nickName") String nickName);


}
