/** 
 | 
 * Copyright (c) 2018 人人开源 All rights reserved. 
 | 
 * 
 | 
 * https://www.renren.io 
 | 
 * 
 | 
 * 版权所有,侵权必究! 
 | 
 */ 
 | 
  
 | 
package com.zt.modules.sys.service; 
 | 
  
 | 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
 | 
import com.zt.common.constant.CacheKey; 
 | 
import com.zt.common.constant.Constant; 
 | 
import com.zt.common.service.BaseService; 
 | 
import com.zt.common.utils.CacheUtils; 
 | 
import com.zt.core.sys.model.SysUser; 
 | 
import com.zt.modules.sys.dao.SysRoleUserDao; 
 | 
import com.zt.modules.sys.dto.RoleDto; 
 | 
import com.zt.modules.sys.dto.UserDto; 
 | 
import com.zt.modules.sys.model.SysRoleUser; 
 | 
import org.springframework.stereotype.Service; 
 | 
  
 | 
import java.util.List; 
 | 
import java.util.stream.Collectors; 
 | 
  
 | 
/** 
 | 
 * 角色用户关系 
 | 
 * 
 | 
 * @author hehz 
 | 
 * @since 1.0.0 
 | 
 */ 
 | 
@Service 
 | 
public class SysRoleUserService extends BaseService<SysRoleUserDao, SysRoleUser> { 
 | 
  
 | 
    /** 
 | 
     * 用户角色列表 
 | 
     * 
 | 
     * @param userId 
 | 
     *            用户ID 
 | 
     */ 
 | 
    public List<RoleDto> getUserRoles(Long userId) { 
 | 
        return baseDao.getUserRoles(userId); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 角色用户列表 
 | 
     * 
 | 
     * @param roleId 
 | 
     *            角色ID 
 | 
     */ 
 | 
    public List<SysUser> getRoleUsers(Long roleID) { 
 | 
        return baseDao.getRoleUsers(roleID); 
 | 
    } 
 | 
    /** 
 | 
     * 角色用户列表 
 | 
     * 
 | 
     * @param roleId 
 | 
     *            角色ID 
 | 
     */ 
 | 
    public List<SysRoleUser> getSingleRoleUsers(Long roleID,Long userID) { 
 | 
        return baseDao.getSingleRoleUsers(roleID,userID); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 保存用户角色 
 | 
     * 
 | 
     * @param userId 
 | 
     * @param roleIdList 
 | 
     */ 
 | 
    public void saveOrUpdate(Long userId, List<Long> roleIdList) { 
 | 
        List<SysRoleUser> list = roleIdList.stream().map(roleId -> new SysRoleUser(roleId, userId)) 
 | 
                .collect(Collectors.toList()); 
 | 
        this.saveRelatedDatas("user_id", userId, "role_id", list); 
 | 
  
 | 
        CacheUtils.removeAll(Constant.Cache.TOKEN);// 清理用户权限缓存 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据角色ids,删除角色用户关系 
 | 
     * 
 | 
     * @param roleIds 
 | 
     *            角色ids 
 | 
     */ 
 | 
    public void deleteByRoleIds(Long[] roleIds) { 
 | 
        baseDao.delete(new QueryWrapper<SysRoleUser>().lambda().in(SysRoleUser::getRoleId, roleIds)); 
 | 
  
 | 
        CacheUtils.removeAll(Constant.Cache.TOKEN);// 清理用户权限缓存 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据用户id,删除角色用户关系 
 | 
     * 
 | 
     * @param userIds 
 | 
     *            用户ids 
 | 
     */ 
 | 
    public void deleteByUserIds(Long[] userIds) { 
 | 
        baseDao.delete(new QueryWrapper<SysRoleUser>().lambda().in(SysRoleUser::getUserId, userIds)); 
 | 
  
 | 
        CacheUtils.removeAll(Constant.Cache.TOKEN);// 清理用户权限缓存 
 | 
    } 
 | 
  
 | 
    public  void  addRoleUser(Long roleId,List<Long> userIds){ 
 | 
        List<SysUser> list =  baseDao.getRoleUsers(roleId); 
 | 
        List<SysRoleUser> sysRoleUsers = userIds.stream().map(userId -> new SysRoleUser(roleId, userId)).collect(Collectors.toList()); 
 | 
        for (SysRoleUser data : sysRoleUsers) { 
 | 
            if(list.stream().filter(p-> p.getId().equals(data.getUserId())).count()==0){ 
 | 
                data.setDelete(false); 
 | 
                baseDao.insert(data); 
 | 
            } 
 | 
            else { 
 | 
                data.setDelete(false); 
 | 
                baseDao.updateById(data); 
 | 
            } 
 | 
        } 
 | 
        CacheUtils.remove(Constant.Cache.TOKEN, CacheKey.TOKEN_PERMISSIONS);// 清理用户权限缓存 
 | 
    } 
 | 
} 
 |