package com.huaheng.pc.system.role.service; 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 com.huaheng.common.constant.UserConstants; import com.huaheng.common.support.Convert; import com.huaheng.common.utils.StringUtils; import com.huaheng.common.utils.security.ShiroUtils; import com.huaheng.pc.system.role.domain.Role; import com.huaheng.pc.system.role.domain.RoleMenu; import com.huaheng.pc.system.role.mapper.RoleMapper; import com.huaheng.pc.system.role.mapper.RoleMenuMapper; import com.huaheng.pc.system.user.mapper.UserRoleMapper; /** * 角色 业务层处理 * * @author huaheng */ @Service public class RoleServiceImpl implements IRoleService { @Autowired private RoleMapper roleMapper; @Autowired private RoleMenuMapper roleMenuMapper; @Autowired private UserRoleMapper userRoleMapper; /** * 根据条件分页查询角色数据 * * @param role 角色信息 * @return 角色数据集合信息 */ @Override public List<Role> selectRoleList(Role role) { role.setWarehouseCode(ShiroUtils.getWarehouseCode()); return roleMapper.selectRoleList(role); } /** * 根据用户ID查询角色代码 * * @param userId 用户ID * @return 权限列表 */ @Override public Set<String> selectRoleCodes(Integer userId) { List<Role> perms = roleMapper.selectRolesByUserId(userId, ShiroUtils.getWarehouseCode()); Set<String> permsSet = new HashSet<>(); for (Role perm : perms) { if (StringUtils.isNotNull(perms)) { permsSet.addAll(Arrays.asList(perm.getRoleCode().trim().split(","))); } } return permsSet; } /** * 根据用户ID查询角色 * * @param userId 用户ID * @return 角色列表 */ @Override public List<Role> selectRolesByUserId(Integer userId) { List<Role> userRoles = roleMapper.selectRolesByUserId(userId, ShiroUtils.getWarehouseCode()); List<Role> roles = roleMapper.selectRolesAll(ShiroUtils.getWarehouseCode()); for (Role role : roles) { for (Role userRole : userRoles) { if (role.getId().intValue() == userRole.getId().intValue()) { role.setFlag(true); break; } } } return roles; } /** * 查询所有角色 * * @return 角色列表 */ @Override public List<Role> selectRoleAll() { return roleMapper.selectRolesAll(ShiroUtils.getWarehouseCode()); } /** * 通过角色ID查询角色 * * @param id 角色ID * @return 角色对象信息 */ @Override public Role selectRoleById(Integer id) { return roleMapper.selectRoleById(id); } /** * 通过角色ID删除角色 * * @param id 角色ID * @return 结果 */ @Override public boolean deleteRoleById(Integer id) { Integer result = roleMapper.deleteRoleById(ShiroUtils.getWarehouseCode(), id); return result > 0 ? true : false; } /** * 批量删除角色信息 * * @param ids 需要删除的数据ID * @throws Exception */ @Override public int deleteRoleByIds(String ids) throws Exception { Integer[] roleIds = Convert.toIntArray(ids); for (Integer id : roleIds) { Role role = selectRoleById(id); if (countUserRoleByRoleId(id) > 0) { throw new Exception(String.format("%1$s已分配,不能删除", role.getRoleName())); } } return roleMapper.deleteRoleByIds(ShiroUtils.getWarehouseCode(), roleIds); } /** * 新增保存角色信息 * * @param role 角色信息 * @return 结果 */ @Override public int insertRole(Role role) { role.setWarehouseCode(ShiroUtils.getWarehouseCode()); role.setCreateBy(ShiroUtils.getLoginName()); // 新增角色信息 roleMapper.insertRole(role); insertRoleMenu(role); ShiroUtils.clearCachedAuthorizationInfo(); return 1; } /** * 修改保存角色信息 * * @param role 角色信息 * @return 结果 */ @Override public int updateRole(Role role) { role.setWarehouseCode(ShiroUtils.getWarehouseCode()); role.setUpdateBy(ShiroUtils.getLoginName()); // 修改角色信息 roleMapper.updateRole(role); // 删除角色与菜单关联 roleMenuMapper.deleteRoleMenuByRoleId(role.getId()); insertRoleMenu(role); ShiroUtils.clearCachedAuthorizationInfo(); return 1; } /** * 新增角色菜单信息 * * @param role 角色对象 */ public void insertRoleMenu(Role role) { // 新增用户与角色管理 List<RoleMenu> list = new ArrayList<RoleMenu>(); for (Integer menuId : role.getMenuIds()) { RoleMenu rm = new RoleMenu(); rm.setRoleId(role.getId()); rm.setMenuId(menuId); list.add(rm); } if (list.size() > 0) { roleMenuMapper.batchRoleMenu(list); } } /** * 校验角色名称是否唯一 * * @param role 角色信息 * @return 结果 */ @Override public String checkRoleNameUnique(Role role) { Integer id = StringUtils.isNull(role.getId()) ? -1 : role.getId(); Role info = roleMapper.checkRoleNameUnique(ShiroUtils.getWarehouseCode(), role.getRoleName()); if (StringUtils.isNotNull(info) && info.getId().intValue() != id.intValue()) { return UserConstants.ROLE_NAME_NOT_UNIQUE; } return UserConstants.ROLE_NAME_UNIQUE; } /** * 校验角色权限是否唯一 * * @param role 角色信息 * @return 结果 */ @Override public String checkroleCodeUnique(Role role) { Integer id = StringUtils.isNull(role.getId()) ? -1 : role.getId(); Role info = roleMapper.checkroleCodeUnique(ShiroUtils.getWarehouseCode(), role.getRoleCode()); if (StringUtils.isNotNull(info) && info.getId().intValue() != id.intValue()) { return UserConstants.ROLE_KEY_NOT_UNIQUE; } return UserConstants.ROLE_KEY_UNIQUE; } /** * 通过角色ID查询角色使用数量 * * @param id 角色ID * @return 结果 */ @Override public int countUserRoleByRoleId(Integer id) { return userRoleMapper.countUserRoleByRoleId(id); } }