package com.sv.mapper;

import com.sv.annotation.PlatformKey;
import com.sv.entity.Member;
import com.sv.entity.MemberFaceInfo;
import org.apache.ibatis.annotations.Param;

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

/**
 * Mapper - 用户
 *
 * @author zhaoziyu
 * @since 2018-08-01
 */
    public interface MemberMapper {

    /**
     * 新建用户
     *
     * @param member 用户
     */
    void insert(Member member);

    /**
     * 更新用户
     *
     * @param member 用户
     */
    void update(Member member);

    void updateBanStatus(Member member);

    /**
     * 删除用户
     *
     * @param id 编号
     * @return 删除数量
     */
    int delete(Integer id);

    /**
     * 删除用户
     *
     * @param ids 编号数组
     * @return 删除数量
     */
    int deleteByIds(Integer[] ids);

    /**
     * api 接口引用
     * 查询用户
     *
     * @param id 编号
     * @return 用户
     */
    @PlatformKey
    Member findById(Integer id);

    /**
     * 后台接口引用
     * 查询用户人脸
     *
     * @param id 编号
     * @return 用户
     */
    Member findByIds(Integer id);

    /**
     * api 接口引用
     * 查询用户
     *
     * @param id 编号
     * @return 用户
     */
    Member findByMember(Integer id);

    /**
     * 查询用户
     *
     * @return 用户集合
     * @PlatformKey("m.platform_id")只有表取了别名才需要写这个否则不需要加
     * @NoPlatform 不加平台来源
     */
//    @PlatformKey("m.platform_id")
    List<Member> findAll();

    /**
     * 更新状态
     *
     * @param ids 编号
     * @param status 状态
     * @return 更新数量
     */
    int updateStatus(@Param("ids") Integer[] ids, @Param("status") Byte status);

    /**
     * 更新状态
     *
     * @param id 编号
     */
//    int giveCard(@Param("id") Integer id);

    /**
     * 统计数量
     *
     * @param mobile    手机号码
     * @param excludeId 排除编号
     * @return 数量
     */
    int countByMobile(@Param("mobile") String mobile, @Param("excludeId") Integer excludeId);

    /**
     * 判断邀请码是否重复
     * @param inviteCode
     * @return
     */
    Integer checkInviteCode(String inviteCode);

    /**
     * 根据手机号码查找用户
     */
    Member findByMobile(@Param("mobile") String mobile);

    /**
     * api
     * 修改用户余额
     */

    void updateMoney(@Param("id") Integer id,@Param("price")BigDecimal price);

    MemberFaceInfo findMemberFaceInfo(@Param("memberId") Integer memberId);

    void insertMemberFaceInfo(MemberFaceInfo memberFaceInfo);

    void updateMemberFaceInfo(MemberFaceInfo memberFaceInfo);

    Member findByFaceId(@Param("faceId") Integer faceId);

    Integer countMoneyGtPrice(@Param("memberId") Integer memberId,@Param("price") BigDecimal price);
}