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 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 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 deleteRole(Map params) { Map 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 permissionIds) { SysRole sysRole = sysRoleDao.findById(roleId); if (sysRole == null) { throw new IllegalArgumentException("角色不存在"); } // 查出角色对应的old权限 Set oldPermissionIds = rolePermissionDao.findPermissionsByRoleIds(Sets.newHashSet(roleId)).stream() .map(p -> p.getId()).collect(Collectors.toSet()); // 需要添加的权限 Collection addPermissionIds = org.apache.commons.collections4.CollectionUtils.subtract(permissionIds, oldPermissionIds); if (!CollectionUtils.isEmpty(addPermissionIds)) { addPermissionIds.forEach(permissionId -> { rolePermissionDao.saveRolePermission(roleId, permissionId); }); } // 需要移除的权限 Collection 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 findRoles(Map params) { int total = sysRoleDao.count(params); List list = Collections.emptyList(); if (total > 0) { PageUtil.pageParamConver(params, false); list = sysRoleDao.findData(params); } return new Page<>(total, list); } @Override public Set findPermissionsByRoleId(Long roleId) { return rolePermissionDao.findPermissionsByRoleIds(Sets.newHashSet(roleId)); } @Override public List> findRoleList(Map params) { return sysRoleDao.findRoleList(params); } @Override public int saveRoleMenus(Map params) { int status = 0; try{ if(!params.get("menuIds").toString().equals("")){ Set menuIds = new HashSet<>(); String[] ids = params.get("menuIds").toString().split(","); for(int i=0;i { 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 params) { int status = 0; try { //添加角色 SysRole sysRole = new SysRole(); sysRole.setOrgId(Long.parseLong(params.get("orgId").toString())); //管理员后期字典取 sysRole.setName("管理员"); Map 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 menuIds = new HashSet<>(); String[] ids = params.get("menuIds").toString().split(","); for(int i=0;i { 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; } }