package com.xhkjedu.suser.mapper.system;

import com.xhkjedu.base.TkMapper;
import com.xhkjedu.suser.model.system.TUser;
import com.xhkjedu.suser.vo.assess.AssessParams;
import com.xhkjedu.vo.system.UserVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * @ClassName UserMapper
 * Description
 * Author WN
 * Date 2020/5/29 17:00
 **/
@Repository
public interface UserMapper extends TkMapper<TUser> {

    /**
     * 功能描述  根据帐号密码获取用户
     *
     * @param * @param loginname
     * @return com.xhkjedu.model.system.TUser
     * @author WN
     * @date 2020/5/29
     */
    UserVo getUserByLoginname(String loginname);

    /**
     * 删除用户
     *
     * @return java.lang.Integer
     * @Param [user]
     * @Author ywx
     * @Date 2020/6/2 9:59
     **/
    Integer deleteById(@Param("user") TUser user);

    /**
     * 获取用户列表
     *
     * @return java.util.List<com.xhkjedu.suser.vo.system.UserVo>
     * @Param [user]
     * @Author ywx
     * @Date 2020/6/2 10:07
     **/
    List<UserVo> findAll(@Param("user") TUser user);

    /**
     * 获取用户详情
     *
     * @return com.xhkjedu.suser.vo.system.UserVo
     * @Param [userid]
     * @Author ywx
     * @Date 2020/6/2 10:23
     **/
    UserVo findById(@Param("userid") Integer userid);

    /**
     * 修改用户密码
     *
     * @return java.lang.Integer
     * @Param [user]
     * @Author ywx
     * @Date 2020/6/2 10:30
     **/
    Integer updatePwd(@Param("user") TUser user);

    /**
     * 修改用户头像
     *
     * @return java.lang.Integer
     * @Param [user]
     * @Author ywx
     * @Date 2020/6/2 10:36
     **/
    Integer updateHeadPic(@Param("user") TUser user);

    /**
     * 检查登录账号是否存在
     *
     * @return java.lang.Integer
     * @Param [loginname]
     * @Author ywx
     * @Date 2020/6/2 10:44
     **/
    Map checkLoginName(@Param("loginname") String loginname);

    /**
     * 根据登录账号获取用户详情
     *
     * @return com.xhkjedu.model.system.TUser
     * @Param [loginname]
     * @Author ywx
     * @Date 2020/6/3 9:33
     **/
    TUser getObjByLoginName(@Param("loginname") String loginname);

    /**
     * 修改用户状态
     *
     * @return void
     * @Param [userid, userstate]
     * @Author ywx
     * @Date 2020/6/4 9:08
     **/
    void updateState(@Param("userid") Integer userid, @Param("userstate") int userstate
            ,@Param("createtime") int createtime);

    /**
     * 功能描述 设置操作密码
     *
     * @param *           @param userid
     * @param opepassword
     * @return void
     * @author WN
     * @date 2020/6/17
     */
    void updateOpepasswordByUserId(@Param("userid") Integer userid, @Param("opepassword") String opepassword);

    /**
     * 功能描述 验证用户操作密码是否正确
     *
     * @param *           @param userid
     * @param opepassword
     * @return java.lang.Integer
     * @author WN
     * @date 2020/6/17
     */
    Integer getUserIdByOpepassword(@Param("userid") Integer userid, @Param("opepassword") String opepassword);

    /**
     * 教师基本信息
     *
     * @return com.xhkjedu.suser.vo.system.TeacherVo
     * @Param [userid]
     * @Author ywx
     * @Date 2020/6/29 16:24
     **/
    Map getTeacherInfo(Integer userid, Integer classtype, Integer year);

    /**
     * 更新学生硬件绑定信息
     *
     * @return void
     * @Param [user]
     * @Author ywx
     * @Date 2020/9/18 11:38
     **/
    void updateBindMac(@Param("user") UserVo user);

    /**
     * 根据登录账号和硬件地址获取用户信息
     *
     * @return com.xhkjedu.suser.vo.system.UserVo
     * @Param [loginname, mac]
     * @Author ywx
     * @Date 2020/9/21 16:17
     **/
    UserVo getUserByLoginnameMac(String loginname, String mac);


    //学生学号登录
    UserVo getUserByStudentnoForStu(String loginname,String mac);

    //手机号登录
    UserVo getUserByPhoneForStu(String loginname,String mac);

    //身份证号登录
    UserVo getUserByCardidForStu(String loginname,String mac);

    /**
     * @Description 根据用户id和硬件地址获取用户信息
     * @Param [userid, mac]
     * @Return com.xhkjedu.suser.vo.system.UserVo
     * @Author wn
     * @Date 2022/4/29 16:18
     **/
    UserVo getStudentByuserIdMac(Integer userid,String mac);

    /**
     * 通过短信修改密码
     *
     * @return void
     * @Param [user]
     * @Author ywx
     * @Date 2020/10/13 15:17
     **/
    void updatePwdByCode(@Param("user") TUser user);

    /**
     * 批量修改用户密码
     *
     * @return void
     * @Param [user]
     * @Author ywx
     * @Date 2020/10/30 16:04
     **/
    void batchUpdatePwd(@Param("user") TUser user);

    //校验手机号
    boolean checkUserPhone(Integer userid);

    //获取学校账号数量
    Integer getUserNumBySchoolId(Integer schoolid);

    //用户选择列表
    List<Map> listForSel(@Param("user") AssessParams user, @Param("year") Integer year);

    //获取修改头像时间
    Integer getHeadTime(Integer userid,@Param("timestamp") int timestamp);

    //绑定密保
    void bindUseCert(Integer userid);

    //绑定手机
    void bindUserPhone(Integer userid, String userphone);

    //根据账号获取绑定方式
    Map getBindByName(String loginname);

    //根据用户id获取绑定方式
    Map getBindById(Integer userid);

    //获取手机号绑定的其他用户数量
    Integer getNumByUserPhone(Integer userid, String userphone);

    //根据用户id获取密码
    String getPwdByUserId(Integer userid);

    //手机号登录
    UserVo getUserByPhone(String userphone);

    //修改用户锁定状态
    void updateUserLock(@Param("userid") Integer userid, @Param("userlock") int userlock);

    //解锁用户并且清空登录连续出错次数
    void updateUserLockAndClearErrornum(@Param("userid") Integer userid);

    //获取用户类型和修改头像时间
    TUser getUserTypeAndHeadTime(Integer userid, @Param("headtime") Integer headtime);

    //绑定手机号数量
    Integer getBindNumByUserPhone(String userphone);

    //绑定手机号用户列表
    List<Map> listBindPhoneUser();

    //批量解绑
    void batchRemoveBind(@Param("userids") List<Integer> userids);

    //批量修改密码
    void batchUpdatePwd2(@Param("loginpwd") String loginpwd, @Param("userids") List<Integer> userids);

    //批量修有效期
    void batchUpdateTime(@Param("usertime") String usertime, @Param("userids") List<Integer> userids);

    //根据用户id获取用户详细信息，学校基本信息
    UserVo getUserSchoolByUserid(@Param("userid") Integer userid);

    //根据手机号获取用户基本信息
    UserVo getUserByUserPhone(String userphone);

    //批量更新用户状态
    void batchUpdateUserState(@Param("userstate") Integer userstate, @Param("userids") List<Integer> userids
            ,@Param("createtime") int createtime);

    //根据登录名查找用户集合
    List<TUser> listByLoginNames(@Param("loginnames") List<String> loginnames);

    //根据准考证号查找用户集合
    List<TUser> listByExamnos(@Param("examnos") List<String> examnos);

    //批量更新用户信息
    void batchUpdateUser(@Param("users") List<TUser> users);

    //更新学生信息
    void updateStudent(@Param("user") TUser user);

    //更新用户信息
    void updateUser(@Param("u") TUser user);

    //获取当前区域码
    String getCloudCode();

    //获取用户信息用户操作日志
    UserVo getUserInfoForHandleLog(@Param("userid") Integer userid);

    //更改密码连续错误次数
    void updateErrornum(@Param("userid")Integer userid,@Param("errornum")Integer errornum);
}
