/**
 * Copyright &copy; 2021-2026 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
 */
package com.jeeplus.sys.mapper;

import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jeeplus.sys.domain.User;
import com.jeeplus.sys.service.dto.CertDTO;
import com.jeeplus.sys.service.dto.OfficeDTO;
import com.jeeplus.sys.service.dto.UserDTO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户MAPPER接口
 *
 * @author jeeplus
 * @version 2021-05-16
 */
public interface UserMapper extends BaseMapper <User> {

    /**
     * 获取岗位列表
     *
     *
     * @return
     */
    @InterceptorIgnore(tenantLine = "true")
    List<UserDTO> findList1(@Param("dto") UserDTO dto, @Param("companyId")String companyId);

    /**
     * 获取用户列表
     *
     *
     * @return
     */
    @InterceptorIgnore(tenantLine = "true")
    List<UserDTO> findAllList(@Param("dto") UserDTO dto, @Param("companyId")String companyId);

    //过滤部门条件
    @InterceptorIgnore(tenantLine = "true")
    List<UserDTO> findList3(@Param("id")String id, @Param("loginName") String loginName);


    /**
     * 根据用户id 查询该用户会计报告的签字注师被选择次数
     * @param userId
     * @return
     */
    Integer getAccountantUserCount(@Param("userId") String userId);

    /**
     * 根据角色英文名称查询角色下人员信息
     *
     * @param enName 角色名称
     * @return
     */
    @InterceptorIgnore(tenantLine = "true")
    List <UserDTO> getUserInfoByEnName(@Param("enName") String enName);

    /**
     * 根据人员名称查询人员信息
     *
     * @param name 名称
     * @return
     */
    UserDTO getUserByName(String name);

    /**
     * 根据条件查询用户
     *
     * @param queryWrapper
     * @return
     */
    @InterceptorIgnore(tenantLine = "true")
    UserDTO get(@Param(Constants.WRAPPER) Wrapper queryWrapper);

    /**
     * 根据条件查询用户
     *
     * @param id
     * @return
     */
    @InterceptorIgnore(tenantLine = "true")
    String getManageOfficeIdsById(String id);

    /**
     * 根据条件查询用户
     *
     * @param queryWrapper
     * @return
     */
    @InterceptorIgnore(tenantLine = "true")
    UserDTO getFlowAbleById(@Param(Constants.WRAPPER) Wrapper queryWrapper);

    List<CertDTO> getCertListByUserId();

    @InterceptorIgnore(tenantLine = "true")
    int updateById(@Param("et") User entity);

    /**
     * 获取用户列表
     *
     * @param queryWrapper
     * @return
     */
    @InterceptorIgnore(tenantLine = "true")
    IPage <UserDTO> findList(Page <UserDTO> page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper);


    IPage <UserDTO> userFindPage(Page <UserDTO> page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper);

    IPage <UserDTO> findList2(Page <UserDTO> page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper);

    /**
     * 按角色获取用户列表
     *
     * @param queryWrapper
     * @return
     */
    IPage <UserDTO> findListByRole(Page <UserDTO> page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper);


    /**
     * 更新用户密码
     *
     * @param user
     * @return
     */
    int updatePasswordById(User user);

    /**
     * 按岗位获取用户列表
     *
     * @param postId
     * @return
     */
    List <UserDTO> findListByPostId(@Param("postId") String postId);

    /**
     * 按岗位获取用户列表
     *
     * @param postId
     * @return
     */
    @InterceptorIgnore(tenantLine = "true")
    List <UserDTO> findListFlowAbleByPostId(@Param("postId") String postId);

    /**
     * 删除用户角色关联数据
     *
     * @param userId
     * @return
     */
    void deleteUserRole(@Param("userId") String userId);

    /**
     * 插入用户角色关联数据
     *
     * @param userId
     * @param roleId
     * @return
     */
    void insertUserRole(@Param("userId") String userId, @Param("roleId") String roleId);

    /**
     * 删除用户岗位关联数据
     *
     * @param userId
     * @return
     */
    void deleteUserPost(@Param("userId") String userId);

    /**
     * 插入用户角色关联数据
     *
     * @param userId
     * @param postId
     * @return
     */
    void insertUserPost(@Param("userId") String userId, @Param("postId") String postId);

    /**
     * 根据条件查询用户id
     * @param name
     * @return
     */
    String getUserIdByName(@Param("name") String name);

    /**
     * 根据部门获取员工数据
     * @param officeIds
     * @param type
     * @return
     */
    @InterceptorIgnore(tenantLine = "true")
    List <OfficeDTO> getUserByOffice(@Param("officeIds") List<String> officeIds, @Param("type") String type);


    /**
     * 修改用户更新密码状态信息
     * @param userDTO
     */
    void updateUserUpPassword(UserDTO userDTO);

    /**
     * 根据姓名获取用户信息
     * @param name
     * @return
     */
    @InterceptorIgnore(tenantLine = "true")
    List<User> selectListByName(@Param("name")String name);

    /**
     * 判断当前用户是否修改过密码
     * @param userId
     * @return
     */
    String isUpdatePassword(String userId);

    /**
     * 获取所有的用户信息
     * @return
     */
    @InterceptorIgnore(tenantLine = "true")
    List<UserDTO> getAllUserInfo();

    /**
     * 获取拥有权限的用户的部门id
     * @return
     */
    @InterceptorIgnore(tenantLine = "true")
    List<String> getHasUser();

    @InterceptorIgnore(tenantLine = "true")
    List<String> getHasUserFather();
}
