package com.bonus.system.basic.dao;

import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.system.api.domain.MapVo;
import com.bonus.system.api.domain.SysDictData;
import com.bonus.system.api.domain.SysRole;
import com.bonus.system.att.entity.OrgChangeBean;
import com.bonus.system.basic.domain.SysOrg;
import com.bonus.system.basic.domain.SysUserOrg;
import com.bonus.system.basic.domain.SysUserPost;
import com.bonus.system.basic.domain.SysUserRole;
import com.bonus.system.holiday.entity.HolidayKeyBean;
import org.apache.ibatis.annotations.Mapper;
import com.bonus.system.api.domain.SysUser;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户表 数据层
 *
 * @author zys
 */
@Mapper
public interface SysUserMapper
{

    /**
     * 通过用户名查询用户
     *
     * @param userName 用户名
     * @return 用户对象信息
     */
    SysUser selectUserByUserName(String userName);

    /**
     * 通过用户ID查询用户
     *
     * @param userId 用户ID
     * @return 用户对象信息
     */
    SysUser selectUserById(Long userId);

    List<MapVo> getOrgByUserId(SysUser user);

    /**
     * 查询用户列表
     * @param bean
     * @return List<SysUser>
     */
    List<SysUser> selectUserList(@Param("params") SysUser bean);

    /**
     * 查询角色列表
     * @param
     * @return
     */
    List<SysRole> getSelectRole();

    /**
     * 新增用户
     * @param user
     * @return
     */
    int insertUser(SysUser user);


    /**
     * 新增用户岗位关联信息
     * @param list
     * @return
     */
    int insertUserPost(List<SysUserPost> list);

    /**
     * 新增用户角色信息
     * @param list
     * @return
     */
    int insertUserRole(List<SysUserRole> list);

    /**
     * 新增用户组织信息
     * @param list
     * @return
     */
    int insertUserOrg(List<SysUserOrg> list);

    /**
     * 查询岗位列表
     * @return
     */
    List<SysDictData> getSelectPost();

    /**
     * 删除用户组织信息
     * @param userId
     * @return
     */
    int deleteUserOrgByUserId(Long userId);

    /**
     * 删除用户岗位信息
     * @param userId
     * @return
     */
    int deleteUserPostByUserId(Long userId);

    /**
     * 删除用户角色信息
     * @param userId
     * @return
     */
    int deleteUserRoleByUserId(Long userId);

    /**
     * 删除用户信息
     * @param userId
     * @return
     */
    int deleteUserById(Long userId);

    /**
     * 根据用户ID获取岗位ID
     * @param userId
     * @return
     */
    Long[] getRoleIdsByUserId(Long userId);

    /**
     * 根据用户ID获取组织ID
     * @param userId
     * @return
     */
    Long[] getOrgIdsByUserId(Long userId);

    /**
     * 根据用户ID获取岗位ID
     * @param userId
     * @return
     */
    Long[] getPostIdsByUserId(Long userId);

    /**
     * 校验手机号码是否唯一
     *
     * @param phone 手机号码
     * @return 结果
     */
    SysUser checkPhoneUnique(String phone);

    /**
     * 修改用户信息
     *
     * @param user 用户信息
     * @return 结果
     */
    int updateUser(SysUser user);

    /**
     * 根据岗位ID获取岗位ID
     * @param postId
     * @return
     */
    String selectPostIdById(Long postId);

    /**
     * 获取组织列表
     * @param
     * @return
     */
    List<HolidayKeyBean> getOrgList();

    /**
     * 获取角色列表
     * @param
     * @return
     */
    List<HolidayKeyBean> getRoleList();

    /**
     * 获取岗位列表
     * @param
     * @return
     */
    List<HolidayKeyBean> getPostList();

    /**
     * 获取人员列表
     * @param
     * @return
     */
    List<SysUser> getSelectUser();

    /**
     * 校验身份证号是否唯一
     * @param idNumber
     * @return
     */
    SysUser checkIdNumberUnique(String idNumber);

    /**
     * 根据用户名查询用户
     * @param userName
     * @return
     */
    List<SysUser> selectUserByUserNames(String userName);

    List<SysUser> getSelectUserCurrent(Long userId);

    /**
     * 校验身份证号是否唯一
     * @param userName
     * @return
     */
    SysUser checkUserNameUnique(String userName);
    List<MapVo> getAttGroupByUserId(SysUser user);

    /**
     * 授予更新人脸权
     * @param user
     * @return
     */
    int updateIsFace(SysUser user);

    int checkPersonAssignment(SysUser bean);

    Long getUserAttGroupByUserId(Long userId);

    void updateAttOrgByUserId(OrgChangeBean item);

    List<String> getRoleListById(SysUser user);

    String getOrg(Long userId);

    String getUserIdList(String userIdList);

    List<SysRole> getManagerList(Long userId);

    void updateOrgIdByUserId(SysUser users);

    void updateOrgIdByUserIdWithOutSame(@Param("user") SysUser users);

    SysOrg findOrgByOrgId(SysUser users);

    /**
     * 删除人员数据后，同步删除考勤组数据
     * @param userId
     * @return void
     * @author cwchen
     * @date 2025/2/18 10:31
     */
    void delAttGroupPersonRelation(Long userId);
}
