package com.qmth.sop.business.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.qmth.sop.business.bean.dto.UserDto;
import com.qmth.sop.business.bean.result.MenuResult;
import com.qmth.sop.business.entity.SysRole;
import com.qmth.sop.business.entity.SysUser;
import com.qmth.sop.business.entity.SysUserRole;
import com.qmth.sop.common.enums.RoleTypeEnum;

import java.util.List;

/**
 * <p>
 * 用户和角色关联表 服务类
 * </p>
 *
 * @author wangliang
 * @since 2023-07-17
 */
public interface SysUserRoleService extends IService<SysUserRole> {

    /**
     * 获取用户菜单
     *
     * @return
     */
    MenuResult listByUserId();

    /**
     * 根据用户id查询该用户所包含的角色集合
     *
     * @param userId 用户id
     * @return 角色集合
     */
    List<SysRole> listRoleByUserId(Long userId);

    /**
     * 用户是否包含某些类型的角色
     *
     * @param userId    用户
     * @param roleTypes 角色类型枚举
     * @return true:是 false:否
     */
    boolean userContainsRoles(Long userId, RoleTypeEnum... roleTypes);

    /**
     * 新增用户权限
     *
     * @param sysUser
     * @param roleIds
     */
    public void addUserRolePrivilege(SysUser sysUser, Long[] roleIds);

    /**
     * 根据角色id查询用户信息
     *
     * @param roleId
     * @return
     */
    List<SysUserRole> listByRoleId(Long roleId);

    /**
     * 根据角色类型查询用户信息
     *
     * @param roleTypeEnums
     * @return
     */
    List<UserDto> userListByRoleType(List<RoleTypeEnum> roleTypeEnums);

    /**
     * 根据服务单元查找用户
     *
     * @param serviceId
     * @param userId
     * @param sopNo
     * @return
     */
    List<String> listByServiceId(Long serviceId, Long userId, String sopNo);
}
