package com.cloud.user.service.impl;
|
|
import com.cloud.common.utils.DateUtil;
|
import com.cloud.common.utils.PageUtil;
|
import com.cloud.common.utils.UpperByName;
|
import com.cloud.model.common.Page;
|
import com.cloud.model.sys.SysPermission;
|
import com.cloud.model.sys.SysRole;
|
import com.cloud.user.dao.RolePermissionDao;
|
import com.cloud.user.dao.SysRoleDao;
|
import com.cloud.user.dao.SysRoleMenuDao;
|
import com.cloud.user.dao.UserRoleDao;
|
import com.cloud.user.service.AppUserService;
|
import com.cloud.user.service.SysRoleService;
|
import com.google.common.collect.Sets;
|
import lombok.extern.slf4j.Slf4j;
|
/*import org.springframework.amqp.core.AmqpTemplate;*/
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.util.CollectionUtils;
|
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
|
|
@Slf4j
|
@Service
|
public class SysRoleServiceImpl implements SysRoleService {
|
|
@Autowired
|
private SysRoleDao sysRoleDao;
|
@Autowired
|
private UserRoleDao userRoleDao;
|
@Autowired
|
private RolePermissionDao rolePermissionDao;
|
@Autowired
|
private SysRoleMenuDao sysRoleMenuDao;
|
/*@Autowired
|
private AmqpTemplate amqpTemplate;*/
|
@Autowired
|
private AppUserService appUserService;
|
|
|
|
@Transactional
|
@Override
|
public void save(SysRole sysRole) {
|
/*SysRole role = sysRoleDao.findByCode(sysRole.getCode());
|
if (role != null) {
|
throw new IllegalArgumentException("角色code已存在");
|
}*/
|
Map<String,Object> params = new HashMap<>();
|
params.put("name",sysRole.getName());
|
params.put("orgId",sysRole.getOrgId());
|
SysRole role = sysRoleDao.findByName(params);
|
if (role != null) {
|
throw new IllegalArgumentException("角色已存在");
|
}
|
sysRole.setCreateTime(new Date());
|
sysRole.setUpdateTime(sysRole.getCreateTime());
|
sysRoleDao.save(sysRole);
|
|
//Log l =new Log();
|
//l.setModule("测试");
|
//l.setFlag(true);
|
//logClient.save2(l);
|
log.info("保存角色:{}", sysRole);
|
}
|
|
@Transactional
|
@Override
|
public void update(SysRole sysRole) {
|
sysRole.setUpdateTime(new Date());
|
Map<String,Object> params = new HashMap<>();
|
params.put("name",sysRole.getName());
|
params.put("orgId",sysRole.getOrgId());
|
SysRole role = sysRoleDao.findByName(params);
|
if (role != null) {
|
throw new IllegalArgumentException("角色已存在");
|
}
|
//sysRoleDao.update(sysRole);
|
sysRoleDao.updateByPrimaryKeySelective(sysRole);
|
log.info("修改角色:{}", sysRole);
|
}
|
|
@Transactional
|
@Override
|
public Map<String,Object> deleteRole(Map<String,Object> params) {
|
Map<String,Object> map = new HashMap<>();
|
Integer userRole = userRoleDao.findUserRoleCount(params);
|
if (userRole == 0 ){
|
SysRole sysRole = sysRoleDao.findByIdParams(params);
|
//删除角色表
|
sysRoleDao.delete(params);
|
//删除对应角色拥有的权限
|
//rolePermissionDao.deleteRolePermissionByParams(params)
|
sysRoleMenuDao.deleteRolePermissionByParams(params);
|
//删除角色用户表的数据
|
userRoleDao.deleteUserRoleByParams(params);
|
log.info("删除角色:{}", sysRole);
|
map.put("code",0);
|
map.put("msg","刪除成功!");
|
map.put("success",true);
|
map.put("data",null);
|
}else {
|
map.put("code",1);
|
map.put("msg","该角色下有用户,不允许删除!");
|
map.put("success",false);
|
map.put("data",null);
|
}
|
// 发布role删除的消息
|
//amqpTemplate.convertAndSend(UserCenterMq.MQ_EXCHANGE_USER, UserCenterMq.ROUTING_KEY_ROLE_DELETE, id);
|
return map;
|
}
|
|
@Transactional
|
@Override
|
public void setPermissionToRole(Long roleId, Set<Long> permissionIds) {
|
SysRole sysRole = sysRoleDao.findById(roleId);
|
if (sysRole == null) {
|
throw new IllegalArgumentException("角色不存在");
|
}
|
|
// 查出角色对应的old权限
|
Set<Long> oldPermissionIds = rolePermissionDao.findPermissionsByRoleIds(Sets.newHashSet(roleId)).stream()
|
.map(p -> p.getId()).collect(Collectors.toSet());
|
|
// 需要添加的权限
|
Collection<Long> addPermissionIds = org.apache.commons.collections4.CollectionUtils.subtract(permissionIds,
|
oldPermissionIds);
|
if (!CollectionUtils.isEmpty(addPermissionIds)) {
|
addPermissionIds.forEach(permissionId -> {
|
rolePermissionDao.saveRolePermission(roleId, permissionId);
|
});
|
}
|
// 需要移除的权限
|
Collection<Long> deletePermissionIds = org.apache.commons.collections4.CollectionUtils
|
.subtract(oldPermissionIds, permissionIds);
|
if (!CollectionUtils.isEmpty(deletePermissionIds)) {
|
deletePermissionIds.forEach(permissionId -> {
|
rolePermissionDao.deleteRolePermission(roleId, permissionId);
|
});
|
}
|
|
}
|
|
@Override
|
public SysRole findById(Long id) {
|
return sysRoleDao.findById(id);
|
}
|
|
@Override
|
public Page<SysRole> findRoles(Map<String, Object> params) {
|
int total = sysRoleDao.count(params);
|
List<SysRole> list = Collections.emptyList();
|
if (total > 0) {
|
PageUtil.pageParamConver(params, false);
|
|
list = sysRoleDao.findData(params);
|
}
|
return new Page<>(total, list);
|
}
|
|
@Override
|
public Set<SysPermission> findPermissionsByRoleId(Long roleId) {
|
return rolePermissionDao.findPermissionsByRoleIds(Sets.newHashSet(roleId));
|
}
|
|
@Override
|
public List<Map<String, Object>> findRoleList(Map<String, Object> params) {
|
return sysRoleDao.findRoleList(params);
|
}
|
|
@Override
|
public int saveRoleMenus(Map<String, Object> params) {
|
int status = 0;
|
try{
|
if(!params.get("menuIds").toString().equals("")){
|
Set<Long> menuIds = new HashSet<>();
|
String[] ids = params.get("menuIds").toString().split(",");
|
for(int i=0;i<ids.length;i++){
|
menuIds.add(Long.parseLong(ids[i]));
|
}
|
|
sysRoleDao.deleteRoleMenus(params);
|
if (!CollectionUtils.isEmpty(menuIds)) {
|
menuIds.forEach(menuId -> {
|
params.put("menuId",menuId);
|
sysRoleDao.saveRoleMenus(params);
|
});
|
}
|
}else{
|
sysRoleDao.deleteRoleMenus(params);
|
}
|
status = 1;
|
return status;
|
}catch (Exception e){
|
e.printStackTrace();
|
return status;
|
}
|
}
|
|
@Override
|
@Transactional
|
public int saveUserRoleMens(Map<String, Object> params) {
|
int status = 0;
|
try {
|
//添加角色
|
SysRole sysRole = new SysRole();
|
sysRole.setOrgId(Long.parseLong(params.get("orgId").toString()));
|
//管理员后期字典取
|
sysRole.setName("管理员");
|
Map<String,Object> paramsRole = new HashMap<>();
|
paramsRole.put("name",sysRole.getName());
|
paramsRole.put("orgId",sysRole.getOrgId());
|
SysRole role = sysRoleDao.findByName(paramsRole);
|
if(role == null){
|
sysRole.setIsSys(0);
|
sysRole.setEnabled(false);
|
sysRole.setDelFlag("0");
|
sysRole.setCode(UUID.randomUUID().toString());
|
sysRole.setCreateTime(DateUtil.getCurrentDate(DateUtil.TIME_PATTERN));
|
sysRole.setUpdateTime(DateUtil.getCurrentDate(DateUtil.TIME_PATTERN));
|
status = sysRoleDao.save(sysRole);
|
|
//用户赋角色
|
params.put("id",params.get("userId").toString());
|
params.put("roleIds",sysRole.getId());
|
appUserService.setRoleToUser(params);
|
}else{
|
sysRole.setId(role.getId());
|
}
|
//角色赋权限
|
if(!params.get("menuIds").toString().equals("")){
|
params.put("id",sysRole.getId());
|
Set<Long> menuIds = new HashSet<>();
|
String[] ids = params.get("menuIds").toString().split(",");
|
for(int i=0;i<ids.length;i++){
|
menuIds.add(Long.parseLong(ids[i]));
|
}
|
|
sysRoleDao.deleteRoleMenus(params);
|
if (!CollectionUtils.isEmpty(menuIds)) {
|
menuIds.forEach(menuId -> {
|
params.put("menuId",menuId);
|
sysRoleDao.saveRoleMenus(params);
|
});
|
}
|
}else {
|
params.put("id",sysRole.getId());
|
sysRoleDao.deleteRoleMenus(params);
|
}
|
status = 1;
|
}catch (Exception e){
|
e.printStackTrace();
|
return status;
|
}
|
return status;
|
}
|
}
|