package com.jcdm.system.service.impl; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.jcdm.common.annotation.DataScope; import com.jcdm.common.constant.UserConstants; import com.jcdm.common.core.domain.entity.SysRole; import com.jcdm.common.core.domain.entity.SysUser; import com.jcdm.common.exception.ServiceException; import com.jcdm.common.utils.SecurityUtils; import com.jcdm.common.utils.StringUtils; import com.jcdm.common.utils.spring.SpringUtils; import com.jcdm.system.domain.SysRoleDept; import com.jcdm.system.domain.SysRoleMenu; import com.jcdm.system.domain.SysUserRole; import com.jcdm.system.mapper.SysRoleDeptMapper; import com.jcdm.system.mapper.SysRoleMapper; import com.jcdm.system.mapper.SysRoleMenuMapper; import com.jcdm.system.mapper.SysUserRoleMapper; import com.jcdm.system.service.ISysRoleService; /** * 角色 ä¸šåŠ¡å±‚å¤„ç† * * @author jc */ @Service public class SysRoleServiceImpl implements ISysRoleService { @Autowired private SysRoleMapper roleMapper; @Autowired private SysRoleMenuMapper roleMenuMapper; @Autowired private SysUserRoleMapper userRoleMapper; @Autowired private SysRoleDeptMapper roleDeptMapper; /** * æ ¹æ®æ¡ä»¶åˆ†é¡µæŸ¥è¯¢è§’è‰²æ•°æ® * * @param role è§’è‰²ä¿¡æ¯ * @return 角色数æ®é›†åˆä¿¡æ¯ */ @Override @DataScope(deptAlias = "d") public List<SysRole> selectRoleList(SysRole role) { return roleMapper.selectRoleList(role); } /** * æ ¹æ®ç”¨æˆ·ID查询角色 * * @param userId 用户ID * @return 角色列表 */ @Override public List<SysRole> selectRolesByUserId(Long userId) { List<SysRole> userRoles = roleMapper.selectRolePermissionByUserId(userId); List<SysRole> roles = selectRoleAll(); for (SysRole role : roles) { for (SysRole userRole : userRoles) { if (role.getRoleId().longValue() == userRole.getRoleId().longValue()) { role.setFlag(true); break; } } } return roles; } /** * æ ¹æ®ç”¨æˆ·ID查询æƒé™ * * @param userId 用户ID * @return æƒé™åˆ—表 */ @Override public Set<String> selectRolePermissionByUserId(Long userId) { List<SysRole> perms = roleMapper.selectRolePermissionByUserId(userId); Set<String> permsSet = new HashSet<>(); for (SysRole perm : perms) { if (StringUtils.isNotNull(perm)) { permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(","))); } } return permsSet; } /** * 查询所有角色 * * @return 角色列表 */ @Override public List<SysRole> selectRoleAll() { return SpringUtils.getAopProxy(this).selectRoleList(new SysRole()); } /** * æ ¹æ®ç”¨æˆ·ID获å–角色选择框列表 * * @param userId 用户ID * @return 选ä¸è§’色ID列表 */ @Override public List<Long> selectRoleListByUserId(Long userId) { return roleMapper.selectRoleListByUserId(userId); } /** * 通过角色ID查询角色 * * @param roleId 角色ID * @return è§’è‰²å¯¹è±¡ä¿¡æ¯ */ @Override public SysRole selectRoleById(Long roleId) { return roleMapper.selectRoleById(roleId); } /** * æ ¡éªŒè§’è‰²å称是å¦å”¯ä¸€ * * @param role è§’è‰²ä¿¡æ¯ * @return 结果 */ @Override public boolean checkRoleNameUnique(SysRole role) { Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId(); SysRole info = roleMapper.checkRoleNameUnique(role.getRoleName()); if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; } /** * æ ¡éªŒè§’è‰²æƒé™æ˜¯å¦å”¯ä¸€ * * @param role è§’è‰²ä¿¡æ¯ * @return 结果 */ @Override public boolean checkRoleKeyUnique(SysRole role) { Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId(); SysRole info = roleMapper.checkRoleKeyUnique(role.getRoleKey()); if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; } /** * æ ¡éªŒè§’è‰²æ˜¯å¦å…许æ“作 * * @param role è§’è‰²ä¿¡æ¯ */ @Override public void checkRoleAllowed(SysRole role) { if (StringUtils.isNotNull(role.getRoleId()) && role.isAdmin()) { throw new ServiceException("ä¸å…许æ“作超级管ç†å‘˜è§’色"); } } /** * æ ¡éªŒè§’è‰²æ˜¯å¦æœ‰æ•°æ®æƒé™ * * @param roleId 角色id */ @Override public void checkRoleDataScope(Long roleId) { if (!SysUser.isAdmin(SecurityUtils.getUserId())) { SysRole role = new SysRole(); role.setRoleId(roleId); List<SysRole> roles = SpringUtils.getAopProxy(this).selectRoleList(role); if (StringUtils.isEmpty(roles)) { throw new ServiceException("没有æƒé™è®¿é—®è§’色数æ®ï¼"); } } } /** * 通过角色IDæŸ¥è¯¢è§’è‰²ä½¿ç”¨æ•°é‡ * * @param roleId 角色ID * @return 结果 */ @Override public int countUserRoleByRoleId(Long roleId) { return userRoleMapper.countUserRoleByRoleId(roleId); } /** * 新增ä¿å˜è§’è‰²ä¿¡æ¯ * * @param role è§’è‰²ä¿¡æ¯ * @return 结果 */ @Override @Transactional public int insertRole(SysRole role) { // æ–°å¢žè§’è‰²ä¿¡æ¯ roleMapper.insertRole(role); return insertRoleMenu(role); } /** * 修改ä¿å˜è§’è‰²ä¿¡æ¯ * * @param role è§’è‰²ä¿¡æ¯ * @return 结果 */ @Override @Transactional public int updateRole(SysRole role) { // ä¿®æ”¹è§’è‰²ä¿¡æ¯ roleMapper.updateRole(role); // åˆ é™¤è§’è‰²ä¸Žèœå•å…³è” roleMenuMapper.deleteRoleMenuByRoleId(role.getRoleId()); return insertRoleMenu(role); } /** * ä¿®æ”¹è§’è‰²çŠ¶æ€ * * @param role è§’è‰²ä¿¡æ¯ * @return 结果 */ @Override public int updateRoleStatus(SysRole role) { return roleMapper.updateRole(role); } /** * 修改数æ®æƒé™ä¿¡æ¯ * * @param role è§’è‰²ä¿¡æ¯ * @return 结果 */ @Override @Transactional public int authDataScope(SysRole role) { // ä¿®æ”¹è§’è‰²ä¿¡æ¯ roleMapper.updateRole(role); // åˆ é™¤è§’è‰²ä¸Žéƒ¨é—¨å…³è” roleDeptMapper.deleteRoleDeptByRoleId(role.getRoleId()); // 新增角色和部门信æ¯ï¼ˆæ•°æ®æƒé™ï¼‰ return insertRoleDept(role); } /** * 新增角色èœå•ä¿¡æ¯ * * @param role 角色对象 */ public int insertRoleMenu(SysRole role) { int rows = 1; // æ–°å¢žç”¨æˆ·ä¸Žè§’è‰²ç®¡ç† List<SysRoleMenu> list = new ArrayList<SysRoleMenu>(); for (Long menuId : role.getMenuIds()) { SysRoleMenu rm = new SysRoleMenu(); rm.setRoleId(role.getRoleId()); rm.setMenuId(menuId); list.add(rm); } if (list.size() > 0) { rows = roleMenuMapper.batchRoleMenu(list); } return rows; } /** * 新增角色部门信æ¯(æ•°æ®æƒé™) * * @param role 角色对象 */ public int insertRoleDept(SysRole role) { int rows = 1; // 新增角色与部门(数æ®æƒé™ï¼‰ç®¡ç† List<SysRoleDept> list = new ArrayList<SysRoleDept>(); for (Long deptId : role.getDeptIds()) { SysRoleDept rd = new SysRoleDept(); rd.setRoleId(role.getRoleId()); rd.setDeptId(deptId); list.add(rd); } if (list.size() > 0) { rows = roleDeptMapper.batchRoleDept(list); } return rows; } /** * 通过角色IDåˆ é™¤è§’è‰² * * @param roleId 角色ID * @return 结果 */ @Override @Transactional public int deleteRoleById(Long roleId) { // åˆ é™¤è§’è‰²ä¸Žèœå•å…³è” roleMenuMapper.deleteRoleMenuByRoleId(roleId); // åˆ é™¤è§’è‰²ä¸Žéƒ¨é—¨å…³è” roleDeptMapper.deleteRoleDeptByRoleId(roleId); return roleMapper.deleteRoleById(roleId); } /** * 批é‡åˆ é™¤è§’è‰²ä¿¡æ¯ * * @param roleIds 需è¦åˆ 除的角色ID * @return 结果 */ @Override @Transactional public int deleteRoleByIds(Long[] roleIds) { for (Long roleId : roleIds) { checkRoleAllowed(new SysRole(roleId)); checkRoleDataScope(roleId); SysRole role = selectRoleById(roleId); if (countUserRoleByRoleId(roleId) > 0) { throw new ServiceException(String.format("%1$s已分é…,ä¸èƒ½åˆ 除", role.getRoleName())); } } // åˆ é™¤è§’è‰²ä¸Žèœå•å…³è” roleMenuMapper.deleteRoleMenu(roleIds); // åˆ é™¤è§’è‰²ä¸Žéƒ¨é—¨å…³è” roleDeptMapper.deleteRoleDept(roleIds); return roleMapper.deleteRoleByIds(roleIds); } /** * å–消授æƒç”¨æˆ·è§’色 * * @param userRole 用户和角色关è”ä¿¡æ¯ * @return 结果 */ @Override public int deleteAuthUser(SysUserRole userRole) { return userRoleMapper.deleteUserRoleInfo(userRole); } /** * 批é‡å–消授æƒç”¨æˆ·è§’色 * * @param roleId 角色ID * @param userIds 需è¦å–消授æƒçš„用户数æ®ID * @return 结果 */ @Override public int deleteAuthUsers(Long roleId, Long[] userIds) { return userRoleMapper.deleteUserRoleInfos(roleId, userIds); } /** * 批é‡é€‰æ‹©æŽˆæƒç”¨æˆ·è§’色 * * @param roleId 角色ID * @param userIds 需è¦æŽˆæƒçš„用户数æ®ID * @return 结果 */ @Override public int insertAuthUsers(Long roleId, Long[] userIds) { // æ–°å¢žç”¨æˆ·ä¸Žè§’è‰²ç®¡ç† List<SysUserRole> list = new ArrayList<SysUserRole>(); for (Long userId : userIds) { SysUserRole ur = new SysUserRole(); ur.setUserId(userId); ur.setRoleId(roleId); list.add(ur); } return userRoleMapper.batchUserRole(list); } }