package com.ruoyi.system.service;

import java.util.List;

import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.system.domain.SysPost;
import com.ruoyi.system.domain.UserPostAuthority;
import org.apache.ibatis.annotations.Param;

/**
 * 岗位信息 服务层
 *
 * @author ruoyi
 */
public interface ISysPostService {
    /**
     * 查询岗位信息集合
     *
     * @param post 岗位信息
     * @return 岗位列表
     */
    public List<SysPost> selectPostList(SysPost post);

    /**
     * 查询所有岗位
     *
     * @return 岗位列表
     */
    public List<SysPost> selectPostAll();

    /**
     * 查询岗位：根据部门ID
     *
     * @return 岗位列表
     */
    public List<SysPost> selectPostByDeptId(Long deptId);

    /**
     * 通过岗位ID查询岗位信息
     *
     * @param postId 岗位ID
     * @return 角色对象信息
     */
    public SysPost selectPostById(Long postId);

    /**
     * 根据用户ID获取岗位选择框列表
     *
     * @param userId 用户ID
     * @return 选中岗位ID列表
     */
    public List<Long> selectPostListByUserId(Long userId);

    /**
     * 根据部门ID集合查询下面的岗位列表
     * @param deptIds
     * @return
     */
    List<SysPost> selectPostListByDeptIds(List<Long> deptIds);

    /**
     * 校验岗位名称
     *
     * @param post 岗位信息
     * @return 结果
     */
    public boolean checkPostNameUnique(SysPost post);

    /**
     * 校验岗位编码
     *
     * @param post 岗位信息
     * @return 结果
     */
//    public boolean checkPostCodeUnique(SysPost post);

    /**
     * 通过岗位ID查询岗位使用数量
     *
     * @param postId 岗位ID
     * @return 结果
     */
    public int countUserPostById(Long postId);

    /**
     * 删除岗位信息
     *
     * @param postId 岗位ID
     * @return 结果
     */
    public int deletePostById(Long postId);

    /**
     * 批量删除岗位信息
     *
     * @param postIds 需要删除的岗位ID
     * @return 结果
     */
    public int deletePostByIds(Long[] postIds);

    /**
     * 新增保存岗位信息
     *
     * @param post 岗位信息
     * @return 结果
     */
    public int insertPost(SysPost post);

    /**
     * 修改保存岗位信息
     *
     * @param post 岗位信息
     * @return 结果
     */
    public int updatePost(SysPost post);


    /**
     * 查询部门经理级别岗位下的人员列表
     *
     * @param deptId    部门ID
     * @param postLevel 岗位级别：0-不设置；1-经理；
     * @return
     */
    List<UserPostAuthority> userPostAuthorityList(Long deptId, Integer postLevel);

    /**
     * 当前登录用户是否为部门经理级别
     *
     * @param deptId 部门ID
     * @return
     */
    boolean userHaveAuthority(Long deptId);


    /**
     * 根据部门编码查询经理级别岗位下的用户列表
     *
     * @param deptCode 部门编码
     * @return
     */
    List<Long> userHaveAuthorityList(String deptCode);


    /**
     * 导入岗位Excel
     * @param fileName 文件名，含后缀、含相对路径
     */
    AjaxResult batchImport(String fileName)throws Exception;


    /**
     * 岗位下人员计数
     * @param postId
     * @return
     */
    int countUserByPost(Long postId);

    /**
     * 查询岗位
     * @param deptId
     * @param postName
     * @return
     */
    List<SysPost> selectByNameAndDeptId(Long deptId, String postName);
}
