package com.ym.mec.biz.dal.dao;

import com.ym.mec.auth.api.entity.SysUser;
import com.ym.mec.biz.dal.dto.EmployeeDto;
import com.ym.mec.biz.dal.dto.EmployeeLevelDto;
import com.ym.mec.biz.dal.dto.SimpleUserDto;
import com.ym.mec.biz.dal.entity.Employee;
import com.ym.mec.common.dal.BaseDAO;

import org.apache.ibatis.annotations.Param;

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

public interface EmployeeDao extends BaseDAO<Integer, Employee> {

    /**
     * @Author: Joburgess
     * @Date: 2019/9/17
     * 根据部门获取下面的员工
     */
    List<EmployeeDto> queryEmployByOrganId(Map<String, Object> params);

    /**
     * @Author: Joburgess
     * @Date: 2019/9/17
     * 部门员工统计
     */
    int queryEmployByOrganIdCount(Map<String, Object> params);

    /**
     * 修改密码
     *
     * @param userID
     * @param password
     */
    void updatePassword(@Param("userID") Integer userID, @Param("password") String password);

    /**
     * @Author: Joburgess
     * @Date: 2019/9/17
     * 修改用户账户锁定状态
     */
    int updateUserLockStatus(@Param("userID") Integer userID);


    void updateUserLock(@Param("userID") Integer userID, @Param("status") int status);

    /**
     * @Author: Joburgess
     * @Date: 2019/9/25
     * 修改用户离职日期
     */
    int updateUserDemissionDate(@Param("userID") Integer userID);

    /**
     * 根据手机号查询对象
     *
     * @param phone
     * @return
     */
    SysUser queryByPhone(String phone);

    /**
     * 删除用户角色
     *
     * @param userId
     */
    void delEmployeeRole(Integer userId);

    /**
     * 批量新增用户角色
     *
     * @param id
     * @param roleIds
     */
    void batchAddEmployeeRole(@Param("userId") Integer id, @Param("roleIds") List<Integer> roleIds);

    /**
     * 获取用户权限列表
     *
     * @param userId
     * @return
     */
    List<Integer> queryUserRole(Integer userId);

    /**
     * @param roleIds:  角色编号列表
     * @param organIds: 部门编号列表
     * @return java.util.List<com.ym.mec.biz.dal.dto.SimpleUserDto>
     * @describe 根据角色和用户查找用户
     * @author Joburgess
     * @date 2020/3/12
     */
    List<SimpleUserDto> findByRole(@Param("roleIds") String roleIds,
                                   @Param("organIds") String organIds);

    /**
     * @param userIds:
     * @return java.util.List<com.ym.mec.biz.dal.dto.SimpleUserDto>
     * @describe 根据用户编号获取用户
     * @author Joburgess
     * @date 2020/3/12
     */
    List<SimpleUserDto> findByIds(@Param("userIds") List<Integer> userIds);

    /**
     * 是否有课程组关联的教务老师
     *
     * @param employeeId
     * @return
     */
    Integer hasCourseGroupRelation(Integer employeeId);

    /**
     * 修改知道老师的教务老师关联
     *
     * @param currentUserId
     * @param targetUserId
     */
    void updateEducationTeacherId(@Param("currentUserId") Integer currentUserId, @Param("targetUserId") Integer targetUserId);

    /**
     * 是否有未上的课
     *
     * @param employeeId
     * @return
     */
    Integer hasCourseSchedule(Integer employeeId);

    /**
     * 获取维修技师所在分部
     *
     * @param userId
     * @return
     */
    List<Integer> queryRepairOrganList(Integer userId);

    /**
     * 教务老师所在分部列表
     *
     * @param userId
     * @return
     */
    List<Integer> queryEducationOrganList(Integer userId);

    /**
     * 运营主管所在分部列表
     *
     * @param userId
     * @return
     */
    List<Integer> queryTeamTeacherOrganList(Integer userId);

    /**
     * 乐队指导所在分部列表
     *
     * @param userId
     * @return
     */
    List<Integer> queryDirectorOrganList(Integer userId);

    /**
     * 员工离职
     *
     * @param employeeLevelDtos
     */
    void employeeLevel(@Param("employeeLevelDtos") List<EmployeeLevelDto> employeeLevelDtos);

    /**
     * @param roleIds:  角色编号列表
     * @param organIds: 部门编号列表
     * @return java.util.List<com.ym.mec.biz.dal.dto.SimpleUserDto>
     * @describe 根据角色和用户查找用户(包含离职和冻结的)
     */
    List<SimpleUserDto> findAllByRole(@Param("roleIds") String roleIds,
                                   @Param("organIds") String organIds);

    /**
     * 获取离职员工所在的乐团列表
     * @param levelUserId
     * @return
     */
    List<String> queryMusicGroupIdByUserId(Integer levelUserId);
    /**
     * 获取离职员工所在的乐团列表
     * @param levelUserId
     * @return
     */
    List<String> queryPracticeGroupIdByUserId(Integer levelUserId);
    /**
     * 获取离职员工所在的乐团列表
     * @param levelUserId
     * @return
     */
    List<String> queryVipGroupIdByUserId(Integer levelUserId);
}
